Browse Source

* copyout parameters also have to return "true" for is_addr_param_load()

git-svn-id: branches/jvmbackend@18592 -
Jonas Maebe 14 years ago
parent
commit
23e4405c78
1 changed files with 17 additions and 5 deletions
  1. 17 5
      compiler/jvm/njvmld.pas

+ 17 - 5
compiler/jvm/njvmld.pas

@@ -33,6 +33,9 @@ uses
 
 
 type
 type
   tjvmloadnode = class(tcgnestloadnode)
   tjvmloadnode = class(tcgnestloadnode)
+   protected
+    function is_copyout_addr_param_load: boolean;
+   public
     function is_addr_param_load: boolean; override;
     function is_addr_param_load: boolean; override;
     procedure pass_generate_code; override;
     procedure pass_generate_code; override;
   end;
   end;
@@ -115,19 +118,28 @@ function tjvmassignmentnode.pass_1: tnode;
   end;
   end;
 
 
 
 
+function tjvmloadnode.is_copyout_addr_param_load: boolean;
+  begin
+    result:=
+      { passed via array of one element }
+      ((symtable.symtabletype=parasymtable) and
+       (symtableentry.typ=paravarsym) and
+       paramanager.push_copyout_param(tparavarsym(symtableentry).varspez,resultdef,tprocdef(symtable.defowner).proccalloption));
+  end;
+
+
 function tjvmloadnode.is_addr_param_load: boolean;
 function tjvmloadnode.is_addr_param_load: boolean;
   begin
   begin
     result:=
     result:=
-      inherited and
-      not jvmimplicitpointertype(tparavarsym(symtableentry).vardef);
+      (inherited and
+       not jvmimplicitpointertype(tparavarsym(symtableentry).vardef)) or
+      is_copyout_addr_param_load;
   end;
   end;
 
 
 
 
 procedure tjvmloadnode.pass_generate_code;
 procedure tjvmloadnode.pass_generate_code;
   begin
   begin
-    if (symtable.symtabletype=parasymtable) and
-       (symtableentry.typ=paravarsym) and
-       paramanager.push_copyout_param(tparavarsym(symtableentry).varspez,resultdef,tprocdef(symtable.defowner).proccalloption) then
+    if is_copyout_addr_param_load then
       begin
       begin
         { the parameter is passed as an array of one element containing the
         { the parameter is passed as an array of one element containing the
           parameter value }
           parameter value }