Work on userdata binary operations
Some checks reported errors
continuous-integration/drone/push Build encountered an error
Some checks reported errors
continuous-integration/drone/push Build encountered an error
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
#include "../ScriptTypes/TableScriptType.hpp"
|
||||
#include "../UserData/UserDataFunction.hpp"
|
||||
#include "EvalValues/NumericalTableEvalValue.hpp"
|
||||
#include "../UserData/UserDataValue.hpp"
|
||||
|
||||
using namespace std;
|
||||
using namespace Porygon::Binder;
|
||||
@@ -248,6 +249,8 @@ namespace Porygon::Evaluation {
|
||||
return this->EvaluateUnary((BoundUnaryExpression *) expression);
|
||||
case BoundExpressionKind::Binary:
|
||||
return this->EvaluateBinary((BoundBinaryExpression *) expression);
|
||||
case BoundExpressionKind ::UserdataBinary:
|
||||
return this->EvaluateUserDataBinary(dynamic_cast<const BoundUserdataBinaryExpression*>(expression));
|
||||
case BoundExpressionKind::FunctionCall:
|
||||
return this->EvaluateFunctionCallExpression(expression);
|
||||
case BoundExpressionKind::Index:
|
||||
@@ -282,6 +285,15 @@ namespace Porygon::Evaluation {
|
||||
return leftValue->BinaryOperation(operation, rightValue.Get());
|
||||
}
|
||||
|
||||
EvalValuePointer Evaluator::EvaluateUserDataBinary(const BoundUserdataBinaryExpression *expression) {
|
||||
auto leftValue = this->EvaluateExpression(expression->GetLeft());
|
||||
auto rightValue = this->EvaluateExpression(expression->GetRight());
|
||||
auto op = expression->GetOperation();
|
||||
auto o = dynamic_cast<const UserData::UserDataValue*>(leftValue.Get());
|
||||
auto val = op->Invoke(o->GetObjectPointer(), rightValue.Get());
|
||||
return val;
|
||||
}
|
||||
|
||||
EvalValuePointer Evaluator::EvaluateUnary(const BoundUnaryExpression *expression) {
|
||||
auto exp = expression->GetOperand();
|
||||
auto val = EvaluateExpression(exp);
|
||||
|
||||
@@ -39,6 +39,7 @@ namespace Porygon::Evaluation{
|
||||
|
||||
EvalValuePointer EvaluateExpression(const BoundExpression *expression);
|
||||
EvalValuePointer EvaluateBinary(const BoundBinaryExpression *expression);
|
||||
EvalValuePointer EvaluateUserDataBinary(const BoundUserdataBinaryExpression *expression);
|
||||
EvalValuePointer EvaluateUnary(const BoundUnaryExpression *expression);
|
||||
|
||||
EvalValuePointer EvaluateFunctionCallExpression(const BoundExpression *expression);
|
||||
|
||||
Reference in New Issue
Block a user