mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-12 19:09:35 +02:00

now, and always perform short circuit boolean evaluation (also in {$b+}) git-svn-id: trunk@3745 -
190 lines
3.3 KiB
ObjectPascal
190 lines
3.3 KiB
ObjectPascal
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.
|