Work on userdata binary operations
Some checks reported errors
continuous-integration/drone/push Build encountered an error

This commit is contained in:
2019-09-08 13:53:24 +02:00
parent 85936f3d68
commit eca0c6b075
8 changed files with 136 additions and 49 deletions

View File

@@ -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);

View File

@@ -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);