--- linuxsampler/trunk/src/scriptvm/tree.cpp 2017/05/31 21:07:44 3260 +++ linuxsampler/trunk/src/scriptvm/tree.cpp 2019/08/01 10:22:56 3551 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 - 2017 Christian Schoenebeck and Andreas Persson + * Copyright (c) 2014 - 2019 Christian Schoenebeck and Andreas Persson * * http://www.linuxsampler.org * @@ -16,8 +16,7 @@ namespace LinuxSampler { bool isNoOperation(StatementRef statement) { - NoOperation* noOp = dynamic_cast(&*statement); - return noOp; + return statement->statementType() == STMT_NOOP; } Node::Node() { @@ -35,7 +34,7 @@ return ToString(evalInt()); } -/*String IntArrayExpr::evalCastToStr() { +String IntArrayExpr::evalCastToStr() { String s = "{"; for (int i = 0; i < arraySize(); ++i) { int val = evalIntElement(i); @@ -44,7 +43,7 @@ } s += "}"; return s; -}*/ +} int IntLiteral::evalInt() { return value; @@ -521,7 +520,7 @@ printf("Built-In Int Array Variable '%s'\n", name.c_str()); } -IntArrayElement::IntArrayElement(IntArrayVariableRef array, IntExprRef arrayIndex) +IntArrayElement::IntArrayElement(IntArrayExprRef array, IntExprRef arrayIndex) : IntVariable(NULL, false, false, 0), array(array), index(arrayIndex) { } @@ -977,6 +976,15 @@ vIssues.push_back(w); } +void ParserContext::addPreprocessorComment(int firstLine, int lastLine, int firstColumn, int lastColumn) { + CodeBlock block; + block.firstLine = firstLine; + block.lastLine = lastLine; + block.firstColumn = firstColumn; + block.lastColumn = lastColumn; + vPreprocessorComments.push_back(block); +} + bool ParserContext::setPreprocessorCondition(const char* name) { if (builtinPreprocessorConditions.count(name)) return false; if (userPreprocessorConditions.count(name)) return false; @@ -1008,6 +1016,10 @@ return vWarnings; } +std::vector ParserContext::preprocessorComments() const { + return vPreprocessorComments; +} + VMEventHandler* ParserContext::eventHandler(uint index) { if (!handlers) return NULL; return handlers->eventHandler(index); @@ -1054,4 +1066,23 @@ } } +ExecContext::ExecContext() : + status(VM_EXEC_NOT_RUNNING), flags(STMT_SUCCESS), stackFrame(-1), + suspendMicroseconds(0), instructionsCount(0) +{ + exitRes.value = NULL; +} + +void ExecContext::forkTo(VMExecContext* ectx) const { + ExecContext* child = dynamic_cast(ectx); + + child->polyphonicIntMemory.copyFlatFrom(polyphonicIntMemory); + child->status = VM_EXEC_SUSPENDED; + child->flags = STMT_SUCCESS; + child->stack.copyFlatFrom(stack); + child->stackFrame = stackFrame; + child->suspendMicroseconds = 0; + child->instructionsCount = 0; +} + } // namespace LinuxSampler