Michael Gasanenko
20 мар, 15:28
Автор: Michael Gasanenko <
m...@yandex.ru>
Вообще-то слово UNNEST не нужно. У нормальных людей в конце
определения компилируется EXIT.
Однако в Win32Forth'е EXIT -- компилирующее слово, оно компилирует
UNNEST.
see exit
: EXIT "0x50BB88" PARMS
IF COMPILE UNNESTP
ELSE COMPILE UNNEST
THEN ; IMMEDIATE ok
Это, в частности, означает, что Win32Forth больше не использует
UNNEST
как маркер конца определения (что вообще-то правильно).
О том, зачем нужен UNNESTP, я распространяться не хочу. Есть
некоторое
расширение языка, реализация которого размещает на стеке возвратов
дополнительные значения, и их перед выходом нужно убрать.
Другое дело, что на вершину стека возвратов надо было помещать адрес
кода, убирающего эти значения. И тогда на вершине стека возвратов
всегда был бы адрес, по которому можно передать управление, когда
нужен возврат. Но это моё IMHO, т.к. я пользуюсь расширением языка,
для которого нужно это свойство.