go.tools/ssa: unexport Register.
R=gri
CC=golang-dev
https://golang.org/cl/14672043
diff --git a/ssa/ssa.go b/ssa/ssa.go
index db5465e..6100f21 100644
--- a/ssa/ssa.go
+++ b/ssa/ssa.go
@@ -443,7 +443,7 @@
// t1 = new int
//
type Alloc struct {
- Register
+ register
Comment string
Heap bool
index int // dense numbering; for lifting
@@ -462,7 +462,7 @@
// t2 = phi [0.start: t0, 1.if.then: t1, ...]
//
type Phi struct {
- Register
+ register
Comment string // a hint as to its purpose
Edges []Value // Edges[i] is value for Block().Preds[i]
}
@@ -483,7 +483,7 @@
// t7 = invoke t5.Println(...t6)
//
type Call struct {
- Register
+ register
Call CallCommon
}
@@ -495,7 +495,7 @@
// t1 = t0 + 1:int
//
type BinOp struct {
- Register
+ register
// One of:
// ADD SUB MUL QUO REM + - * / %
// AND OR XOR SHL SHR AND_NOT & | ^ << >> &~
@@ -522,7 +522,7 @@
// t2 = <-t1,ok
//
type UnOp struct {
- Register
+ register
Op token.Token // One of: NOT SUB ARROW MUL XOR ! - <- * ^
X Value
CommaOk bool
@@ -548,7 +548,7 @@
// t1 = changetype *int <- IntPtr (t0)
//
type ChangeType struct {
- Register
+ register
X Value
}
@@ -577,7 +577,7 @@
// t1 = convert []byte <- string (t0)
//
type Convert struct {
- Register
+ register
X Value
}
@@ -594,7 +594,7 @@
// t1 = change interface interface{} <- I (t0)
//
type ChangeInterface struct {
- Register
+ register
X Value
}
@@ -615,7 +615,7 @@
// t2 = make Stringer <- t0
//
type MakeInterface struct {
- Register
+ register
X Value
}
@@ -632,7 +632,7 @@
// t1 = make closure bound$(main.I).add [i]
//
type MakeClosure struct {
- Register
+ register
Fn Value // always a *Function
Bindings []Value // values for each free variable in Fn.FreeVars
}
@@ -650,7 +650,7 @@
// t1 = make StringIntMap t0
//
type MakeMap struct {
- Register
+ register
Reserve Value // initial space reservation; nil => default
}
@@ -667,7 +667,7 @@
// t0 = make IntChan 0
//
type MakeChan struct {
- Register
+ register
Size Value // int; size of buffer; zero => synchronous.
}
@@ -689,7 +689,7 @@
// t1 = make StringSlice 1:int t0
//
type MakeSlice struct {
- Register
+ register
Len Value
Cap Value
}
@@ -711,7 +711,7 @@
// t1 = slice t0[1:]
//
type Slice struct {
- Register
+ register
X Value // slice, string, or *array
Low, High Value // either may be nil
}
@@ -733,7 +733,7 @@
// t1 = &t0.name [#1]
//
type FieldAddr struct {
- Register
+ register
X Value // *struct
Field int // index into X.Type().Deref().(*types.Struct).Fields
}
@@ -751,7 +751,7 @@
// t1 = t0.name [#1]
//
type Field struct {
- Register
+ register
X Value // struct
Field int // index into X.Type().(*types.Struct).Fields
}
@@ -774,7 +774,7 @@
// t2 = &t0[t1]
//
type IndexAddr struct {
- Register
+ register
X Value // slice or *array,
Index Value // numeric index
}
@@ -788,7 +788,7 @@
// t2 = t0[t1]
//
type Index struct {
- Register
+ register
X Value // array
Index Value // integer index
}
@@ -808,7 +808,7 @@
// t5 = t3[t4],ok
//
type Lookup struct {
- Register
+ register
X Value // string or map
Index Value // numeric or key-typed index
CommaOk bool // return a value,ok pair
@@ -861,7 +861,7 @@
// t4 = select blocking []
//
type Select struct {
- Register
+ register
States []*SelectState
Blocking bool
}
@@ -879,7 +879,7 @@
// t0 = range "hello":string
//
type Range struct {
- Register
+ register
X Value // string or map
}
@@ -902,7 +902,7 @@
// t1 = next t0
//
type Next struct {
- Register
+ register
Iter Value
IsString bool // true => string iterator; false => map iterator.
}
@@ -943,7 +943,7 @@
// t3 = typeassert,ok t2.(T)
//
type TypeAssert struct {
- Register
+ register
X Value
AssertedType types.Type
CommaOk bool
@@ -959,7 +959,7 @@
// t1 = extract t0 #1
//
type Extract struct {
- Register
+ register
Tuple Value
Index int
}
@@ -1168,13 +1168,12 @@
// Embeddable mix-ins and helpers for common parts of other structs. -----------
-// Register is a mix-in embedded by all SSA values that are also
-// instructions, i.e. virtual registers, and provides implementations
-// of the Value interface's Name() and Type() methods: the name is
-// simply a numbered register (e.g. "t0") and the type is the typ
-// field.
+// register is a mix-in embedded by all SSA values that are also
+// instructions, i.e. virtual registers, and provides a uniform
+// implementation of most of the Value interface: Value.Name() is a
+// numbered register (e.g. "t0"); the other methods are field accessors.
//
-// Temporary names are automatically assigned to each Register on
+// Temporary names are automatically assigned to each register on
// completion of building a function in SSA form.
//
// Clients must not assume that the 'id' value (and the Name() derived
@@ -1182,7 +1181,7 @@
// semantics are determined only by identity; names exist only to
// facilitate debugging.
//
-type Register struct {
+type register struct {
anInstruction
num int // "name" of virtual register, e.g. "t0". Not guaranteed unique.
typ types.Type // type of virtual register
@@ -1365,14 +1364,13 @@
func (v *Alloc) Referrers() *[]Instruction { return &v.referrers }
func (v *Alloc) Pos() token.Pos { return v.pos }
-func (v *Register) Type() types.Type { return v.typ }
-func (v *Register) setType(typ types.Type) { v.typ = typ }
-func (v *Register) Name() string { return fmt.Sprintf("t%d", v.num) }
-func (v *Register) setNum(num int) { v.num = num }
-func (v *Register) Referrers() *[]Instruction { return &v.referrers }
-func (v *Register) asRegister() *Register { return v }
-func (v *Register) Pos() token.Pos { return v.pos }
-func (v *Register) setPos(pos token.Pos) { v.pos = pos }
+func (v *register) Type() types.Type { return v.typ }
+func (v *register) setType(typ types.Type) { v.typ = typ }
+func (v *register) Name() string { return fmt.Sprintf("t%d", v.num) }
+func (v *register) setNum(num int) { v.num = num }
+func (v *register) Referrers() *[]Instruction { return &v.referrers }
+func (v *register) Pos() token.Pos { return v.pos }
+func (v *register) setPos(pos token.Pos) { v.pos = pos }
func (v *anInstruction) Parent() *Function { return v.block.parent }
func (v *anInstruction) Block() *BasicBlock { return v.block }