MODULE m; TYPE T = RECORD p: POINTER TO T; i: INTEGER END; PT = POINTER TO T; T2 = POINTER TO RECORD p: POINTER TO T END; PForward = POINTER TO Forward; Forward = RECORD END; VAR p: POINTER TO T; r: T; r2: T2; pf: PForward; pAnonymous: POINTER TO RECORD END; PROCEDURE passByRef(VAR p: PT); BEGIN p.i := 0; passByRef(p); passByRef(p.p); END passByRef; PROCEDURE derefAndAssign(); BEGIN NEW(p); p^ := r; END derefAndAssign; BEGIN NEW(r.p); NEW(r.p.p); r.p.i := 123; NEW(r2); NEW(r2.p); NEW(pf); NEW(pAnonymous); passByRef(p); END m.