diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2020-08-11 15:15:43 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-11 15:15:43 +0200 |
commit | cf05486d8e77d4275b99562d925e3235d0953a77 (patch) | |
tree | 2b96163d9658424d2a9aa82931922839cd13cd70 /modules/gdscript/gdscript_parser.cpp | |
parent | 408651ddc02ffebe97effdf4a2226f19036875ed (diff) | |
parent | fbd07bf3bf04972fb1bbe289ba4f71784597a9e8 (diff) | |
download | redot-engine-cf05486d8e77d4275b99562d925e3235d0953a77.tar.gz |
Merge pull request #41055 from snichols/null-callee-fix
Fix crash with null callee
Diffstat (limited to 'modules/gdscript/gdscript_parser.cpp')
-rw-r--r-- | modules/gdscript/gdscript_parser.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp index 1f3e1c1e40..d09d9e2998 100644 --- a/modules/gdscript/gdscript_parser.cpp +++ b/modules/gdscript/gdscript_parser.cpp @@ -2332,7 +2332,11 @@ GDScriptParser::ExpressionNode *GDScriptParser::parse_dictionary(ExpressionNode GDScriptParser::ExpressionNode *GDScriptParser::parse_grouping(ExpressionNode *p_previous_operand, bool p_can_assign) { ExpressionNode *grouped = parse_expression(false); pop_multiline(); - consume(GDScriptTokenizer::Token::PARENTHESIS_CLOSE, R"*(Expected closing ")" after grouping expression.)*"); + if (grouped == nullptr) { + push_error(R"(Expected grouping expression.)"); + } else { + consume(GDScriptTokenizer::Token::PARENTHESIS_CLOSE, R"*(Expected closing ")" after grouping expression.)*"); + } return grouped; } @@ -2423,7 +2427,9 @@ GDScriptParser::ExpressionNode *GDScriptParser::parse_call(ExpressionNode *p_pre } else { call->callee = p_previous_operand; - if (call->callee->type == Node::IDENTIFIER) { + if (call->callee == nullptr) { + push_error(R"*(Cannot call on an expression. Use ".call()" if it's a Callable.)*"); + } else if (call->callee->type == Node::IDENTIFIER) { call->function_name = static_cast<IdentifierNode *>(call->callee)->name; make_completion_context(COMPLETION_METHOD, call->callee); } else if (call->callee->type == Node::SUBSCRIPT) { |