Initial support for require statements
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
2019-08-10 16:45:15 +02:00
parent 2f912afe92
commit c39f3a0884
11 changed files with 202 additions and 15 deletions

View File

@@ -7,6 +7,7 @@
#include "EvalValues/TableEvalValue.hpp"
#include "../Binder/BoundExpressions/BoundTableExpression.hpp"
#include "../Binder/BoundExpressions/BoundFunctionCallExpression.hpp"
#include "../Binder/BoundExpressions/BoundRequireExpression.hpp"
#include "../ScriptTypes/TableScriptType.hpp"
#include "../UserData/UserDataFunction.hpp"
#include "EvalValues/NumericalTableEvalValue.hpp"
@@ -254,6 +255,8 @@ namespace Porygon::Evaluation {
return this->EvaluateNumericTableExpression(expression);
case BoundExpressionKind::Table:
return this->EvaluateComplexTableExpression(expression);
case BoundExpressionKind::Require:
return this -> EvaluateRequireExpression(expression);
}
}
@@ -396,4 +399,16 @@ namespace Porygon::Evaluation {
this->_evaluationScope = currentEvaluator;
return new TableEvalValue(variables);
}
EvalValuePointer Evaluator::EvaluateRequireExpression(const BoundExpression* expression) {
auto module = dynamic_cast<const BoundRequireExpression*>(expression)->GetModule();
if (module ->GetReturnType() == nullptr){
for (const auto& v: *module->GetScriptVariables()){
this->_scriptVariables->insert({v.first, v.second.Clone()});
}
return nullptr;
} else{
return module -> Evaluate().Take();
}
}
}

View File

@@ -47,6 +47,8 @@ namespace Porygon::Evaluation{
EvalValuePointer EvaluateNumericTableExpression(const BoundExpression *expression);
EvalValuePointer EvaluateComplexTableExpression(const BoundExpression *expression);
EvalValuePointer EvaluateRequireExpression(const BoundExpression* expression);
EvalValuePointer GetVariable(const BoundVariableExpression *expression);
public:
explicit Evaluator(map<Utilities::HashedString, EvalValuePointer>* scriptVariables, const ScriptOptions* options)