* fixed tb0403

This commit is contained in:
Jonas Maebe 2002-08-14 18:00:42 +00:00
parent af4302bc67
commit dc44063472

View File

@ -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