Udostępnij za pośrednictwem


Transmit_as i Represent_as

Transmit_as i represent_as mają ten sam układ z wyjątkiem tokenu wiodącego; token odczytuje FC_TRANSMIT_AS lub FC_REPRESENT_AS, ale podstawowy kod jest typowy.

Opis ma następujący układ:

FC_TRANSMIT_AS | FC_REPRESENT_AS
flags<1>
quintuple_index<2>
presented_type_memory_size<2>
transmitted_type_buffer_size<2>
transmitted_type_offset<2>

Flagi<1> bajtu składają się z górnej flagi nibble i dolnej nibble wyrównania.

Wyrównanie nibble utrzymuje wyrównanie przewodu typu przesyłanego. Jest to konieczne w przypadku określania rozmiaru buforu i używania rozmiaru przesyłanego typu z kodu formatu.

Flaga nibble może mieć następujące flagi:

#define PRESENTED_TYPE_IS_ARRAY     0x10
#define PRESENTED_TYPE_ALIGN_4      0x20
#define PRESENTED_TYPE_ALIGN_8      0x40

Flaga PRESENTED_TYPE_IS_ARRAY oznacza transmisję najwyższego poziomu jako (lub reprezentującą) argument jako tablicę elementów i przekazaną przez wartość. Interpreter –Oi używa tej flagi do przechodzenia przez taki argument (który jest faktycznie wskaźnikiem na stosie, a nie tablicy). Pozostałe dwie flagi są również używane tylko w poprzednich interpreterach, aby prawidłowo przejść przez prezentowany typ na stosie.

Quintuple_index<2> jest indeksem kwintuple procedury wywołania zwrotnego (jest to faktycznie czterokrotne) funkcji. Tabela jest często przesyłana jako i reprezentowana jako i istnieje oczywiste mapowanie pozycji procedur, ponieważ usługa punktów wejścia przesyła i reprezentuje jako kody. Mapowanie jest from_local => to_xmit, to_local => from_xmit, free_inst => free_xmit, free_local => free_inst.

Presented_type_memory_size<2> zawsze udostępnia rozmiar prezentowanego/lokalnego typu, w tym nieznany reprezentujący jako typy.

Transmitted_type_buffer_size<2> ma wartość zero, gdy rozmiar jest różny lub rzeczywisty stały rozmiar. Jest to optymalizacja, która umożliwia pomijanie niektórych wywołań zwrotnych podczas określania rozmiaru buforu.

Transmitted_type_offset<2> jest zwykle względnym przesunięciem typu do ciągu formatu przesyłanego typu.