Преглед изворни кода

* optimize shortstring concatenations if they're on the right side of an assignment to directly use the left side instead of a temporary

Sven/Sarah Barth пре 2 година
родитељ
комит
02aac653d2
2 измењених фајлова са 14 додато и 2 уклоњено
  1. 7 1
      compiler/nadd.pas
  2. 7 1
      compiler/nopt.pas

+ 7 - 1
compiler/nadd.pas

@@ -3382,7 +3382,13 @@ implementation
               { create the call to the concat routine both strings as arguments }
               if assigned(aktassignmentnode) and
                   (aktassignmentnode.right=self) and
-                  (aktassignmentnode.left.resultdef=resultdef) and
+                  (
+                    (aktassignmentnode.left.resultdef=resultdef) or
+                    (
+                      is_shortstring(aktassignmentnode.left.resultdef) and
+                      is_shortstring(resultdef)
+                    )
+                  ) and
                   valid_for_var(aktassignmentnode.left,false) then
                 begin
                   para:=ccallparanode.create(

+ 7 - 1
compiler/nopt.pas

@@ -341,7 +341,13 @@ begin
   arrp.allow_array_constructor:=true;
   if assigned(aktassignmentnode) and
      (aktassignmentnode.right=p) and
-     (aktassignmentnode.left.resultdef=p.resultdef) and
+     (
+       (aktassignmentnode.left.resultdef=p.resultdef) or
+       (
+         is_shortstring(aktassignmentnode.left.resultdef) and
+         is_shortstring(p.resultdef)
+       )
+     ) and
      valid_for_var(aktassignmentnode.left,false) then
     begin
       para:=ccallparanode.create(