12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- package scope
- import (
- "fw/cp"
- "fw/cp/node"
- "fw/cp/object"
- "fw/rt2/context"
- "fw/rt2/frame"
- )
- type PARAM struct {
- Objects object.Object
- Values node.Node
- Frame frame.Frame
- Tail frame.Sequence
- }
- //менеджер зон видимости, зоны видимости динамические, создаются в момент входа в EnterNode
- // pk, 20150112, инициализация параметров теперь происходит как и обычный frame.Sequence, с использованием стека
- type Manager interface {
- context.ContextAware
- Update(id cp.ID, val ValueFor)
- Select(cp.ID, ...ValueOf) Value
- Target(...Allocator) Allocator
- Exists(cp.ID) bool
- Provide(interface{}) ValueFor
- String() string
- }
- type Allocator interface {
- Join(Manager)
- }
- type ScopeAllocator interface {
- Allocator
- Allocate(n node.Node, final bool)
- Dispose(n node.Node)
- Initialize(n node.Node, par PARAM) (frame.Sequence, frame.WAIT)
- }
- type HeapAllocator interface {
- Allocator
- Allocate(object.Object, object.PointerType, ...interface{}) ValueFor //указатель лежит в скоупе процедуры/модуля, а рекорд - в куче, поэтому нужно после создания экземпляра обновить указатель
- Dispose(id cp.ID)
- }
- var FindObjByName func(m Manager, name string) object.Object
- var New func(role string) Manager
|