diff options
| -rw-r--r-- | pkg/compiler/compiler.go | 15 | ||||
| -rw-r--r-- | pkg/compiler/testdata/errors.txt | 4 |
2 files changed, 19 insertions, 0 deletions
diff --git a/pkg/compiler/compiler.go b/pkg/compiler/compiler.go index 66da5e2b4..34b8b1fd6 100644 --- a/pkg/compiler/compiler.go +++ b/pkg/compiler/compiler.go @@ -361,6 +361,7 @@ func arrayContains(a []string, v string) bool { func (comp *compiler) flattenFlags() { comp.flattenIntFlags() + comp.flattenStrFlags() for _, n := range comp.desc.Nodes { switch flags := n.(type) { @@ -371,6 +372,11 @@ func (comp *compiler) flattenFlags() { if f, ok := comp.intFlags[flags.Name.Name]; ok { flags.Values = f.Values } + case *ast.StrFlags: + // Same as for intFlags above. + if f, ok := comp.strFlags[flags.Name.Name]; ok { + flags.Values = f.Values + } } } } @@ -384,6 +390,15 @@ func (comp *compiler) flattenIntFlags() { } } +func (comp *compiler) flattenStrFlags() { + for name, flags := range comp.strFlags { + if err := recurFlattenFlags[*ast.StrFlags, *ast.String](comp, name, flags, comp.strFlags, + map[string]bool{}); err != nil { + comp.error(flags.Pos, "%v", err) + } + } +} + func recurFlattenFlags[F ast.Flags[V], V ast.FlagValue](comp *compiler, name string, flags F, allFlags map[string]F, visitedFlags map[string]bool) error { if _, visited := visitedFlags[name]; visited { diff --git a/pkg/compiler/testdata/errors.txt b/pkg/compiler/testdata/errors.txt index 47d343e36..32c673f21 100644 --- a/pkg/compiler/testdata/errors.txt +++ b/pkg/compiler/testdata/errors.txt @@ -103,6 +103,10 @@ f130 = 100, 110, f110 ### flags f130 used twice or circular dependency on f130 loop_flags(a flags[f110]) +f210 = "1", "2", "3", f220 ### flags f210 used twice or circular dependency on f210 +f220 = "10", "11", f230 ### flags f220 used twice or circular dependency on f220 +f230 = "100", "110", f210 ### flags f230 used twice or circular dependency on f230 + resource r2[r0]: 2 resource r3[int32:1] ### unexpected ':', only struct fields can be bitfields resource r4[int32[opt]] ### resource base can't be marked as opt |
