* Place old data in compile() in the heap to save stack

This commit is contained in:
peter 2002-10-07 19:29:52 +00:00
parent 2a8cff3e51
commit e08206f2dc

View File

@ -233,7 +233,9 @@ implementation
procedure compile(const filename:string);
var
type
polddata=^tolddata;
tolddata=record
{ scanner }
oldidtoken,
oldtoken : ttoken;
@ -282,23 +284,29 @@ implementation
old_compiled_module : tmodule;
oldaktdefproccall : tproccalloption;
oldsourcecodepage : tcodepagestring;
{ will only be increased once we start parsing blocks in the }
{ implementation, so doesn't need to be saved/restored (JM) }
{ oldexceptblockcounter : integer; }
oldstatement_level : integer;
{$ifdef GDB}
store_dbx : plongint;
{$endif GDB}
end;
var
olddata : polddata;
{$ifdef USEEXCEPT}
{$ifndef Delphi}
recoverpos : jmp_buf;
oldrecoverpos : pjmp_buf;
{$endif Delphi}
{$endif useexcept}
{$ifdef GDB}
store_dbx : plongint;
{$endif GDB}
begin
inc(compile_level);
parser_current_file:=filename;
{ Uses heap memory instead of placing everything on the
stack. This is needed because compile() can be called
recursively }
new(olddata);
with olddata^ do
begin
old_compiled_module:=compiled_module;
{ save symtable state }
oldsymtablestack:=symtablestack;
@ -354,11 +362,11 @@ implementation
oldaktfilepos:=aktfilepos;
oldaktmodeswitches:=aktmodeswitches;
oldstatement_level:=statement_level;
{ oldexceptblockcounter:=exceptblockcounter; }
{$ifdef GDB}
store_dbx:=dbx_counter;
dbx_counter:=nil;
{$endif GDB}
end;
{ show info }
Message1(parser_i_compiling,filename);
@ -482,9 +490,8 @@ implementation
if (compile_level>1) then
begin
{$ifdef GDB}
dbx_counter:=store_dbx;
{$endif GDB}
with olddata^ do
begin
{ restore scanner }
c:=oldc;
pattern:=oldpattern;
@ -540,6 +547,10 @@ implementation
statement_level:=oldstatement_level;
aktexceptblock:=0;
exceptblockcounter:=0;
{$ifdef GDB}
dbx_counter:=store_dbx;
{$endif GDB}
end;
end
else
begin
@ -594,7 +605,10 @@ implementation
end;
dec(compile_level);
compiled_module:=old_compiled_module;
compiled_module:=olddata^.old_compiled_module;
dispose(olddata);
{$ifdef USEEXCEPT}
if longjump_used then
longjmp(recoverpospointer^,1);
@ -604,7 +618,10 @@ implementation
end.
{
$Log$
Revision 1.44 2002-09-05 19:27:06 peter
Revision 1.45 2002-10-07 19:29:52 peter
* Place old data in compile() in the heap to save stack
Revision 1.44 2002/09/05 19:27:06 peter
* fixed crash when current_module becomes nil
Revision 1.43 2002/08/18 19:58:28 peter