diff options
| author | Paul Chaignon <paul.chaignon@gmail.com> | 2023-11-19 18:57:51 +0100 |
|---|---|---|
| committer | Aleksandr Nogikh <nogikh@google.com> | 2023-12-05 13:40:28 +0000 |
| commit | ada1d56f0f3c555123547e44695695f7d284b6d6 (patch) | |
| tree | 10654551ca4a3f4bd7c49932486b1fde70f65561 /pkg | |
| parent | 3e9d168edd9e40138b295bb7d8adc92fa9430e78 (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.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 |
