area.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package scope
  2. import (
  3. "fw/cp"
  4. "fw/cp/node"
  5. "fw/cp/object"
  6. "fw/rt2/context"
  7. "fw/rt2/frame"
  8. )
  9. type PARAM struct {
  10. Objects object.Object
  11. Values node.Node
  12. Frame frame.Frame
  13. Tail frame.Sequence
  14. }
  15. //менеджер зон видимости, зоны видимости динамические, создаются в момент входа в EnterNode
  16. // pk, 20150112, инициализация параметров теперь происходит как и обычный frame.Sequence, с использованием стека
  17. type Manager interface {
  18. context.ContextAware
  19. Select(cp.ID, ValueOf)
  20. Target(...Allocator) Allocator
  21. Provide(interface{}) Value
  22. String() string
  23. }
  24. type Allocator interface {
  25. Join(Manager)
  26. }
  27. type ScopeAllocator interface {
  28. Allocator
  29. Allocate(n node.Node, final bool)
  30. Dispose(n node.Node)
  31. Initialize(n node.Node, par PARAM) (frame.Sequence, frame.WAIT)
  32. }
  33. type HeapAllocator interface {
  34. Allocator
  35. Allocate(object.Object, object.PointerType, ...interface{}) Value //указатель лежит в скоупе процедуры/модуля, а рекорд - в куче, поэтому нужно после создания экземпляра обновить указатель
  36. Dispose(id cp.ID)
  37. }
  38. var FindObjByName func(m Manager, name string) object.Object
  39. var New func(role string) Manager