Browse Source

Merge pull request #53843 from vnen/gdscript-typed-array-subscript-constant

Fix inferred typed array marked as constant
Rémi Verschelde 3 years ago
parent
commit
3f888966c0

+ 3 - 0
modules/gdscript/gdscript_analyzer.cpp

@@ -471,6 +471,7 @@ GDScriptParser::DataType GDScriptAnalyzer::resolve_datatype(GDScriptParser::Type
 
 			if (container_type.kind != GDScriptParser::DataType::VARIANT) {
 				container_type.is_meta_type = false;
+				container_type.is_constant = false;
 				result.set_container_element_type(container_type);
 			}
 		}
@@ -1802,6 +1803,7 @@ void GDScriptAnalyzer::update_array_literal_element_type(const GDScriptParser::D
 			}
 		}
 		if (all_same_type) {
+			element_type.is_constant = false;
 			array_type.set_container_element_type(element_type);
 		} else if (all_have_type) {
 			push_error(vformat(R"(Variant array is not compatible with an array of type "%s".)", p_base_type.get_container_element_type().to_string()), p_array_literal);
@@ -3498,6 +3500,7 @@ GDScriptParser::DataType GDScriptAnalyzer::type_from_property(const PropertyInfo
 			} else {
 				ERR_FAIL_V_MSG(result, "Could not find element type from property hint of a typed array.");
 			}
+			elem_type.is_constant = false;
 			result.set_container_element_type(elem_type);
 		}
 	}

+ 6 - 0
modules/gdscript/tests/scripts/analyzer/features/typed_array_inferred_access_isnt_constant.gd

@@ -0,0 +1,6 @@
+# https://github.com/godotengine/godot/issues/53640
+
+func test():
+	var arr := [0]
+	arr[0] = 1
+	print(arr[0])

+ 2 - 0
modules/gdscript/tests/scripts/analyzer/features/typed_array_inferred_access_isnt_constant.out

@@ -0,0 +1,2 @@
+GDTEST_OK
+1