|
@@ -4,23 +4,24 @@ import (
|
|
"fw/cp/node"
|
|
"fw/cp/node"
|
|
"fw/rt2"
|
|
"fw/rt2"
|
|
"fw/rt2/frame"
|
|
"fw/rt2/frame"
|
|
|
|
+ "fw/rt2/scope"
|
|
)
|
|
)
|
|
|
|
|
|
func withSeq(f frame.Frame) (seq frame.Sequence, ret frame.WAIT) {
|
|
func withSeq(f frame.Frame) (seq frame.Sequence, ret frame.WAIT) {
|
|
n := rt2.NodeOf(f)
|
|
n := rt2.NodeOf(f)
|
|
- rt2.DataOf(f)[0] = n.Left() //if
|
|
|
|
|
|
+ rt2.RegOf(f)[0] = n.Left() //if
|
|
rt2.Push(rt2.New(n.Left()), f)
|
|
rt2.Push(rt2.New(n.Left()), f)
|
|
seq = func(f frame.Frame) (frame.Sequence, frame.WAIT) {
|
|
seq = func(f frame.Frame) (frame.Sequence, frame.WAIT) {
|
|
- last := rt2.DataOf(f)[0].(node.Node)
|
|
|
|
- done := rt2.DataOf(f)[last].(bool)
|
|
|
|
- rt2.DataOf(f)[last] = nil
|
|
|
|
|
|
+ last := rt2.RegOf(f)[0].(node.Node)
|
|
|
|
+ done := scope.GoTypeFrom(rt2.ValueOf(f)[last.Adr()]).(bool)
|
|
|
|
+ rt2.ValueOf(f)[last.Adr()] = nil
|
|
if done && last.Right() != nil {
|
|
if done && last.Right() != nil {
|
|
rt2.Push(rt2.New(last.Right()), f)
|
|
rt2.Push(rt2.New(last.Right()), f)
|
|
return frame.Tail(frame.STOP), frame.LATER
|
|
return frame.Tail(frame.STOP), frame.LATER
|
|
} else if last.Right() == nil {
|
|
} else if last.Right() == nil {
|
|
return frame.End()
|
|
return frame.End()
|
|
} else if last.Link() != nil { //elsif
|
|
} else if last.Link() != nil { //elsif
|
|
- rt2.DataOf(f)[0] = last.Link()
|
|
|
|
|
|
+ rt2.RegOf(f)[0] = last.Link()
|
|
rt2.Push(rt2.New(last.Link()), f)
|
|
rt2.Push(rt2.New(last.Link()), f)
|
|
return seq, frame.LATER
|
|
return seq, frame.LATER
|
|
} else if n.Right() != nil { //else
|
|
} else if n.Right() != nil { //else
|