aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pkg/compiler/compiler.go15
-rw-r--r--pkg/compiler/testdata/errors.txt4
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