@@ -148,6 +148,15 @@ static GDScriptParser::DataType make_enum_type(const StringName &p_enum_name, co
148
148
return type;
149
149
}
150
150
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
+
151
160
static GDScriptParser::DataType make_native_enum_type (const StringName &p_enum_name, const StringName &p_native_class, bool p_meta = true ) {
152
161
// Find out which base class declared the enum, so the name is always the same even when coming from other contexts.
153
162
StringName native_base = p_native_class;
@@ -1101,7 +1110,7 @@ void GDScriptAnalyzer::resolve_class_member(GDScriptParser::ClassNode *p_class,
1101
1110
check_class_member_name_conflict (p_class, member.m_enum ->identifier ->name , member.m_enum );
1102
1111
1103
1112
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 );
1105
1114
1106
1115
const GDScriptParser::EnumNode *prev_enum = current_enum;
1107
1116
current_enum = member.m_enum ;
@@ -1194,7 +1203,7 @@ void GDScriptAnalyzer::resolve_class_member(GDScriptParser::ClassNode *p_class,
1194
1203
// Also update the original references.
1195
1204
member.enum_value .parent_enum ->values .set (member.enum_value .index , member.enum_value );
1196
1205
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 ));
1198
1207
} break ;
1199
1208
case GDScriptParser::ClassNode::Member::CLASS:
1200
1209
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
4249
4258
const GDScriptParser::EnumNode::Value &element = current_enum->values [i];
4250
4259
if (element.identifier ->name == p_identifier->name ) {
4251
4260
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 );
4253
4262
if (element.parent_enum ->identifier ) {
4254
4263
type.enum_type = element.parent_enum ->identifier ->name ;
4255
4264
}
0 commit comments