Browse Source

* committed wrong file in r2614 (ncal.pas instead of pexpr.pas)

git-svn-id: trunk@2616 -
Jonas Maebe 19 years ago
parent
commit
791be20f28
2 changed files with 8 additions and 19 deletions
  1. 5 17
      compiler/ncal.pas
  2. 3 2
      compiler/pexpr.pas

+ 5 - 17
compiler/ncal.pas

@@ -703,7 +703,7 @@ type
                          (tloadnode(left).is_addr_param_load)
                         )
                     ) then
-                   make_not_regable(left,false);
+                   make_not_regable(left);
 
                  if do_count then
                   begin
@@ -2218,12 +2218,9 @@ type
                    )
                   ) then
                   begin
-                    { make sure records which could be written to are not }
-                    { kept in a register                                  }
-                    tempnode := ctempcreatenode.create(para.parasym.vartype,para.parasym.vartype.def.size,tt_persistent,
-                      (tparavarsym(para.parasym).varregable <> vr_none) and
-                      ((para.parasym.vartype.def.deftype <> recorddef) or
-                       not(para.parasym.varspez in [vs_var,vs_out])));
+                    { in theory, this is always regable, but ncgcall can't }
+                    { handle it yet in all situations (JM)                 }
+                    tempnode := ctempcreatenode.create(para.parasym.vartype,para.parasym.vartype.def.size,tt_persistent,tparavarsym(para.parasym).varregable <> vr_none);
                     addstatement(createstatement,tempnode);
                     { assign the value of the parameter to the temp, except in case of the function result }
                     { (in that case, para.left is a block containing the creation of a new temp, while we  }
@@ -2257,16 +2254,7 @@ type
                       caddrnode.create_internal(para.left)));
                     para.left := ctypeconvnode.create_internal(cderefnode.create(ctemprefnode.create(tempnode)),para.left.resulttype);
                     addstatement(deletestatement,ctempdeletenode.create(tempnode));
-                  end
-                { the regvar status of vs_var/vs_out paras is never changed, }
-                { so in case the are records turn of regvarability of the    }
-                { para (because we can't write to regvar records yet)        }
-                else if (para.parasym.vartype.def.deftype = recorddef) and
-                        (para.parasym.varspez in [vs_var,vs_out]) then
-                  if (para.left.nodetype = blockn) then
-                    make_not_regable(laststatement(tblocknode(para.left)),true)
-                  else
-                    make_not_regable(para.left,true);
+                  end;
               end;
             para := tcallparanode(para.right);
           end;

+ 3 - 2
compiler/pexpr.pas

@@ -663,10 +663,11 @@ implementation
                   consume(_LKLAMMER);
                   in_args:=true;
                   p1:=comp_expr(true);
-                  if try_to_consume(_COMMA) then
+                  Consume(_COMMA);
+                  if not(codegenerror) then
                     p2:=ccallparanode.create(comp_expr(true),nil)
                   else
-                    p2:=nil;
+                    p2:=cerrornode.create;
                   p2:=ccallparanode.create(p1,p2);
                   statement_syssym:=geninlinenode(l,false,p2);
                   consume(_RKLAMMER);