summaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/ir
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/compile/internal/ir')
-rw-r--r--src/cmd/compile/internal/ir/dump.go2
-rw-r--r--src/cmd/compile/internal/ir/fmt.go402
-rw-r--r--src/cmd/compile/internal/ir/node.go266
-rw-r--r--src/cmd/compile/internal/ir/val.go6
4 files changed, 338 insertions, 338 deletions
diff --git a/src/cmd/compile/internal/ir/dump.go b/src/cmd/compile/internal/ir/dump.go
index 9306366e8a..43d0742c73 100644
--- a/src/cmd/compile/internal/ir/dump.go
+++ b/src/cmd/compile/internal/ir/dump.go
@@ -205,7 +205,7 @@ func (p *dumper) dump(x reflect.Value, depth int) {
isNode := false
if n, ok := x.Interface().(Node); ok {
isNode = true
- p.printf("%s %s {", n.Op.String(), p.addr(x))
+ p.printf("%s %s {", n.op.String(), p.addr(x))
} else {
p.printf("%s {", typ)
}
diff --git a/src/cmd/compile/internal/ir/fmt.go b/src/cmd/compile/internal/ir/fmt.go
index 5dea0880fc..e1e3813368 100644
--- a/src/cmd/compile/internal/ir/fmt.go
+++ b/src/cmd/compile/internal/ir/fmt.go
@@ -351,28 +351,28 @@ func jconvFmt(n *Node, s fmt.State, flag FmtFlag) {
if base.Debug.DumpPtrs != 0 {
fmt.Fprintf(s, " p(%p)", n)
}
- if !short && n.Name != nil && n.Name.Vargen != 0 {
- fmt.Fprintf(s, " g(%d)", n.Name.Vargen)
+ if !short && n.Name() != nil && n.Name().Vargen != 0 {
+ fmt.Fprintf(s, " g(%d)", n.Name().Vargen)
}
- if base.Debug.DumpPtrs != 0 && !short && n.Name != nil && n.Name.Defn != nil {
+ if base.Debug.DumpPtrs != 0 && !short && n.Name() != nil && n.Name().Defn != nil {
// Useful to see where Defn is set and what node it points to
- fmt.Fprintf(s, " defn(%p)", n.Name.Defn)
+ fmt.Fprintf(s, " defn(%p)", n.Name().Defn)
}
- if n.Pos.IsKnown() {
+ if n.Pos().IsKnown() {
pfx := ""
- switch n.Pos.IsStmt() {
+ switch n.Pos().IsStmt() {
case src.PosNotStmt:
pfx = "_" // "-" would be confusing
case src.PosIsStmt:
pfx = "+"
}
- fmt.Fprintf(s, " l(%s%d)", pfx, n.Pos.Line())
+ fmt.Fprintf(s, " l(%s%d)", pfx, n.Pos().Line())
}
- if !short && n.Xoffset != types.BADWIDTH {
- fmt.Fprintf(s, " x(%d)", n.Xoffset)
+ if !short && n.Offset() != types.BADWIDTH {
+ fmt.Fprintf(s, " x(%d)", n.Offset())
}
if n.Class() != 0 {
@@ -405,20 +405,20 @@ func jconvFmt(n *Node, s fmt.State, flag FmtFlag) {
fmt.Fprintf(s, " embedded")
}
- if n.Op == ONAME {
- if n.Name.Addrtaken() {
+ if n.Op() == ONAME {
+ if n.Name().Addrtaken() {
fmt.Fprint(s, " addrtaken")
}
- if n.Name.Assigned() {
+ if n.Name().Assigned() {
fmt.Fprint(s, " assigned")
}
- if n.Name.IsClosureVar() {
+ if n.Name().IsClosureVar() {
fmt.Fprint(s, " closurevar")
}
- if n.Name.Captured() {
+ if n.Name().Captured() {
fmt.Fprint(s, " captured")
}
- if n.Name.IsOutputParamHeapAddr() {
+ if n.Name().IsOutputParamHeapAddr() {
fmt.Fprint(s, " outputparamheapaddr")
}
}
@@ -433,7 +433,7 @@ func jconvFmt(n *Node, s fmt.State, flag FmtFlag) {
fmt.Fprint(s, " hascall")
}
- if !short && n.Name != nil && n.Name.Used() {
+ if !short && n.Name() != nil && n.Name().Used() {
fmt.Fprint(s, " used")
}
}
@@ -899,31 +899,31 @@ func stmtFmt(n *Node, s fmt.State, mode FmtMode) {
// block starting with the init statements.
// if we can just say "for" n->ninit; ... then do so
- simpleinit := n.Ninit.Len() == 1 && n.Ninit.First().Ninit.Len() == 0 && StmtWithInit(n.Op)
+ simpleinit := n.Init().Len() == 1 && n.Init().First().Init().Len() == 0 && StmtWithInit(n.Op())
// otherwise, print the inits as separate statements
- complexinit := n.Ninit.Len() != 0 && !simpleinit && (mode != FErr)
+ complexinit := n.Init().Len() != 0 && !simpleinit && (mode != FErr)
// but if it was for if/for/switch, put in an extra surrounding block to limit the scope
- extrablock := complexinit && StmtWithInit(n.Op)
+ extrablock := complexinit && StmtWithInit(n.Op())
if extrablock {
fmt.Fprint(s, "{")
}
if complexinit {
- mode.Fprintf(s, " %v; ", n.Ninit)
+ mode.Fprintf(s, " %v; ", n.Init())
}
- switch n.Op {
+ switch n.Op() {
case ODCL:
- mode.Fprintf(s, "var %v %v", n.Left.Sym, n.Left.Type)
+ mode.Fprintf(s, "var %v %v", n.Left().Sym(), n.Left().Type())
case ODCLFIELD:
- if n.Sym != nil {
- mode.Fprintf(s, "%v %v", n.Sym, n.Left)
+ if n.Sym() != nil {
+ mode.Fprintf(s, "%v %v", n.Sym(), n.Left())
} else {
- mode.Fprintf(s, "%v", n.Left)
+ mode.Fprintf(s, "%v", n.Left())
}
// Don't export "v = <N>" initializing statements, hope they're always
@@ -931,61 +931,61 @@ func stmtFmt(n *Node, s fmt.State, mode FmtMode) {
// the "v = <N>" again.
case OAS:
if n.Colas() && !complexinit {
- mode.Fprintf(s, "%v := %v", n.Left, n.Right)
+ mode.Fprintf(s, "%v := %v", n.Left(), n.Right())
} else {
- mode.Fprintf(s, "%v = %v", n.Left, n.Right)
+ mode.Fprintf(s, "%v = %v", n.Left(), n.Right())
}
case OASOP:
if n.Implicit() {
if n.SubOp() == OADD {
- mode.Fprintf(s, "%v++", n.Left)
+ mode.Fprintf(s, "%v++", n.Left())
} else {
- mode.Fprintf(s, "%v--", n.Left)
+ mode.Fprintf(s, "%v--", n.Left())
}
break
}
- mode.Fprintf(s, "%v %#v= %v", n.Left, n.SubOp(), n.Right)
+ mode.Fprintf(s, "%v %#v= %v", n.Left(), n.SubOp(), n.Right())
case OAS2:
if n.Colas() && !complexinit {
- mode.Fprintf(s, "%.v := %.v", n.List, n.Rlist)
+ mode.Fprintf(s, "%.v := %.v", n.List(), n.Rlist())
break
}
fallthrough
case OAS2DOTTYPE, OAS2FUNC, OAS2MAPR, OAS2RECV:
- mode.Fprintf(s, "%.v = %v", n.List, n.Right)
+ mode.Fprintf(s, "%.v = %v", n.List(), n.Right())
case ORETURN:
- mode.Fprintf(s, "return %.v", n.List)
+ mode.Fprintf(s, "return %.v", n.List())
case ORETJMP:
- mode.Fprintf(s, "retjmp %v", n.Sym)
+ mode.Fprintf(s, "retjmp %v", n.Sym())
case OINLMARK:
- mode.Fprintf(s, "inlmark %d", n.Xoffset)
+ mode.Fprintf(s, "inlmark %d", n.Offset())
case OGO:
- mode.Fprintf(s, "go %v", n.Left)
+ mode.Fprintf(s, "go %v", n.Left())
case ODEFER:
- mode.Fprintf(s, "defer %v", n.Left)
+ mode.Fprintf(s, "defer %v", n.Left())
case OIF:
if simpleinit {
- mode.Fprintf(s, "if %v; %v { %v }", n.Ninit.First(), n.Left, n.Nbody)
+ mode.Fprintf(s, "if %v; %v { %v }", n.Init().First(), n.Left(), n.Body())
} else {
- mode.Fprintf(s, "if %v { %v }", n.Left, n.Nbody)
+ mode.Fprintf(s, "if %v { %v }", n.Left(), n.Body())
}
- if n.Rlist.Len() != 0 {
- mode.Fprintf(s, " else { %v }", n.Rlist)
+ if n.Rlist().Len() != 0 {
+ mode.Fprintf(s, " else { %v }", n.Rlist())
}
case OFOR, OFORUNTIL:
opname := "for"
- if n.Op == OFORUNTIL {
+ if n.Op() == OFORUNTIL {
opname = "foruntil"
}
if mode == FErr { // TODO maybe only if FmtShort, same below
@@ -995,26 +995,26 @@ func stmtFmt(n *Node, s fmt.State, mode FmtMode) {
fmt.Fprint(s, opname)
if simpleinit {
- mode.Fprintf(s, " %v;", n.Ninit.First())
- } else if n.Right != nil {
+ mode.Fprintf(s, " %v;", n.Init().First())
+ } else if n.Right() != nil {
fmt.Fprint(s, " ;")
}
- if n.Left != nil {
- mode.Fprintf(s, " %v", n.Left)
+ if n.Left() != nil {
+ mode.Fprintf(s, " %v", n.Left())
}
- if n.Right != nil {
- mode.Fprintf(s, "; %v", n.Right)
+ if n.Right() != nil {
+ mode.Fprintf(s, "; %v", n.Right())
} else if simpleinit {
fmt.Fprint(s, ";")
}
- if n.Op == OFORUNTIL && n.List.Len() != 0 {
- mode.Fprintf(s, "; %v", n.List)
+ if n.Op() == OFORUNTIL && n.List().Len() != 0 {
+ mode.Fprintf(s, "; %v", n.List())
}
- mode.Fprintf(s, " { %v }", n.Nbody)
+ mode.Fprintf(s, " { %v }", n.Body())
case ORANGE:
if mode == FErr {
@@ -1022,49 +1022,49 @@ func stmtFmt(n *Node, s fmt.State, mode FmtMode) {
break
}
- if n.List.Len() == 0 {
- mode.Fprintf(s, "for range %v { %v }", n.Right, n.Nbody)
+ if n.List().Len() == 0 {
+ mode.Fprintf(s, "for range %v { %v }", n.Right(), n.Body())
break
}
- mode.Fprintf(s, "for %.v = range %v { %v }", n.List, n.Right, n.Nbody)
+ mode.Fprintf(s, "for %.v = range %v { %v }", n.List(), n.Right(), n.Body())
case OSELECT, OSWITCH:
if mode == FErr {
- mode.Fprintf(s, "%v statement", n.Op)
+ mode.Fprintf(s, "%v statement", n.Op())
break
}
- mode.Fprintf(s, "%#v", n.Op)
+ mode.Fprintf(s, "%#v", n.Op())
if simpleinit {
- mode.Fprintf(s, " %v;", n.Ninit.First())
+ mode.Fprintf(s, " %v;", n.Init().First())
}
- if n.Left != nil {
- mode.Fprintf(s, " %v ", n.Left)
+ if n.Left() != nil {
+ mode.Fprintf(s, " %v ", n.Left())
}
- mode.Fprintf(s, " { %v }", n.List)
+ mode.Fprintf(s, " { %v }", n.List())
case OCASE:
- if n.List.Len() != 0 {
- mode.Fprintf(s, "case %.v", n.List)
+ if n.List().Len() != 0 {
+ mode.Fprintf(s, "case %.v", n.List())
} else {
fmt.Fprint(s, "default")
}
- mode.Fprintf(s, ": %v", n.Nbody)
+ mode.Fprintf(s, ": %v", n.Body())
case OBREAK, OCONTINUE, OGOTO, OFALL:
- if n.Sym != nil {
- mode.Fprintf(s, "%#v %v", n.Op, n.Sym)
+ if n.Sym() != nil {
+ mode.Fprintf(s, "%#v %v", n.Op(), n.Sym())
} else {
- mode.Fprintf(s, "%#v", n.Op)
+ mode.Fprintf(s, "%#v", n.Op())
}
case OEMPTY:
break
case OLABEL:
- mode.Fprintf(s, "%v: ", n.Sym)
+ mode.Fprintf(s, "%v: ", n.Sym())
}
if extrablock {
@@ -1193,8 +1193,8 @@ var OpPrec = []int{
}
func exprFmt(n *Node, s fmt.State, prec int, mode FmtMode) {
- for n != nil && n.Implicit() && (n.Op == ODEREF || n.Op == OADDR) {
- n = n.Left
+ for n != nil && n.Implicit() && (n.Op() == ODEREF || n.Op() == OADDR) {
+ n = n.Left()
}
if n == nil {
@@ -1202,8 +1202,8 @@ func exprFmt(n *Node, s fmt.State, prec int, mode FmtMode) {
return
}
- nprec := OpPrec[n.Op]
- if n.Op == OTYPE && n.Sym != nil {
+ nprec := OpPrec[n.Op()]
+ if n.Op() == OTYPE && n.Sym() != nil {
nprec = 8
}
@@ -1212,38 +1212,38 @@ func exprFmt(n *Node, s fmt.State, prec int, mode FmtMode) {
return
}
- switch n.Op {
+ switch n.Op() {
case OPAREN:
- mode.Fprintf(s, "(%v)", n.Left)
+ mode.Fprintf(s, "(%v)", n.Left())
case ONIL:
fmt.Fprint(s, "nil")
case OLITERAL: // this is a bit of a mess
if mode == FErr {
- if n.Orig != nil && n.Orig != n {
- exprFmt(n.Orig, s, prec, mode)
+ if n.Orig() != nil && n.Orig() != n {
+ exprFmt(n.Orig(), s, prec, mode)
return
}
- if n.Sym != nil {
- fmt.Fprint(s, smodeString(n.Sym, mode))
+ if n.Sym() != nil {
+ fmt.Fprint(s, smodeString(n.Sym(), mode))
return
}
}
needUnparen := false
- if n.Type != nil && !n.Type.IsUntyped() {
+ if n.Type() != nil && !n.Type().IsUntyped() {
// Need parens when type begins with what might
// be misinterpreted as a unary operator: * or <-.
- if n.Type.IsPtr() || (n.Type.IsChan() && n.Type.ChanDir() == types.Crecv) {
- mode.Fprintf(s, "(%v)(", n.Type)
+ if n.Type().IsPtr() || (n.Type().IsChan() && n.Type().ChanDir() == types.Crecv) {
+ mode.Fprintf(s, "(%v)(", n.Type())
} else {
- mode.Fprintf(s, "%v(", n.Type)
+ mode.Fprintf(s, "%v(", n.Type())
}
needUnparen = true
}
- if n.Type == types.UntypedRune {
+ if n.Type() == types.UntypedRune {
switch x, ok := constant.Int64Val(n.Val()); {
case !ok:
fallthrough
@@ -1270,44 +1270,44 @@ func exprFmt(n *Node, s fmt.State, prec int, mode FmtMode) {
case ONAME:
// Special case: name used as local variable in export.
// _ becomes ~b%d internally; print as _ for export
- if mode == FErr && n.Sym != nil && n.Sym.Name[0] == '~' && n.Sym.Name[1] == 'b' {
+ if mode == FErr && n.Sym() != nil && n.Sym().Name[0] == '~' && n.Sym().Name[1] == 'b' {
fmt.Fprint(s, "_")
return
}
fallthrough
case OPACK, ONONAME, OMETHEXPR:
- fmt.Fprint(s, smodeString(n.Sym, mode))
+ fmt.Fprint(s, smodeString(n.Sym(), mode))
case OTYPE:
- if n.Type == nil && n.Sym != nil {
- fmt.Fprint(s, smodeString(n.Sym, mode))
+ if n.Type() == nil && n.Sym() != nil {
+ fmt.Fprint(s, smodeString(n.Sym(), mode))
return
}
- mode.Fprintf(s, "%v", n.Type)
+ mode.Fprintf(s, "%v", n.Type())
case OTARRAY:
- if n.Left != nil {
- mode.Fprintf(s, "[%v]%v", n.Left, n.Right)
+ if n.Left() != nil {
+ mode.Fprintf(s, "[%v]%v", n.Left(), n.Right())
return
}
- mode.Fprintf(s, "[]%v", n.Right) // happens before typecheck
+ mode.Fprintf(s, "[]%v", n.Right()) // happens before typecheck
case OTMAP:
- mode.Fprintf(s, "map[%v]%v", n.Left, n.Right)
+ mode.Fprintf(s, "map[%v]%v", n.Left(), n.Right())
case OTCHAN:
switch n.TChanDir() {
case types.Crecv:
- mode.Fprintf(s, "<-chan %v", n.Left)
+ mode.Fprintf(s, "<-chan %v", n.Left())
case types.Csend:
- mode.Fprintf(s, "chan<- %v", n.Left)
+ mode.Fprintf(s, "chan<- %v", n.Left())
default:
- if n.Left != nil && n.Left.Op == OTCHAN && n.Left.Sym == nil && n.Left.TChanDir() == types.Crecv {
- mode.Fprintf(s, "chan (%v)", n.Left)
+ if n.Left() != nil && n.Left().Op() == OTCHAN && n.Left().Sym() == nil && n.Left().TChanDir() == types.Crecv {
+ mode.Fprintf(s, "chan (%v)", n.Left())
} else {
- mode.Fprintf(s, "chan %v", n.Left)
+ mode.Fprintf(s, "chan %v", n.Left())
}
}
@@ -1325,11 +1325,11 @@ func exprFmt(n *Node, s fmt.State, prec int, mode FmtMode) {
fmt.Fprint(s, "func literal")
return
}
- if n.Nbody.Len() != 0 {
- mode.Fprintf(s, "%v { %v }", n.Type, n.Nbody)
+ if n.Body().Len() != 0 {
+ mode.Fprintf(s, "%v { %v }", n.Type(), n.Body())
return
}
- mode.Fprintf(s, "%v { %v }", n.Type, n.Func.Decl.Nbody)
+ mode.Fprintf(s, "%v { %v }", n.Type(), n.Func().Decl.Body())
case OCOMPLIT:
if mode == FErr {
@@ -1337,75 +1337,75 @@ func exprFmt(n *Node, s fmt.State, prec int, mode FmtMode) {
mode.Fprintf(s, "... argument")
return
}
- if n.Right != nil {
- mode.Fprintf(s, "%v{%s}", n.Right, ellipsisIf(n.List.Len() != 0))
+ if n.Right() != nil {
+ mode.Fprintf(s, "%v{%s}", n.Right(), ellipsisIf(n.List().Len() != 0))
return
}
fmt.Fprint(s, "composite literal")
return
}
- mode.Fprintf(s, "(%v{ %.v })", n.Right, n.List)
+ mode.Fprintf(s, "(%v{ %.v })", n.Right(), n.List())
case OPTRLIT:
- mode.Fprintf(s, "&%v", n.Left)
+ mode.Fprintf(s, "&%v", n.Left())
case OSTRUCTLIT, OARRAYLIT, OSLICELIT, OMAPLIT:
if mode == FErr {
- mode.Fprintf(s, "%v{%s}", n.Type, ellipsisIf(n.List.Len() != 0))
+ mode.Fprintf(s, "%v{%s}", n.Type(), ellipsisIf(n.List().Len() != 0))
return
}
- mode.Fprintf(s, "(%v{ %.v })", n.Type, n.List)
+ mode.Fprintf(s, "(%v{ %.v })", n.Type(), n.List())
case OKEY:
- if n.Left != nil && n.Right != nil {
- mode.Fprintf(s, "%v:%v", n.Left, n.Right)
+ if n.Left() != nil && n.Right() != nil {
+ mode.Fprintf(s, "%v:%v", n.Left(), n.Right())
return
}
- if n.Left == nil && n.Right != nil {
- mode.Fprintf(s, ":%v", n.Right)
+ if n.Left() == nil && n.Right() != nil {
+ mode.Fprintf(s, ":%v", n.Right())
return
}
- if n.Left != nil && n.Right == nil {
- mode.Fprintf(s, "%v:", n.Left)
+ if n.Left() != nil && n.Right() == nil {
+ mode.Fprintf(s, "%v:", n.Left())
return
}
fmt.Fprint(s, ":")
case OSTRUCTKEY:
- mode.Fprintf(s, "%v:%v", n.Sym, n.Left)
+ mode.Fprintf(s, "%v:%v", n.Sym(), n.Left())
case OCALLPART:
- exprFmt(n.Left, s, nprec, mode)
- if n.Right == nil || n.Right.Sym == nil {
+ exprFmt(n.Left(), s, nprec, mode)
+ if n.Right() == nil || n.Right().Sym() == nil {
fmt.Fprint(s, ".<nil>")
return
}
- mode.Fprintf(s, ".%0S", n.Right.Sym)
+ mode.Fprintf(s, ".%0S", n.Right().Sym())
case OXDOT, ODOT, ODOTPTR, ODOTINTER, ODOTMETH:
- exprFmt(n.Left, s, nprec, mode)
- if n.Sym == nil {
+ exprFmt(n.Left(), s, nprec, mode)
+ if n.Sym() == nil {
fmt.Fprint(s, ".<nil>")
return
}
- mode.Fprintf(s, ".%0S", n.Sym)
+ mode.Fprintf(s, ".%0S", n.Sym())
case ODOTTYPE, ODOTTYPE2:
- exprFmt(n.Left, s, nprec, mode)
- if n.Right != nil {
- mode.Fprintf(s, ".(%v)", n.Right)
+ exprFmt(n.Left(), s, nprec, mode)
+ if n.Right() != nil {
+ mode.Fprintf(s, ".(%v)", n.Right())
return
}
- mode.Fprintf(s, ".(%v)", n.Type)
+ mode.Fprintf(s, ".(%v)", n.Type())
case OINDEX, OINDEXMAP:
- exprFmt(n.Left, s, nprec, mode)
- mode.Fprintf(s, "[%v]", n.Right)
+ exprFmt(n.Left(), s, nprec, mode)
+ mode.Fprintf(s, "[%v]", n.Right())
case OSLICE, OSLICESTR, OSLICEARR, OSLICE3, OSLICE3ARR:
- exprFmt(n.Left, s, nprec, mode)
+ exprFmt(n.Left(), s, nprec, mode)
fmt.Fprint(s, "[")
low, high, max := n.SliceBounds()
if low != nil {
@@ -1415,7 +1415,7 @@ func exprFmt(n *Node, s fmt.State, prec int, mode FmtMode) {
if high != nil {
fmt.Fprint(s, modeString(high, mode))
}
- if n.Op.IsSlice3() {
+ if n.Op().IsSlice3() {
fmt.Fprint(s, ":")
if max != nil {
fmt.Fprint(s, modeString(max, mode))
@@ -1424,16 +1424,16 @@ func exprFmt(n *Node, s fmt.State, prec int, mode FmtMode) {
fmt.Fprint(s, "]")
case OSLICEHEADER:
- if n.List.Len() != 2 {
- base.Fatalf("bad OSLICEHEADER list length %d", n.List.Len())
+ if n.List().Len() != 2 {
+ base.Fatalf("bad OSLICEHEADER list length %d", n.List().Len())
}
- mode.Fprintf(s, "sliceheader{%v,%v,%v}", n.Left, n.List.First(), n.List.Second())
+ mode.Fprintf(s, "sliceheader{%v,%v,%v}", n.Left(), n.List().First(), n.List().Second())
case OCOMPLEX, OCOPY:
- if n.Left != nil {
- mode.Fprintf(s, "%#v(%v, %v)", n.Op, n.Left, n.Right)
+ if n.Left() != nil {
+ mode.Fprintf(s, "%#v(%v, %v)", n.Op(), n.Left(), n.Right())
} else {
- mode.Fprintf(s, "%#v(%.v)", n.Op, n.List)
+ mode.Fprintf(s, "%#v(%.v)", n.Op(), n.List())
}
case OCONV,
@@ -1444,15 +1444,15 @@ func exprFmt(n *Node, s fmt.State, prec int, mode FmtMode) {
OSTR2BYTES,
OSTR2RUNES,
ORUNESTR:
- if n.Type == nil || n.Type.Sym == nil {
- mode.Fprintf(s, "(%v)", n.Type)
+ if n.Type() == nil || n.Type().Sym == nil {
+ mode.Fprintf(s, "(%v)", n.Type())
} else {
- mode.Fprintf(s, "%v", n.Type)
+ mode.Fprintf(s, "%v", n.Type())
}
- if n.Left != nil {
- mode.Fprintf(s, "(%v)", n.Left)
+ if n.Left() != nil {
+ mode.Fprintf(s, "(%v)", n.Left())
} else {
- mode.Fprintf(s, "(%.v)", n.List)
+ mode.Fprintf(s, "(%.v)", n.List())
}
case OREAL,
@@ -1471,49 +1471,49 @@ func exprFmt(n *Node, s fmt.State, prec int, mode FmtMode) {
OSIZEOF,
OPRINT,
OPRINTN:
- if n.Left != nil {
- mode.Fprintf(s, "%#v(%v)", n.Op, n.Left)
+ if n.Left() != nil {
+ mode.Fprintf(s, "%#v(%v)", n.Op(), n.Left())
return
}
if n.IsDDD() {
- mode.Fprintf(s, "%#v(%.v...)", n.Op, n.List)
+ mode.Fprintf(s, "%#v(%.v...)", n.Op(), n.List())
return
}
- mode.Fprintf(s, "%#v(%.v)", n.Op, n.List)
+ mode.Fprintf(s, "%#v(%.v)", n.Op(), n.List())
case OCALL, OCALLFUNC, OCALLINTER, OCALLMETH, OGETG:
- exprFmt(n.Left, s, nprec, mode)
+ exprFmt(n.Left(), s, nprec, mode)
if n.IsDDD() {
- mode.Fprintf(s, "(%.v...)", n.List)
+ mode.Fprintf(s, "(%.v...)", n.List())
return
}
- mode.Fprintf(s, "(%.v)", n.List)
+ mode.Fprintf(s, "(%.v)", n.List())
case OMAKEMAP, OMAKECHAN, OMAKESLICE:
- if n.List.Len() != 0 { // pre-typecheck
- mode.Fprintf(s, "make(%v, %.v)", n.Type, n.List)
+ if n.List().Len() != 0 { // pre-typecheck
+ mode.Fprintf(s, "make(%v, %.v)", n.Type(), n.List())
return
}
- if n.Right != nil {
- mode.Fprintf(s, "make(%v, %v, %v)", n.Type, n.Left, n.Right)
+ if n.Right() != nil {
+ mode.Fprintf(s, "make(%v, %v, %v)", n.Type(), n.Left(), n.Right())
return
}
- if n.Left != nil && (n.Op == OMAKESLICE || !n.Left.Type.IsUntyped()) {
- mode.Fprintf(s, "make(%v, %v)", n.Type, n.Left)
+ if n.Left() != nil && (n.Op() == OMAKESLICE || !n.Left().Type().IsUntyped()) {
+ mode.Fprintf(s, "make(%v, %v)", n.Type(), n.Left())
return
}
- mode.Fprintf(s, "make(%v)", n.Type)
+ mode.Fprintf(s, "make(%v)", n.Type())
case OMAKESLICECOPY:
- mode.Fprintf(s, "makeslicecopy(%v, %v, %v)", n.Type, n.Left, n.Right)
+ mode.Fprintf(s, "makeslicecopy(%v, %v, %v)", n.Type(), n.Left(), n.Right())
case OPLUS, ONEG, OADDR, OBITNOT, ODEREF, ONOT, ORECV:
// Unary
- mode.Fprintf(s, "%#v", n.Op)
- if n.Left != nil && n.Left.Op == n.Op {
+ mode.Fprintf(s, "%#v", n.Op())
+ if n.Left() != nil && n.Left().Op() == n.Op() {
fmt.Fprint(s, " ")
}
- exprFmt(n.Left, s, nprec+1, mode)
+ exprFmt(n.Left(), s, nprec+1, mode)
// Binary
case OADD,
@@ -1536,12 +1536,12 @@ func exprFmt(n *Node, s fmt.State, prec int, mode FmtMode) {
OSEND,
OSUB,
OXOR:
- exprFmt(n.Left, s, nprec, mode)
- mode.Fprintf(s, " %#v ", n.Op)
- exprFmt(n.Right, s, nprec+1, mode)
+ exprFmt(n.Left(), s, nprec, mode)
+ mode.Fprintf(s, " %#v ", n.Op())
+ exprFmt(n.Right(), s, nprec+1, mode)
case OADDSTR:
- for i, n1 := range n.List.Slice() {
+ for i, n1 := range n.List().Slice() {
if i != 0 {
fmt.Fprint(s, " + ")
}
@@ -1550,23 +1550,23 @@ func exprFmt(n *Node, s fmt.State, prec int, mode FmtMode) {
case ODDD:
mode.Fprintf(s, "...")
default:
- mode.Fprintf(s, "<node %v>", n.Op)
+ mode.Fprintf(s, "<node %v>", n.Op())
}
}
func nodeFmt(n *Node, s fmt.State, flag FmtFlag, mode FmtMode) {
- t := n.Type
+ t := n.Type()
// We almost always want the original.
// TODO(gri) Why the special case for OLITERAL?
- if n.Op != OLITERAL && n.Orig != nil {
- n = n.Orig
+ if n.Op() != OLITERAL && n.Orig() != nil {
+ n = n.Orig()
}
if flag&FmtLong != 0 && t != nil {
if t.Etype == types.TNIL {
fmt.Fprint(s, "nil")
- } else if n.Op == ONAME && n.Name.AutoTemp() {
+ } else if n.Op() == ONAME && n.Name().AutoTemp() {
mode.Fprintf(s, "%v value", t)
} else {
mode.Fprintf(s, "%v (type %v)", n, t)
@@ -1576,7 +1576,7 @@ func nodeFmt(n *Node, s fmt.State, flag FmtFlag, mode FmtMode) {
// TODO inlining produces expressions with ninits. we can't print these yet.
- if OpPrec[n.Op] < 0 {
+ if OpPrec[n.Op()] < 0 {
stmtFmt(n, s, mode)
return
}
@@ -1594,82 +1594,82 @@ func nodeDumpFmt(n *Node, s fmt.State, flag FmtFlag, mode FmtMode) {
return
}
- if n.Ninit.Len() != 0 {
- mode.Fprintf(s, "%v-init%v", n.Op, n.Ninit)
+ if n.Init().Len() != 0 {
+ mode.Fprintf(s, "%v-init%v", n.Op(), n.Init())
indent(s)
}
}
- switch n.Op {
+ switch n.Op() {
default:
- mode.Fprintf(s, "%v%j", n.Op, n)
+ mode.Fprintf(s, "%v%j", n.Op(), n)
case OLITERAL:
- mode.Fprintf(s, "%v-%v%j", n.Op, n.Val(), n)
+ mode.Fprintf(s, "%v-%v%j", n.Op(), n.Val(), n)
case ONAME, ONONAME, OMETHEXPR:
- if n.Sym != nil {
- mode.Fprintf(s, "%v-%v%j", n.Op, n.Sym, n)
+ if n.Sym() != nil {
+ mode.Fprintf(s, "%v-%v%j", n.Op(), n.Sym(), n)
} else {
- mode.Fprintf(s, "%v%j", n.Op, n)
+ mode.Fprintf(s, "%v%j", n.Op(), n)
}
- if recur && n.Type == nil && n.Name != nil && n.Name.Param != nil && n.Name.Param.Ntype != nil {
+ if recur && n.Type() == nil && n.Name() != nil && n.Name().Param != nil && n.Name().Param.Ntype != nil {
indent(s)
- mode.Fprintf(s, "%v-ntype%v", n.Op, n.Name.Param.Ntype)
+ mode.Fprintf(s, "%v-ntype%v", n.Op(), n.Name().Param.Ntype)
}
case OASOP:
- mode.Fprintf(s, "%v-%v%j", n.Op, n.SubOp(), n)
+ mode.Fprintf(s, "%v-%v%j", n.Op(), n.SubOp(), n)
case OTYPE:
- mode.Fprintf(s, "%v %v%j type=%v", n.Op, n.Sym, n, n.Type)
- if recur && n.Type == nil && n.Name != nil && n.Name.Param != nil && n.Name.Param.Ntype != nil {
+ mode.Fprintf(s, "%v %v%j type=%v", n.Op(), n.Sym(), n, n.Type())
+ if recur && n.Type() == nil && n.Name() != nil && n.Name().Param != nil && n.Name().Param.Ntype != nil {
indent(s)
- mode.Fprintf(s, "%v-ntype%v", n.Op, n.Name.Param.Ntype)
+ mode.Fprintf(s, "%v-ntype%v", n.Op(), n.Name().Param.Ntype)
}
}
- if n.Op == OCLOSURE && n.Func.Decl != nil && n.Func.Nname.Sym != nil {
- mode.Fprintf(s, " fnName %v", n.Func.Nname.Sym)
+ if n.Op() == OCLOSURE && n.Func().Decl != nil && n.Func().Nname.Sym() != nil {
+ mode.Fprintf(s, " fnName %v", n.Func().Nname.Sym())
}
- if n.Sym != nil && n.Op != ONAME {
- mode.Fprintf(s, " %v", n.Sym)
+ if n.Sym() != nil && n.Op() != ONAME {
+ mode.Fprintf(s, " %v", n.Sym())
}
- if n.Type != nil {
- mode.Fprintf(s, " %v", n.Type)
+ if n.Type() != nil {
+ mode.Fprintf(s, " %v", n.Type())
}
if recur {
- if n.Left != nil {
- mode.Fprintf(s, "%v", n.Left)
+ if n.Left() != nil {
+ mode.Fprintf(s, "%v", n.Left())
}
- if n.Right != nil {
- mode.Fprintf(s, "%v", n.Right)
+ if n.Right() != nil {
+ mode.Fprintf(s, "%v", n.Right())
}
- if n.Op == OCLOSURE && n.Func != nil && n.Func.Decl != nil && n.Func.Decl.Nbody.Len() != 0 {
+ if n.Op() == OCLOSURE && n.Func() != nil && n.Func().Decl != nil && n.Func().Decl.Body().Len() != 0 {
indent(s)
// The function associated with a closure
- mode.Fprintf(s, "%v-clofunc%v", n.Op, n.Func.Decl)
+ mode.Fprintf(s, "%v-clofunc%v", n.Op(), n.Func().Decl)
}
- if n.Op == ODCLFUNC && n.Func != nil && n.Func.Dcl != nil && len(n.Func.Dcl) != 0 {
+ if n.Op() == ODCLFUNC && n.Func() != nil && n.Func().Dcl != nil && len(n.Func().Dcl) != 0 {
indent(s)
// The dcls for a func or closure
- mode.Fprintf(s, "%v-dcl%v", n.Op, AsNodes(n.Func.Dcl))
+ mode.Fprintf(s, "%v-dcl%v", n.Op(), AsNodes(n.Func().Dcl))
}
- if n.List.Len() != 0 {
+ if n.List().Len() != 0 {
indent(s)
- mode.Fprintf(s, "%v-list%v", n.Op, n.List)
+ mode.Fprintf(s, "%v-list%v", n.Op(), n.List())
}
- if n.Rlist.Len() != 0 {
+ if n.Rlist().Len() != 0 {
indent(s)
- mode.Fprintf(s, "%v-rlist%v", n.Op, n.Rlist)
+ mode.Fprintf(s, "%v-rlist%v", n.Op(), n.Rlist())
}
- if n.Nbody.Len() != 0 {
+ if n.Body().Len() != 0 {
indent(s)
- mode.Fprintf(s, "%v-body%v", n.Op, n.Nbody)
+ mode.Fprintf(s, "%v-body%v", n.Op(), n.Body())
}
}
}
@@ -1910,5 +1910,5 @@ func InstallTypeFormats() {
// Line returns n's position as a string. If n has been inlined,
// it uses the outermost position where n has been inlined.
func Line(n *Node) string {
- return base.FmtPos(n.Pos)
+ return base.FmtPos(n.Pos())
}
diff --git a/src/cmd/compile/internal/ir/node.go b/src/cmd/compile/internal/ir/node.go
index cac9e6eb3e..dce1bfdbef 100644
--- a/src/cmd/compile/internal/ir/node.go
+++ b/src/cmd/compile/internal/ir/node.go
@@ -26,25 +26,25 @@ import (
type Node struct {
// Tree structure.
// Generic recursive walks should follow these fields.
- Left *Node
- Right *Node
- Ninit Nodes
- Nbody Nodes
- List Nodes
- Rlist Nodes
+ left *Node
+ right *Node
+ init Nodes
+ body Nodes
+ list Nodes
+ rlist Nodes
// most nodes
- Type *types.Type
- Orig *Node // original form, for printing, and tracking copies of ONAMEs
+ typ *types.Type
+ orig *Node // original form, for printing, and tracking copies of ONAMEs
// func
- Func *Func
+ fn *Func
// ONAME, OTYPE, OPACK, OLABEL, some OLITERAL
- Name *Name
+ name *Name
- Sym *types.Sym // various
- E interface{} // Opt or Val, see methods below
+ sym *types.Sym // various
+ e interface{} // Opt or Val, see methods below
// Various. Usually an offset into a struct. For example:
// - ONAME nodes that refer to local variables use it to identify their stack frame position.
@@ -54,85 +54,85 @@ type Node struct {
// - OINLMARK stores an index into the inlTree data structure.
// - OCLOSURE uses it to store ambient iota value, if any.
// Possibly still more uses. If you find any, document them.
- Xoffset int64
+ offset int64
- Pos src.XPos
+ pos src.XPos
flags bitset32
- Esc uint16 // EscXXX
+ esc uint16 // EscXXX
- Op Op
+ op Op
aux uint8
}
-func (n *Node) GetLeft() *Node { return n.Left }
-func (n *Node) SetLeft(x *Node) { n.Left = x }
-func (n *Node) GetRight() *Node { return n.Right }
-func (n *Node) SetRight(x *Node) { n.Right = x }
-func (n *Node) GetOrig() *Node { return n.Orig }
-func (n *Node) SetOrig(x *Node) { n.Orig = x }
-func (n *Node) GetType() *types.Type { return n.Type }
-func (n *Node) SetType(x *types.Type) { n.Type = x }
-func (n *Node) GetFunc() *Func { return n.Func }
-func (n *Node) SetFunc(x *Func) { n.Func = x }
-func (n *Node) GetName() *Name { return n.Name }
-func (n *Node) SetName(x *Name) { n.Name = x }
-func (n *Node) GetSym() *types.Sym { return n.Sym }
-func (n *Node) SetSym(x *types.Sym) { n.Sym = x }
-func (n *Node) GetPos() src.XPos { return n.Pos }
-func (n *Node) SetPos(x src.XPos) { n.Pos = x }
-func (n *Node) GetXoffset() int64 { return n.Xoffset }
-func (n *Node) SetXoffset(x int64) { n.Xoffset = x }
-func (n *Node) GetEsc() uint16 { return n.Esc }
-func (n *Node) SetEsc(x uint16) { n.Esc = x }
-func (n *Node) GetOp() Op { return n.Op }
-func (n *Node) SetOp(x Op) { n.Op = x }
-func (n *Node) GetNinit() Nodes { return n.Ninit }
-func (n *Node) SetNinit(x Nodes) { n.Ninit = x }
-func (n *Node) PtrNinit() *Nodes { return &n.Ninit }
-func (n *Node) GetNbody() Nodes { return n.Nbody }
-func (n *Node) SetNbody(x Nodes) { n.Nbody = x }
-func (n *Node) PtrNbody() *Nodes { return &n.Nbody }
-func (n *Node) GetList() Nodes { return n.List }
-func (n *Node) SetList(x Nodes) { n.List = x }
-func (n *Node) PtrList() *Nodes { return &n.List }
-func (n *Node) GetRlist() Nodes { return n.Rlist }
-func (n *Node) SetRlist(x Nodes) { n.Rlist = x }
-func (n *Node) PtrRlist() *Nodes { return &n.Rlist }
+func (n *Node) Left() *Node { return n.left }
+func (n *Node) SetLeft(x *Node) { n.left = x }
+func (n *Node) Right() *Node { return n.right }
+func (n *Node) SetRight(x *Node) { n.right = x }
+func (n *Node) Orig() *Node { return n.orig }
+func (n *Node) SetOrig(x *Node) { n.orig = x }
+func (n *Node) Type() *types.Type { return n.typ }
+func (n *Node) SetType(x *types.Type) { n.typ = x }
+func (n *Node) Func() *Func { return n.fn }
+func (n *Node) SetFunc(x *Func) { n.fn = x }
+func (n *Node) Name() *Name { return n.name }
+func (n *Node) SetName(x *Name) { n.name = x }
+func (n *Node) Sym() *types.Sym { return n.sym }
+func (n *Node) SetSym(x *types.Sym) { n.sym = x }
+func (n *Node) Pos() src.XPos { return n.pos }
+func (n *Node) SetPos(x src.XPos) { n.pos = x }
+func (n *Node) Offset() int64 { return n.offset }
+func (n *Node) SetOffset(x int64) { n.offset = x }
+func (n *Node) Esc() uint16 { return n.esc }
+func (n *Node) SetEsc(x uint16) { n.esc = x }
+func (n *Node) Op() Op { return n.op }
+func (n *Node) SetOp(x Op) { n.op = x }
+func (n *Node) Init() Nodes { return n.init }
+func (n *Node) SetInit(x Nodes) { n.init = x }
+func (n *Node) PtrInit() *Nodes { return &n.init }
+func (n *Node) Body() Nodes { return n.body }
+func (n *Node) SetBody(x Nodes) { n.body = x }
+func (n *Node) PtrBody() *Nodes { return &n.body }
+func (n *Node) List() Nodes { return n.list }
+func (n *Node) SetList(x Nodes) { n.list = x }
+func (n *Node) PtrList() *Nodes { return &n.list }
+func (n *Node) Rlist() Nodes { return n.rlist }
+func (n *Node) SetRlist(x Nodes) { n.rlist = x }
+func (n *Node) PtrRlist() *Nodes { return &n.rlist }
func (n *Node) ResetAux() {
n.aux = 0
}
func (n *Node) SubOp() Op {
- switch n.Op {
+ switch n.Op() {
case OASOP, ONAME:
default:
- base.Fatalf("unexpected op: %v", n.Op)
+ base.Fatalf("unexpected op: %v", n.Op())
}
return Op(n.aux)
}
func (n *Node) SetSubOp(op Op) {
- switch n.Op {
+ switch n.Op() {
case OASOP, ONAME:
default:
- base.Fatalf("unexpected op: %v", n.Op)
+ base.Fatalf("unexpected op: %v", n.Op())
}
n.aux = uint8(op)
}
func (n *Node) IndexMapLValue() bool {
- if n.Op != OINDEXMAP {
- base.Fatalf("unexpected op: %v", n.Op)
+ if n.Op() != OINDEXMAP {
+ base.Fatalf("unexpected op: %v", n.Op())
}
return n.aux != 0
}
func (n *Node) SetIndexMapLValue(b bool) {
- if n.Op != OINDEXMAP {
- base.Fatalf("unexpected op: %v", n.Op)
+ if n.Op() != OINDEXMAP {
+ base.Fatalf("unexpected op: %v", n.Op())
}
if b {
n.aux = 1
@@ -142,31 +142,31 @@ func (n *Node) SetIndexMapLValue(b bool) {
}
func (n *Node) TChanDir() types.ChanDir {
- if n.Op != OTCHAN {
- base.Fatalf("unexpected op: %v", n.Op)
+ if n.Op() != OTCHAN {
+ base.Fatalf("unexpected op: %v", n.Op())
}
return types.ChanDir(n.aux)
}
func (n *Node) SetTChanDir(dir types.ChanDir) {
- if n.Op != OTCHAN {
- base.Fatalf("unexpected op: %v", n.Op)
+ if n.Op() != OTCHAN {
+ base.Fatalf("unexpected op: %v", n.Op())
}
n.aux = uint8(dir)
}
func IsSynthetic(n *Node) bool {
- name := n.Sym.Name
+ name := n.Sym().Name
return name[0] == '.' || name[0] == '~'
}
// IsAutoTmp indicates if n was created by the compiler as a temporary,
// based on the setting of the .AutoTemp flag in n's Name.
func IsAutoTmp(n *Node) bool {
- if n == nil || n.Op != ONAME {
+ if n == nil || n.Op() != ONAME {
return false
}
- return n.Name.AutoTemp()
+ return n.Name().AutoTemp()
}
const (
@@ -229,8 +229,8 @@ func (n *Node) SetColas(b bool) { n.flags.set(nodeColas, b) }
func (n *Node) SetTransient(b bool) { n.flags.set(nodeTransient, b) }
func (n *Node) SetHasCall(b bool) { n.flags.set(nodeHasCall, b) }
func (n *Node) SetLikely(b bool) { n.flags.set(nodeLikely, b) }
-func (n *Node) SetHasVal(b bool) { n.flags.set(nodeHasVal, b) }
-func (n *Node) SetHasOpt(b bool) { n.flags.set(nodeHasOpt, b) }
+func (n *Node) setHasVal(b bool) { n.flags.set(nodeHasVal, b) }
+func (n *Node) setHasOpt(b bool) { n.flags.set(nodeHasOpt, b) }
func (n *Node) SetEmbedded(b bool) { n.flags.set(nodeEmbedded, b) }
// MarkNonNil marks a pointer n as being guaranteed non-nil,
@@ -238,8 +238,8 @@ func (n *Node) SetEmbedded(b bool) { n.flags.set(nodeEmbedded, b) }
// During conversion to SSA, non-nil pointers won't have nil checks
// inserted before dereferencing. See state.exprPtr.
func (n *Node) MarkNonNil() {
- if !n.Type.IsPtr() && !n.Type.IsUnsafePtr() {
- base.Fatalf("MarkNonNil(%v), type %v", n, n.Type)
+ if !n.Type().IsPtr() && !n.Type().IsUnsafePtr() {
+ base.Fatalf("MarkNonNil(%v), type %v", n, n.Type())
}
n.flags.set(nodeNonNil, true)
}
@@ -249,7 +249,7 @@ func (n *Node) MarkNonNil() {
// When n is a dereferencing operation, n does not need nil checks.
// When n is a makeslice+copy operation, n does not need length and cap checks.
func (n *Node) SetBounded(b bool) {
- switch n.Op {
+ switch n.Op() {
case OINDEX, OSLICE, OSLICEARR, OSLICE3, OSLICE3ARR, OSLICESTR:
// No bounds checks needed.
case ODOTPTR, ODEREF:
@@ -265,14 +265,14 @@ func (n *Node) SetBounded(b bool) {
// MarkReadonly indicates that n is an ONAME with readonly contents.
func (n *Node) MarkReadonly() {
- if n.Op != ONAME {
- base.Fatalf("Node.MarkReadonly %v", n.Op)
+ if n.Op() != ONAME {
+ base.Fatalf("Node.MarkReadonly %v", n.Op())
}
- n.Name.SetReadonly(true)
+ n.Name().SetReadonly(true)
// Mark the linksym as readonly immediately
// so that the SSA backend can use this information.
// It will be overridden later during dumpglobls.
- n.Sym.Linksym().Type = objabi.SRODATA
+ n.Sym().Linksym().Type = objabi.SRODATA
}
// Val returns the constant.Value for the node.
@@ -280,7 +280,7 @@ func (n *Node) Val() constant.Value {
if !n.HasVal() {
return constant.MakeUnknown()
}
- return *n.E.(*constant.Value)
+ return *n.e.(*constant.Value)
}
// SetVal sets the constant.Value for the node,
@@ -291,11 +291,11 @@ func (n *Node) SetVal(v constant.Value) {
Dump("have Opt", n)
base.Fatalf("have Opt")
}
- if n.Op == OLITERAL {
- AssertValidTypeForConst(n.Type, v)
+ if n.Op() == OLITERAL {
+ AssertValidTypeForConst(n.Type(), v)
}
- n.SetHasVal(true)
- n.E = &v
+ n.setHasVal(true)
+ n.e = &v
}
// Opt returns the optimizer data for the node.
@@ -303,7 +303,7 @@ func (n *Node) Opt() interface{} {
if !n.HasOpt() {
return nil
}
- return n.E
+ return n.e
}
// SetOpt sets the optimizer data for the node, which must not have been used with SetVal.
@@ -311,8 +311,8 @@ func (n *Node) Opt() interface{} {
func (n *Node) SetOpt(x interface{}) {
if x == nil {
if n.HasOpt() {
- n.SetHasOpt(false)
- n.E = nil
+ n.setHasOpt(false)
+ n.e = nil
}
return
}
@@ -321,22 +321,22 @@ func (n *Node) SetOpt(x interface{}) {
Dump("have Val", n)
base.Fatalf("have Val")
}
- n.SetHasOpt(true)
- n.E = x
+ n.setHasOpt(true)
+ n.e = x
}
func (n *Node) Iota() int64 {
- return n.Xoffset
+ return n.Offset()
}
func (n *Node) SetIota(x int64) {
- n.Xoffset = x
+ n.SetOffset(x)
}
// mayBeShared reports whether n may occur in multiple places in the AST.
// Extra care must be taken when mutating such a node.
func MayBeShared(n *Node) bool {
- switch n.Op {
+ switch n.Op() {
case ONAME, OLITERAL, ONIL, OTYPE:
return true
}
@@ -345,10 +345,10 @@ func MayBeShared(n *Node) bool {
// funcname returns the name (without the package) of the function n.
func FuncName(n *Node) string {
- if n == nil || n.Func == nil || n.Func.Nname == nil {
+ if n == nil || n.Func() == nil || n.Func().Nname == nil {
return "<nil>"
}
- return n.Func.Nname.Sym.Name
+ return n.Func().Nname.Sym().Name
}
// pkgFuncName returns the name of the function referenced by n, with package prepended.
@@ -360,13 +360,13 @@ func PkgFuncName(n *Node) string {
if n == nil {
return "<nil>"
}
- if n.Op == ONAME {
- s = n.Sym
+ if n.Op() == ONAME {
+ s = n.Sym()
} else {
- if n.Func == nil || n.Func.Nname == nil {
+ if n.Func() == nil || n.Func().Nname == nil {
return "<nil>"
}
- s = n.Func.Nname.Sym
+ s = n.Func().Nname.Sym()
}
pkg := s.Pkg
@@ -1142,12 +1142,12 @@ func Inspect(n *Node, f func(*Node) bool) {
if n == nil || !f(n) {
return
}
- InspectList(n.Ninit, f)
- Inspect(n.Left, f)
- Inspect(n.Right, f)
- InspectList(n.List, f)
- InspectList(n.Nbody, f)
- InspectList(n.Rlist, f)
+ InspectList(n.Init(), f)
+ Inspect(n.Left(), f)
+ Inspect(n.Right(), f)
+ InspectList(n.List(), f)
+ InspectList(n.Body(), f)
+ InspectList(n.Rlist(), f)
}
func InspectList(l Nodes, f func(*Node) bool) {
@@ -1242,8 +1242,8 @@ func NodAt(pos src.XPos, op Op, nleft, nright *Node) *Node {
f Func
}
n = &x.n
- n.Func = &x.f
- n.Func.Decl = n
+ n.SetFunc(&x.f)
+ n.Func().Decl = n
case ONAME:
base.Fatalf("use newname instead")
case OLABEL, OPACK:
@@ -1252,16 +1252,16 @@ func NodAt(pos src.XPos, op Op, nleft, nright *Node) *Node {
m Name
}
n = &x.n
- n.Name = &x.m
+ n.SetName(&x.m)
default:
n = new(Node)
}
- n.Op = op
- n.Left = nleft
- n.Right = nright
- n.Pos = pos
- n.Xoffset = types.BADWIDTH
- n.Orig = n
+ n.SetOp(op)
+ n.SetLeft(nleft)
+ n.SetRight(nright)
+ n.SetPos(pos)
+ n.SetOffset(types.BADWIDTH)
+ n.SetOrig(n)
return n
}
@@ -1278,14 +1278,14 @@ func NewNameAt(pos src.XPos, s *types.Sym) *Node {
p Param
}
n := &x.n
- n.Name = &x.m
- n.Name.Param = &x.p
+ n.SetName(&x.m)
+ n.Name().Param = &x.p
- n.Op = ONAME
- n.Pos = pos
- n.Orig = n
+ n.SetOp(ONAME)
+ n.SetPos(pos)
+ n.SetOrig(n)
- n.Sym = s
+ n.SetSym(s)
return n
}
@@ -1358,7 +1358,7 @@ func OrigSym(s *types.Sym) *types.Sym {
return nil
case 'b': // originally the blank identifier _
// TODO(mdempsky): Does s.Pkg matter here?
- return BlankNode.Sym
+ return BlankNode.Sym()
}
return s
}
@@ -1374,48 +1374,48 @@ func OrigSym(s *types.Sym) *types.Sym {
// SliceBounds returns n's slice bounds: low, high, and max in expr[low:high:max].
// n must be a slice expression. max is nil if n is a simple slice expression.
func (n *Node) SliceBounds() (low, high, max *Node) {
- if n.List.Len() == 0 {
+ if n.List().Len() == 0 {
return nil, nil, nil
}
- switch n.Op {
+ switch n.Op() {
case OSLICE, OSLICEARR, OSLICESTR:
- s := n.List.Slice()
+ s := n.List().Slice()
return s[0], s[1], nil
case OSLICE3, OSLICE3ARR:
- s := n.List.Slice()
+ s := n.List().Slice()
return s[0], s[1], s[2]
}
- base.Fatalf("SliceBounds op %v: %v", n.Op, n)
+ base.Fatalf("SliceBounds op %v: %v", n.Op(), n)
return nil, nil, nil
}
// SetSliceBounds sets n's slice bounds, where n is a slice expression.
// n must be a slice expression. If max is non-nil, n must be a full slice expression.
func (n *Node) SetSliceBounds(low, high, max *Node) {
- switch n.Op {
+ switch n.Op() {
case OSLICE, OSLICEARR, OSLICESTR:
if max != nil {
- base.Fatalf("SetSliceBounds %v given three bounds", n.Op)
+ base.Fatalf("SetSliceBounds %v given three bounds", n.Op())
}
- s := n.List.Slice()
+ s := n.List().Slice()
if s == nil {
if low == nil && high == nil {
return
}
- n.List.Set2(low, high)
+ n.PtrList().Set2(low, high)
return
}
s[0] = low
s[1] = high
return
case OSLICE3, OSLICE3ARR:
- s := n.List.Slice()
+ s := n.List().Slice()
if s == nil {
if low == nil && high == nil && max == nil {
return
}
- n.List.Set3(low, high, max)
+ n.PtrList().Set3(low, high, max)
return
}
s[0] = low
@@ -1423,7 +1423,7 @@ func (n *Node) SetSliceBounds(low, high, max *Node) {
s[2] = max
return
}
- base.Fatalf("SetSliceBounds op %v: %v", n.Op, n)
+ base.Fatalf("SetSliceBounds op %v: %v", n.Op(), n)
}
// IsSlice3 reports whether o is a slice3 op (OSLICE3, OSLICE3ARR).
@@ -1511,7 +1511,7 @@ func (n *Node) RawCopy() *Node {
// Orig pointing to itself.
func SepCopy(n *Node) *Node {
copy := *n
- copy.Orig = &copy
+ copy.orig = &copy
return &copy
}
@@ -1524,8 +1524,8 @@ func SepCopy(n *Node) *Node {
// messages; see issues #26855, #27765).
func Copy(n *Node) *Node {
copy := *n
- if n.Orig == n {
- copy.Orig = &copy
+ if n.Orig() == n {
+ copy.orig = &copy
}
return &copy
}
@@ -1534,18 +1534,18 @@ func Copy(n *Node) *Node {
func IsNil(n *Node) bool {
// Check n.Orig because constant propagation may produce typed nil constants,
// which don't exist in the Go spec.
- return n.Orig.Op == ONIL
+ return n.Orig().Op() == ONIL
}
func IsBlank(n *Node) bool {
if n == nil {
return false
}
- return n.Sym.IsBlank()
+ return n.Sym().IsBlank()
}
// IsMethod reports whether n is a method.
// n must be a function or a method.
func IsMethod(n *Node) bool {
- return n.Type.Recv() != nil
+ return n.Type().Recv() != nil
}
diff --git a/src/cmd/compile/internal/ir/val.go b/src/cmd/compile/internal/ir/val.go
index 00b5bfd1ad..6bcee7c01c 100644
--- a/src/cmd/compile/internal/ir/val.go
+++ b/src/cmd/compile/internal/ir/val.go
@@ -13,7 +13,7 @@ import (
)
func ConstType(n *Node) constant.Kind {
- if n == nil || n.Op != OLITERAL {
+ if n == nil || n.Op() != OLITERAL {
return constant.Unknown
}
return n.Val().Kind()
@@ -32,7 +32,7 @@ func ConstValue(n *Node) interface{} {
case constant.String:
return constant.StringVal(v)
case constant.Int:
- return Int64Val(n.Type, v)
+ return Int64Val(n.Type(), v)
case constant.Float:
return Float64Val(v)
case constant.Complex:
@@ -94,7 +94,7 @@ func ValidTypeForConst(t *types.Type, v constant.Value) bool {
func NewLiteral(v constant.Value) *Node {
n := Nod(OLITERAL, nil, nil)
if k := v.Kind(); k != constant.Unknown {
- n.Type = idealType(k)
+ n.SetType(idealType(k))
n.SetVal(v)
}
return n