Browse Source

Merge pull request #77151 from dalexeev/gds-fix-call-static-from-non-static

GDScript: Fix calling static func from non-static is allowed
Rémi Verschelde 2 years ago
parent
commit
eb86dabee0

+ 4 - 0
modules/gdscript/gdscript_analyzer.cpp

@@ -1692,6 +1692,9 @@ void GDScriptAnalyzer::resolve_function_body(GDScriptParser::FunctionNode *p_fun
 	GDScriptParser::FunctionNode *previous_function = parser->current_function;
 	GDScriptParser::FunctionNode *previous_function = parser->current_function;
 	parser->current_function = p_function;
 	parser->current_function = p_function;
 
 
+	bool previous_static_context = static_context;
+	static_context = p_function->is_static;
+
 	resolve_suite(p_function->body);
 	resolve_suite(p_function->body);
 
 
 	if (!p_function->get_datatype().is_hard_type() && p_function->body->get_datatype().is_set()) {
 	if (!p_function->get_datatype().is_hard_type() && p_function->body->get_datatype().is_set()) {
@@ -1707,6 +1710,7 @@ void GDScriptAnalyzer::resolve_function_body(GDScriptParser::FunctionNode *p_fun
 	parser->ignored_warnings = previously_ignored_warnings;
 	parser->ignored_warnings = previously_ignored_warnings;
 #endif
 #endif
 	parser->current_function = previous_function;
 	parser->current_function = previous_function;
+	static_context = previous_static_context;
 }
 }
 
 
 void GDScriptAnalyzer::decide_suite_type(GDScriptParser::Node *p_suite, GDScriptParser::Node *p_statement) {
 void GDScriptAnalyzer::decide_suite_type(GDScriptParser::Node *p_suite, GDScriptParser::Node *p_statement) {

+ 8 - 0
modules/gdscript/tests/scripts/analyzer/errors/static_func_call_non_static.gd

@@ -0,0 +1,8 @@
+static func static_func():
+	non_static_func()
+
+func non_static_func():
+	pass
+
+func test():
+	pass

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

@@ -0,0 +1,2 @@
+GDTEST_ANALYZER_ERROR
+Cannot call non-static function "non_static_func()" from static function "static_func()".