Browse Source

GDScript: Fix return type of constructor call for extending class

Dmitrii Maganov 2 years ago
parent
commit
f67aa3e46d

+ 1 - 1
modules/gdscript/gdscript_analyzer.cpp

@@ -4174,7 +4174,7 @@ bool GDScriptAnalyzer::get_function_signature(GDScriptParser::Node *p_source, bo
 				r_default_arg_count++;
 				r_default_arg_count++;
 			}
 			}
 		}
 		}
-		r_return_type = found_function->get_datatype();
+		r_return_type = p_is_constructor ? p_base_type : found_function->get_datatype();
 		r_return_type.is_meta_type = false;
 		r_return_type.is_meta_type = false;
 		r_return_type.is_coroutine = found_function->is_coroutine;
 		r_return_type.is_coroutine = found_function->is_coroutine;
 
 

+ 10 - 0
modules/gdscript/tests/scripts/analyzer/errors/constructor_call_type.gd

@@ -0,0 +1,10 @@
+class A:
+	func _init():
+		pass
+
+class B extends A: pass
+class C extends A: pass
+
+func test():
+	var x := B.new()
+	print(x is C)

+ 2 - 0
modules/gdscript/tests/scripts/analyzer/errors/constructor_call_type.out

@@ -0,0 +1,2 @@
+GDTEST_ANALYZER_ERROR
+Expression is of type "B" so it can't be of type "C".