t_resultsfx.mod 962 B

123456789101112131415161718192021222324252627282930313233343536
  1. MODULE TResultSfx;
  2. // Result suffixes: components applied to a function-call result.
  3. // P()^ dereference a pointer result
  4. // P()^.field field of a record pointed to by the result
  5. // A()[i] index an array result
  6. // Exit 42.
  7. TYPE
  8. Rec = RECORD a, b : INTEGER END;
  9. RecPtr = POINTER TO Rec;
  10. Arr = ARRAY [0..3] OF INTEGER;
  11. ArrPtr = POINTER TO Arr;
  12. VAR ExitCode : INTEGER;
  13. VAR r : RecPtr;
  14. VAR s : ArrPtr;
  15. VAR v : INTEGER;
  16. PROCEDURE GetRec () : RecPtr;
  17. BEGIN RETURN r END GetRec;
  18. PROCEDURE GetArr () : ArrPtr;
  19. BEGIN RETURN s END GetArr;
  20. PROCEDURE GetVal () : INTEGER;
  21. BEGIN RETURN 40 END GetVal;
  22. BEGIN
  23. NEW(r);
  24. NEW(s);
  25. r^.a := 40; r^.b := 2;
  26. s^[0] := 1; s^[1] := 2; s^[2] := 2; s^[3] := 4;
  27. v := GetRec()^.a + GetRec()^.b; // 42
  28. v := v + GetArr()^[1]; // 42 + 2 = 44
  29. v := v - GetVal(); // 44 - 40 = 4
  30. ExitCode := v * 10 + GetArr()^[2] // 40 + 2 = 42
  31. END TResultSfx.