#PUSH !q
#DTYPE Q$ !1
#IF (!q=-1) // undefined type error
#ERROR DFERR_COMP_INVALID_DATATYPE (!1)
#ELSE
#IF (!q=19) // a struct
#PUSH !h
#STRG H$ !1
#IFSAME !2 BYREF
#REPLACE !3 |RK-!ZGV!h
#ELSE
#REPLACE !2 |SK-!ZGV!h
#ENDIF
#POP H$
#ELSE // not a struct
#SPUSH
#DTSYM !1 // moves datatype Letter ID into !$
#IFSAME !2 BYREF
#REPLACE !3 |R!$-!ZG
#ELSE
#REPLACE !2 |S!$-!ZG
#ENDIF
#SPOP
#ENDIF
#ENDIF
#POP Q$