1 |
/* |
/* |
2 |
* Copyright (c) 2014-2017 Christian Schoenebeck |
* Copyright (c) 2014-2019 Christian Schoenebeck |
3 |
* |
* |
4 |
* http://www.linuxsampler.org |
* http://www.linuxsampler.org |
5 |
* |
* |
92 |
/////////////////////////////////////////////////////////////////////////// |
/////////////////////////////////////////////////////////////////////////// |
93 |
// built-in script function: exit() |
// built-in script function: exit() |
94 |
|
|
95 |
|
int CoreVMFunction_exit::maxAllowedArgs() const { |
96 |
|
return (vm->isExitResultEnabled()) ? 1 : 0; |
97 |
|
} |
98 |
|
|
99 |
|
bool CoreVMFunction_exit::acceptsArgType(int iArg, ExprType_t type) const { |
100 |
|
if (!vm->isExitResultEnabled()) return false; |
101 |
|
return type == INT_EXPR || type == STRING_EXPR; |
102 |
|
} |
103 |
|
|
104 |
VMFnResult* CoreVMFunction_exit::exec(VMFnArgs* args) { |
VMFnResult* CoreVMFunction_exit::exec(VMFnArgs* args) { |
105 |
this->result.flags = STMT_ABORT_SIGNALLED; |
this->result.flags = STMT_ABORT_SIGNALLED; |
106 |
|
if (vm->isExitResultEnabled() && args->argsCount()) { |
107 |
|
ExecContext* ctx = dynamic_cast<ExecContext*>(vm->currentVMExecContext()); |
108 |
|
switch (args->arg(0)->exprType()) { |
109 |
|
case INT_EXPR: |
110 |
|
ctx->exitRes.intLiteral.value = args->arg(0)->asInt()->evalInt(); |
111 |
|
ctx->exitRes.value = &ctx->exitRes.intLiteral; |
112 |
|
break; |
113 |
|
case STRING_EXPR: |
114 |
|
ctx->exitRes.stringLiteral.value = args->arg(0)->asString()->evalStr(); |
115 |
|
ctx->exitRes.value = &ctx->exitRes.stringLiteral; |
116 |
|
break; |
117 |
|
default: |
118 |
|
; // noop - just to shut up the compiler |
119 |
|
} |
120 |
|
} |
121 |
return &result; |
return &result; |
122 |
} |
} |
123 |
|
|