Browse Source

Merge pull request #43856 from vnen/gdscript-some-fixes

A couple of GDScript fixes
Rémi Verschelde 4 years ago
parent
commit
fc28de64c4
2 changed files with 11 additions and 7 deletions
  1. 10 6
      modules/gdscript/gdscript_analyzer.cpp
  2. 1 1
      modules/gdscript/gdscript_compiler.cpp

+ 10 - 6
modules/gdscript/gdscript_analyzer.cpp

@@ -978,7 +978,7 @@ void GDScriptAnalyzer::resolve_for(GDScriptParser::ForNode *p_for) {
 
 
 						if (!call->arguments[i]->is_constant) {
 						if (!call->arguments[i]->is_constant) {
 							all_is_constant = false;
 							all_is_constant = false;
-						} else {
+						} else if (all_is_constant) {
 							args.write[i] = call->arguments[i]->reduced_value;
 							args.write[i] = call->arguments[i]->reduced_value;
 						}
 						}
 
 
@@ -1011,11 +1011,15 @@ void GDScriptAnalyzer::resolve_for(GDScriptParser::ForNode *p_for) {
 					}
 					}
 				}
 				}
 
 
-				GDScriptParser::DataType list_type;
-				list_type.type_source = GDScriptParser::DataType::ANNOTATED_EXPLICIT;
-				list_type.kind = GDScriptParser::DataType::BUILTIN;
-				list_type.builtin_type = Variant::ARRAY;
-				p_for->list->set_datatype(list_type);
+				if (p_for->list->is_constant) {
+					p_for->list->set_datatype(type_from_variant(p_for->list->reduced_value, p_for->list));
+				} else {
+					GDScriptParser::DataType list_type;
+					list_type.type_source = GDScriptParser::DataType::ANNOTATED_EXPLICIT;
+					list_type.kind = GDScriptParser::DataType::BUILTIN;
+					list_type.builtin_type = Variant::ARRAY;
+					p_for->list->set_datatype(list_type);
+				}
 			}
 			}
 		}
 		}
 	}
 	}

+ 1 - 1
modules/gdscript/gdscript_compiler.cpp

@@ -437,7 +437,7 @@ GDScriptCodeGenerator::Address GDScriptCompiler::_parse_expression(CodeGen &code
 				gen->pop_temporary();
 				gen->pop_temporary();
 			}
 			}
 
 
-			return source;
+			return result;
 		} break;
 		} break;
 		case GDScriptParser::Node::CALL: {
 		case GDScriptParser::Node::CALL: {
 			const GDScriptParser::CallNode *call = static_cast<const GDScriptParser::CallNode *>(p_expression);
 			const GDScriptParser::CallNode *call = static_cast<const GDScriptParser::CallNode *>(p_expression);