Share via


Transmit_as e Represent_as

Transmit_as e represent_as compartilhar o mesmo layout, exceto para o token à esquerda; o token lê FC_TRANSMIT_AS ou FC_REPRESENT_AS, mas o código subjacente é comum.

A descrição tem o seguinte 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>

Os sinalizadores<1> byte consistem na mordisca da bandeira superior e na mordisca de alinhamento inferior.

A mordisca de alinhamento mantém o alinhamento do fio do tipo transmitido. Isso é necessário ao dimensionar o buffer e usar o tamanho do tipo transmitido do código de formato.

A mordisca de sinalizador pode ter os seguintes sinalizadores:

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

O sinalizador PRESENTED_TYPE_IS_ARRAY marca uma transmissão de nível superior como (ou representa como) sendo uma matriz de algo e valor passado por. O interpretador –Oi usa esse sinalizador para percorrer esse argumento (que na verdade é um ponteiro na pilha, não na matriz). Os outros dois sinalizadores também são usados apenas em interpretadores anteriores para percorrer corretamente um tipo apresentado na pilha.

O quintuple_index<2> é um índice da quintupla de rotina de retorno de chamada (na verdade, é um quádruplo) das funções. A tabela é comum transmitir como e representar como e há um mapeamento óbvio para a posição das rotinas, pois o mesmo serviço de pontos de entrada transmite e representa como códigos. O mapeamento é from_local => to_xmit, to_local => from_xmit, free_inst => free_xmit, free_local => free_inst.

O presented_type_memory_size<2> sempre fornece um tamanho para o tipo apresentado/local, incluindo representação desconhecida como tipos.

O transmitted_type_buffer_size<2> é zero, quando o tamanho é variável ou o tamanho fixo real. Essa é uma otimização que permite ignorar alguns retornos de chamada ao dimensionar o buffer.

O transmitted_type_offset<2> é o deslocamento de tipo relativo usual para a cadeia de caracteres de formato de tipo transmitido.