Давайте уж и конструктивный ответ сообразим:

Пусть VAR t: POINTER TO Type;
и у Type есть расширения Type1 ...
и есть VAR t1: Type1 ...

Возникнет ли проблема в такой конструкции:

IF t IS Type1 THEN
t1 := t(Type1);
(* работаем с t1; подмена ссылки t не меняет ссылки t1 *)
ELSIF t IS Type2 THEN
t2 := t(Type2);
...