cmd/compile: don't export unneeded OAS, OASWB nodes
Also:
- "rewrite" node Op in exporter for some nodes instead of importer
- more comments
Change-Id: I809e6754d14987b28f1da9379951ffa2e690c2a7
Reviewed-on: https://go-review.googlesource.com/22008
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
diff --git a/src/cmd/compile/internal/gc/bexport.go b/src/cmd/compile/internal/gc/bexport.go
index 59a85c2..e0810f9 100644
--- a/src/cmd/compile/internal/gc/bexport.go
+++ b/src/cmd/compile/internal/gc/bexport.go
@@ -783,7 +783,11 @@
// supply the parameter package here. We need the package
// when the function is inlined so we can properly resolve
// the name.
- // TODO(gri) should do this only once per function/method
+ // TODO(gri) This is compiler-specific. Try using importpkg
+ // here and then update the symbols if we find an inlined
+ // body only. Otherwise, the parameter name is ignored and
+ // the package doesn't matter. This would remove an int
+ // (likely 1 byte) for each named parameter.
p.pkg(q.Sym.Pkg)
}
// TODO(gri) This is compiler-specific (escape info).
@@ -1266,12 +1270,11 @@
// unimplemented - handled by default case
case OAS, OASWB:
- p.op(op)
// Don't export "v = <N>" initializing statements, hope they're always
// preceded by the DCL which will be re-parsed and typecheck to reproduce
// the "v = <N>" again.
- // TODO(gri) if n.Right == nil, don't emit anything
- if p.bool(n.Right != nil) {
+ if n.Right != nil {
+ p.op(OAS)
p.expr(n.Left)
p.expr(n.Right)
}
@@ -1284,16 +1287,14 @@
p.expr(n.Right)
}
+ case OAS2DOTTYPE, OAS2FUNC, OAS2MAPR, OAS2RECV:
+ fallthrough
+
case OAS2:
p.op(OAS2)
p.exprList(n.List)
p.exprList(n.Rlist)
- case OAS2DOTTYPE, OAS2FUNC, OAS2MAPR, OAS2RECV:
- p.op(op)
- p.exprList(n.List)
- p.exprList(n.Rlist)
-
case ORETURN:
p.op(ORETURN)
p.exprList(n.List)
@@ -1332,11 +1333,15 @@
p.stmtList(n.List)
case OCASE, OXCASE:
- p.op(op)
+ p.op(OXCASE)
p.stmtList(n.List)
p.stmtList(n.Nbody)
- case OBREAK, OCONTINUE, OGOTO, OFALL, OXFALL:
+ case OFALL:
+ op = OXFALL
+ fallthrough
+
+ case OBREAK, OCONTINUE, OGOTO, OXFALL:
p.op(op)
p.exprsOrNil(n.Left, nil)