|
@@ -2009,7 +2009,6 @@ GDScriptParser::ExpressionNode *GDScriptParser::parse_binary_operator(Expression
|
|
push_error(vformat(R"(Expected expression after "%s" operator.")", op.get_name()));
|
|
push_error(vformat(R"(Expected expression after "%s" operator.")", op.get_name()));
|
|
}
|
|
}
|
|
|
|
|
|
- // TODO: Store the Variant operator here too (in the node).
|
|
|
|
// TODO: Also for unary, ternary, and assignment.
|
|
// TODO: Also for unary, ternary, and assignment.
|
|
switch (op.type) {
|
|
switch (op.type) {
|
|
case GDScriptTokenizer::Token::PLUS:
|
|
case GDScriptTokenizer::Token::PLUS:
|
|
@@ -2171,39 +2170,50 @@ GDScriptParser::ExpressionNode *GDScriptParser::parse_assignment(ExpressionNode
|
|
switch (previous.type) {
|
|
switch (previous.type) {
|
|
case GDScriptTokenizer::Token::EQUAL:
|
|
case GDScriptTokenizer::Token::EQUAL:
|
|
assignment->operation = AssignmentNode::OP_NONE;
|
|
assignment->operation = AssignmentNode::OP_NONE;
|
|
|
|
+ assignment->variant_op = Variant::OP_MAX;
|
|
#ifdef DEBUG_ENABLED
|
|
#ifdef DEBUG_ENABLED
|
|
has_operator = false;
|
|
has_operator = false;
|
|
#endif
|
|
#endif
|
|
break;
|
|
break;
|
|
case GDScriptTokenizer::Token::PLUS_EQUAL:
|
|
case GDScriptTokenizer::Token::PLUS_EQUAL:
|
|
assignment->operation = AssignmentNode::OP_ADDITION;
|
|
assignment->operation = AssignmentNode::OP_ADDITION;
|
|
|
|
+ assignment->variant_op = Variant::OP_ADD;
|
|
break;
|
|
break;
|
|
case GDScriptTokenizer::Token::MINUS_EQUAL:
|
|
case GDScriptTokenizer::Token::MINUS_EQUAL:
|
|
assignment->operation = AssignmentNode::OP_SUBTRACTION;
|
|
assignment->operation = AssignmentNode::OP_SUBTRACTION;
|
|
|
|
+ assignment->variant_op = Variant::OP_SUBTRACT;
|
|
break;
|
|
break;
|
|
case GDScriptTokenizer::Token::STAR_EQUAL:
|
|
case GDScriptTokenizer::Token::STAR_EQUAL:
|
|
assignment->operation = AssignmentNode::OP_MULTIPLICATION;
|
|
assignment->operation = AssignmentNode::OP_MULTIPLICATION;
|
|
|
|
+ assignment->variant_op = Variant::OP_MULTIPLY;
|
|
break;
|
|
break;
|
|
case GDScriptTokenizer::Token::SLASH_EQUAL:
|
|
case GDScriptTokenizer::Token::SLASH_EQUAL:
|
|
assignment->operation = AssignmentNode::OP_DIVISION;
|
|
assignment->operation = AssignmentNode::OP_DIVISION;
|
|
|
|
+ assignment->variant_op = Variant::OP_DIVIDE;
|
|
break;
|
|
break;
|
|
case GDScriptTokenizer::Token::PERCENT_EQUAL:
|
|
case GDScriptTokenizer::Token::PERCENT_EQUAL:
|
|
assignment->operation = AssignmentNode::OP_MODULO;
|
|
assignment->operation = AssignmentNode::OP_MODULO;
|
|
|
|
+ assignment->variant_op = Variant::OP_MODULE;
|
|
break;
|
|
break;
|
|
case GDScriptTokenizer::Token::LESS_LESS_EQUAL:
|
|
case GDScriptTokenizer::Token::LESS_LESS_EQUAL:
|
|
assignment->operation = AssignmentNode::OP_BIT_SHIFT_LEFT;
|
|
assignment->operation = AssignmentNode::OP_BIT_SHIFT_LEFT;
|
|
|
|
+ assignment->variant_op = Variant::OP_SHIFT_LEFT;
|
|
break;
|
|
break;
|
|
case GDScriptTokenizer::Token::GREATER_GREATER_EQUAL:
|
|
case GDScriptTokenizer::Token::GREATER_GREATER_EQUAL:
|
|
assignment->operation = AssignmentNode::OP_BIT_SHIFT_RIGHT;
|
|
assignment->operation = AssignmentNode::OP_BIT_SHIFT_RIGHT;
|
|
|
|
+ assignment->variant_op = Variant::OP_SHIFT_RIGHT;
|
|
break;
|
|
break;
|
|
case GDScriptTokenizer::Token::AMPERSAND_EQUAL:
|
|
case GDScriptTokenizer::Token::AMPERSAND_EQUAL:
|
|
assignment->operation = AssignmentNode::OP_BIT_AND;
|
|
assignment->operation = AssignmentNode::OP_BIT_AND;
|
|
|
|
+ assignment->variant_op = Variant::OP_BIT_AND;
|
|
break;
|
|
break;
|
|
case GDScriptTokenizer::Token::PIPE_EQUAL:
|
|
case GDScriptTokenizer::Token::PIPE_EQUAL:
|
|
assignment->operation = AssignmentNode::OP_BIT_OR;
|
|
assignment->operation = AssignmentNode::OP_BIT_OR;
|
|
|
|
+ assignment->variant_op = Variant::OP_BIT_OR;
|
|
break;
|
|
break;
|
|
case GDScriptTokenizer::Token::CARET_EQUAL:
|
|
case GDScriptTokenizer::Token::CARET_EQUAL:
|
|
assignment->operation = AssignmentNode::OP_BIT_XOR;
|
|
assignment->operation = AssignmentNode::OP_BIT_XOR;
|
|
|
|
+ assignment->variant_op = Variant::OP_BIT_XOR;
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
break; // Unreachable.
|
|
break; // Unreachable.
|