mirror of
https://github.com/godotengine/godot.git
synced 2025-12-08 06:09:55 +00:00
Implement exponential operator (**) to GDScript/Expressions
This commit is contained in:
parent
9963ae3553
commit
dbd7a31507
15 changed files with 126 additions and 27 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue