@@ -148,6 +148,15 @@ static GDScriptParser::DataType make_enum_type(const StringName &p_enum_name, co
148148 return type;
149149}
150150
151+ static GDScriptParser::DataType make_class_enum_type (const StringName &p_enum_name, GDScriptParser::ClassNode *p_class, const String &p_script_path, bool p_meta = true ) {
152+ GDScriptParser::DataType type = make_enum_type (p_enum_name, p_class->fqcn , p_meta);
153+
154+ type.class_type = p_class;
155+ type.script_path = p_script_path;
156+
157+ return type;
158+ }
159+
151160static GDScriptParser::DataType make_native_enum_type (const StringName &p_enum_name, const StringName &p_native_class, bool p_meta = true ) {
152161 // Find out which base class declared the enum, so the name is always the same even when coming from other contexts.
153162 StringName native_base = p_native_class;
@@ -1101,7 +1110,7 @@ void GDScriptAnalyzer::resolve_class_member(GDScriptParser::ClassNode *p_class,
11011110 check_class_member_name_conflict (p_class, member.m_enum ->identifier ->name , member.m_enum );
11021111
11031112 member.m_enum ->set_datatype (resolving_datatype);
1104- GDScriptParser::DataType enum_type = make_enum_type (member.m_enum ->identifier ->name , p_class-> fqcn , true );
1113+ GDScriptParser::DataType enum_type = make_class_enum_type (member.m_enum ->identifier ->name , p_class, parser-> script_path , true );
11051114
11061115 const GDScriptParser::EnumNode *prev_enum = current_enum;
11071116 current_enum = member.m_enum ;
@@ -1194,7 +1203,7 @@ void GDScriptAnalyzer::resolve_class_member(GDScriptParser::ClassNode *p_class,
11941203 // Also update the original references.
11951204 member.enum_value .parent_enum ->values .set (member.enum_value .index , member.enum_value );
11961205
1197- member.enum_value .identifier ->set_datatype (make_enum_type (UNNAMED_ENUM, p_class-> fqcn , false ));
1206+ member.enum_value .identifier ->set_datatype (make_class_enum_type (UNNAMED_ENUM, p_class, parser-> script_path , false ));
11981207 } break ;
11991208 case GDScriptParser::ClassNode::Member::CLASS:
12001209 check_class_member_name_conflict (p_class, member.m_class ->identifier ->name , member.m_class );
@@ -4249,7 +4258,7 @@ void GDScriptAnalyzer::reduce_identifier(GDScriptParser::IdentifierNode *p_ident
42494258 const GDScriptParser::EnumNode::Value &element = current_enum->values [i];
42504259 if (element.identifier ->name == p_identifier->name ) {
42514260 StringName enum_name = current_enum->identifier ? current_enum->identifier ->name : UNNAMED_ENUM;
4252- GDScriptParser::DataType type = make_enum_type (enum_name, parser->current_class -> fqcn , false );
4261+ GDScriptParser::DataType type = make_class_enum_type (enum_name, parser->current_class , parser-> script_path , false );
42534262 if (element.parent_enum ->identifier ) {
42544263 type.enum_type = element.parent_enum ->identifier ->name ;
42554264 }
0 commit comments