Initial support for require statements
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user