107 |
class Variable : virtual public Expression { |
class Variable : virtual public Expression { |
108 |
public: |
public: |
109 |
virtual bool isConstExpr() const { return bConst; } |
virtual bool isConstExpr() const { return bConst; } |
110 |
|
virtual bool isAssignable() const { return !bConst; } |
111 |
virtual void assign(Expression* expr) = 0; |
virtual void assign(Expression* expr) = 0; |
112 |
protected: |
protected: |
113 |
Variable(ParserContext* ctx, int _memPos, bool _bConst) |
Variable(ParserContext* ctx, int _memPos, bool _bConst) |
321 |
virtual Statements* branch(uint i) const = 0; |
virtual Statements* branch(uint i) const = 0; |
322 |
}; |
}; |
323 |
|
|
324 |
|
class DynamicVariableCall : public Variable, virtual public IntExpr, virtual public StringExpr { |
325 |
|
VMDynVar* dynVar; |
326 |
|
String varName; |
327 |
|
public: |
328 |
|
DynamicVariableCall(const String& name, ParserContext* ctx, VMDynVar* v); |
329 |
|
ExprType_t exprType() const OVERRIDE { return dynVar->exprType(); } |
330 |
|
bool isConstExpr() const OVERRIDE { return dynVar->isConstExpr(); } |
331 |
|
bool isAssignable() const OVERRIDE { return dynVar->isAssignable(); } |
332 |
|
bool isPolyphonic() const OVERRIDE { return false; } |
333 |
|
void assign(Expression* expr) OVERRIDE { dynVar->assign(expr); } |
334 |
|
int evalInt() OVERRIDE; |
335 |
|
String evalStr() OVERRIDE; |
336 |
|
String evalCastToStr() OVERRIDE; |
337 |
|
void dump(int level = 0) OVERRIDE; |
338 |
|
}; |
339 |
|
typedef Ref<DynamicVariableCall,Node> DynamicVariableCallRef; |
340 |
|
|
341 |
class FunctionCall : virtual public LeafStatement, virtual public IntExpr, virtual public StringExpr { |
class FunctionCall : virtual public LeafStatement, virtual public IntExpr, virtual public StringExpr { |
342 |
String functionName; |
String functionName; |
343 |
ArgsRef args; |
ArgsRef args; |
646 |
void registerBuiltInConstIntVariables(const std::map<String,int>& vars); |
void registerBuiltInConstIntVariables(const std::map<String,int>& vars); |
647 |
void registerBuiltInIntVariables(const std::map<String,VMIntRelPtr*>& vars); |
void registerBuiltInIntVariables(const std::map<String,VMIntRelPtr*>& vars); |
648 |
void registerBuiltInIntArrayVariables(const std::map<String,VMInt8Array*>& vars); |
void registerBuiltInIntArrayVariables(const std::map<String,VMInt8Array*>& vars); |
649 |
|
void registerBuiltInDynVariables(const std::map<String,VMDynVar*>& vars); |
650 |
}; |
}; |
651 |
|
|
652 |
class ExecContext : public VMExecContext { |
class ExecContext : public VMExecContext { |