Browse Source

* fixed <ordinal>+<pointer>

florian 21 years ago
parent
commit
35f9b5a3ee
1 changed files with 19 additions and 7 deletions
  1. 19 7
      compiler/nadd.pas

+ 19 - 7
compiler/nadd.pas

@@ -1149,7 +1149,9 @@ implementation
               begin
                 resulttype.setdef(tpointerdef.create(tarraydef(rd).elementtype));
                 inserttypeconv(right,resulttype);
-              end;
+              end
+            else
+              resulttype:=right.resulttype;
             inserttypeconv(left,sinttype);
             if nodetype=addn then
               begin
@@ -1158,8 +1160,10 @@ implementation
                   CGMessage3(type_e_operator_not_supported_for_types,node2opstr(nodetype),ld.typename,rd.typename);
                 if (rd.deftype=pointerdef) and
                    (tpointerdef(rd).pointertype.def.size>1) then
-                  left:=caddnode.create(muln,left,
-                      cordconstnode.create(tpointerdef(rd).pointertype.def.size,sinttype,true));
+                   begin
+                     left:=caddnode.create(muln,left,
+                       cordconstnode.create(tpointerdef(rd).pointertype.def.size,sinttype,true));
+                   end;
               end
             else
               CGMessage3(type_e_operator_not_supported_for_types,node2opstr(nodetype),ld.typename,rd.typename);
@@ -1171,7 +1175,10 @@ implementation
                begin
                   resulttype.setdef(tpointerdef.create(tarraydef(ld).elementtype));
                   inserttypeconv(left,resulttype);
-               end;
+               end
+             else
+               resulttype:=left.resulttype;
+
              inserttypeconv(right,sinttype);
              if nodetype in [addn,subn] then
                begin
@@ -1180,8 +1187,10 @@ implementation
                    CGMessage3(type_e_operator_not_supported_for_types,node2opstr(nodetype),ld.typename,rd.typename);
                  if (ld.deftype=pointerdef) and
                     (tpointerdef(ld).pointertype.def.size>1) then
-                   right:=caddnode.create(muln,right,
-                     cordconstnode.create(tpointerdef(ld).pointertype.def.size,sinttype,true));
+                   begin
+                     right:=caddnode.create(muln,right,
+                       cordconstnode.create(tpointerdef(ld).pointertype.def.size,sinttype,true));
+                   end;
                end
              else
                CGMessage3(type_e_operator_not_supported_for_types,node2opstr(nodetype),ld.typename,rd.typename);
@@ -1948,7 +1957,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.119  2004-05-20 21:54:33  florian
+  Revision 1.120  2004-05-21 13:08:14  florian
+    * fixed <ordinal>+<pointer>
+
+  Revision 1.119  2004/05/20 21:54:33  florian
     + <pointer> - <pointer> result is divided by the pointer element size now
       this is delphi compatible as well as resulting in the expected result for p1+(p2-p1)