utils.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package rt2
  2. import (
  3. "fw/cp"
  4. "fw/cp/node"
  5. "fw/rt2/context"
  6. "fw/rt2/frame"
  7. rtm "fw/rt2/module"
  8. "fw/rt2/nodeframe"
  9. "fw/rt2/scope"
  10. "ypk/assert"
  11. )
  12. var utils nodeframe.NodeFrameUtils
  13. //func DataOf(f frame.Frame) map[interface{}]interface{} { panic(100) }
  14. func RegOf(f frame.Frame) map[interface{}]interface{} { return utils.DataOf(f) }
  15. func ValueOf(f frame.Frame) map[cp.ID]scope.Value { return utils.ValueOf(f) }
  16. func NodeOf(f frame.Frame) node.Node { return utils.NodeOf(f) }
  17. func Push(f, p frame.Frame) { utils.Push(f, p) }
  18. func New(n node.Node) frame.Frame { return utils.New(n) }
  19. func ThisScope(f frame.Frame) scope.Manager {
  20. return f.Domain().Discover(context.VSCOPE, 0).(scope.Manager)
  21. }
  22. func ScopeFor(f frame.Frame, id cp.ID, fn ...scope.ValueOf) (ret scope.Manager) {
  23. glob := f.Domain().Discover(context.UNIVERSE).(context.Domain)
  24. ml := glob.Discover(context.MOD).(rtm.List)
  25. for _, m := range ml.AsList() {
  26. md := glob.Discover(m.Name).(context.Domain)
  27. sc := md.Discover(context.VSCOPE, 0).(scope.Manager)
  28. //fmt.Println(m.Name, sc.Exists(id), id)
  29. if sc.Exists(id) {
  30. assert.For(ret == nil, 40) //только в одном скоупе!
  31. ret = sc
  32. }
  33. }
  34. assert.For(ret != nil, 60)
  35. if len(fn) == 1 {
  36. ret.Select(id, fn...)
  37. }
  38. return
  39. }
  40. func ReplaceDomain(f frame.Frame, d context.Domain) { utils.ReplaceDomain(f, d) }
  41. func Assert(f frame.Frame, ok frame.Assert) { utils.Assert(f, ok) }