| |
| |
| |
|
|
| |
|
|
| package ir |
|
|
| import ( |
| "cmd/compile/internal/types" |
| "cmd/internal/src" |
| "fmt" |
| "go/constant" |
| ) |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| type miniNode struct { |
| pos src.XPos |
| op Op |
| bits bitset8 |
| esc uint16 |
| } |
|
|
| |
| |
| |
| func (n *miniNode) Op() Op { return n.op } |
| func (n *miniNode) Pos() src.XPos { return n.pos } |
| func (n *miniNode) SetPos(x src.XPos) { n.pos = x } |
| func (n *miniNode) Esc() uint16 { return n.esc } |
| func (n *miniNode) SetEsc(x uint16) { n.esc = x } |
|
|
| const ( |
| miniTypecheckShift = 0 |
| miniWalked = 1 << 2 |
| ) |
|
|
| func (n *miniNode) Typecheck() uint8 { return n.bits.get2(miniTypecheckShift) } |
| func (n *miniNode) SetTypecheck(x uint8) { |
| if x > 2 { |
| panic(fmt.Sprintf("cannot SetTypecheck %d", x)) |
| } |
| n.bits.set2(miniTypecheckShift, x) |
| } |
|
|
| func (n *miniNode) Walked() bool { return n.bits&miniWalked != 0 } |
| func (n *miniNode) SetWalked(x bool) { n.bits.set(miniWalked, x) } |
|
|
| |
|
|
| func (n *miniNode) Init() Nodes { return Nodes{} } |
|
|
| |
|
|
| func (n *miniNode) no(name string) string { return "cannot " + name + " on " + n.op.String() } |
|
|
| func (n *miniNode) Type() *types.Type { return nil } |
| func (n *miniNode) SetType(*types.Type) { panic(n.no("SetType")) } |
| func (n *miniNode) Name() *Name { return nil } |
| func (n *miniNode) Sym() *types.Sym { return nil } |
| func (n *miniNode) Val() constant.Value { panic(n.no("Val")) } |
| func (n *miniNode) SetVal(v constant.Value) { panic(n.no("SetVal")) } |
| func (n *miniNode) NonNil() bool { return false } |
| func (n *miniNode) MarkNonNil() { panic(n.no("MarkNonNil")) } |
|
|