case.ob 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. MODULE m;
  2. CONST
  3. ch1 = "a";
  4. constI = 12;
  5. TYPE
  6. Base = RECORD
  7. END;
  8. PBase = POINTER TO Base;
  9. Derived = RECORD(Base)
  10. i: INTEGER
  11. END;
  12. PDerived = POINTER TO Derived;
  13. Derived2 = RECORD(Base)
  14. i2: INTEGER
  15. END;
  16. PDerived2 = POINTER TO Derived2;
  17. T = RECORD
  18. b: PBase
  19. END;
  20. VAR i: INTEGER;
  21. b1: BOOLEAN;
  22. i1: INTEGER;
  23. byte: BYTE;
  24. c: CHAR;
  25. PROCEDURE caseIntByVar(VAR i: INTEGER);
  26. BEGIN
  27. CASE i OF
  28. | 1:
  29. i := 1;
  30. END;
  31. END caseIntByVar;
  32. PROCEDURE caseRef(VAR p: Base);
  33. PROCEDURE passRef(p: Derived); END passRef;
  34. PROCEDURE passRefVar(VAR p: Derived2); END passRefVar;
  35. BEGIN
  36. CASE p OF
  37. | Derived:
  38. passRef(p);
  39. | Derived2:
  40. passRefVar(p);
  41. END;
  42. END caseRef;
  43. PROCEDURE casePointer(p: PBase);
  44. PROCEDURE passRef(p: Derived); END passRef;
  45. PROCEDURE passRefVar(VAR p: Derived2); END passRefVar;
  46. BEGIN
  47. CASE p OF END;
  48. CASE p OF
  49. |
  50. END;
  51. CASE p OF
  52. | PDerived:
  53. passRef(p^);
  54. | PDerived2:
  55. passRefVar(p^);
  56. END;
  57. CASE p OF
  58. | PDerived:
  59. p.i := 0;
  60. END;
  61. CASE p OF
  62. | PDerived:
  63. p.i := 0;
  64. | PDerived2:
  65. p.i2 := 0;
  66. END;
  67. END casePointer;
  68. PROCEDURE caseExpression(r: T);
  69. BEGIN
  70. CASE r.b OF
  71. | PDerived:
  72. | PDerived2:
  73. END;
  74. END caseExpression;
  75. PROCEDURE casePointerDereference(p: PBase);
  76. BEGIN
  77. CASE p^ OF
  78. | Derived:
  79. | Derived2:
  80. END;
  81. END casePointerDereference;
  82. PROCEDURE casePointerByVar(VAR p: PBase);
  83. BEGIN
  84. CASE p OF
  85. | PDerived:
  86. | PDerived2:
  87. END;
  88. END casePointerByVar;
  89. BEGIN
  90. CASE i1 OF END;
  91. CASE i1 OF
  92. |
  93. END;
  94. CASE i1 OF
  95. | 1: b1 := FALSE
  96. END;
  97. CASE 123 OF 1: b1 := TRUE END;
  98. CASE i1 OF
  99. 1: i := 2
  100. | 2: i := 3; b1 := FALSE
  101. END;
  102. CASE i1 OF
  103. 1: i := 2
  104. | 2: i := 3; b1 := FALSE
  105. END;
  106. CASE i1 OF
  107. 1, 2, 3: i := 4
  108. | constI: i := constI
  109. | 4..5: i := 5
  110. | 6, 7..10: b1 := TRUE
  111. END;
  112. CASE byte OF
  113. 1: i := 2
  114. | 257: i := 3
  115. | 4..constI: i := 5
  116. END;
  117. CASE c OF
  118. "A": i := 1
  119. | ch1: i := 2
  120. | "B", "C": i := 2
  121. | "D".."F", "I", "J": i:=3
  122. | "K".."Z": b1:= TRUE
  123. END;
  124. CASE ch1 OF
  125. "A": i := 1
  126. END;
  127. CASE "A" OF
  128. ch1: i := 1
  129. END;
  130. CASE constI OF
  131. 1: i := 1
  132. END;
  133. CASE 123 OF
  134. 1: i := 1
  135. END
  136. END m.