utils.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package rt2
  2. import (
  3. "fw/cp"
  4. "fw/cp/node"
  5. "fw/rt2/context"
  6. "fw/rt2/frame"
  7. "fw/rt2/nodeframe"
  8. "fw/rt2/scope"
  9. "github.com/kpmy/ypk/assert"
  10. )
  11. var utils nodeframe.NodeFrameUtils
  12. //func DataOf(f frame.Frame) map[interface{}]interface{} { panic(100) }
  13. func RegOf(f frame.Frame) map[interface{}]interface{} { return utils.DataOf(f) }
  14. func ValueOf(f frame.Frame) map[cp.ID]scope.Value { return utils.ValueOf(f) }
  15. func NodeOf(f frame.Frame) node.Node { return utils.NodeOf(f) }
  16. func Push(f, p frame.Frame) { utils.Push(f, p) }
  17. func New(n node.Node) frame.Frame { return utils.New(n) }
  18. func CallScope(f frame.Frame) scope.Manager {
  19. return f.Domain().Discover(context.CALL).(scope.Manager)
  20. }
  21. func ModScope(f frame.Frame) scope.Manager {
  22. return f.Domain().Discover(context.SCOPE).(scope.Manager)
  23. }
  24. func Heap(f frame.Frame) scope.Manager {
  25. return f.Domain().Discover(context.HEAP).(scope.Manager)
  26. }
  27. func ScopeFor(f frame.Frame, id cp.ID, fn ...scope.ValueOf) (ret scope.Manager) {
  28. mr := f.Domain().Global().Discover(context.SCOPE).(scope.Manager)
  29. cr := f.Domain().Global().Discover(context.CALL).(scope.Manager)
  30. hr := f.Domain().Global().Discover(context.HEAP).(scope.Manager)
  31. switch {
  32. case mr.Exists(id):
  33. ret = mr
  34. case cr.Exists(id):
  35. ret = cr
  36. case hr.Exists(id):
  37. ret = hr
  38. }
  39. assert.For(ret != nil, 60, id)
  40. if len(fn) == 1 {
  41. ret.Select(id, fn[0])
  42. }
  43. return
  44. }
  45. func ReplaceDomain(f frame.Frame, d context.Domain) { utils.ReplaceDomain(f, d) }
  46. func Assert(f frame.Frame, ok frame.Assert) { utils.Assert(f, ok) }