* always create a new call node when replacing virtual class method calls

with wrapper calls, because the parameter nodes are already bound to the
    paravarsyms of the current procdef so simply replacing the procsym and
    procdef is not enough

git-svn-id: branches/jvmbackend@18739 -
This commit is contained in:
Jonas Maebe 2011-08-20 08:30:38 +00:00
parent 084c76119b
commit 72c81d9eb1

View File

@ -563,25 +563,15 @@ implementation
if not assigned(sym) or
(sym.typ<>procsym) then
internalerror(2011072801);
{ check whether we can simply replace the symtableprocentry, or
whether we have to reresolve overloads -- can never simply
replace in case of constructor -> class method call, because
constructors have a vmt parameter and class methods don't }
if (procdefinition.proctypeoption<>potype_constructor) and
(symtableprocentry.ProcdefList.count=1) then
begin
symtableprocentry:=tprocsym(sym);
procdefinition:=tprocdef(symtableprocentry.ProcdefList[0]);
end
else
begin
remove_hidden_paras;
result:=ccallnode.create(left,tprocsym(sym),symtableproc,methodpointer,callnodeflags);
result.flags:=flags;
left:=nil;
methodpointer:=nil;
exit;
end;
{ do not simply replace the procsym/procdef in case we could
in theory do that, because the parameter nodes have already
been bound to the current procdef's parasyms }
remove_hidden_paras;
result:=ccallnode.create(left,tprocsym(sym),symtableproc,methodpointer,callnodeflags);
result.flags:=flags;
left:=nil;
methodpointer:=nil;
exit;
end;
result:=inherited pass_1;
if assigned(result) then