|
@@ -5,28 +5,25 @@ import (
|
|
"fw/cp"
|
|
"fw/cp"
|
|
"fw/cp/constant"
|
|
"fw/cp/constant"
|
|
"fw/cp/node"
|
|
"fw/cp/node"
|
|
- "fw/cp/object"
|
|
|
|
"fw/rt2"
|
|
"fw/rt2"
|
|
- // "fw/rt2/context"
|
|
|
|
|
|
+ "fw/rt2/context"
|
|
"fw/rt2/frame"
|
|
"fw/rt2/frame"
|
|
- // "fw/rt2/scope"
|
|
|
|
|
|
+ "fw/rt2/scope"
|
|
"reflect"
|
|
"reflect"
|
|
)
|
|
)
|
|
|
|
|
|
func guardSeq(f frame.Frame) (seq frame.Sequence, ret frame.WAIT) {
|
|
func guardSeq(f frame.Frame) (seq frame.Sequence, ret frame.WAIT) {
|
|
- // sc := f.Domain().Discover(context.SCOPE).(scope.Manager)
|
|
|
|
|
|
+ sc := f.Domain().Discover(context.SCOPE).(scope.Manager)
|
|
n := rt2.NodeOf(f).(node.GuardNode)
|
|
n := rt2.NodeOf(f).(node.GuardNode)
|
|
- var obj object.Object
|
|
|
|
|
|
+ var obj scope.Value
|
|
switch l := n.Left().(type) {
|
|
switch l := n.Left().(type) {
|
|
- case node.VariableNode:
|
|
|
|
- obj = l.Object()
|
|
|
|
- case node.ParameterNode:
|
|
|
|
- // obj = sc.Select(scope.Designator(l)).(object.Object)
|
|
|
|
|
|
+ case node.VariableNode, node.ParameterNode:
|
|
|
|
+ obj = sc.Select(l.Object().Adr())
|
|
default:
|
|
default:
|
|
panic(fmt.Sprintln("unsupported left", reflect.TypeOf(l)))
|
|
panic(fmt.Sprintln("unsupported left", reflect.TypeOf(l)))
|
|
}
|
|
}
|
|
- if is(obj, n.Type()) {
|
|
|
|
- rt2.DataOf(f.Parent())[n] = n.Left()
|
|
|
|
|
|
+ if scope.GoTypeFrom(scope.Ops.Is(obj, n.Type())).(bool) {
|
|
|
|
+ rt2.RegOf(f.Parent())[n] = n.Left()
|
|
return frame.End()
|
|
return frame.End()
|
|
} else {
|
|
} else {
|
|
trap := node.New(constant.TRAP, int(cp.SomeAdr())).(node.TrapNode)
|
|
trap := node.New(constant.TRAP, int(cp.SomeAdr())).(node.TrapNode)
|