[tools]: Minor intrinsic-gen changes
Have the resolver emit unique parameter names
Aslo: Update the parser tests to include ':' between parameter name and type.
This functionality landed a few changes up, but I missed this test from the change.
Bug: tint:832
Change-Id: If0d6d3a33bbcd8be4d70ee7182754158ed0da819
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/52641
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: David Neto <dneto@google.com>
diff --git a/tools/src/cmd/intrinsic-gen/parser/parser_test.go b/tools/src/cmd/intrinsic-gen/parser/parser_test.go
index 009aa7c..dddb166 100644
--- a/tools/src/cmd/intrinsic-gen/parser/parser_test.go
+++ b/tools/src/cmd/intrinsic-gen/parser/parser_test.go
@@ -96,7 +96,7 @@
},
}},
}},
- {"fn F(a T)", ast.AST{
+ {"fn F(a: T)", ast.AST{
Functions: []ast.FunctionDecl{{
Name: "F",
Parameters: ast.Parameters{
@@ -128,7 +128,7 @@
},
}},
}},
- {"fn F<T>(a X, b Y<T>)", ast.AST{
+ {"fn F<T>(a: X, b: Y<T>)", ast.AST{
Functions: []ast.FunctionDecl{{
Name: "F",
TemplateParams: ast.TemplateParams{
diff --git a/tools/src/cmd/intrinsic-gen/resolver/resolve.go b/tools/src/cmd/intrinsic-gen/resolver/resolve.go
index 792a33a..1798d0d 100644
--- a/tools/src/cmd/intrinsic-gen/resolver/resolve.go
+++ b/tools/src/cmd/intrinsic-gen/resolver/resolve.go
@@ -16,6 +16,7 @@
import (
"fmt"
+ "sort"
"dawn.googlesource.com/tint/tools/src/cmd/intrinsic-gen/ast"
"dawn.googlesource.com/tint/tools/src/cmd/intrinsic-gen/sem"
@@ -65,6 +66,9 @@
}
}
+ // Calculate the unique parameter names
+ r.s.UniqueParameterNames = r.calculateUniqueParameterNames()
+
return r.s, nil
}
@@ -444,6 +448,25 @@
return ty, nil
}
+// calculateUniqueParameterNames() iterates over all the parameters of all
+// overloads, calculating the list of unique parameter names
+func (r *resolver) calculateUniqueParameterNames() []string {
+ set := map[string]struct{}{"": {}}
+ names := []string{}
+ for _, f := range r.s.Functions {
+ for _, o := range f.Overloads {
+ for _, p := range o.Parameters {
+ if _, dup := set[p.Name]; !dup {
+ set[p.Name] = struct{}{}
+ names = append(names, p.Name)
+ }
+ }
+ }
+ }
+ sort.Strings(names)
+ return names
+}
+
// describe() returns a string describing a sem.Named
func describe(n sem.Named) string {
switch n := n.(type) {
diff --git a/tools/src/cmd/intrinsic-gen/sem/sem.go b/tools/src/cmd/intrinsic-gen/sem/sem.go
index 9cf135b..1a615fe 100644
--- a/tools/src/cmd/intrinsic-gen/sem/sem.go
+++ b/tools/src/cmd/intrinsic-gen/sem/sem.go
@@ -29,6 +29,8 @@
MaxOpenTypes int
// Maximum number of open-numbers used across all intrinsics
MaxOpenNumbers int
+ // The alphabetically sorted list of unique parameter names
+ UniqueParameterNames []string
}
// New returns a new Sem