Quellcode durchsuchen

* fixed constant evaluation of not(byte/word/long/quadbool) + test

git-svn-id: trunk@10450 -
Jonas Maebe vor 17 Jahren
Ursprung
Commit
761f2e5c93
2 geänderte Dateien mit 8 neuen und 1 gelöschten Zeilen
  1. 2 0
      compiler/nmat.pas
  2. 6 1
      tests/test/cg/tnot.pp

+ 2 - 0
compiler/nmat.pas

@@ -790,6 +790,8 @@ implementation
                bool64bit:
                  begin
                    v:=byte(not(boolean(int64(v))));
+                   if (torddef(left.resultdef).ordtype<>pasbool) then
+                     v:=-v;
                  end;
                uchar,
                uwidechar,

+ 6 - 1
tests/test/cg/tnot.pp

@@ -62,7 +62,8 @@ begin
     writeln('Passed!');
 end;
 
-
+const
+  lb = longbool(false);
 
 var
  longres :  longint;
@@ -145,6 +146,10 @@ Begin
    Write('Value should be FALSE...');
    test(ord(byteboolres),0);
 
+  longboolres:=not(lb);
+  Write('Value should be $ffffffff...');
+  test(ord(longboolres),-1);
+
   { !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! }
   { CURRENT_NODE : LOC_JUMP }
   { ???????????????????????}