mirror of
https://github.com/godotengine/godot.git
synced 2025-11-02 14:41:07 +00:00
Merge pull request #41897 from strank/not-in-conditional-done
Add a "not in" operator to GDScript.
This commit is contained in:
commit
75bfb016f2
2 changed files with 13 additions and 1 deletions
|
|
@ -2080,6 +2080,17 @@ GDScriptParser::ExpressionNode *GDScriptParser::parse_unary_operator(ExpressionN
|
||||||
return operation;
|
return operation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GDScriptParser::ExpressionNode *GDScriptParser::parse_binary_not_in_operator(ExpressionNode *p_previous_operand, bool p_can_assign) {
|
||||||
|
// check that NOT is followed by IN by consuming it before calling parse_binary_operator which will only receive a plain IN
|
||||||
|
consume(GDScriptTokenizer::Token::IN, R"(Expected "in" after "not" in content-test operator.)");
|
||||||
|
ExpressionNode *in_operation = parse_binary_operator(p_previous_operand, p_can_assign);
|
||||||
|
UnaryOpNode *operation = alloc_node<UnaryOpNode>();
|
||||||
|
operation->operation = UnaryOpNode::OP_LOGIC_NOT;
|
||||||
|
operation->variant_op = Variant::OP_NOT;
|
||||||
|
operation->operand = in_operation;
|
||||||
|
return operation;
|
||||||
|
}
|
||||||
|
|
||||||
GDScriptParser::ExpressionNode *GDScriptParser::parse_binary_operator(ExpressionNode *p_previous_operand, bool p_can_assign) {
|
GDScriptParser::ExpressionNode *GDScriptParser::parse_binary_operator(ExpressionNode *p_previous_operand, bool p_can_assign) {
|
||||||
GDScriptTokenizer::Token op = previous;
|
GDScriptTokenizer::Token op = previous;
|
||||||
BinaryOpNode *operation = alloc_node<BinaryOpNode>();
|
BinaryOpNode *operation = alloc_node<BinaryOpNode>();
|
||||||
|
|
@ -2906,7 +2917,7 @@ GDScriptParser::ParseRule *GDScriptParser::get_rule(GDScriptTokenizer::Token::Ty
|
||||||
// Logical
|
// Logical
|
||||||
{ nullptr, &GDScriptParser::parse_binary_operator, PREC_LOGIC_AND }, // AND,
|
{ nullptr, &GDScriptParser::parse_binary_operator, PREC_LOGIC_AND }, // AND,
|
||||||
{ nullptr, &GDScriptParser::parse_binary_operator, PREC_LOGIC_OR }, // OR,
|
{ nullptr, &GDScriptParser::parse_binary_operator, PREC_LOGIC_OR }, // OR,
|
||||||
{ &GDScriptParser::parse_unary_operator, nullptr, PREC_NONE }, // NOT,
|
{ &GDScriptParser::parse_unary_operator, &GDScriptParser::parse_binary_not_in_operator, PREC_CONTENT_TEST }, // NOT,
|
||||||
{ nullptr, &GDScriptParser::parse_binary_operator, PREC_LOGIC_AND }, // AMPERSAND_AMPERSAND,
|
{ nullptr, &GDScriptParser::parse_binary_operator, PREC_LOGIC_AND }, // AMPERSAND_AMPERSAND,
|
||||||
{ nullptr, &GDScriptParser::parse_binary_operator, PREC_LOGIC_OR }, // PIPE_PIPE,
|
{ nullptr, &GDScriptParser::parse_binary_operator, PREC_LOGIC_OR }, // PIPE_PIPE,
|
||||||
{ &GDScriptParser::parse_unary_operator, nullptr, PREC_NONE }, // BANG,
|
{ &GDScriptParser::parse_unary_operator, nullptr, PREC_NONE }, // BANG,
|
||||||
|
|
|
||||||
|
|
@ -1285,6 +1285,7 @@ private:
|
||||||
ExpressionNode *parse_builtin_constant(ExpressionNode *p_previous_operand, bool p_can_assign);
|
ExpressionNode *parse_builtin_constant(ExpressionNode *p_previous_operand, bool p_can_assign);
|
||||||
ExpressionNode *parse_unary_operator(ExpressionNode *p_previous_operand, bool p_can_assign);
|
ExpressionNode *parse_unary_operator(ExpressionNode *p_previous_operand, bool p_can_assign);
|
||||||
ExpressionNode *parse_binary_operator(ExpressionNode *p_previous_operand, bool p_can_assign);
|
ExpressionNode *parse_binary_operator(ExpressionNode *p_previous_operand, bool p_can_assign);
|
||||||
|
ExpressionNode *parse_binary_not_in_operator(ExpressionNode *p_previous_operand, bool p_can_assign);
|
||||||
ExpressionNode *parse_ternary_operator(ExpressionNode *p_previous_operand, bool p_can_assign);
|
ExpressionNode *parse_ternary_operator(ExpressionNode *p_previous_operand, bool p_can_assign);
|
||||||
ExpressionNode *parse_assignment(ExpressionNode *p_previous_operand, bool p_can_assign);
|
ExpressionNode *parse_assignment(ExpressionNode *p_previous_operand, bool p_can_assign);
|
||||||
ExpressionNode *parse_array(ExpressionNode *p_previous_operand, bool p_can_assign);
|
ExpressionNode *parse_array(ExpressionNode *p_previous_operand, bool p_can_assign);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue