TYPECASE <ref expr> OF { "|" <case> ... } [ ELSE <stmts> ] END
where
<case> = { <type> "," ... } { "(" <id> ")" } "=>" <stmts>
<ref expr> is a pointer of some sort, and <id> is bound to the value of the reference if specified. For example:
VAR ptrVar: REFANY;
TYPECASE ptrVar OF
| NULL => (* <ptrVar> contains NIL *)
| REF CHAR => (* <ptrVar> is a pointer to a character *)
| REF INTEGER(intPtr) => (* <ptrVar> is a pointer to an integer, and
<intPtr> gets bound to that pointer value *)
ELSE
(* <ptrVar> points to something else *)
END;