вторник, 14 июля 2015 г.

ToDo. Сделать EXPORTS

ToDo. Сделать EXPORTS.

USES
 A.script 
 // - подключаем модуль A - его слова доступны нам
 B.script
 // - подключаем модуль B - его слова доступны нам
 C.script
 // - подключаем модуль C - его слова доступны нам
 D.script
 // - подключаем модуль D - его слова доступны нам
;

EXPORTS UNIT A
 // - экспортируем модуль A так так если бы его слова были определены в нашем пространстве имён. 
 //   Его слова доступны тем, кто использует нас через USES
EXPORTS UNIT B
 // - экспортируем модуль B так так если бы его слова были определены в нашем пространстве имён.
 //   Его слова доступны тем, кто использует нас через USES

EXPORTS UNIT C :: XXX
 // - экспортируем слово XXX из модуля C
 //   Слово C :: XXX будет доступно тем,  кто использует нас через USES.
 //   Через имя XXX
EXPORTS UNIT D :: XXX AS YYY
 // - экспортируем слово XXX из модуля D под именем YYY
 //   Слово D :: XXX будет доступно тем,  кто использует нас через USES.
 //   Через имя YYY

Например для таких конструкций как HLTCLike. Которые на данный момент агрегируют в себя свои USES.

Но сейчас это сделано "костылём", а не "системно".

UNIT
 // - возвращает ссылку на модуль.
::
 // - возвращает ссылку на слово.
EXPORTS
 // - экспортирует ссылку.
AS
 // - переименовывает ссылку. Точнее создаёт новую с другим именем.

:: выглядит например так:

^@ operator ::
 ^@ IN aSelf
 ^L IN aName
 
 OBJECT VAR l_Self
 aSelf |^@ >>> l_Self
  
 STRING VAR l_Name
 aName |N >>> l_Name
  
 OBJECT VAR l_Res
 l_Self %% l_Name >>> l_Res
  
 ASSURE 
  NOT ( l_Res pop:object:IsNil ) 
  [ 'Не найдено поле: ' l_Self LIST %P Reverted ==> ( |N '::' ) l_Self |N '::' l_Name ]
 l_Res >>> Result
; // ::

1 комментарий: