⟩BODY

Материал из ПМК вики
Перейти к: навигация, поиск

>BODY (к телу) — стандартное слово Каллисто. Получить адрес поля данных слова, токен которого находится в стеке.

>BODY          ( т −− a )                           К телу. Преобразовать адрес поля кода в адрес поля параметров.

Слово >BODY преобразует CFA в PFA.

Слово >BODY включено в обязательное «ядро» (CORE) действующего стандарта Форта и присутствует в черновике готовящегося стандарта. Его переносимость весьма необычна для таких «интимных» слов, как преобразования полей словарной статьи.

Ввод слова >BODY[править]

В режиме NUM последовательно нажмите клавиши  F   ИП     Р-ГРД-Г   В/О   5   K    ,  

Для возврата в режим NUM нажмите синюю клавишу  P .

>BODY в стандарте ANS Forth[править]

 6.1.0550   >BODY                             "to-body"                     CORE
            ( xt -- a-addr )
            a-addr - адрес области данных соответствующей xt. Неопределенная 
            ситуация существует, если xt не для слова определенного через 
            CREATE.

        См.: 3.3.3 Область данных.

 A.6.1.0550   >BODY
 a-addr - адрес, который HERE возвратило бы, если бы было выполнено немедленно 
 после выполнения CREATE которое определило xt.

>BODY в предыдущем стандарте Forth-83 (англ.)[править]

     >BODY        addr1 -- addr2                83           "to-body"
          addr2 is the parameter field address corresponding to the
          compilation address addr1.  See:  "9.2 Addressable Memory"

Реализация[править]

Вообще говоря, поле кода может занимать больше двух байт, например быть векторным или быть созданным с помощью <BUILDS. Размер поля кода нигде не хранится, так что программист должен должен знать структуру поля кода обрабатываемого слова, а не полагаться на слово >BODY, обрабатывающее лишь стандартный случай.

В Каллисто 1.0 слово >BODY является синонимом слова 2+ и использует его обработчик:

1284 JTWOP:          2
1285                 .DB 59H                         ; FX>=0 aka пропустить 1 байт
1286 JONEP:          1
1287 NONEP:          PKRM03 + PKM03  KGOTO9
…
1292 ;#toBODY
1293 ; >BODY            ( т −− a )                           К телу. Преобразовать адрес поля кода в адрес поля параметров.
1294 LGBODY:         .DB     5
1295                 .TEXT   ">BODY"                 ; ( cfa −− pfa )
1296                 .DW     LTWOP
1297 GBODY:          .DW     JTWOP                   ; Синоним 2+

Реализация из SP-Forth 4.20:

: >BODY ( xt -- a-addr ) \ 94
\ a-addr - адрес поля данных, соответствующий xt.
\ Исключительная ситуация возникает, если xt не от слова,
\ определенного через CREATE.
(  1+ @ было в версии 2.5 )
  5 +
;

Советская реализация[править]

Описание и определение слова >BODY в ядре ФОРТ-ЕС:

>BODY     CFA->PFA ОТ ПОЛЯ КОДА К ПОЛЮ ПАРАМЕТРОВ               30

                     Экран номер 30
( 31.03.86  >BODY BODY> >LINK LINK> L>NAME N>LINK >NAME NAME> )

: >BODY  ( CFA->PFA) 2+ ;

Ссылки[править]


  Nopictures-icon.png У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их.


  Stub-icon-48px.png Это заготовка статьи. Вы можете помочь проекту, дополнив её.