09488af869
git-svn-id: svn://kolibrios.org@4867 a494cfbc-eb01-0410-851d-a64ba20cac60
79 lines
2.8 KiB
Forth
79 lines
2.8 KiB
Forth
\ 94 TOOLS
|
||
|
||
: .S ( -- ) \ 94 TOOLS
|
||
\ Скопировать и показать значения, находящиеся на стеке данных. Формат зависит
|
||
\ от реализации.
|
||
\ .S может быть реализовано с использованием слов форматного преобразования
|
||
\ чисел. Соответственно, он может испортить перемещаемую область,
|
||
\ идентифицируемую #>.
|
||
DEPTH .SN
|
||
;
|
||
|
||
: ? ( a-addr -- ) \ 94 TOOLS
|
||
\ Показать значение, хранящееся по адресу a-addr.
|
||
\ ? может быть реализован с использованием слов форматного преобразования
|
||
\ чисел. Соответственно, он может испортить перемещаемую область,
|
||
\ идентифицируемую #>.
|
||
@ .
|
||
;
|
||
: AHEAD \ 94 TOOLS EXT
|
||
\ Интерпретация: семантика неопределена.
|
||
\ Компиляция: ( C: -- orig )
|
||
\ Положить место неразрешенной ссылки вперед orig на стек управления.
|
||
\ Добавить семантику времени выполнения, данную ниже, к текущему определению.
|
||
\ Семантика незавершена до тех пор, пока orig не разрешится (например,
|
||
\ по THEN).
|
||
\ Время выполнения: ( -- )
|
||
\ Продолжить выполнение с позиции, заданной разрешением orig.
|
||
HERE BRANCH, >MARK 2
|
||
; IMMEDIATE
|
||
|
||
: [ELSE] \ 94 TOOLS EXT
|
||
\ Компиляция: Выполнить семантику выполнения, данную ниже.
|
||
\ Выполнение: ( "<spaces>name..." -- )
|
||
\ Пропустить ведущие пробелы, выделить и отбросить ограниченные пробелами
|
||
\ слова из разбираемой области, включая вложенные [IF]...[THEN] и
|
||
\ [IF]...[ELSE]...[THEN], до выделения и отбрасывания слова [THEN].
|
||
\ Если разбираемая область опустошается, она снова заполняется по REFILL.
|
||
\ [ELSE] - слово немедленного исполнения.
|
||
1
|
||
BEGIN
|
||
NextWord DUP
|
||
IF
|
||
2DUP S" [IF]" COMPARE 0= IF 2DROP 1+ ELSE
|
||
2DUP S" [ELSE]" COMPARE 0= IF 2DROP 1- DUP IF 1+ THEN ELSE
|
||
S" [THEN]" COMPARE 0= IF 1- THEN
|
||
THEN THEN
|
||
ELSE 2DROP REFILL AND \ SOURCE TYPE
|
||
THEN DUP 0=
|
||
UNTIL DROP ; IMMEDIATE
|
||
|
||
: [IF] \ 94 TOOLS EXT
|
||
\ Компиляция: Выполнить семантику выполнения, данную ниже.
|
||
\ Выполнение: ( flag | flag "<spaces>name..." -- )
|
||
\ Если флаг "истина", ничего не делать. Иначе, пропустив ведущие пробелы,
|
||
\ выделять и отбрасывать ограниченные пробелами слова из разбираемой области,
|
||
\ включая вложенные [IF]...[THEN] и [IF]...[ELSE]...[THEN], до тех пор, пока не
|
||
\ будет выделено и отброшено слово [ELSE] или [THEN].
|
||
\ Если разбираемая область опустошается, она снова заполняется по REFILL.
|
||
\ [ELSE] - слово немедленного исполнения.
|
||
0= IF POSTPONE [ELSE] THEN
|
||
; IMMEDIATE
|
||
|
||
: [THEN] \ 94 TOOLS EXT
|
||
\ Компиляция: Выполнить семантику выполнения, данную ниже.
|
||
\ Выполнение: ( -- )
|
||
\ Ничего не делать. [THEN] - слово немедленного исполнения.
|
||
; IMMEDIATE
|
||
|
||
\ Ruvim Pinka additions:
|
||
|
||
: [DEFINED] ( -- f ) \ "name"
|
||
NextWord SFIND IF DROP TRUE ELSE 2DROP FALSE THEN
|
||
; IMMEDIATE
|
||
|
||
: [UNDEFINED] ( -- f ) \ "name"
|
||
POSTPONE [DEFINED] 0=
|
||
; IMMEDIATE
|
||
|