|
@@ -324,8 +324,8 @@ procedure tx64tryfinallynode.pass_generate_code;
|
|
|
{ i32913 - if the try..finally block is also inside a try..finally or
|
|
|
try..except block, make a note of any Exit calls so all necessary labels
|
|
|
are generated. [Kit] }
|
|
|
- if (fc_exit in flowcontrol) and (fc_inflowcontrol in oldflowcontrol) then
|
|
|
- Include(oldflowcontrol, fc_exit);
|
|
|
+ if ((flowcontrol*[fc_exit,fc_break,fc_continue])<>[]) and (fc_inflowcontrol in oldflowcontrol) then
|
|
|
+ oldflowcontrol:=oldflowcontrol+(flowcontrol*[fc_exit,fc_break,fc_continue]);
|
|
|
|
|
|
flowcontrol:=[fc_inflowcontrol];
|
|
|
{ generate finally code as a separate procedure }
|
|
@@ -440,8 +440,8 @@ procedure tx64tryexceptnode.pass_generate_code;
|
|
|
{ i32913 - if the try..finally block is also inside a try..finally or
|
|
|
try..except block, make a note of any Exit calls so all necessary labels
|
|
|
are generated. [Kit] }
|
|
|
- if (fc_exit in flowcontrol) and (fc_inflowcontrol in oldflowcontrol) then
|
|
|
- Include(oldflowcontrol, fc_exit);
|
|
|
+ if ((flowcontrol*[fc_exit,fc_break,fc_continue])<>[]) and (fc_inflowcontrol in oldflowcontrol) then
|
|
|
+ oldflowcontrol:=oldflowcontrol+(flowcontrol*[fc_exit,fc_break,fc_continue]);
|
|
|
|
|
|
flowcontrol:=[fc_inflowcontrol];
|
|
|
{ on statements }
|
|
@@ -536,8 +536,8 @@ errorexit:
|
|
|
{ i32913 - if the try..finally block is also inside a try..finally or
|
|
|
try..except block, make a note of any Exit calls so all necessary labels
|
|
|
are generated. [Kit] }
|
|
|
- if (fc_exit in flowcontrol) and (fc_inflowcontrol in oldflowcontrol) then
|
|
|
- Include(oldflowcontrol, fc_exit);
|
|
|
+ if ((flowcontrol*[fc_exit,fc_break,fc_continue])<>[]) and (fc_inflowcontrol in oldflowcontrol) then
|
|
|
+ oldflowcontrol:=oldflowcontrol+(flowcontrol*[fc_exit,fc_break,fc_continue]);
|
|
|
|
|
|
{ restore the control flow labels }
|
|
|
current_procinfo.CurrExitLabel:=oldCurrExitLabel;
|