Transmit_as y Represent_as
Transmit_as y represent_as comparten el mismo diseño excepto para el token inicial; el token lee FC_TRANSMIT_AS o FC_REPRESENT_AS, pero el código subyacente es común.
La descripción tiene el siguiente diseño:
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>
<Los marcadores 1> byte constan del nibble de la bandera superior y del níbble de alineación inferior.
La alineación nibble mantiene la alineación del cable del tipo transmitido. Esto es necesario cuando se cambia el tamaño del búfer y se usa el tamaño del tipo transmitido desde el código de formato.
La marca nibble puede tener las siguientes marcas:
#define PRESENTED_TYPE_IS_ARRAY 0x10
#define PRESENTED_TYPE_ALIGN_4 0x20
#define PRESENTED_TYPE_ALIGN_8 0x40
La marca PRESENTED_TYPE_IS_ARRAY marca un argumento de transmisión de nivel superior como (o representa como) que es una matriz de algo y pasa por valor. El intérprete –Oi usa esta marca para recorrer este argumento (que en realidad es un puntero en la pila, no en la matriz). Las otras dos marcas también se usan en intérpretes anteriores para recorrer correctamente un tipo presentado en la pila.
El quintuple_index<2> es un índice del quintuple rutina de devolución de llamada (en realidad es un cuadrúpelo) de funciones. La tabla es común para transmitir como y representar como y hay una asignación obvia para la posición de las rutinas, ya que los mismos puntos de entrada que el servicio transmiten y representan como códigos. La asignación es from_local => to_xmit, to_local => from_xmit, free_inst => free_xmit, free_local => free_inst.
El presented_type_memory_size<2> siempre proporciona un tamaño para el tipo presentado o local, incluida la representación desconocida como tipos.
El transmitted_type_buffer_size<2> es cero, cuando el tamaño es variable o el tamaño fijo real. Se trata de una optimización que permite omitir algunas devoluciones de llamada al cambiar el tamaño del búfer.
El transmitted_type_offset<2> es el desplazamiento de tipo relativo habitual a la cadena de formato de tipo transmitido.