فهرست منبع

* maybereplacewithtemp/maybereplacewithtempref: also create a temp in case
of possible side effects

git-svn-id: trunk@42338 -

Jonas Maebe 6 سال پیش
والد
کامیت
0f57327bff
1فایلهای تغییر یافته به همراه4 افزوده شده و 2 حذف شده
  1. 4 2
      compiler/nbas.pas

+ 4 - 2
compiler/nbas.pas

@@ -385,7 +385,8 @@ implementation
     function maybereplacewithtempref(var n: tnode; var block: tblocknode; var stat: tstatementnode; size: ASizeInt; readonly: boolean): ttempcreatenode;
     function maybereplacewithtempref(var n: tnode; var block: tblocknode; var stat: tstatementnode; size: ASizeInt; readonly: boolean): ttempcreatenode;
       begin
       begin
         result:=nil;
         result:=nil;
-        if node_complexity(n) > 4 then
+        if (node_complexity(n)>4) or
+           might_have_sideeffects(n) then
           begin
           begin
             result:=ctempcreatenode.create_reference(n.resultdef,size,tt_persistent,true,n,readonly);
             result:=ctempcreatenode.create_reference(n.resultdef,size,tt_persistent,true,n,readonly);
             typecheckpass(tnode(result));
             typecheckpass(tnode(result));
@@ -400,7 +401,8 @@ implementation
     function maybereplacewithtemp(var n: tnode; var block: tblocknode; var stat: tstatementnode; size: ASizeInt; allowreg: boolean): ttempcreatenode;
     function maybereplacewithtemp(var n: tnode; var block: tblocknode; var stat: tstatementnode; size: ASizeInt; allowreg: boolean): ttempcreatenode;
       begin
       begin
         result:=nil;
         result:=nil;
-        if node_complexity(n) > 4 then
+        if (node_complexity(n)>4) or
+           might_have_sideeffects(n) then
           begin
           begin
             result:=ctempcreatenode.create_value(n.resultdef,size,tt_persistent,allowreg,n);
             result:=ctempcreatenode.create_value(n.resultdef,size,tt_persistent,allowreg,n);
             typecheckpass(tnode(result));
             typecheckpass(tnode(result));