Sfoglia il codice sorgente

Merge pull request #70713 from vonagam/fix-unnamed-enum-outer-conflicts

George Marques 2 anni fa
parent
commit
7319fa6082

+ 2 - 8
modules/gdscript/gdscript_parser.cpp

@@ -1321,14 +1321,8 @@ GDScriptParser::EnumNode *GDScriptParser::parse_enum() {
 			if (elements.has(item.identifier->name)) {
 			if (elements.has(item.identifier->name)) {
 				push_error(vformat(R"(Name "%s" was already in this enum (at line %d).)", item.identifier->name, elements[item.identifier->name]), item.identifier);
 				push_error(vformat(R"(Name "%s" was already in this enum (at line %d).)", item.identifier->name, elements[item.identifier->name]), item.identifier);
 			} else if (!named) {
 			} else if (!named) {
-				// TODO: Abstract this recursive member check.
-				ClassNode *parent = current_class;
-				while (parent != nullptr) {
-					if (parent->members_indices.has(item.identifier->name)) {
-						push_error(vformat(R"(Name "%s" is already used as a class %s.)", item.identifier->name, parent->get_member(item.identifier->name).get_type_name()));
-						break;
-					}
-					parent = parent->outer;
+				if (current_class->members_indices.has(item.identifier->name)) {
+					push_error(vformat(R"(Name "%s" is already used as a class %s.)", item.identifier->name, current_class->get_member(item.identifier->name).get_type_name()));
 				}
 				}
 			}
 			}
 
 

+ 17 - 0
modules/gdscript/tests/scripts/parser/features/unnamed_enums_outer_conflicts.gd

@@ -0,0 +1,17 @@
+class A:
+	enum { X = 1 }
+
+	class B:
+		enum { X = 2 }
+
+class C:
+	const X = 3
+
+	class D:
+		enum { X = 4 }
+
+func test():
+	print(A.X)
+	print(A.B.X)
+	print(C.X)
+	print(C.D.X)

+ 5 - 0
modules/gdscript/tests/scripts/parser/features/unnamed_enums_outer_conflicts.out

@@ -0,0 +1,5 @@
+GDTEST_OK
+1
+2
+3
+4