mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-17 17:09:09 +02:00
* no_fast_exit if procedure contains implicit termination code
This commit is contained in:
parent
eaf3767d85
commit
dcaad61969
@ -88,6 +88,9 @@ implementation
|
|||||||
{ true, if the procedure should be exported (only OS/2) }
|
{ true, if the procedure should be exported (only OS/2) }
|
||||||
exported : boolean;
|
exported : boolean;
|
||||||
|
|
||||||
|
{ true, if we can not use fast exit code }
|
||||||
|
no_fast_exit : boolean;
|
||||||
|
|
||||||
{ code for the current procedure }
|
{ code for the current procedure }
|
||||||
aktproccode,aktentrycode,
|
aktproccode,aktentrycode,
|
||||||
aktexitcode,aktlocaldata : paasmoutput;
|
aktexitcode,aktlocaldata : paasmoutput;
|
||||||
@ -288,6 +291,8 @@ implementation
|
|||||||
framepointer:=R_NO;
|
framepointer:=R_NO;
|
||||||
globalsymbol:=false;
|
globalsymbol:=false;
|
||||||
exported:=false;
|
exported:=false;
|
||||||
|
no_fast_exit:=false;
|
||||||
|
|
||||||
aktentrycode:=new(paasmoutput,init);
|
aktentrycode:=new(paasmoutput,init);
|
||||||
aktexitcode:=new(paasmoutput,init);
|
aktexitcode:=new(paasmoutput,init);
|
||||||
aktproccode:=new(paasmoutput,init);
|
aktproccode:=new(paasmoutput,init);
|
||||||
@ -400,7 +405,10 @@ end.
|
|||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.51 1999-12-01 12:42:32 peter
|
Revision 1.52 1999-12-09 23:18:04 pierre
|
||||||
|
* no_fast_exit if procedure contains implicit termination code
|
||||||
|
|
||||||
|
Revision 1.51 1999/12/01 12:42:32 peter
|
||||||
* fixed bug 698
|
* fixed bug 698
|
||||||
* removed some notes about unused vars
|
* removed some notes about unused vars
|
||||||
|
|
||||||
|
@ -759,6 +759,8 @@ implementation
|
|||||||
p^.right:=gentypeconvnode(p^.right,cansistringdef);
|
p^.right:=gentypeconvnode(p^.right,cansistringdef);
|
||||||
if not(is_ansistring(ld)) then
|
if not(is_ansistring(ld)) then
|
||||||
p^.left:=gentypeconvnode(p^.left,cansistringdef);
|
p^.left:=gentypeconvnode(p^.left,cansistringdef);
|
||||||
|
{ we use ansistrings so no fast exit here }
|
||||||
|
procinfo^.no_fast_exit:=true;
|
||||||
p^.resulttype:=cansistringdef;
|
p^.resulttype:=cansistringdef;
|
||||||
{ this is only for add, the comparisaion is handled later }
|
{ this is only for add, the comparisaion is handled later }
|
||||||
p^.location.loc:=LOC_REGISTER;
|
p^.location.loc:=LOC_REGISTER;
|
||||||
@ -1188,7 +1190,10 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.59 1999-12-01 12:42:33 peter
|
Revision 1.60 1999-12-09 23:18:04 pierre
|
||||||
|
* no_fast_exit if procedure contains implicit termination code
|
||||||
|
|
||||||
|
Revision 1.59 1999/12/01 12:42:33 peter
|
||||||
* fixed bug 698
|
* fixed bug 698
|
||||||
* removed some notes about unused vars
|
* removed some notes about unused vars
|
||||||
|
|
||||||
|
@ -1113,6 +1113,8 @@ implementation
|
|||||||
p^.location.loc:=LOC_MEM;
|
p^.location.loc:=LOC_MEM;
|
||||||
{ this is wrong we still need one register PM
|
{ this is wrong we still need one register PM
|
||||||
p^.registers32:=0; }
|
p^.registers32:=0; }
|
||||||
|
{ we use ansistrings so no fast exit here }
|
||||||
|
procinfo^.no_fast_exit:=true;
|
||||||
p^.registers32:=1;
|
p^.registers32:=1;
|
||||||
end;
|
end;
|
||||||
end
|
end
|
||||||
@ -1221,7 +1223,10 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.74 1999-11-30 10:40:57 peter
|
Revision 1.75 1999-12-09 23:18:04 pierre
|
||||||
|
* no_fast_exit if procedure contains implicit termination code
|
||||||
|
|
||||||
|
Revision 1.74 1999/11/30 10:40:57 peter
|
||||||
+ ttype, tsymlist
|
+ ttype, tsymlist
|
||||||
|
|
||||||
Revision 1.73 1999/11/18 15:34:49 pierre
|
Revision 1.73 1999/11/18 15:34:49 pierre
|
||||||
|
@ -285,6 +285,9 @@ implementation
|
|||||||
end;
|
end;
|
||||||
{ for simplicity lets first keep all ansistrings
|
{ for simplicity lets first keep all ansistrings
|
||||||
as LOC_MEM, could also become LOC_REGISTER }
|
as LOC_MEM, could also become LOC_REGISTER }
|
||||||
|
if pstringdef(p^.resulttype)^.string_typ in [st_ansistring,st_widestring] then
|
||||||
|
{ we may use ansistrings so no fast exit here }
|
||||||
|
procinfo^.no_fast_exit:=true;
|
||||||
p^.location.loc:=LOC_MEM;
|
p^.location.loc:=LOC_MEM;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -961,7 +964,10 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.54 1999-11-30 10:40:57 peter
|
Revision 1.55 1999-12-09 23:18:04 pierre
|
||||||
|
* no_fast_exit if procedure contains implicit termination code
|
||||||
|
|
||||||
|
Revision 1.54 1999/11/30 10:40:57 peter
|
||||||
+ ttype, tsymlist
|
+ ttype, tsymlist
|
||||||
|
|
||||||
Revision 1.53 1999/11/18 15:34:49 pierre
|
Revision 1.53 1999/11/18 15:34:49 pierre
|
||||||
|
@ -344,7 +344,7 @@ implementation
|
|||||||
{ Check the 2 types }
|
{ Check the 2 types }
|
||||||
p^.left:=gentypeconvnode(p^.left,p^.resulttype);
|
p^.left:=gentypeconvnode(p^.left,p^.resulttype);
|
||||||
firstpass(p^.left);
|
firstpass(p^.left);
|
||||||
if ret_in_param(p^.resulttype) then
|
if ret_in_param(p^.resulttype) or procinfo^.no_fast_exit then
|
||||||
begin
|
begin
|
||||||
pt:=genzeronode(funcretn);
|
pt:=genzeronode(funcretn);
|
||||||
pt^.rettype.setdef(p^.resulttype);
|
pt^.rettype.setdef(p^.resulttype);
|
||||||
@ -517,7 +517,10 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.28 1999-12-02 17:27:56 peter
|
Revision 1.29 1999-12-09 23:18:05 pierre
|
||||||
|
* no_fast_exit if procedure contains implicit termination code
|
||||||
|
|
||||||
|
Revision 1.28 1999/12/02 17:27:56 peter
|
||||||
* give error when for counter is in other lexlevel
|
* give error when for counter is in other lexlevel
|
||||||
|
|
||||||
Revision 1.27 1999/11/30 10:40:58 peter
|
Revision 1.27 1999/11/30 10:40:58 peter
|
||||||
|
@ -98,6 +98,8 @@ implementation
|
|||||||
if pconstsym(p^.symtableentry)^.consttyp=constresourcestring then
|
if pconstsym(p^.symtableentry)^.consttyp=constresourcestring then
|
||||||
begin
|
begin
|
||||||
p^.resulttype:=cansistringdef;
|
p^.resulttype:=cansistringdef;
|
||||||
|
{ we use ansistrings so no fast exit here }
|
||||||
|
procinfo^.no_fast_exit:=true;
|
||||||
p^.location.loc:=LOC_MEM;
|
p^.location.loc:=LOC_MEM;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@ -472,7 +474,10 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.53 1999-12-02 17:28:53 peter
|
Revision 1.54 1999-12-09 23:18:05 pierre
|
||||||
|
* no_fast_exit if procedure contains implicit termination code
|
||||||
|
|
||||||
|
Revision 1.53 1999/12/02 17:28:53 peter
|
||||||
* fixed procvar -> pointer for array of const
|
* fixed procvar -> pointer for array of const
|
||||||
|
|
||||||
Revision 1.52 1999/11/30 10:40:58 peter
|
Revision 1.52 1999/11/30 10:40:58 peter
|
||||||
|
Loading…
Reference in New Issue
Block a user