123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- 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.
|