aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorPaul Chaignon <paul.chaignon@gmail.com>2023-11-19 18:57:51 +0100
committerAleksandr Nogikh <nogikh@google.com>2023-12-05 13:40:28 +0000
commitada1d56f0f3c555123547e44695695f7d284b6d6 (patch)
tree10654551ca4a3f4bd7c49932486b1fde70f65561 /pkg
parent3e9d168edd9e40138b295bb7d8adc92fa9430e78 (diff)
compiler: support nested string flags definitions
This commit adds support for flags definitions such as: flags1 = "string1", "string2" flags2 = flags1, "string3" Signed-off-by: Paul Chaignon <paul.chaignon@gmail.com>
Diffstat (limited to 'pkg')
-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