diff options
| author | Matthew Dempsky <mdempsky@google.com> | 2022-07-25 12:21:21 -0700 |
|---|---|---|
| committer | Matthew Dempsky <mdempsky@google.com> | 2022-07-28 07:31:36 +0000 |
| commit | 831fdf1dff5e38c6c23922880d97ac99fe30f311 (patch) | |
| tree | 3a8c062895e6cdcfa34d360fb2dd034631909b6d /src/cmd/compile/internal/noder/reader.go | |
| parent | 92798176e76f4ab69d4f18adf40b1a2aab4e3ea1 (diff) | |
| download | go-831fdf1dff5e38c6c23922880d97ac99fe30f311.tar.xz | |
[dev.unified] cmd/compile: extract nil handling from exprType
Type switches are the only context where exprType was used and `nilOK`
was true. It'll simplify subsequent dictionary work somewhat if
exprType doesn't need to worry about `nil`, so extract this logic and
move it into switchStmt instead.
Change-Id: I3d810f465173f5bb2e2dee7bbc7843fff6a62ee5
Reviewed-on: https://go-review.googlesource.com/c/go/+/419474
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: David Chase <drchase@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'src/cmd/compile/internal/noder/reader.go')
| -rw-r--r-- | src/cmd/compile/internal/noder/reader.go | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/src/cmd/compile/internal/noder/reader.go b/src/cmd/compile/internal/noder/reader.go index afc2705909..a8ef0a8e25 100644 --- a/src/cmd/compile/internal/noder/reader.go +++ b/src/cmd/compile/internal/noder/reader.go @@ -1547,7 +1547,11 @@ func (r *reader) switchStmt(label *types.Sym) ir.Node { cases = nil // TODO(mdempsky): Unclear if this matters. } for i := range cases { - cases[i] = r.exprType(true) + if r.Bool() { // case nil + cases[i] = typecheck.Expr(types.BuiltinPkg.Lookup("nil").Def.(*ir.NilExpr)) + } else { + cases[i] = r.exprType() + } } } else { cases = r.exprList() @@ -1734,7 +1738,7 @@ func (r *reader) expr() (res ir.Node) { case exprAssert: x := r.expr() pos := r.pos() - typ := r.exprType(false) + typ := r.exprType() srcRType := r.rtype(pos) // TODO(mdempsky): Always emit ODYNAMICDOTTYPE for uniformity? @@ -1800,7 +1804,7 @@ func (r *reader) expr() (res ir.Node) { case exprMake: pos := r.pos() - typ := r.exprType(false) + typ := r.exprType() extra := r.exprs() n := typecheck.Expr(ir.NewCallExpr(pos, ir.OMAKE, nil, append([]ir.Node{typ}, extra...))).(*ir.MakeExpr) n.RType = r.rtype(pos) @@ -1808,7 +1812,7 @@ func (r *reader) expr() (res ir.Node) { case exprNew: pos := r.pos() - typ := r.exprType(false) + typ := r.exprType() return typecheck.Expr(ir.NewUnaryExpr(pos, ir.ONEW, typ)) case exprConvert: @@ -2043,13 +2047,9 @@ func (r *reader) convRTTI(pos src.XPos) (typeWord, srcRType ir.Node) { return } -func (r *reader) exprType(nilOK bool) ir.Node { +func (r *reader) exprType() ir.Node { r.Sync(pkgbits.SyncExprType) - if nilOK && r.Bool() { - return typecheck.Expr(types.BuiltinPkg.Lookup("nil").Def.(*ir.NilExpr)) - } - pos := r.pos() setBasePos(pos) |
