[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