|
@@ -35,6 +35,13 @@ func sum(_a interface{}, _b interface{}) interface{} {
|
|
|
return a + b
|
|
|
}
|
|
|
|
|
|
+func eq(_a interface{}, _b interface{}) bool {
|
|
|
+ assert.For(_a != nil, 20)
|
|
|
+ assert.For(_b != nil, 21)
|
|
|
+ var a int32 = int32Of(_a)
|
|
|
+ var b int32 = int32Of(_b)
|
|
|
+ return a == b
|
|
|
+}
|
|
|
func mopSeq(f frame.Frame) (seq frame.Sequence, ret frame.WAIT) {
|
|
|
var fu nodeframe.FrameUtils
|
|
|
n := fu.NodeOf(f).(node.MonadicNode)
|
|
@@ -76,6 +83,9 @@ func dopSeq(f frame.Frame) (seq frame.Sequence, ret frame.WAIT) {
|
|
|
case operation.PLUS:
|
|
|
fu.DataOf(f.Parent())[n] = sum(fu.DataOf(f)[n.Left()], fu.DataOf(f)[n.Right()])
|
|
|
return frame.End()
|
|
|
+ case operation.EQUAL:
|
|
|
+ fu.DataOf(f.Parent())[n] = eq(fu.DataOf(f)[n.Left()], fu.DataOf(f)[n.Right()])
|
|
|
+ return frame.End()
|
|
|
default:
|
|
|
panic("unknown operation")
|
|
|
}
|
|
@@ -86,23 +96,23 @@ func dopSeq(f frame.Frame) (seq frame.Sequence, ret frame.WAIT) {
|
|
|
switch n.Right().(type) {
|
|
|
case node.ConstantNode:
|
|
|
fu.DataOf(f)[n.Right()] = n.Right().(node.ConstantNode).Data()
|
|
|
- return op, frame.DO
|
|
|
+ return op, frame.NOW
|
|
|
case node.VariableNode, node.ParameterNode:
|
|
|
seq = func(f frame.Frame) (seq frame.Sequence, ret frame.WAIT) {
|
|
|
sc := f.Domain().Discover(context.SCOPE).(scope.Manager)
|
|
|
fu.DataOf(f)[n.Right()] = sc.Select(n.Right().Object())
|
|
|
//fmt.Println(n.Right().Object(), reflect.TypeOf(n.Right().Object()))
|
|
|
assert.For(fu.DataOf(f)[n.Right()] != nil, 60)
|
|
|
- return op, frame.DO
|
|
|
+ return op, frame.NOW
|
|
|
}
|
|
|
- ret = frame.DO
|
|
|
+ ret = frame.NOW
|
|
|
return seq, ret
|
|
|
case node.OperationNode:
|
|
|
fu.Push(fu.New(n.Right()), f)
|
|
|
seq = func(f frame.Frame) (seq frame.Sequence, ret frame.WAIT) {
|
|
|
- return op, frame.DO
|
|
|
+ return op, frame.NOW
|
|
|
}
|
|
|
- ret = frame.SKIP
|
|
|
+ ret = frame.LATER
|
|
|
return seq, ret
|
|
|
default:
|
|
|
fmt.Println(reflect.TypeOf(n.Right()))
|
|
@@ -115,26 +125,26 @@ func dopSeq(f frame.Frame) (seq frame.Sequence, ret frame.WAIT) {
|
|
|
switch n.Left().(type) {
|
|
|
case node.ConstantNode:
|
|
|
fu.DataOf(f)[n.Left()] = n.Left().(node.ConstantNode).Data()
|
|
|
- return right, frame.DO
|
|
|
+ return right, frame.NOW
|
|
|
case node.VariableNode, node.ParameterNode:
|
|
|
seq = func(f frame.Frame) (seq frame.Sequence, ret frame.WAIT) {
|
|
|
sc := f.Domain().Discover(context.SCOPE).(scope.Manager)
|
|
|
fu.DataOf(f)[n.Left()] = sc.Select(n.Left().Object())
|
|
|
- return right, frame.DO
|
|
|
+ return right, frame.NOW
|
|
|
}
|
|
|
- ret = frame.DO
|
|
|
+ ret = frame.NOW
|
|
|
return seq, ret
|
|
|
case node.OperationNode:
|
|
|
fu.Push(fu.New(n.Left()), f)
|
|
|
seq = func(f frame.Frame) (seq frame.Sequence, ret frame.WAIT) {
|
|
|
- return right, frame.DO
|
|
|
+ return right, frame.NOW
|
|
|
}
|
|
|
- ret = frame.SKIP
|
|
|
+ ret = frame.LATER
|
|
|
return seq, ret
|
|
|
default:
|
|
|
fmt.Println(reflect.TypeOf(n.Left()))
|
|
|
panic("wrong left")
|
|
|
}
|
|
|
}
|
|
|
- return left, frame.DO
|
|
|
+ return left, frame.NOW
|
|
|
}
|