Partager via


Transmit_as et Represent_as

Transmit_as et represent_as partagez 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 de l’indicateur supérieur nibble et du nibble d’alignement inférieur.

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

Le nibble de l’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ésente en tant que) étant un tableau de quelque chose et passé par valeur. L’interpréteur –Oi utilise cet indicateur pour parcourir 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 effectuer un pas à pas correctement sur un type présenté sur la pile.

Le quintuple_index<2> est un index du quintuple de routine de rappel (c’est en fait un quadruplé) de fonctions. La table est commune à la fois à la transmission sous et à la représentation comme et il existe un mappage évident pour la position des routines, comme le même service de points d’entrée transmet et représente 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.

La transmitted_type_offset<2> correspond au décalage de type relatif habituel à la chaîne de format de type transmis.