Skip to content

Commit c94543b

Browse files
committed
cmd/compile: move all usage of delayTransform out of helpers.go
So next CL will make delayTransform to become irgen's method, because the delay transform logic also depends on irgen.topFuncIsGeneric field. For #48609 Change-Id: I660ed19856bd06c3b6f4279a9184db96175dea2d Reviewed-on: https://go-review.googlesource.com/c/go/+/351854 Trust: Cuong Manh Le <[email protected]> Trust: Dan Scales <[email protected]> Run-TryBot: Cuong Manh Le <[email protected]> TryBot-Result: Go Bot <[email protected]> Reviewed-by: Dan Scales <[email protected]>
1 parent f6b5ffb commit c94543b

File tree

2 files changed

+33
-26
lines changed

2 files changed

+33
-26
lines changed

src/cmd/compile/internal/noder/expr.go

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,12 @@ func (g *irgen) expr0(typ types2.Type, expr syntax.Expr) ir.Node {
167167
index := g.expr(expr.Index)
168168
if index.Op() != ir.OTYPE {
169169
// This is just a normal index expression
170-
return Index(pos, g.typ(typ), g.expr(expr.X), index)
170+
n := Index(pos, g.typ(typ), g.expr(expr.X), index)
171+
if !delayTransform() {
172+
// transformIndex will modify n.Type() for OINDEXMAP.
173+
transformIndex(n)
174+
}
175+
return n
171176
}
172177
// This is generic function instantiation with a single type
173178
targs = []ir.Node{index}
@@ -200,17 +205,33 @@ func (g *irgen) expr0(typ types2.Type, expr syntax.Expr) ir.Node {
200205
return g.selectorExpr(pos, typ, expr)
201206

202207
case *syntax.SliceExpr:
203-
return Slice(pos, g.typ(typ), g.expr(expr.X), g.expr(expr.Index[0]), g.expr(expr.Index[1]), g.expr(expr.Index[2]))
208+
n := Slice(pos, g.typ(typ), g.expr(expr.X), g.expr(expr.Index[0]), g.expr(expr.Index[1]), g.expr(expr.Index[2]))
209+
if !delayTransform() {
210+
transformSlice(n)
211+
}
212+
return n
204213

205214
case *syntax.Operation:
206215
if expr.Y == nil {
207216
return Unary(pos, g.typ(typ), g.op(expr.Op, unOps[:]), g.expr(expr.X))
208217
}
209218
switch op := g.op(expr.Op, binOps[:]); op {
210219
case ir.OEQ, ir.ONE, ir.OLT, ir.OLE, ir.OGT, ir.OGE:
211-
return Compare(pos, g.typ(typ), op, g.expr(expr.X), g.expr(expr.Y))
220+
n := Compare(pos, g.typ(typ), op, g.expr(expr.X), g.expr(expr.Y))
221+
if !delayTransform() {
222+
transformCompare(n)
223+
}
224+
return n
225+
case ir.OANDAND, ir.OOROR:
226+
x := g.expr(expr.X)
227+
y := g.expr(expr.Y)
228+
return typed(x.Type(), ir.NewLogicalExpr(pos, op, x, y))
212229
default:
213-
return Binary(pos, op, g.typ(typ), g.expr(expr.X), g.expr(expr.Y))
230+
n := Binary(pos, op, g.typ(typ), g.expr(expr.X), g.expr(expr.Y))
231+
if op == ir.OADD && !delayTransform() {
232+
return transformAdd(n)
233+
}
234+
return n
214235
}
215236

216237
default:

src/cmd/compile/internal/noder/helpers.go

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -89,20 +89,16 @@ func Assert(pos src.XPos, x ir.Node, typ *types.Type) ir.Node {
8989
return typed(typ, ir.NewTypeAssertExpr(pos, x, nil))
9090
}
9191

92-
func Binary(pos src.XPos, op ir.Op, typ *types.Type, x, y ir.Node) ir.Node {
92+
func Binary(pos src.XPos, op ir.Op, typ *types.Type, x, y ir.Node) *ir.BinaryExpr {
9393
switch op {
94-
case ir.OANDAND, ir.OOROR:
95-
return typed(x.Type(), ir.NewLogicalExpr(pos, op, x, y))
9694
case ir.OADD:
9795
n := ir.NewBinaryExpr(pos, op, x, y)
9896
typed(typ, n)
99-
r := ir.Node(n)
100-
if !delayTransform() {
101-
r = transformAdd(n)
102-
}
103-
return r
97+
return n
10498
default:
105-
return typed(x.Type(), ir.NewBinaryExpr(pos, op, x, y))
99+
n := ir.NewBinaryExpr(pos, op, x, y)
100+
typed(x.Type(), n)
101+
return n
106102
}
107103
}
108104

@@ -195,12 +191,9 @@ func Call(pos src.XPos, typ *types.Type, fun ir.Node, args []ir.Node, dots bool)
195191
return n
196192
}
197193

198-
func Compare(pos src.XPos, typ *types.Type, op ir.Op, x, y ir.Node) ir.Node {
194+
func Compare(pos src.XPos, typ *types.Type, op ir.Op, x, y ir.Node) *ir.BinaryExpr {
199195
n := ir.NewBinaryExpr(pos, op, x, y)
200196
typed(typ, n)
201-
if !delayTransform() {
202-
transformCompare(n)
203-
}
204197
return n
205198
}
206199

@@ -270,26 +263,19 @@ func method(typ *types.Type, index int) *types.Field {
270263
return types.ReceiverBaseType(typ).Methods().Index(index)
271264
}
272265

273-
func Index(pos src.XPos, typ *types.Type, x, index ir.Node) ir.Node {
266+
func Index(pos src.XPos, typ *types.Type, x, index ir.Node) *ir.IndexExpr {
274267
n := ir.NewIndexExpr(pos, x, index)
275268
typed(typ, n)
276-
if !delayTransform() {
277-
// transformIndex will modify n.Type() for OINDEXMAP.
278-
transformIndex(n)
279-
}
280269
return n
281270
}
282271

283-
func Slice(pos src.XPos, typ *types.Type, x, low, high, max ir.Node) ir.Node {
272+
func Slice(pos src.XPos, typ *types.Type, x, low, high, max ir.Node) *ir.SliceExpr {
284273
op := ir.OSLICE
285274
if max != nil {
286275
op = ir.OSLICE3
287276
}
288277
n := ir.NewSliceExpr(pos, op, x, low, high, max)
289278
typed(typ, n)
290-
if !delayTransform() {
291-
transformSlice(n)
292-
}
293279
return n
294280
}
295281

0 commit comments

Comments
 (0)