Просмотр исходного кода

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

Rémi Verschelde 3 лет назад
Родитель
Сommit
4a4995524c
2 измененных файлов с 8 добавлено и 2 удалено
  1. 4 2
      modules/gdscript/gdscript_analyzer.cpp
  2. 4 0
      modules/gdscript/gdscript_parser.cpp

+ 4 - 2
modules/gdscript/gdscript_analyzer.cpp

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

+ 4 - 0
modules/gdscript/gdscript_parser.cpp

@@ -1620,6 +1620,10 @@ GDScriptParser::ForNode *GDScriptParser::parse_for() {
 
 	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.)");
 
 	// Save break/continue state.