MODULE TProcType2; // ISO/PIM procedure-type syntax: comma-separated unnamed parameter // types (ARRAY OF CHAR, ...; CHAR, VAR T, ...), named groups, and PROC // as a result type. Exit 42. TYPE Error_Proc = PROCEDURE(ARRAY OF CHAR, ARRAY OF CHAR); ScanClass = (padding, valid, invalid, terminator); ScanState = PROCEDURE (CHAR, VAR ScanClass, VAR ScanState); GetProc = PROCEDURE() : PROC; Named = PROCEDURE (a, b : INTEGER) : INTEGER; VAR ExitCode : INTEGER; VAR e : Error_Proc; VAR s : ScanState; VAR g : GetProc; VAR n : Named; PROCEDURE Err (a, b: ARRAY OF CHAR); BEGIN END Err; PROCEDURE Scan (c: CHAR; VAR cls: ScanClass; VAR st: ScanState); BEGIN END Scan; PROCEDURE Idle; BEGIN END Idle; PROCEDURE Get () : PROC; BEGIN RETURN Idle END Get; PROCEDURE Add (a, b: INTEGER) : INTEGER; BEGIN RETURN a + b END Add; BEGIN e := Err; s := Scan; g := Get; n := Add; IF n(20, 22) = 42 THEN ExitCode := 42 ELSE ExitCode := 1 END END TProcType2.