Merge pull request #53338 from briansemrau/gdscript-handle-for-with-null-list

This commit is contained in:
Rémi Verschelde 2021-10-04 17:11:43 +02:00 committed by GitHub
commit 4a4995524c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 2 deletions

View File

@ -1201,7 +1201,7 @@ void GDScriptAnalyzer::resolve_for(GDScriptParser::ForNode *p_for) {
variable_type.kind = GDScriptParser::DataType::BUILTIN; variable_type.kind = GDScriptParser::DataType::BUILTIN;
variable_type.builtin_type = Variant::INT; // Can this ever be a float or something else? variable_type.builtin_type = Variant::INT; // Can this ever be a float or something else?
p_for->variable->set_datatype(variable_type); p_for->variable->set_datatype(variable_type);
} else { } else if (p_for->list) {
resolve_node(p_for->list); resolve_node(p_for->list);
if (p_for->list->datatype.has_container_element_type()) { if (p_for->list->datatype.has_container_element_type()) {
variable_type = p_for->list->datatype.get_container_element_type(); variable_type = p_for->list->datatype.get_container_element_type();
@ -1216,7 +1216,9 @@ void GDScriptAnalyzer::resolve_for(GDScriptParser::ForNode *p_for) {
variable_type.kind = GDScriptParser::DataType::VARIANT; variable_type.kind = GDScriptParser::DataType::VARIANT;
} }
} }
p_for->variable->set_datatype(variable_type); if (p_for->variable) {
p_for->variable->set_datatype(variable_type);
}
resolve_suite(p_for->loop); resolve_suite(p_for->loop);
p_for->set_datatype(p_for->loop->get_datatype()); p_for->set_datatype(p_for->loop->get_datatype());

View File

@ -1620,6 +1620,10 @@ GDScriptParser::ForNode *GDScriptParser::parse_for() {
n_for->list = parse_expression(false); n_for->list = parse_expression(false);
if (!n_for->list) {
push_error(R"(Expected a list or range after "in".)");
}
consume(GDScriptTokenizer::Token::COLON, R"(Expected ":" after "for" condition.)"); consume(GDScriptTokenizer::Token::COLON, R"(Expected ":" after "for" condition.)");
// Save break/continue state. // Save break/continue state.