Ver Fonte

GDScript: Don't add implicit constructor to the list of functions

So it's not shown on docs or when listing the methods. This also avoids
being able to call it using the `call()` function.
George Marques há 3 anos atrás
pai
commit
81cac4907f
2 ficheiros alterados com 9 adições e 1 exclusões
  1. 4 0
      modules/gdscript/gdscript.cpp
  2. 5 1
      modules/gdscript/gdscript_compiler.cpp

+ 4 - 0
modules/gdscript/gdscript.cpp

@@ -1254,6 +1254,10 @@ GDScript::~GDScript() {
 		memdelete(E.value);
 	}
 
+	if (implicit_initializer) {
+		memdelete(implicit_initializer);
+	}
+
 	if (GDScriptCache::singleton) { // Cache may have been already destroyed at engine shutdown.
 		GDScriptCache::remove_script(get_path());
 	}

+ 5 - 1
modules/gdscript/gdscript_compiler.cpp

@@ -2140,7 +2140,7 @@ GDScriptFunction *GDScriptCompiler::_parse_function(Error &r_error, GDScript *p_
 #endif
 	}
 
-	if (!p_for_lambda) {
+	if (!is_implicit_initializer && !p_for_lambda) {
 		p_script->member_functions[func_name] = gd_function;
 	}
 
@@ -2208,11 +2208,15 @@ Error GDScriptCompiler::_parse_class_level(GDScript *p_script, const GDScriptPar
 	for (const KeyValue<StringName, GDScriptFunction *> &E : p_script->member_functions) {
 		memdelete(E.value);
 	}
+	if (p_script->implicit_initializer) {
+		memdelete(p_script->implicit_initializer);
+	}
 	p_script->member_functions.clear();
 	p_script->member_indices.clear();
 	p_script->member_info.clear();
 	p_script->_signals.clear();
 	p_script->initializer = nullptr;
+	p_script->implicit_initializer = nullptr;
 
 	p_script->tool = parser->is_tool();
 	p_script->name = p_class->identifier ? p_class->identifier->name : "";