diff options
author | George Marques <george@gmarqu.es> | 2021-09-02 08:25:02 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-02 08:25:02 -0300 |
commit | 29a3300c6aaa2c7915c39ad633dc3b0ce0a8505b (patch) | |
tree | 57c7b458b33bb1ef77334c8d3d0a8419c604b166 /modules/gdscript/gdscript_compiler.cpp | |
parent | d4a84be4fb91ef425b4ca55f3d24464bbd9906c9 (diff) | |
parent | 84852585b96623fef89576898f5c5f4ae173108b (diff) | |
download | redot-engine-29a3300c6aaa2c7915c39ad633dc3b0ce0a8505b.tar.gz |
Merge pull request #52071 from V-Sekai/gdscript_name_conflict_check
Checks in analyzer and compiler for GDScript naming conflicts
Diffstat (limited to 'modules/gdscript/gdscript_compiler.cpp')
-rw-r--r-- | modules/gdscript/gdscript_compiler.cpp | 29 |
1 files changed, 7 insertions, 22 deletions
diff --git a/modules/gdscript/gdscript_compiler.cpp b/modules/gdscript/gdscript_compiler.cpp index ddf4f281b4..e5cbcc545f 100644 --- a/modules/gdscript/gdscript_compiler.cpp +++ b/modules/gdscript/gdscript_compiler.cpp @@ -2186,6 +2186,13 @@ Error GDScriptCompiler::_parse_class_level(GDScript *p_script, const GDScriptPar p_script->tool = parser->is_tool(); p_script->name = p_class->identifier ? p_class->identifier->name : ""; + if (p_script->name != "") { + if (ClassDB::class_exists(p_script->name) && ClassDB::is_class_exposed(p_script->name)) { + _set_error("The class '" + p_script->name + "' shadows a native class", p_class); + return ERR_ALREADY_EXISTS; + } + } + Ref<GDScriptNativeClass> native; GDScriptDataType base_type = _gdtype_from_datatype(p_class->base_type); @@ -2337,28 +2344,6 @@ Error GDScriptCompiler::_parse_class_level(GDScript *p_script, const GDScriptPar const GDScriptParser::SignalNode *signal = member.signal; StringName name = signal->identifier->name; - GDScript *c = p_script; - - while (c) { - if (c->_signals.has(name)) { - _set_error("Signal '" + name + "' redefined (in current or parent class)", p_class); - return ERR_ALREADY_EXISTS; - } - - if (c->base.is_valid()) { - c = c->base.ptr(); - } else { - c = nullptr; - } - } - - if (native.is_valid()) { - if (ClassDB::has_signal(native->get_name(), name)) { - _set_error("Signal '" + name + "' redefined (original in native class '" + String(native->get_name()) + "')", p_class); - return ERR_ALREADY_EXISTS; - } - } - Vector<StringName> parameters_names; parameters_names.resize(signal->parameters.size()); for (int j = 0; j < signal->parameters.size(); j++) { |