Transmit_as 및 Represent_as
Transmit_as 및 represent_as 선행 토큰을 제외하고 동일한 레이아웃을 공유합니다. 토큰은 FC_TRANSMIT_AS 또는 FC_REPRESENT_AS 읽지만 기본 코드는 일반적입니다.
설명에는 다음과 같은 레이아웃이 있습니다.
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>
플래그<1> 바이트는 위쪽 플래그 니블과 낮은 맞춤 니블로 구성됩니다.
맞춤 니블은 전송된 형식의 와이어 맞춤을 유지합니다. 버퍼 크기 조정 및 형식 코드에서 전송된 형식 크기를 사용할 때 필요합니다.
플래그 니블에는 다음 플래그가 있을 수 있습니다.
#define PRESENTED_TYPE_IS_ARRAY 0x10
#define PRESENTED_TYPE_ALIGN_4 0x20
#define PRESENTED_TYPE_ALIGN_8 0x40
PRESENTED_TYPE_IS_ARRAY 플래그는 최상위 전송을 무언가의 배열이고 전달된 값으로 나타내는(또는 로 나타낸) 인수로 표시합니다. –Oi 인터프리터는 이 플래그를 사용하여 이러한 인수(실제로 배열이 아닌 스택의 포인터)를 단계별로 실행합니다. 다른 두 플래그는 이전 인터프리터에서만 스택에서 표시된 형식을 올바르게 단계별로 수행하는 데 사용됩니다.
quintuple_index<2> 는 함수의 콜백 루틴 퀸업(실제로는 4배)의 인덱스입니다. 테이블은 로 전송하고 로 나타내는 것이 일반적이며, 동일한 진입점 서비스가 로 전송하고 를 코드로 나타내기 때문에 루틴의 위치에 대한 명백한 매핑이 있습니다. 매핑은 = to_xmit, to_local> => from_xmit, free_inst => free_xmit, free_local => free_inst from_local.
presented_type_memory_size<2> 는 항상 알 수 없는 표현을 형식으로 포함하여 제공된/로컬 형식의 크기를 제공합니다.
transmitted_type_buffer_size<2> 는 크기가 다를 때 0이거나 실제 고정 크기입니다. 버퍼 크기를 조정할 때 일부 콜백을 건너뛸 수 있는 최적화입니다.
transmitted_type_offset<2> 는 전송된 형식 형식 문자열에 대한 일반적인 상대 형식 오프셋입니다.