mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-16 23:21:57 +02:00
* set flag if a procedure references a symbol in staticsymtable
This commit is contained in:
parent
783a04af23
commit
2a20174317
@ -237,8 +237,9 @@ than 255 characters. That's why using Ansi Strings}
|
||||
pi_uses_fpu,
|
||||
{ procedure uses GOT for PIC code }
|
||||
pi_needs_got,
|
||||
{ references local var/proc }
|
||||
pi_inline_local_only
|
||||
{ references var/proc/type/const in static symtable,
|
||||
i.e. not allowed for inlining from other units }
|
||||
pi_uses_static_symtable
|
||||
);
|
||||
tprocinfoflags=set of tprocinfoflag;
|
||||
|
||||
@ -315,7 +316,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.65 2004-12-15 21:08:15 peter
|
||||
Revision 1.66 2004-12-27 16:35:48 peter
|
||||
* set flag if a procedure references a symbol in staticsymtable
|
||||
|
||||
Revision 1.65 2004/12/15 21:08:15 peter
|
||||
* disable inlining across units when the inline procedure references
|
||||
a variable or procedure in the static symtable
|
||||
|
||||
|
@ -959,20 +959,6 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
function checklocalinlining(var n: tnode; arg: pointer): foreachnoderesult;
|
||||
begin
|
||||
result:=fen_false;
|
||||
case n.nodetype of
|
||||
loadn :
|
||||
if tloadnode(n).symtableentry.owner.symtabletype=staticsymtable then
|
||||
result:=fen_norecurse_true;
|
||||
calln :
|
||||
if tcallnode(n).procdefinition.owner.symtabletype=staticsymtable then
|
||||
result:=fen_norecurse_true;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
procedure tcgprocinfo.parse_body;
|
||||
var
|
||||
oldprocinfo : tprocinfo;
|
||||
@ -1060,9 +1046,6 @@ implementation
|
||||
include(procdef.procoptions,po_has_inlininginfo);
|
||||
procdef.inlininginfo^.code:=code.getcopy;
|
||||
procdef.inlininginfo^.flags:=current_procinfo.flags;
|
||||
{ References a local var or proc? }
|
||||
if foreachnodestatic(procdef.inlininginfo^.code,@checklocalinlining,nil) then
|
||||
include(procdef.inlininginfo^.flags,pi_inline_local_only);
|
||||
{ The blocknode needs to set an exit label }
|
||||
if procdef.inlininginfo^.code.nodetype=blockn then
|
||||
include(procdef.inlininginfo^.code.flags,nf_block_with_exit);
|
||||
@ -1464,7 +1447,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.226 2004-12-27 14:41:09 jonas
|
||||
Revision 1.227 2004-12-27 16:35:48 peter
|
||||
* set flag if a procedure references a symbol in staticsymtable
|
||||
|
||||
Revision 1.226 2004/12/27 14:41:09 jonas
|
||||
- disable inlining for any procedure that contains assembler. Could
|
||||
be enabled again if the procedure has neither local variables nor
|
||||
parameters.
|
||||
|
@ -1799,6 +1799,12 @@ implementation
|
||||
end;
|
||||
if Tsym(srsym).is_visible_for_object(topclass) then
|
||||
begin
|
||||
{ we need to know if a procedure references symbols
|
||||
in the static symtable, because then it can't be
|
||||
inlined from outside this unit }
|
||||
if assigned(current_procinfo) and
|
||||
(srsym.owner.symtabletype=staticsymtable) then
|
||||
include(current_procinfo.flags,pi_uses_static_symtable);
|
||||
searchsym:=true;
|
||||
exit;
|
||||
end;
|
||||
@ -2312,7 +2318,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.166 2004-12-21 08:38:16 michael
|
||||
Revision 1.167 2004-12-27 16:35:48 peter
|
||||
* set flag if a procedure references a symbol in staticsymtable
|
||||
|
||||
Revision 1.166 2004/12/21 08:38:16 michael
|
||||
+ Enable local debug info in methods
|
||||
|
||||
Revision 1.165 2004/12/15 15:59:54 peter
|
||||
|
Loading…
Reference in New Issue
Block a user