Bladeren bron

+ fold also divisons involving pointer constants (those nodes are internally generated only)

florian 1 jaar geleden
bovenliggende
commit
48eeaf00a4
1 gewijzigde bestanden met toevoegingen van 23 en 3 verwijderingen
  1. 23 3
      compiler/nmat.pas

+ 23 - 3
compiler/nmat.pas

@@ -215,10 +215,30 @@ implementation
                 exit;
                 exit;
               end;
               end;
 
 
-            if is_constintnode(left) then
+            { pointer subtractions generate nodes dividing pointer (constants) }
+            if is_constintnode(left) or is_constpointernode(left) then
               begin
               begin
-                rv:=tordconstnode(right).value;
-                lv:=tordconstnode(left).value;
+                { load values }
+                case left.nodetype of
+                  ordconstn:
+                    lv:=tordconstnode(left).value;
+                  pointerconstn:
+                    lv:=tpointerconstnode(left).value;
+                  niln:
+                    lv:=0;
+                  else
+                    internalerror(2024041501);
+                end;
+                case right.nodetype of
+                  ordconstn:
+                    rv:=tordconstnode(right).value;
+                  pointerconstn:
+                    rv:=tpointerconstnode(right).value;
+                  niln:
+                    rv:=0;
+                  else
+                    internalerror(2024041502);
+                end;
 
 
                 case nodetype of
                 case nodetype of
                   modn:
                   modn: