cast.ob 857 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. MODULE m;
  2. TYPE
  3. Base = RECORD END;
  4. Derived1 = RECORD(Base) field1: INTEGER END;
  5. PDerived1 = POINTER TO Derived1;
  6. Derived2 = RECORD(Derived1) field2: INTEGER END;
  7. PDerived2 = POINTER TO Derived2;
  8. PAnonymousDerived = POINTER TO RECORD(Base) field3: INTEGER END;
  9. VAR
  10. pb: POINTER TO Base;
  11. pd1: POINTER TO Derived1;
  12. pd2: POINTER TO Derived2;
  13. pad: PAnonymousDerived;
  14. PROCEDURE p(VAR b: Base; VAR d1: Derived1);
  15. BEGIN
  16. b(Derived1).field1 := 0;
  17. b(Derived2).field2 := 1;
  18. d1(Derived2).field2 := 2;
  19. END p;
  20. BEGIN
  21. NEW(pd2);
  22. pb := pd2;
  23. pd1 := pd2;
  24. pb(PDerived1).field1 := 0;
  25. pb(PDerived2).field2 := 1;
  26. pd1(PDerived2).field2 := 2;
  27. pb^(Derived1).field1 := 0;
  28. pb^(Derived2).field2 := 1;
  29. pd1^(Derived2).field2 := 2;
  30. NEW(pad);
  31. pb := pad;
  32. pb(PAnonymousDerived).field3 := 3;
  33. p(pd2^, pd2^);
  34. END m.