pointer.ob 575 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. MODULE m;
  2. TYPE
  3. T = RECORD p: POINTER TO T; i: INTEGER END;
  4. PT = POINTER TO T;
  5. T2 = POINTER TO RECORD p: POINTER TO T END;
  6. PForward = POINTER TO Forward;
  7. Forward = RECORD END;
  8. VAR
  9. p: POINTER TO T;
  10. r: T;
  11. r2: T2;
  12. pf: PForward;
  13. pAnonymous: POINTER TO RECORD END;
  14. PROCEDURE passByRef(VAR p: PT);
  15. BEGIN
  16. p.i := 0;
  17. passByRef(p);
  18. passByRef(p.p);
  19. END passByRef;
  20. PROCEDURE derefAndAssign();
  21. BEGIN
  22. NEW(p);
  23. p^ := r;
  24. END derefAndAssign;
  25. BEGIN
  26. NEW(r.p);
  27. NEW(r.p.p);
  28. r.p.i := 123;
  29. NEW(r2);
  30. NEW(r2.p);
  31. NEW(pf);
  32. NEW(pAnonymous);
  33. passByRef(p);
  34. END m.