* no_fast_exit if procedure contains implicit termination code

This commit is contained in:
pierre 1999-12-09 23:18:04 +00:00
parent eaf3767d85
commit dcaad61969
6 changed files with 39 additions and 7 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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