diff options
Merge branch 'feature/interpreter_string'
1 files changed, 7 insertions, 5 deletions
| -rw-r--r-- | JSImpl/src/ASTInterpreter.h | 12 |
diff --git a/JSImpl/src/ASTInterpreter.h b/JSImpl/src/ASTInterpreter.h index db89013..cce6108 100644 --- a/JSImpl/src/ASTInterpreter.h +++ b/JSImpl/src/ASTInterpreter.h @@ -2,6 +2,8 @@ #include "ExpressionVisitor.h" +#include <variant> + class ASTInterpreter : public ExpressionVisitor { public: @@ -9,10 +11,9 @@ public: ~ASTInterpreter(); - // TODO: Changing this to a shared_ptr<Value> (or GC-enabled value*) will - // allow for much simpler implementation of all varible assignments. - typedef double value_type; - typedef IPLVector<value_type> ValueStack; + typedef std::variant<double, IPLString> Value; + typedef IPLSharedPtr<Value> ValuePtr; + typedef IPLVector<ValuePtr> ValueStack; ValueStack Run(Expression* program); @@ -39,13 +40,14 @@ public: virtual void Visit(EmptyExpression* e) override; virtual void Visit(CallExpression* e) override; - value_type& ModifyVariable(const IPLString& name); + ValuePtr& ModifyVariable(const IPLString& name); bool HasVariable(const IPLString& name); class Printer { public: virtual void PrintVariable(const char* name, double value) = 0; + virtual void PrintVariable(const char* name, const IPLString& value) = 0; }; void Print(Printer& p); |
