Transmit_as und Represent_as
Transmit_as und represent_as haben das gleiche Layout, mit Ausnahme des führenden Tokens; Das Token liest FC_TRANSMIT_AS oder FC_REPRESENT_AS, aber der zugrunde liegende Code ist üblich.
Die Beschreibung hat das folgende Layout:
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>
Die Flags<1> Byte bestehen aus dem oberen Flag-Knabbel und der unteren Ausrichtung.
Der Ausrichtungsknabber behält die Drahtausrichtung des übertragenen Typs bei. Dies ist erforderlich, wenn die Puffergröße und die übertragene Typgröße aus dem Formatcode verwendet werden.
Das Flag-Knabbel kann die folgenden Flags aufweisen:
#define PRESENTED_TYPE_IS_ARRAY 0x10
#define PRESENTED_TYPE_ALIGN_4 0x20
#define PRESENTED_TYPE_ALIGN_8 0x40
Das PRESENTED_TYPE_IS_ARRAY-Flag kennzeichnet ein Übertragungsargument auf oberster Ebene als Argument (oder repräsentiert als) als Array von etwas und übergebenem Wert. Der -Oi-Interpreter verwendet dieses Flag, um ein solches Argument zu übergehen (das tatsächlich ein Zeiger auf dem Stapel ist, nicht das Array). Die anderen beiden Flags werden auch nur in früheren Interpretern verwendet, um einen angezeigten Typ auf dem Stapel korrekt zu übergehen.
Der quintuple_index<2> ist ein Index des Rückrufroutinenquinuples (dies ist eigentlich ein Vierfach) von Funktionen. Die Tabelle wird sowohl als übertragen als auch darstellen als verwendet, und es gibt eine offensichtliche Zuordnung für die Position der Routinen, da derselbe Einstiegspunktdienst als sendet und als Codes darstellt. Die Zuordnung ist from_local => to_xmit, to_local => from_xmit, free_inst => free_xmit, free_local => free_inst.
Die presented_type_memory_size<2> stellt immer eine Größe für den präsentierten/lokalen Typ bereit, einschließlich unbekannter Darstellung als Typen.
Die transmitted_type_buffer_size<2> ist entweder 0, wenn die Größe variiert, oder die tatsächliche feste Größe. Dies ist eine Optimierung, die das Überspringen einiger Rückrufe bei der Größenanpassung des Puffers ermöglicht.
Die transmitted_type_offset<2> ist der übliche relative Typoffset zur Formatzeichenfolge des übertragenen Typs.