diff options
Diffstat (limited to 'modules/gdscript/gdscript_analyzer.cpp')
-rw-r--r-- | modules/gdscript/gdscript_analyzer.cpp | 30 |
1 files changed, 7 insertions, 23 deletions
diff --git a/modules/gdscript/gdscript_analyzer.cpp b/modules/gdscript/gdscript_analyzer.cpp index 8b0b7a5102..f1c022c43c 100644 --- a/modules/gdscript/gdscript_analyzer.cpp +++ b/modules/gdscript/gdscript_analyzer.cpp @@ -3122,29 +3122,13 @@ void GDScriptAnalyzer::reduce_identifier(GDScriptParser::IdentifierNode *p_ident } } else if (ResourceLoader::get_resource_type(autoload.path) == "PackedScene") { Error err = OK; - Ref<PackedScene> scene = GDScriptCache::get_packed_scene(autoload.path, err); - if (err == OK && scene->get_state().is_valid()) { - Ref<SceneState> state = scene->get_state(); - if (state->get_node_count() > 0) { - const int ROOT_NODE = 0; - for (int i = 0; i < state->get_node_property_count(ROOT_NODE); i++) { - if (state->get_node_property_name(ROOT_NODE, i) != SNAME("script")) { - continue; - } - - Ref<GDScript> scr = state->get_node_property_value(ROOT_NODE, i); - if (scr.is_null()) { - continue; - } - - 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()); - } - } - break; + 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()); } } } |