* calculate para_offset for interrupt procedures

This commit is contained in:
pierre 2000-05-09 14:19:08 +00:00
parent d380bdfec1
commit 51a1677da5

View File

@ -569,6 +569,16 @@ begin
aktprocsym^.definition^.extnumber:=get_intconst;
end;
procedure pd_interrupt(const procnames:Tstringcontainer);
begin
{$ifndef i386}
Message(parser_w_proc_interrupt_ignored);
{$else i386}
if lexlevel<>normal_function_level then
Message(parser_e_dont_nest_interrupt);
{$endif i386}
end;
procedure pd_system(const procnames:Tstringcontainer);
begin
aktprocsym^.definition^.setmangledname(realname);
@ -949,7 +959,7 @@ const
),(
idtok:_INTERRUPT;
pd_flags : pd_implemen+pd_body;
handler : nil;
handler : {$ifndef TP}@{$endif}pd_interrupt;
pocall : [];
pooption : [po_interrupt];
mutexclpocall : [pocall_internproc,pocall_cdecl,pocall_clearstack,pocall_leftright,pocall_inline];
@ -1948,6 +1958,16 @@ begin
changed by check_identical (PFV) }
procinfo^.returntype.def:=aktprocsym^.definition^.rettype.def;
{$ifdef i386}
if (po_interrupt in aktprocsym^.definition^.procoptions) then
begin
{ we push Flags and CS as long
to cope with the IRETD
and we save 6 register + 4 selectors }
inc(procinfo^.para_offset,8+6*4+4*2);
end;
{$endif i386}
{ pointer to the return value ? }
if ret_in_param(procinfo^.returntype.def) then
begin
@ -2016,7 +2036,10 @@ end.
{
$Log$
Revision 1.59 2000-04-26 08:54:19 pierre
Revision 1.60 2000-05-09 14:19:08 pierre
* calculate para_offset for interrupt procedures
Revision 1.59 2000/04/26 08:54:19 pierre
* More changes for operator bug
Order_overloaded method removed because it conflicted with
new implementation where the defs are ordered