Browse Source

* allow overriding tparamanager.is_stack_paraloc() and let it always
return true for the JVM target (it uses the evaluation stack to
pass all parameters)

git-svn-id: branches/jvmbackend@18324 -

Jonas Maebe 14 years ago
parent
commit
c17d022a87
2 changed files with 8 additions and 1 deletions
  1. 7 0
      compiler/jvm/cpupara.pas
  2. 1 1
      compiler/paramgr.pas

+ 7 - 0
compiler/jvm/cpupara.pas

@@ -44,6 +44,7 @@ interface
         function  get_funcretloc(p : tabstractprocdef; side: tcallercallee; def: tdef): tcgpara;override;
         function param_use_paraloc(const cgpara: tcgpara): boolean; override;
         function ret_in_param(def: tdef; calloption: tproccalloption): boolean; override;
+        function is_stack_paraloc(paraloc: pcgparalocation): boolean;override;
       private
         procedure create_funcretloc_info(p : tabstractprocdef; side: tcallercallee);
         procedure create_paraloc_info_intern(p : tabstractprocdef; side: tcallercallee; paras: tparalist;
@@ -128,6 +129,12 @@ implementation
         Result:=false;
       end;
 
+    function TJVMParaManager.is_stack_paraloc(paraloc: pcgparalocation): boolean;
+      begin
+        { all parameters are passed on the evaluation stack }
+        result:=true;
+      end;
+
 
     procedure TJVMParaManager.create_paraloc_info_intern(p : tabstractprocdef; side: tcallercallee;paras:tparalist;
                                                            var parasize:longint);

+ 1 - 1
compiler/paramgr.pas

@@ -124,7 +124,7 @@ unit paramgr;
           }
           function  create_varargs_paraloc_info(p : tabstractprocdef; varargspara:tvarargsparalist):longint;virtual;abstract;
 
-          function is_stack_paraloc(paraloc: pcgparalocation): boolean;
+          function is_stack_paraloc(paraloc: pcgparalocation): boolean;virtual;
           procedure createtempparaloc(list: TAsmList;calloption : tproccalloption;parasym : tparavarsym;can_use_final_stack_loc : boolean;var cgpara:TCGPara);virtual;
           procedure duplicatecgparaloc(const orgparaloc: pcgparalocation; intonewparaloc: pcgparalocation);
           procedure duplicateparaloc(list: TAsmList;calloption : tproccalloption;parasym : tparavarsym;var cgpara:TCGPara);