Len int64
}
-func NewCompLitExpr(pos src.XPos, op Op, typ Ntype, list []Node) *CompLitExpr {
- n := &CompLitExpr{Ntype: typ}
+func NewCompLitExpr(pos src.XPos, op Op, typ *types.Type, list []Node) *CompLitExpr {
+ n := &CompLitExpr{List: list}
n.pos = pos
n.SetOp(op)
- n.List = list
+ if typ != nil {
+ n.Ntype = TypeNode(typ)
+ }
n.orig = n
return n
}
*elemp = wrapName(r.pos(), r.expr())
}
- lit := typecheck.Expr(ir.NewCompLitExpr(pos, ir.OCOMPLIT, ir.TypeNode(typ), elems))
+ lit := typecheck.Expr(ir.NewCompLitExpr(pos, ir.OCOMPLIT, typ, elems))
if typ0.IsPtr() {
lit = typecheck.Expr(typecheck.NodAddrAt(pos, lit))
lit.SetType(typ0)
i++
}
- nn := ir.NewCompLitExpr(base.Pos, ir.OCOMPLIT, ir.TypeNode(n.Type()), nil)
- nn.List = list
+ nn := ir.NewCompLitExpr(base.Pos, ir.OCOMPLIT, n.Type(), list)
typed(n.Type(), nn)
// Need to transform the OCOMPLIT.
return transformCompLit(nn)
n.SetType(typ)
} else {
args = append([]ir.Node(nil), args...)
- lit := ir.NewCompLitExpr(pos, ir.OCOMPLIT, ir.TypeNode(typ), args)
+ lit := ir.NewCompLitExpr(pos, ir.OCOMPLIT, typ, args)
lit.SetImplicit(true)
n = lit
}
case ir.OCOMPLIT:
pos := r.pos()
t := r.typ()
- n := ir.NewCompLitExpr(pos, ir.OCOMPLIT, ir.TypeNode(t), r.exprList())
+ n := ir.NewCompLitExpr(pos, ir.OCOMPLIT, t, r.exprList())
n.SetType(t)
return n
pos := r.pos()
typ := r.typ()
list := r.exprList()
- n := ir.NewCompLitExpr(pos, op, ir.TypeNode(typ), list)
+ n := ir.NewCompLitExpr(pos, op, typ, list)
n.SetType(typ)
if op == ir.OSLICELIT {
n.Len = int64(r.uint64())
i++
}
- nn := ir.NewCompLitExpr(base.Pos, ir.OCOMPLIT, ir.TypeNode(n.Type()), nil)
- nn.List = l
- return Expr(nn)
+ return Expr(ir.NewCompLitExpr(base.Pos, ir.OCOMPLIT, n.Type(), l))
}
func checkmake(t *types.Type, arg string, np *ir.Node) bool {
typ := typecheck.ClosureType(clo)
- clos := ir.NewCompLitExpr(base.Pos, ir.OCOMPLIT, ir.TypeNode(typ), nil)
+ clos := ir.NewCompLitExpr(base.Pos, ir.OCOMPLIT, typ, nil)
clos.SetEsc(clo.Esc())
clos.List = append([]ir.Node{ir.NewUnaryExpr(base.Pos, ir.OCFUNC, clofn.Nname)}, closureArgs(clo)...)
for i, value := range clos.List {
typ := typecheck.MethodValueType(n)
- clos := ir.NewCompLitExpr(base.Pos, ir.OCOMPLIT, ir.TypeNode(typ), nil)
+ clos := ir.NewCompLitExpr(base.Pos, ir.OCOMPLIT, typ, nil)
clos.SetEsc(n.Esc())
clos.List = []ir.Node{ir.NewUnaryExpr(base.Pos, ir.OCFUNC, methodValueWrapper(n)), n.X}
t := types.NewSlice(types.Types[types.TSTRING])
// args[1:] to skip buf arg
- slice := ir.NewCompLitExpr(base.Pos, ir.OCOMPLIT, ir.TypeNode(t), args[1:])
+ slice := ir.NewCompLitExpr(base.Pos, ir.OCOMPLIT, t, args[1:])
slice.Prealloc = n.Prealloc
args = []ir.Node{buf, slice}
slice.SetEsc(ir.EscNone)