3
// root contains a full AST.
5
// It is immutable once constructed with Builder.
10
// Iterator over the top level nodes.
11
func (r *root) Iterator() Iterator {
19
func (r *root) at(idx reference) *Node {
25
const invalidReference reference = -1
27
func (r reference) Valid() bool {
28
return r != invalidReference
36
func (b *builder) Tree() *root {
40
func (b *builder) NodeAt(ref reference) *Node {
44
func (b *builder) Reset() {
45
b.tree.nodes = b.tree.nodes[:0]
49
func (b *builder) Push(n Node) reference {
50
b.lastIdx = len(b.tree.nodes)
51
b.tree.nodes = append(b.tree.nodes, n)
52
return reference(b.lastIdx)
55
func (b *builder) PushAndChain(n Node) reference {
56
newIdx := len(b.tree.nodes)
57
b.tree.nodes = append(b.tree.nodes, n)
59
b.tree.nodes[b.lastIdx].next = newIdx - b.lastIdx
62
return reference(b.lastIdx)
65
func (b *builder) AttachChild(parent reference, child reference) {
66
b.tree.nodes[parent].child = int(child) - int(parent)
69
func (b *builder) Chain(from reference, to reference) {
70
b.tree.nodes[from].next = int(to) - int(from)