--- linuxsampler/trunk/src/scriptvm/tree.h 2016/07/12 09:53:06 2941 +++ linuxsampler/trunk/src/scriptvm/tree.h 2016/07/13 15:51:06 2942 @@ -107,6 +107,7 @@ class Variable : virtual public Expression { public: virtual bool isConstExpr() const { return bConst; } + virtual bool isAssignable() const { return !bConst; } virtual void assign(Expression* expr) = 0; protected: Variable(ParserContext* ctx, int _memPos, bool _bConst) @@ -320,6 +321,23 @@ virtual Statements* branch(uint i) const = 0; }; +class DynamicVariableCall : public Variable, virtual public IntExpr, virtual public StringExpr { + VMDynVar* dynVar; + String varName; +public: + DynamicVariableCall(const String& name, ParserContext* ctx, VMDynVar* v); + ExprType_t exprType() const OVERRIDE { return dynVar->exprType(); } + bool isConstExpr() const OVERRIDE { return dynVar->isConstExpr(); } + bool isAssignable() const OVERRIDE { return dynVar->isAssignable(); } + bool isPolyphonic() const OVERRIDE { return false; } + void assign(Expression* expr) OVERRIDE { dynVar->assign(expr); } + int evalInt() OVERRIDE; + String evalStr() OVERRIDE; + String evalCastToStr() OVERRIDE; + void dump(int level = 0) OVERRIDE; +}; +typedef Ref DynamicVariableCallRef; + class FunctionCall : virtual public LeafStatement, virtual public IntExpr, virtual public StringExpr { String functionName; ArgsRef args; @@ -628,6 +646,7 @@ void registerBuiltInConstIntVariables(const std::map& vars); void registerBuiltInIntVariables(const std::map& vars); void registerBuiltInIntArrayVariables(const std::map& vars); + void registerBuiltInDynVariables(const std::map& vars); }; class ExecContext : public VMExecContext {