}
case OAS2DOTTYPE: // v, ok = x.(type)
- e.assign(n.List.First(), n.Rlist.First(), "assign-pair-dot-type", n)
+ e.assign(n.List.First(), n.Right, "assign-pair-dot-type", n)
e.assign(n.List.Second(), nil, "assign-pair-dot-type", n)
case OAS2MAPR: // v, ok = m[k]
- e.assign(n.List.First(), n.Rlist.First(), "assign-pair-mapr", n)
+ e.assign(n.List.First(), n.Right, "assign-pair-mapr", n)
e.assign(n.List.Second(), nil, "assign-pair-mapr", n)
case OAS2RECV: // v, ok = <-ch
- e.assign(n.List.First(), n.Rlist.First(), "assign-pair-receive", n)
+ e.assign(n.List.First(), n.Right, "assign-pair-receive", n)
e.assign(n.List.Second(), nil, "assign-pair-receive", n)
case OAS2FUNC:
- e.stmts(n.Rlist.First().Ninit)
- e.call(e.addrs(n.List), n.Rlist.First(), nil)
+ e.stmts(n.Right.Ninit)
+ e.call(e.addrs(n.List), n.Right, nil)
case ORETURN:
results := e.curfn.Type.Results().FieldSlice()
for i, v := range n.List.Slice() {
fallthrough
case OAS2DOTTYPE, OAS2FUNC, OAS2MAPR, OAS2RECV:
- mode.Fprintf(s, "%.v = %.v", n.List, n.Rlist)
-
+ mode.Fprintf(s, "%.v = %.v", n.List, n.Right)
case ORETURN:
mode.Fprintf(s, "return %.v", n.List)
w.expr(n.Right)
}
- case OAS2, OAS2DOTTYPE, OAS2FUNC, OAS2MAPR, OAS2RECV:
+ case OAS2:
w.op(OAS2)
w.pos(n.Pos)
w.exprList(n.List)
w.exprList(n.Rlist)
+ case OAS2DOTTYPE, OAS2FUNC, OAS2MAPR, OAS2RECV:
+ w.op(OAS2)
+ w.pos(n.Pos)
+ w.exprList(n.List)
+ w.exprList(asNodes([]*Node{n.Right}))
+
case ORETURN:
w.op(ORETURN)
w.pos(n.Pos)
case OAS:
d.inspect(n.Right)
case OAS2DOTTYPE, OAS2FUNC, OAS2MAPR, OAS2RECV:
- d.inspect(n.Rlist.First())
+ d.inspect(n.Right)
case ODCLFUNC:
d.inspectList(n.Nbody)
default:
if n.Right != nil && n.Right.Op == OINLCALL {
if n.Op == OFOR || n.Op == OFORUNTIL {
inlconv2stmt(n.Right)
+ } else if n.Op == OAS2FUNC {
+ n.Rlist.Set(inlconv2list(n.Right))
+ n.Right = nil
+ n.Op = OAS2
+ n.SetTypecheck(0)
+ n = typecheck(n, ctxStmt)
} else {
n.Right = inlconv2expr(n.Right)
}
}
inlnodelist(n.Rlist, maxCost)
- if n.Op == OAS2FUNC && n.Rlist.First().Op == OINLCALL {
- n.Rlist.Set(inlconv2list(n.Rlist.First()))
- n.Op = OAS2
- n.SetTypecheck(0)
- n = typecheck(n, ctxStmt)
- } else {
- s := n.Rlist.Slice()
- for i1, n1 := range s {
- if n1.Op == OINLCALL {
- if n.Op == OIF {
- inlconv2stmt(n1)
- } else {
- s[i1] = inlconv2expr(s[i1])
- }
+ s := n.Rlist.Slice()
+ for i1, n1 := range s {
+ if n1.Op == OINLCALL {
+ if n.Op == OIF {
+ inlconv2stmt(n1)
+ } else {
+ s[i1] = inlconv2expr(s[i1])
}
}
}
case OAS2MAPR:
t := o.markTemp()
o.exprList(n.List)
- r := n.Rlist.First()
+ r := n.Right
r.Left = o.expr(r.Left, nil)
r.Right = o.expr(r.Right, nil)
case OAS2FUNC:
t := o.markTemp()
o.exprList(n.List)
- o.init(n.Rlist.First())
- o.call(n.Rlist.First())
+ o.init(n.Right)
+ o.call(n.Right)
o.as2(n)
o.cleanTemp(t)
case OAS2DOTTYPE:
t := o.markTemp()
o.exprList(n.List)
- n.Rlist.First().Left = o.expr(n.Rlist.First().Left, nil) // i in i.(T)
+ n.Right.Left = o.expr(n.Right.Left, nil) // i in i.(T)
o.okAs2(n)
o.cleanTemp(t)
case OAS2RECV:
t := o.markTemp()
o.exprList(n.List)
- n.Rlist.First().Left = o.expr(n.Rlist.First().Left, nil) // arg to recv
- ch := n.Rlist.First().Left.Type
+ n.Right.Left = o.expr(n.Right.Left, nil) // arg to recv
+ ch := n.Right.Left.Type
tmp1 := o.newTemp(ch.Elem(), types.Haspointers(ch.Elem()))
tmp2 := o.newTemp(types.Types[TBOOL], false)
o.out = append(o.out, n)
func (o *Order) okAs2(n *Node) {
var tmp1, tmp2 *Node
if !n.List.First().isBlank() {
- typ := n.Rlist.First().Type
+ typ := n.Right.Type
tmp1 = o.newTemp(typ, types.Haspointers(typ))
}
a := nod(OAS2RECV, nil, nil)
a.SetTypecheck(1)
a.List.Set2(hv1, hb)
- a.Rlist.Set1(nod(ORECV, ha, nil))
+ a.Right = nod(ORECV, ha, nil)
n.Left.Ninit.Set1(a)
if v1 == nil {
body = nil
// convert x, ok = <-c into OSELRECV2(x, <-c) with ntest=ok
case OAS2RECV:
- if n.Rlist.First().Op != ORECV {
+ if n.Right.Op != ORECV {
yyerrorl(n.Pos, "select assignment must have receive on right hand side")
break
}
n.Op = OSELRECV2
n.Left = n.List.First()
n.List.Set1(n.List.Second())
- n.Right = n.Rlist.First()
- n.Rlist.Set(nil)
// convert <-c into OSELRECV(N, <-c)
case ORECV:
s.call(n.Left, callGo)
case OAS2DOTTYPE:
- res, resok := s.dottype(n.Rlist.First(), true)
+ res, resok := s.dottype(n.Right, true)
deref := false
- if !canSSAType(n.Rlist.First().Type) {
+ if !canSSAType(n.Right.Type) {
if res.Op != ssa.OpLoad {
s.Fatalf("dottype of non-load")
}
case OAS2FUNC:
// We come here only when it is an intrinsic call returning two values.
- if !isIntrinsicCall(n.Rlist.First()) {
- s.Fatalf("non-intrinsic AS2FUNC not expanded %v", n.Rlist.First())
+ if !isIntrinsicCall(n.Right) {
+ s.Fatalf("non-intrinsic AS2FUNC not expanded %v", n.Right)
}
- v := s.intrinsicCall(n.Rlist.First())
+ v := s.intrinsicCall(n.Right)
v1 := s.newValue1(ssa.OpSelect0, n.List.First().Type, v)
v2 := s.newValue1(ssa.OpSelect1, n.List.Second().Type, v)
s.assign(n.List.First(), v1, false, 0)
OSTR2RUNES // Type(Left) (Type is []rune, Left is a string)
OAS // Left = Right or (if Colas=true) Left := Right
OAS2 // List = Rlist (x, y, z = a, b, c)
- OAS2DOTTYPE // List = Rlist (x, ok = I.(int))
- OAS2FUNC // List = Rlist (x, y = f())
- OAS2MAPR // List = Rlist (x, ok = m["foo"])
- OAS2RECV // List = Rlist (x, ok = <-c)
+ OAS2DOTTYPE // List = Right (x, ok = I.(int))
+ OAS2FUNC // List = Right (x, y = f())
+ OAS2MAPR // List = Right (x, ok = m["foo"])
+ OAS2RECV // List = Right (x, ok = <-c)
OASOP // Left Etype= Right (x += y)
OCALL // Left(List) (function call, method call or type conversion)
goto mismatch
}
n.Op = OAS2FUNC
+ n.Right = r
+ n.Rlist.Set(nil)
for i, l := range n.List.Slice() {
f := r.Type.Field(i)
if f.Type != nil && l.Type != nil {
switch r.Op {
case OINDEXMAP:
n.Op = OAS2MAPR
-
case ORECV:
n.Op = OAS2RECV
-
case ODOTTYPE:
n.Op = OAS2DOTTYPE
r.Op = ODOTTYPE2
}
-
+ n.Right = r
+ n.Rlist.Set(nil)
if l.Type != nil {
checkassignto(r.Type, l)
}
case OAS2FUNC:
init.AppendNodes(&n.Ninit)
- r := n.Rlist.First()
+ r := n.Right
walkexprlistsafe(n.List.Slice(), init)
r = walkexpr(r, init)
if isIntrinsicCall(r) {
- n.Rlist.Set1(r)
+ n.Right = r
break
}
init.Append(r)
case OAS2RECV:
init.AppendNodes(&n.Ninit)
- r := n.Rlist.First()
+ r := n.Right
walkexprlistsafe(n.List.Slice(), init)
r.Left = walkexpr(r.Left, init)
var n1 *Node
case OAS2MAPR:
init.AppendNodes(&n.Ninit)
- r := n.Rlist.First()
+ r := n.Right
walkexprlistsafe(n.List.Slice(), init)
r.Left = walkexpr(r.Left, init)
r.Right = walkexpr(r.Right, init)
if ok := n.List.Second(); !ok.isBlank() && ok.Type.IsBoolean() {
r.Type.Field(1).Type = ok.Type
}
- n.Rlist.Set1(r)
+ n.Right = r
n.Op = OAS2FUNC
// don't generate a = *var if a is _
case OAS2DOTTYPE:
walkexprlistsafe(n.List.Slice(), init)
- n.Rlist.SetFirst(walkexpr(n.Rlist.First(), init))
+ n.Right = walkexpr(n.Right, init)
case OCONVIFACE:
n.Left = walkexpr(n.Left, init)