aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/compiler/compiler.go
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/compiler/compiler.go
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/compiler/compiler.go')
-rw-r--r--pkg/compiler/compiler.go15
1 files changed, 15 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 {