|
@@ -0,0 +1,189 @@
|
|
|
+program macbool;
|
|
|
+
|
|
|
+{$mode macpas}
|
|
|
+
|
|
|
+{ checks boolean evaluation in macpas mode }
|
|
|
+
|
|
|
+var
|
|
|
+ ftruecalled, ffalsecalled: boolean;
|
|
|
+
|
|
|
+function ftrue: boolean;
|
|
|
+begin
|
|
|
+ ftruecalled := true;
|
|
|
+ ftrue := true;
|
|
|
+end;
|
|
|
+
|
|
|
+function ffalse: boolean;
|
|
|
+begin
|
|
|
+ ffalsecalled := true;
|
|
|
+ ffalse := false;
|
|
|
+end;
|
|
|
+
|
|
|
+
|
|
|
+begin
|
|
|
+ { OR and |, short circuit }
|
|
|
+{$b-}
|
|
|
+ ffalsecalled := false;
|
|
|
+ ftruecalled := false;
|
|
|
+ if (ftrue or ffalse) then
|
|
|
+ begin
|
|
|
+ if not(ftruecalled) then
|
|
|
+ halt(1);
|
|
|
+ if ffalsecalled then
|
|
|
+ halt(2);
|
|
|
+ end
|
|
|
+ else
|
|
|
+ halt(128);
|
|
|
+
|
|
|
+ ffalsecalled := false;
|
|
|
+ ftruecalled := false;
|
|
|
+ if not(ffalse or ftrue) then
|
|
|
+ halt(3);
|
|
|
+ if not(ffalsecalled) then
|
|
|
+ halt(4);
|
|
|
+ if not(ftruecalled) then
|
|
|
+ halt(5);
|
|
|
+
|
|
|
+ ffalsecalled := false;
|
|
|
+ ftruecalled := false;
|
|
|
+ if (ftrue | ffalse) then
|
|
|
+ begin
|
|
|
+ if not(ftruecalled) then
|
|
|
+ halt(6);
|
|
|
+ if ffalsecalled then
|
|
|
+ halt(7);
|
|
|
+ end
|
|
|
+ else
|
|
|
+ halt(129);
|
|
|
+
|
|
|
+ ffalsecalled := false;
|
|
|
+ ftruecalled := false;
|
|
|
+ if not(ffalse | ftrue) then
|
|
|
+ halt(8);
|
|
|
+ if not(ffalsecalled) then
|
|
|
+ halt(9);
|
|
|
+ if not(ftruecalled) then
|
|
|
+ halt(10);
|
|
|
+
|
|
|
+
|
|
|
+ { OR and |, full evaluation }
|
|
|
+{$b+}
|
|
|
+ ffalsecalled := false;
|
|
|
+ ftruecalled := false;
|
|
|
+ if (ftrue or ffalse) then
|
|
|
+ begin
|
|
|
+ if not(ftruecalled) then
|
|
|
+ halt(11);
|
|
|
+ if not(ffalsecalled) then
|
|
|
+ halt(12);
|
|
|
+ end
|
|
|
+ else
|
|
|
+ halt(130);
|
|
|
+
|
|
|
+ ffalsecalled := false;
|
|
|
+ ftruecalled := false;
|
|
|
+ if not(ffalse or ftrue) then
|
|
|
+ halt(13);
|
|
|
+ if not(ffalsecalled) then
|
|
|
+ halt(14);
|
|
|
+ if not(ftruecalled) then
|
|
|
+ halt(15);
|
|
|
+
|
|
|
+ ffalsecalled := false;
|
|
|
+ ftruecalled := false;
|
|
|
+ if (ftrue | ffalse) then
|
|
|
+ begin
|
|
|
+ if not(ftruecalled) then
|
|
|
+ halt(16);
|
|
|
+ if ffalsecalled then
|
|
|
+ halt(17);
|
|
|
+ end
|
|
|
+ else
|
|
|
+ halt(131);
|
|
|
+
|
|
|
+ ffalsecalled := false;
|
|
|
+ ftruecalled := false;
|
|
|
+ if not(ffalse | ftrue) then
|
|
|
+ halt(18);
|
|
|
+ if not(ffalsecalled) then
|
|
|
+ halt(19);
|
|
|
+ if not(ftruecalled) then
|
|
|
+ halt(20);
|
|
|
+
|
|
|
+ { AND and &, short circuit }
|
|
|
+{$b-}
|
|
|
+ ffalsecalled := false;
|
|
|
+ ftruecalled := false;
|
|
|
+ if (ftrue and ffalse) then
|
|
|
+ halt(21);
|
|
|
+ if not(ftruecalled) then
|
|
|
+ halt(211);
|
|
|
+ if not(ffalsecalled) then
|
|
|
+ halt(22);
|
|
|
+
|
|
|
+ ffalsecalled := false;
|
|
|
+ ftruecalled := false;
|
|
|
+ if (ffalse and ftrue) then
|
|
|
+ halt(23);
|
|
|
+ if not(ffalsecalled) then
|
|
|
+ halt(24);
|
|
|
+ if (ftruecalled) then
|
|
|
+ halt(25);
|
|
|
+
|
|
|
+ ffalsecalled := false;
|
|
|
+ ftruecalled := false;
|
|
|
+ if (ftrue & ffalse) then
|
|
|
+ halt(206);
|
|
|
+ if not(ftruecalled) then
|
|
|
+ halt(26);
|
|
|
+ if not(ffalsecalled) then
|
|
|
+ halt(27);
|
|
|
+
|
|
|
+ ffalsecalled := false;
|
|
|
+ ftruecalled := false;
|
|
|
+ if (ffalse & ftrue) then
|
|
|
+ halt(28);
|
|
|
+ if not(ffalsecalled) then
|
|
|
+ halt(29);
|
|
|
+ if (ftruecalled) then
|
|
|
+ halt(30);
|
|
|
+
|
|
|
+
|
|
|
+ { AND and &, full evaluation }
|
|
|
+{$b+}
|
|
|
+ ffalsecalled := false;
|
|
|
+ ftruecalled := false;
|
|
|
+ if (ftrue and ffalse) then
|
|
|
+ halt(31);
|
|
|
+ if not(ftruecalled) then
|
|
|
+ halt(111);
|
|
|
+ if not(ffalsecalled) then
|
|
|
+ halt(32);
|
|
|
+
|
|
|
+ ffalsecalled := false;
|
|
|
+ ftruecalled := false;
|
|
|
+ if (ffalse and ftrue) then
|
|
|
+ halt(33);
|
|
|
+ if not(ffalsecalled) then
|
|
|
+ halt(34);
|
|
|
+ if not(ftruecalled) then
|
|
|
+ halt(35);
|
|
|
+
|
|
|
+ ffalsecalled := false;
|
|
|
+ ftruecalled := false;
|
|
|
+ if (ftrue & ffalse) then
|
|
|
+ halt(133);
|
|
|
+ if not(ftruecalled) then
|
|
|
+ halt(36);
|
|
|
+ if not(ffalsecalled) then
|
|
|
+ halt(37);
|
|
|
+
|
|
|
+ ffalsecalled := false;
|
|
|
+ ftruecalled := false;
|
|
|
+ if (ffalse & ftrue) then
|
|
|
+ halt(38);
|
|
|
+ if not(ffalsecalled) then
|
|
|
+ halt(39);
|
|
|
+ if (ftruecalled) then
|
|
|
+ halt(40);
|
|
|
+end.
|