diff options
author | Rémi Verschelde <remi@verschelde.fr> | 2022-11-25 19:29:57 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-25 19:29:57 +0100 |
commit | c7ceb94e372216b1b033d7c2ac26d5b7545c4dac (patch) | |
tree | 225892b616946f95ea6d3f1aba8b31d97aff656e /modules/gdscript/gdscript_analyzer.cpp | |
parent | 47bd51e70be775294250a1b3a360d67d1d7cd04e (diff) | |
parent | 69bb7e5b1199e6af3256fe948dbfa3102c1ccbc8 (diff) | |
download | redot-engine-c7ceb94e372216b1b033d7c2ac26d5b7545c4dac.tar.gz |
Merge pull request #69079 from adamscott/fix-singleton-scene-cyclic-load
Fix singleton scene cyclic loading
Diffstat (limited to 'modules/gdscript/gdscript_analyzer.cpp')
-rw-r--r-- | modules/gdscript/gdscript_analyzer.cpp | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/modules/gdscript/gdscript_analyzer.cpp b/modules/gdscript/gdscript_analyzer.cpp index 429f53e59f..a6840b54b8 100644 --- a/modules/gdscript/gdscript_analyzer.cpp +++ b/modules/gdscript/gdscript_analyzer.cpp @@ -3131,14 +3131,19 @@ void GDScriptAnalyzer::reduce_identifier(GDScriptParser::IdentifierNode *p_ident } } } else if (ResourceLoader::get_resource_type(autoload.path) == "PackedScene") { - Error err = OK; - Ref<GDScript> scr = GDScriptCache::get_packed_scene_script(autoload.path, err); - if (err == OK && scr.is_valid()) { - Ref<GDScriptParserRef> singl_parser = get_parser_for(scr->get_path()); - if (singl_parser.is_valid()) { - err = singl_parser->raise_status(GDScriptParserRef::INTERFACE_SOLVED); - if (err == OK) { - result = type_from_metatype(singl_parser->get_parser()->head->get_datatype()); + if (GDScriptLanguage::get_singleton()->get_named_globals_map().has(name)) { + Variant constant = GDScriptLanguage::get_singleton()->get_named_globals_map()[name]; + Node *node = Object::cast_to<Node>(constant); + if (node != nullptr) { + Ref<Script> scr = node->get_script(); + if (scr.is_valid()) { + Ref<GDScriptParserRef> singl_parser = get_parser_for(scr->get_path()); + if (singl_parser.is_valid()) { + Error err = singl_parser->raise_status(GDScriptParserRef::INTERFACE_SOLVED); + if (err == OK) { + result = type_from_metatype(singl_parser->get_parser()->head->get_datatype()); + } + } } } } |