Sfoglia il codice sorgente

* get rid of aktcallnode

florian 6 giorni fa
parent
commit
9ae7eba247
2 ha cambiato i file con 567 aggiunte e 568 eliminazioni
  1. 557 551
      compiler/ncal.pas
  2. 10 17
      compiler/ncgcal.pas

File diff suppressed because it is too large
+ 557 - 551
compiler/ncal.pas


+ 10 - 17
compiler/ncgcal.pas

@@ -334,13 +334,13 @@ implementation
       begin
         hlcg.maybe_change_load_node_reg(current_asmdata.CurrAsmList,left,true);
 
-        paramanager.createtempparaloc(current_asmdata.CurrAsmList,aktcallnode.procdefinition.proccalloption,parasym,not followed_by_stack_tainting_call_cached,tempcgpara);
+        paramanager.createtempparaloc(current_asmdata.CurrAsmList,callnode.procdefinition.proccalloption,parasym,not followed_by_stack_tainting_call_cached,tempcgpara);
 
         { handle varargs first, because parasym is not valid }
         if (cpf_varargs_para in callparaflags) then
           begin
             if paramanager.push_addr_param(vs_value,left.resultdef,
-                   aktcallnode.procdefinition.proccalloption) then
+                   callnode.procdefinition.proccalloption) then
               push_addr_para
             else
               push_value_para;
@@ -362,13 +362,13 @@ implementation
                        param if the method is part of a type helper which
                        extends a pointer type }
                      (vo_is_self in parasym.varoptions) and
-                     (aktcallnode.procdefinition.owner.symtabletype=objectsymtable) and
-                     (is_objectpascal_helper(tdef(aktcallnode.procdefinition.owner.defowner))) and
-                     (tobjectdef(aktcallnode.procdefinition.owner.defowner).extendeddef.typ=pointerdef)
+                     (callnode.procdefinition.owner.symtabletype=objectsymtable) and
+                     (is_objectpascal_helper(tdef(callnode.procdefinition.owner.defowner))) and
+                     (tobjectdef(callnode.procdefinition.owner.defowner).extendeddef.typ=pointerdef)
                    )
                  ) and
                 paramanager.push_addr_param(parasym.varspez,parasym.vardef,
-                    aktcallnode.procdefinition.proccalloption));
+                    callnode.procdefinition.proccalloption));
 
             if pushaddr then
               begin
@@ -385,7 +385,7 @@ implementation
           push_formal_para
         { Normal parameter }
         else if paramanager.push_copyout_param(parasym.varspez,parasym.vardef,
-                    aktcallnode.procdefinition.proccalloption) then
+                    callnode.procdefinition.proccalloption) then
           push_copyout_para
         else
           begin
@@ -396,7 +396,7 @@ implementation
                     (left.resultdef.typ in [pointerdef,classrefdef])
                    ) and
                 paramanager.push_addr_param(parasym.varspez,parasym.vardef,
-                    aktcallnode.procdefinition.proccalloption)) and
+                    callnode.procdefinition.proccalloption)) and
                 { dyn. arrays passed to an array of const must be passed by value, see tests/webtbs/tw4219.pp }
                 not(
                     is_array_of_const(parasym.vardef) and
@@ -432,12 +432,12 @@ implementation
              { for type helper/record constructor check that it is self parameter }
              (
                (vo_is_self in parasym.varoptions) and
-               (aktcallnode.procdefinition.proctypeoption=potype_constructor) and
+               (callnode.procdefinition.proctypeoption=potype_constructor) and
                (parasym.vardef.typ<>objectdef)
              ) or
              (vo_is_funcret in parasym.varoptions)
            ) then
-          location_copy(aktcallnode.location,left.location);
+          location_copy(callnode.location,left.location);
       end;
 
 
@@ -989,7 +989,6 @@ implementation
         href : treference;
         pop_size : longint;
         pvreg : tregister;
-        oldaktcallnode : tcallnode;
         retlocitem: pcgparalocation;
         callpvdef: tabstractprocdef;
         pd : tprocdef;
@@ -1050,14 +1049,8 @@ implementation
               end;
           end;
 
-         { Process parameters, register parameters will be loaded
-           in imaginary registers. The actual load to the correct
-           register is done just before the call }
-         oldaktcallnode:=aktcallnode;
-         aktcallnode:=self;
          if assigned(left) then
            tcallparanode(left).secondcallparan;
-         aktcallnode:=oldaktcallnode;
 
          { procedure variable or normal function call ? }
          if (right=nil) then

Some files were not shown because too many files changed in this diff