Динамические хранилища, записывающие сами себя это интересно.
Но если вдруг кому-то понадобится сделать Meta.Item из статического рекорда без создания указателя, всегда можно воспользоваться вот таким вот механизмом:
Код:
PROCEDURE Lookup(VAR r: ANYREC; OUT i: Meta.Item);
VAR type: Kernel.Type; mod: Kernel.Module; attr: Kernel.ItemAttr; global: BOOLEAN;
BEGIN
attr.obj := Meta.varObj;
attr.typ := Meta.recTyp;
attr.vis := Meta.exported;
attr.adr := Services.AdrOf(r);
attr.ptr := NIL;
attr.mod := NIL;
attr.desc :=Kernel.TypeOf(r);
attr.ext := NIL;
mod := Kernel.modList;
WHILE (mod # NIL) & ((attr.adr < mod.data) OR (attr.adr >= mod.data + mod.dsize)) DO
mod := mod.next
END;
IF mod # NIL THEN
global := TRUE
ELSE
global := FALSE
END;
attr.mod := mod;
Meta.GetThisItem(attr, i)
END Lookup;