Skip to content

Commit 74adf84

Browse files
committed
Reject enum names that shadow built-in types
1 parent 738b48a commit 74adf84

2 files changed

Lines changed: 16 additions & 0 deletions

File tree

vibes/enum_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,19 @@ end`)
336336
})
337337
}
338338

339+
func TestCompileEnumRejectsBuiltInTypeNames(t *testing.T) {
340+
builtins := []string{"String", "Int", "Float", "Bool", "Array", "Hash", "Any", "Nil", "Duration", "Time", "Money", "Number", "Function", "Object"}
341+
for _, name := range builtins {
342+
_, err := compileEnumDef(&EnumStmt{
343+
Name: name,
344+
Members: []EnumMemberStmt{{Name: "A"}},
345+
})
346+
if err == nil {
347+
t.Errorf("expected error for enum named %s, got nil", name)
348+
}
349+
}
350+
}
351+
339352
func enumTestValue(t *testing.T, script *Script, enumName string, member string) Value {
340353
t.Helper()
341354
enumDef, ok := script.enums[enumName]

vibes/execution_compile_enums.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ import (
77
)
88

99
func compileEnumDef(stmt *EnumStmt) (*EnumDef, error) {
10+
if typ, _ := resolveType(stmt.Name); typ != TypeUnknown {
11+
return nil, fmt.Errorf("enum name %s conflicts with built-in type", stmt.Name)
12+
}
1013
enumDef := &EnumDef{
1114
Name: stmt.Name,
1215
Members: make(map[string]*EnumValueDef, len(stmt.Members)),

0 commit comments

Comments
 (0)