run method

  1. @override
FutureOr<ASTValue> run(
  1. VMContext parentContext,
  2. ASTRunStatus runStatus
)
override

Implementation

@override
FutureOr<ASTValue> run(
    VMContext parentContext, ASTRunStatus runStatus) async {
  var context = defineRunContext(parentContext);

  var value = await expression.run(context, runStatus);
  var variableValue = await variable.getValue(context);

  FutureOr<ASTValue> result;

  switch (operator) {
    case ASTAssignmentOperator.set:
      {
        result = value;
        break;
      }
    case ASTAssignmentOperator.sum:
      {
        result = variableValue + value;
        break;
      }
    case ASTAssignmentOperator.subtract:
      {
        result = variableValue - value;
        break;
      }
    case ASTAssignmentOperator.divide:
      {
        result = variableValue / value;
        break;
      }
    case ASTAssignmentOperator.multiply:
      {
        result = variableValue * value;
        break;
      }
    default:
      throw UnsupportedError('operator: $operator');
  }

  await variable.setValue(context, await result);

  return result;
}