mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-18 03:09:11 +02:00
* fixed tb0403
This commit is contained in:
parent
af4302bc67
commit
dc44063472
@ -332,16 +332,27 @@ implementation
|
||||
if (po_virtualmethod in tprocdef(resulttype.def).procoptions) then
|
||||
begin
|
||||
if not freereg then
|
||||
internalerror(200205161);
|
||||
{ load vmt pointer }
|
||||
reference_reset_base(href,hregister,0);
|
||||
reference_release(exprasmlist,href);
|
||||
hregister:=rg.getaddressregister(exprasmlist);
|
||||
cg.a_load_ref_reg(exprasmlist,OS_ADDR,href,hregister);
|
||||
{ load method address }
|
||||
reference_reset_base(href,hregister,tprocdef(resulttype.def)._class.vmtmethodoffset(
|
||||
begin
|
||||
if left.nodetype <> typen then
|
||||
internalerror(200205161);
|
||||
reference_reset_symbol(href,newasmsymbol(tobjectdef(left.resulttype.def).vmt_mangledname),
|
||||
tprocdef(resulttype.def)._class.vmtmethodoffset(tprocdef(resulttype.def).extnumber));
|
||||
end
|
||||
else
|
||||
begin
|
||||
{ load vmt pointer }
|
||||
reference_reset_base(href,hregister,0);
|
||||
reference_release(exprasmlist,href);
|
||||
hregister:=rg.getaddressregister(exprasmlist);
|
||||
cg.a_load_ref_reg(exprasmlist,OS_ADDR,href,hregister);
|
||||
|
||||
|
||||
reference_reset_base(href,hregister,tprocdef(resulttype.def)._class.vmtmethodoffset(
|
||||
tprocdef(resulttype.def).extnumber));
|
||||
reference_release(exprasmlist,href);
|
||||
reference_release(exprasmlist,href);
|
||||
end;
|
||||
|
||||
{ load method address }
|
||||
hregister:=rg.getaddressregister(exprasmlist);
|
||||
cg.a_load_ref_reg(exprasmlist,OS_ADDR,href,hregister);
|
||||
{ ... and store it }
|
||||
@ -352,7 +363,7 @@ implementation
|
||||
begin
|
||||
{ we don't use the hregister }
|
||||
if freereg then
|
||||
rg.ungetregisterint(exprasmlist,hregister);
|
||||
rg.ungetregister(exprasmlist,hregister);
|
||||
{ load address of the function }
|
||||
reference_reset_symbol(href,objectlibrary.newasmsymbol(tprocdef(resulttype.def).mangledname),0);
|
||||
hregister:=cg.get_scratch_reg_address(exprasmlist);
|
||||
@ -931,7 +942,10 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.21 2002-08-13 21:40:56 florian
|
||||
Revision 1.22 2002-08-14 18:00:42 jonas
|
||||
* fixed tb0403
|
||||
|
||||
Revision 1.21 2002/08/13 21:40:56 florian
|
||||
* more fixes for ppc calling conventions
|
||||
|
||||
Revision 1.20 2002/08/11 14:32:26 peter
|
||||
|
Loading…
Reference in New Issue
Block a user