Partager via


Transmit_as et Represent_as

Transmit_as et represent_as partagent la même disposition, à l’exception du jeton de début ; le jeton lit FC_TRANSMIT_AS ou FC_REPRESENT_AS, mais le code sous-jacent est courant.

La description a la disposition suivante :

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>

Les indicateurs<1> octet se composent du grbble d’indicateur supérieur et du nibble d’alignement inférieur.

Le nibble d’alignement conserve l’alignement du fil du type transmis. Cela est nécessaire lors du dimensionnement de la mémoire tampon et de l’utilisation de la taille de type transmise à partir du code de format.

Le nibble d’indicateur peut avoir les indicateurs suivants :

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

L’indicateur PRESENTED_TYPE_IS_ARRAY marque une transmission de niveau supérieur en tant qu’argument (ou représenter en tant qu’argument) étant un tableau de quelque chose et une valeur passée. L’interpréteur –Oi utilise cet indicateur pour passer à pas sur un tel argument (qui est en fait un pointeur sur la pile, et non le tableau). Les deux autres indicateurs sont également utilisés uniquement dans les interpréteurs précédents pour passer correctement sur un type présenté sur la pile.

Le quintuple_index<2> est un index du quintuple de routine de rappel (il s’agit en fait d’un quadruple) de fonctions. La table est commune à la fois pour transmettre en tant que et représenter en tant que et il existe un mappage évident pour la position des routines, car les mêmes points d’entrée service transmettent en tant que et représentent en tant que codes. Le mappage est from_local => to_xmit, to_local => from_xmit, free_inst => free_xmit, free_local => free_inst.

Le presented_type_memory_size<2> fournit toujours une taille pour le type présenté/local, y compris la représentation inconnue en tant que types.

La transmitted_type_buffer_size<2> est égale à zéro, lorsque la taille varie, ou à la taille fixe réelle. Il s’agit d’une optimisation qui permet d’ignorer certains rappels lors du dimensionnement de la mémoire tampon.

Le transmitted_type_offset<2> est le décalage de type relatif habituel sur la chaîne de format de type transmis.