--- linuxsampler/trunk/src/scriptvm/tree.h 2014/06/01 14:44:38 2588 +++ linuxsampler/trunk/src/scriptvm/tree.h 2014/06/05 00:16:25 2594 @@ -139,6 +139,17 @@ }; typedef Ref ConstIntVariableRef; +class BuiltInIntVariable : public IntVariable { + String name; + VMIntRelPtr* ptr; +public: + BuiltInIntVariable(const String& name, VMIntRelPtr* ptr); + void assign(Expression* expr); + int evalInt(); + void dump(int level = 0); +}; +typedef Ref BuiltInIntVariableRef; + class PolyphonicIntVariable : public IntVariable { public: PolyphonicIntVariable(ParserContext* ctx); @@ -152,14 +163,28 @@ IntArrayVariable(ParserContext* ctx, int size); IntArrayVariable(ParserContext* ctx, int size, ArgsRef values); void assign(Expression* expr) {} // ignore scalar assignment - String evalCastToStr() { return ""; } // ignore cast to string + String evalCastToStr() { return ""; } // ignore scalar cast to string ExprType_t exprType() const { return INT_ARR_EXPR; } - const int arraySize() const { return values.size(); } + virtual int arraySize() const { return values.size(); } + virtual int evalIntElement(uint i); + virtual void assignIntElement(uint i, int value); + void dump(int level = 0); +protected: + IntArrayVariable(ParserContext* ctx, bool bConst); +}; +typedef Ref IntArrayVariableRef; + +class BuiltInIntArrayVariable : public IntArrayVariable { + String name; + VMInt8Array* array; +public: + BuiltInIntArrayVariable(const String& name, VMInt8Array* array); + int arraySize() const { return array->size; } int evalIntElement(uint i); void assignIntElement(uint i, int value); void dump(int level = 0); }; -typedef Ref IntArrayVariableRef; +typedef Ref BuiltInIntArrayVariableRef; class IntArrayElement : public IntVariable { IntArrayVariableRef array; @@ -548,6 +573,9 @@ std::vector warnings() const OVERRIDE; VMEventHandler* eventHandler(uint index) OVERRIDE; VMEventHandler* eventHandlerByName(const String& name) OVERRIDE; + void registerBuiltInConstIntVariables(const std::map& vars); + void registerBuiltInIntVariables(const std::map& vars); + void registerBuiltInIntArrayVariables(const std::map& vars); }; class ExecContext : public VMExecContext {