dawn_node: Allow Include and Mixins to come out of order in idlgen
Bug: dawn:1123
Change-Id: I120e6234e194f46954e3c7e75a3a8cc667df9611
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/75900
Auto-Submit: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/dawn_node/tools/src/cmd/idlgen/main.go b/src/dawn_node/tools/src/cmd/idlgen/main.go
index 5ea5499..55488e3 100644
--- a/src/dawn_node/tools/src/cmd/idlgen/main.go
+++ b/src/dawn_node/tools/src/cmd/idlgen/main.go
@@ -193,6 +193,7 @@
{
interfaces := map[string]*ast.Interface{}
mixins := map[string]*ast.Mixin{}
+ includes := []*ast.Includes{}
for _, d := range in.Declarations {
switch d := d.(type) {
case *ast.Interface:
@@ -209,27 +210,31 @@
mixins[d.Name] = d
s.declarations[d.Name] = d
case *ast.Includes:
- // Merge mixin into interface
- i, ok := interfaces[d.Name]
- if !ok {
- panic(fmt.Errorf("%v includes %v, but %v is not an interface", d.Name, d.Source, d.Name))
- }
- m, ok := mixins[d.Source]
- if !ok {
- panic(fmt.Errorf("%v includes %v, but %v is not an mixin", d.Name, d.Source, d.Source))
- }
- // Merge mixin into the interface
- for _, member := range m.Members {
- if member, ok := member.(*ast.Member); ok {
- i.Members = append(i.Members, member)
- }
- }
+ includes = append(includes, d)
default:
if name := nameOf(d); name != "" {
s.declarations[nameOf(d)] = d
}
}
}
+
+ // Merge mixin into interface
+ for _, include := range includes {
+ i, ok := interfaces[include.Name]
+ if !ok {
+ panic(fmt.Errorf("%v includes %v, but %v is not an interface", include.Name, include.Source, include.Name))
+ }
+ m, ok := mixins[include.Source]
+ if !ok {
+ panic(fmt.Errorf("%v includes %v, but %v is not an mixin", include.Name, include.Source, include.Source))
+ }
+ // Merge mixin into the interface
+ for _, member := range m.Members {
+ if member, ok := member.(*ast.Member); ok {
+ i.Members = append(i.Members, member)
+ }
+ }
+ }
}
// Now traverse the declarations in to produce the dependency-ordered