mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-10-21 17:41:44 +02:00
* no SSU in try/except/finally (could be enabled in finally in theory,
but requires some changes) git-svn-id: trunk@5182 -
This commit is contained in:
parent
ad7d549965
commit
97cd8c4f62
@ -1007,7 +1007,7 @@ implementation
|
||||
location_reset(location,LOC_VOID,OS_NO);
|
||||
|
||||
oldflowcontrol:=flowcontrol;
|
||||
flowcontrol:=[];
|
||||
flowcontrol:=[fc_inflowcontrol];
|
||||
{ this can be called recursivly }
|
||||
oldBreakLabel:=nil;
|
||||
oldContinueLabel:=nil;
|
||||
@ -1049,7 +1049,7 @@ implementation
|
||||
current_procinfo.CurrBreakLabel:=breaktrylabel;
|
||||
end;
|
||||
|
||||
flowcontrol:=[];
|
||||
flowcontrol:=[fc_inflowcontrol];
|
||||
secondpass(left);
|
||||
tryflowcontrol:=flowcontrol;
|
||||
if codegenerror then
|
||||
@ -1070,7 +1070,7 @@ implementation
|
||||
current_procinfo.CurrBreakLabel:=breakexceptlabel;
|
||||
end;
|
||||
|
||||
flowcontrol:=[];
|
||||
flowcontrol:=[fc_inflowcontrol];
|
||||
{ on statements }
|
||||
if assigned(right) then
|
||||
secondpass(right);
|
||||
@ -1223,8 +1223,8 @@ implementation
|
||||
end;
|
||||
|
||||
{ return all used control flow statements }
|
||||
flowcontrol:=oldflowcontrol+exceptflowcontrol+
|
||||
tryflowcontrol;
|
||||
flowcontrol:=oldflowcontrol+(exceptflowcontrol +
|
||||
tryflowcontrol - [fc_inflowcontrol]);
|
||||
end;
|
||||
|
||||
|
||||
@ -1249,7 +1249,7 @@ implementation
|
||||
location_reset(location,LOC_VOID,OS_NO);
|
||||
|
||||
oldflowcontrol:=flowcontrol;
|
||||
flowcontrol:=[];
|
||||
flowcontrol:=[fc_inflowcontrol];
|
||||
current_asmdata.getjumplabel(nextonlabel);
|
||||
|
||||
{ send the vmt parameter }
|
||||
@ -1372,7 +1372,7 @@ implementation
|
||||
|
||||
unget_exception_temps(current_asmdata.CurrAsmList,excepttemps);
|
||||
cg.a_label(current_asmdata.CurrAsmList,nextonlabel);
|
||||
flowcontrol:=oldflowcontrol+flowcontrol;
|
||||
flowcontrol:=oldflowcontrol+(flowcontrol-[fc_inflowcontrol]);
|
||||
paraloc1.done;
|
||||
|
||||
{ next on node }
|
||||
@ -1403,7 +1403,7 @@ implementation
|
||||
|
||||
{ check if child nodes do a break/continue/exit }
|
||||
oldflowcontrol:=flowcontrol;
|
||||
flowcontrol:=[];
|
||||
flowcontrol:=[fc_inflowcontrol];
|
||||
current_asmdata.getjumplabel(finallylabel);
|
||||
current_asmdata.getjumplabel(endfinallylabel);
|
||||
current_asmdata.getjumplabel(reraiselabel);
|
||||
@ -1452,9 +1452,9 @@ implementation
|
||||
free_exception(current_asmdata.CurrAsmList,excepttemps,1,finallylabel,true);
|
||||
|
||||
{ finally code }
|
||||
flowcontrol:=[];
|
||||
flowcontrol:=[fc_inflowcontrol];
|
||||
secondpass(right);
|
||||
if flowcontrol<>[] then
|
||||
if flowcontrol<>[fc_inflowcontrol] then
|
||||
CGMessage(cg_e_control_flow_outside_finally);
|
||||
if codegenerror then
|
||||
exit;
|
||||
@ -1465,9 +1465,9 @@ implementation
|
||||
begin
|
||||
cg.a_cmp_const_reg_label(current_asmdata.CurrAsmList,OS_INT,OC_EQ,0,NR_FUNCTION_RESULT_REG,endfinallylabel);
|
||||
{ finally code only needed to be executed on exception }
|
||||
flowcontrol:=[];
|
||||
flowcontrol:=[fc_inflowcontrol];
|
||||
secondpass(t1);
|
||||
if flowcontrol<>[] then
|
||||
if flowcontrol<>[fc_inflowcontrol] then
|
||||
CGMessage(cg_e_control_flow_outside_finally);
|
||||
if codegenerror then
|
||||
exit;
|
||||
@ -1533,7 +1533,7 @@ implementation
|
||||
current_procinfo.CurrContinueLabel:=oldContinueLabel;
|
||||
current_procinfo.CurrBreakLabel:=oldBreakLabel;
|
||||
end;
|
||||
flowcontrol:=oldflowcontrol+tryflowcontrol;
|
||||
flowcontrol:=oldflowcontrol+(tryflowcontrol-[fc_inflowcontrol]);
|
||||
end;
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user