From 45f546c1d8d692e76c4e00d2d38518b968787916 Mon Sep 17 00:00:00 2001 From: George Marques Date: Tue, 12 Oct 2021 09:39:23 -0300 Subject: [PATCH] GDScript: Make setter parameter type same as variable type --- modules/gdscript/gdscript_analyzer.cpp | 4 +++- .../errors/setter_parameter_uses_property_type.gd | 8 ++++++++ .../errors/setter_parameter_uses_property_type.out | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 modules/gdscript/tests/scripts/analyzer/errors/setter_parameter_uses_property_type.gd create mode 100644 modules/gdscript/tests/scripts/analyzer/errors/setter_parameter_uses_property_type.out diff --git a/modules/gdscript/gdscript_analyzer.cpp b/modules/gdscript/gdscript_analyzer.cpp index fd7664049a9e..9e9873d45f53 100644 --- a/modules/gdscript/gdscript_analyzer.cpp +++ b/modules/gdscript/gdscript_analyzer.cpp @@ -893,11 +893,13 @@ void GDScriptAnalyzer::resolve_class_body(GDScriptParser::ClassNode *p_class) { resolve_function_body(member.variable->getter); } if (member.variable->setter != nullptr) { + resolve_function_signature(member.variable->setter); + if (member.variable->setter->parameters.size() > 0) { member.variable->setter->parameters[0]->datatype_specifier = member.variable->datatype_specifier; + member.variable->setter->parameters[0]->set_datatype(member.get_datatype()); } - resolve_function_signature(member.variable->setter); resolve_function_body(member.variable->setter); } } diff --git a/modules/gdscript/tests/scripts/analyzer/errors/setter_parameter_uses_property_type.gd b/modules/gdscript/tests/scripts/analyzer/errors/setter_parameter_uses_property_type.gd new file mode 100644 index 000000000000..3bbee5f5f776 --- /dev/null +++ b/modules/gdscript/tests/scripts/analyzer/errors/setter_parameter_uses_property_type.gd @@ -0,0 +1,8 @@ +var with_setter := 0: + set(val): + var x: String = val + with_setter = val + +func test(): + with_setter = 1 + print(with_setter) diff --git a/modules/gdscript/tests/scripts/analyzer/errors/setter_parameter_uses_property_type.out b/modules/gdscript/tests/scripts/analyzer/errors/setter_parameter_uses_property_type.out new file mode 100644 index 000000000000..9eb2a42ccd1c --- /dev/null +++ b/modules/gdscript/tests/scripts/analyzer/errors/setter_parameter_uses_property_type.out @@ -0,0 +1,2 @@ +GDTEST_ANALYZER_ERROR +Value of type "int" cannot be assigned to a variable of type "String".