Ver Fonte

* integrated hack from 1.0.x so we can parse low(int64) as int64 instead
of as double (in 1.0.x, it was necessary for low(longint))

Jonas Maebe há 22 anos atrás
pai
commit
b46b7ff792
1 ficheiros alterados com 35 adições e 3 exclusões
  1. 35 3
      compiler/pexpr.pas

+ 35 - 3
compiler/pexpr.pas

@@ -2200,8 +2200,36 @@ implementation
            _MINUS :
              begin
                consume(_MINUS);
-               p1:=sub_expr(oppower,false);
-               p1:=cunaryminusnode.create(p1);
+               if (token = _INTCONST) then
+                  begin
+                    { ugly hack, but necessary to be able to parse }
+                    { -9223372036854775808 as int64 (JM)           }
+                    pattern := '-'+pattern;
+                    p1:=sub_expr(oppower,false);
+                    {  -1 ** 4 should be - (1 ** 4) and not
+                       (-1) ** 4
+                       This was the reason of tw0869.pp test failure PM }
+                    if p1.nodetype=starstarn then
+                      begin
+                        if tbinarynode(p1).left.nodetype=ordconstn then
+                          begin
+                            tordconstnode(tbinarynode(p1).left).value:=-tordconstnode(tbinarynode(p1).left).value;
+                            p1:=cunaryminusnode.create(p1);
+                          end
+                        else if tbinarynode(p1).left.nodetype=realconstn then
+                          begin
+                            trealconstnode(tbinarynode(p1).left).value_real:=-trealconstnode(tbinarynode(p1).left).value_real;
+                            p1:=cunaryminusnode.create(p1);
+                          end
+                        else
+                          internalerror(20021029);
+                      end;
+                  end
+               else
+                 begin
+                   p1:=sub_expr(oppower,false);
+                   p1:=cunaryminusnode.create(p1);
+                 end;
              end;
 
            _OP_NOT :
@@ -2497,7 +2525,11 @@ implementation
 end.
 {
   $Log$
-  Revision 1.144  2003-12-08 22:35:28  peter
+  Revision 1.145  2003-12-29 17:19:35  jonas
+    * integrated hack from 1.0.x so we can parse low(int64) as int64 instead
+      of as double (in 1.0.x, it was necessary for low(longint))
+
+  Revision 1.144  2003/12/08 22:35:28  peter
     * again procvar fixes
 
   Revision 1.143  2003/11/29 16:19:54  peter