Como se deixou antever nas secções anterior, os tipos dos objectos referenciados em tempo de execução podem não ser mantidos directamente pelos mecanismos da linguagem, mas sim através de um identificador exterior: TypeId. A representação independente da linguagem requer tratamento assistido por código especializado. Esta secção descreve os mecanismos utilizados para manipular tipo em tempo de execução, desde a criação de objectos até às operações de conversão entre tipos. Os identificadores de tipos serão designados por TID.
Quando a hierarquia de classes original é processada, são criados
TIDs, um por cada tipo de envelope e de possíveis objectos que ele
venha a guardar. Cada TID pode ser referenciado através de uma
variável global de nome SPM_quot
__" classnameSPM_quot
__TypeName",
em que classname é o nome da interface da classe.
Para um sistema contendo a classe Line e um módulo de
distribuição, um envelope poderia incluir a carta, da classe
LineLetter ou o seu representante, da classe LineClient. Os
TIDs possíveis seriam SPM_quot
__Line__TypeName",
SPM_quot
__LineLetter__TypeName" e SPM_quot
__LineClient__TypeName",
respectivamente, para o envelope, para a carta, e para o
representante.
Os TIDs são criados e destruídos automaticamente e apenas existem duas
operações que, sobre um, se podem efectuar. A primeira,
SPM_quot
LL_TYPEID_INI(tid,var)", permite ``declarar uma variável'',
consistindo em associar um TID a uma CAGE. Esta operação é realizada
quando o envelope cria a carta. A segunda operação,
SPM_quot
LL_TYPEID_CMP(tid1,tid2)", permite verificar se dois TIDs são
iguais e é utilizada sempre que se pretende recuperar o tipo de um
objecto que está no interior de uma CAGE.
A recuperação dos tipos reais dos objectos em tempo de execução será apresentada quando se descrever a forma de invocação de cada um.