You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-05 12:10:55 +00:00
Implement exponential operator (**) to GDScript/Expressions
This commit is contained in:
committed by
Yuri Rubinsky
parent
9963ae3553
commit
dbd7a31507
@@ -2320,6 +2320,10 @@ GDScriptParser::ExpressionNode *GDScriptParser::parse_binary_operator(Expression
|
||||
operation->operation = BinaryOpNode::OP_MODULO;
|
||||
operation->variant_op = Variant::OP_MODULE;
|
||||
break;
|
||||
case GDScriptTokenizer::Token::STAR_STAR:
|
||||
operation->operation = BinaryOpNode::OP_POWER;
|
||||
operation->variant_op = Variant::OP_POWER;
|
||||
break;
|
||||
case GDScriptTokenizer::Token::LESS_LESS:
|
||||
operation->operation = BinaryOpNode::OP_BIT_LEFT_SHIFT;
|
||||
operation->variant_op = Variant::OP_SHIFT_LEFT;
|
||||
@@ -2483,6 +2487,10 @@ GDScriptParser::ExpressionNode *GDScriptParser::parse_assignment(ExpressionNode
|
||||
assignment->operation = AssignmentNode::OP_MULTIPLICATION;
|
||||
assignment->variant_op = Variant::OP_MULTIPLY;
|
||||
break;
|
||||
case GDScriptTokenizer::Token::STAR_STAR_EQUAL:
|
||||
assignment->operation = AssignmentNode::OP_POWER;
|
||||
assignment->variant_op = Variant::OP_POWER;
|
||||
break;
|
||||
case GDScriptTokenizer::Token::SLASH_EQUAL:
|
||||
assignment->operation = AssignmentNode::OP_DIVISION;
|
||||
assignment->variant_op = Variant::OP_DIVIDE;
|
||||
@@ -3265,6 +3273,7 @@ GDScriptParser::ParseRule *GDScriptParser::get_rule(GDScriptTokenizer::Token::Ty
|
||||
{ &GDScriptParser::parse_unary_operator, &GDScriptParser::parse_binary_operator, PREC_ADDITION_SUBTRACTION }, // PLUS,
|
||||
{ &GDScriptParser::parse_unary_operator, &GDScriptParser::parse_binary_operator, PREC_ADDITION_SUBTRACTION }, // MINUS,
|
||||
{ nullptr, &GDScriptParser::parse_binary_operator, PREC_FACTOR }, // STAR,
|
||||
{ nullptr, &GDScriptParser::parse_binary_operator, PREC_FACTOR }, // STAR_STAR,
|
||||
{ nullptr, &GDScriptParser::parse_binary_operator, PREC_FACTOR }, // SLASH,
|
||||
{ nullptr, &GDScriptParser::parse_binary_operator, PREC_FACTOR }, // PERCENT,
|
||||
// Assignment
|
||||
@@ -3272,6 +3281,7 @@ GDScriptParser::ParseRule *GDScriptParser::get_rule(GDScriptTokenizer::Token::Ty
|
||||
{ nullptr, &GDScriptParser::parse_assignment, PREC_ASSIGNMENT }, // PLUS_EQUAL,
|
||||
{ nullptr, &GDScriptParser::parse_assignment, PREC_ASSIGNMENT }, // MINUS_EQUAL,
|
||||
{ nullptr, &GDScriptParser::parse_assignment, PREC_ASSIGNMENT }, // STAR_EQUAL,
|
||||
{ nullptr, &GDScriptParser::parse_assignment, PREC_ASSIGNMENT }, // STAR_STAR_EQUAL,
|
||||
{ nullptr, &GDScriptParser::parse_assignment, PREC_ASSIGNMENT }, // SLASH_EQUAL,
|
||||
{ nullptr, &GDScriptParser::parse_assignment, PREC_ASSIGNMENT }, // PERCENT_EQUAL,
|
||||
{ nullptr, &GDScriptParser::parse_assignment, PREC_ASSIGNMENT }, // LESS_LESS_EQUAL,
|
||||
@@ -3896,6 +3906,9 @@ void GDScriptParser::TreePrinter::print_assignment(AssignmentNode *p_assignment)
|
||||
case AssignmentNode::OP_MODULO:
|
||||
push_text("%");
|
||||
break;
|
||||
case AssignmentNode::OP_POWER:
|
||||
push_text("**");
|
||||
break;
|
||||
case AssignmentNode::OP_BIT_SHIFT_LEFT:
|
||||
push_text("<<");
|
||||
break;
|
||||
@@ -3944,6 +3957,9 @@ void GDScriptParser::TreePrinter::print_binary_op(BinaryOpNode *p_binary_op) {
|
||||
case BinaryOpNode::OP_MODULO:
|
||||
push_text(" % ");
|
||||
break;
|
||||
case BinaryOpNode::OP_POWER:
|
||||
push_text(" ** ");
|
||||
break;
|
||||
case BinaryOpNode::OP_BIT_LEFT_SHIFT:
|
||||
push_text(" << ");
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user