1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- //dynamicaly loading from outer space
- package rules
- import (
- "cp/node"
- "fmt"
- "reflect"
- "rt2/context"
- "rt2/decision"
- "rt2/frame"
- "rt2/nodeframe"
- "rt2/scope"
- "ypk/assert"
- )
- func prologue(n node.Node) frame.Sequence {
- var fu nodeframe.FrameUtils
- fmt.Println(reflect.TypeOf(n))
- switch n.(type) {
- case node.EnterNode:
- return func(f frame.Frame) (frame.Sequence, frame.WAIT) {
- node := fu.NodeOf(f).Right()
- assert.For(node != nil, 40)
- sm := scope.This(f.Domain().Discover(context.SCOPE))
- sm.Allocate(n)
- f.Root().Push(fu.New(node))
- return frame.Tail(frame.STOP), frame.SKIP
- }
- case node.AssignNode:
- return assignSeq
- case node.OperationNode:
- return opSeq
- case node.CallNode:
- return callSeq
- default:
- panic("unknown node")
- }
- }
- func epilogue(n node.Node) frame.Sequence {
- var fu nodeframe.FrameUtils
- switch n.(type) {
- case node.AssignNode, node.CallNode:
- return func(f frame.Frame) (frame.Sequence, frame.WAIT) {
- next := n.Link()
- if next != nil {
- f.Root().Push(fu.New(next))
- }
- return frame.End()
- }
- case node.EnterNode:
- return func(f frame.Frame) (frame.Sequence, frame.WAIT) {
- sm := scope.This(f.Domain().Discover(context.SCOPE))
- sm.Dispose(n)
- return frame.End()
- }
- case node.OperationNode:
- return nil //do nothing
- default:
- fmt.Println(reflect.TypeOf(n))
- panic("unhandled epilogue")
- }
- }
- func init() {
- decision.PrologueFor = prologue
- decision.EpilogueFor = epilogue
- }
|