MODULE TResultSfx; // Result suffixes: components applied to a function-call result. // P()^ dereference a pointer result // P()^.field field of a record pointed to by the result // A()[i] index an array result // Exit 42. TYPE Rec = RECORD a, b : INTEGER END; RecPtr = POINTER TO Rec; Arr = ARRAY [0..3] OF INTEGER; ArrPtr = POINTER TO Arr; VAR ExitCode : INTEGER; VAR r : RecPtr; VAR s : ArrPtr; VAR v : INTEGER; PROCEDURE GetRec () : RecPtr; BEGIN RETURN r END GetRec; PROCEDURE GetArr () : ArrPtr; BEGIN RETURN s END GetArr; PROCEDURE GetVal () : INTEGER; BEGIN RETURN 40 END GetVal; BEGIN NEW(r); NEW(s); r^.a := 40; r^.b := 2; s^[0] := 1; s^[1] := 2; s^[2] := 2; s^[3] := 4; v := GetRec()^.a + GetRec()^.b; // 42 v := v + GetArr()^[1]; // 42 + 2 = 44 v := v - GetVal(); // 44 - 40 = 4 ExitCode := v * 10 + GetArr()^[2] // 40 + 2 = 42 END TResultSfx.