summaryrefslogtreecommitdiff
path: root/compiler/jvm
diff options
context:
space:
mode:
authorjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2013-06-02 10:24:02 +0000
committerjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2013-06-02 10:24:02 +0000
commitf63e076319f6b745af7568b42958afd9f06e9e41 (patch)
treeb3cee24411d923b1247cbbed6e7662b82795e0bd /compiler/jvm
parent3b25c9de37f1ec2ab8e4cb1d125e8a72718d7619 (diff)
downloadfpc-f63e076319f6b745af7568b42958afd9f06e9e41.tar.gz
* add a tdef to each parameter location and set it for all target
backends (not yet used, will be used in high level code generator) git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@24761 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'compiler/jvm')
-rw-r--r--compiler/jvm/cpupara.pas15
1 files changed, 15 insertions, 0 deletions
diff --git a/compiler/jvm/cpupara.pas b/compiler/jvm/cpupara.pas
index 7d1294c11e..42abaf780d 100644
--- a/compiler/jvm/cpupara.pas
+++ b/compiler/jvm/cpupara.pas
@@ -147,6 +147,7 @@ implementation
result.size:=OS_NO;
result.intsize:=0;
paraloc^.size:=OS_NO;
+ paraloc^.def:=voidtype;
paraloc^.loc:=LOC_VOID;
exit;
end;
@@ -156,6 +157,11 @@ implementation
retcgsize:=OS_INT;
result.intsize:=sizeof(pint);
end
+ else if jvmimplicitpointertype(result.def) then
+ begin
+ retcgsize:=OS_ADDR;
+ result.def:=getpointerdef(result.def);
+ end
else
begin
retcgsize:=def_cgsize(result.def);
@@ -168,6 +174,8 @@ implementation
paraloc^.loc:=LOC_REFERENCE;
paraloc^.reference.index:=NR_EVAL_STACK_BASE;
paraloc^.reference.offset:=0;
+ paraloc^.size:=result.size;
+ paraloc^.def:=result.def;
end;
function TJVMParaManager.param_use_paraloc(const cgpara: tcgpara): boolean;
@@ -226,6 +234,11 @@ implementation
paracgsize:=OS_ADDR;
paradef:=java_jlobject;
end
+ else if jvmimplicitpointertype(hp.vardef) then
+ begin
+ paracgsize:=OS_ADDR;
+ paradef:=getpointerdef(hp.vardef);
+ end
else
begin
paracgsize:=def_cgsize(hp.vardef);
@@ -246,6 +259,8 @@ implementation
taking up two slots) }
paraloc^.loc:=LOC_REFERENCE;;
paraloc^.reference.offset:=paraofs;
+ paraloc^.size:=paracgsize;
+ paraloc^.def:=paradef;
case side of
callerside:
begin