diff options
| author | Matthew Dempsky <mdempsky@google.com> | 2022-08-06 16:08:41 -0700 |
|---|---|---|
| committer | Matthew Dempsky <mdempsky@google.com> | 2022-08-10 23:27:42 +0000 |
| commit | de95dca32fb196d5f09bf5db4a6ba592907559c3 (patch) | |
| tree | 783939c9300c41ed6dcda9151ca47cca92089256 /src/cmd/compile/internal/noder/reader.go | |
| parent | 29b07037b1066cae8ec9e35f87d461700b6de600 (diff) | |
| download | go-de95dca32fb196d5f09bf5db4a6ba592907559c3.tar.xz | |
cmd/compile/internal/noder: explicit receiver expression handling
This CL adds a helper expression code for receiver addressing; i.e.,
the implicit addressing, dereferencing, and field selections involved
in changing the `x` in `x.M()` into an appropriate expression to pass
as an argument to the method.
Change-Id: I9be933e2a38c8f94f6a85d95b54f34164e5efb0a
Reviewed-on: https://go-review.googlesource.com/c/go/+/421820
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
Diffstat (limited to 'src/cmd/compile/internal/noder/reader.go')
| -rw-r--r-- | src/cmd/compile/internal/noder/reader.go | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/noder/reader.go b/src/cmd/compile/internal/noder/reader.go index 8c80c78c0b..3ab11399a5 100644 --- a/src/cmd/compile/internal/noder/reader.go +++ b/src/cmd/compile/internal/noder/reader.go @@ -1914,6 +1914,19 @@ func (r *reader) expr() (res ir.Node) { } return typecheck.Expr(ir.NewBinaryExpr(pos, op, x, y)) + case exprRecv: + x := r.expr() + pos := r.pos() + for i, n := 0, r.Len(); i < n; i++ { + x = Implicit(DotField(pos, x, r.Len())) + } + if r.Bool() { // needs deref + x = Implicit(Deref(pos, x.Type().Elem(), x)) + } else if r.Bool() { // needs addr + x = Implicit(Addr(pos, x)) + } + return x + case exprCall: fun := r.expr() if r.Bool() { // method call |
