area.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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. Update(id cp.ID, val ValueFor)
  20. Select(cp.ID, ...ValueOf) Value
  21. Target(...Allocator) Allocator
  22. Provide(interface{}) ValueFor
  23. String() string
  24. }
  25. type Allocator interface{}
  26. type ScopeAllocator interface {
  27. Allocator
  28. Allocate(n node.Node, final bool)
  29. Dispose(n node.Node)
  30. Initialize(n node.Node, par PARAM) (frame.Sequence, frame.WAIT)
  31. }
  32. type HeapAllocator interface {
  33. Allocator
  34. Allocate(n node.Node, par ...interface{}) ValueFor //указатель лежит в скоупе процедуры/модуля, а рекорд - в куче, поэтому нужно после создания экземпляра обновить указатель
  35. Dispose(n node.Node)
  36. }
  37. var FindObjByName func(m Manager, name string) object.Object
  38. var New func() Manager