|
@@ -1116,12 +1116,18 @@ implementation
|
|
|
if codegenerror then
|
|
|
goto errorexit;
|
|
|
|
|
|
+ { don't generate line info for internal cleanup }
|
|
|
+ current_asmdata.CurrAsmList.concat(tai_marker.create(mark_NoLineInfoStart));
|
|
|
+
|
|
|
cg.a_label(current_asmdata.CurrAsmList,exceptlabel);
|
|
|
|
|
|
free_exception(current_asmdata.CurrAsmList, excepttemps, 0, endexceptlabel, false);
|
|
|
|
|
|
cg.a_label(current_asmdata.CurrAsmList,doexceptlabel);
|
|
|
|
|
|
+ { end cleanup }
|
|
|
+ current_asmdata.CurrAsmList.concat(tai_marker.create(mark_NoLineInfoEnd));
|
|
|
+
|
|
|
{ set control flow labels for the except block }
|
|
|
{ and the on statements }
|
|
|
current_procinfo.CurrExitLabel:=exitexceptlabel;
|
|
@@ -1136,6 +1142,9 @@ implementation
|
|
|
if assigned(right) then
|
|
|
secondpass(right);
|
|
|
|
|
|
+ { don't generate line info for internal cleanup }
|
|
|
+ current_asmdata.CurrAsmList.concat(tai_marker.create(mark_NoLineInfoStart));
|
|
|
+
|
|
|
cg.a_label(current_asmdata.CurrAsmList,lastonlabel);
|
|
|
{ default handling except handling }
|
|
|
if assigned(t1) then
|
|
@@ -1285,6 +1294,9 @@ implementation
|
|
|
unget_exception_temps(current_asmdata.CurrAsmList,excepttemps);
|
|
|
cg.a_label(current_asmdata.CurrAsmList,endexceptlabel);
|
|
|
|
|
|
+ { end cleanup }
|
|
|
+ current_asmdata.CurrAsmList.concat(tai_marker.create(mark_NoLineInfoEnd));
|
|
|
+
|
|
|
errorexit:
|
|
|
{ restore all saved labels }
|
|
|
endexceptlabel:=oldendexceptlabel;
|
|
@@ -1389,6 +1401,10 @@ implementation
|
|
|
|
|
|
secondpass(right);
|
|
|
end;
|
|
|
+
|
|
|
+ { don't generate lineinfo for internal cleanup }
|
|
|
+ current_asmdata.CurrAsmList.concat(tai_marker.create(mark_NoLineInfoStart));
|
|
|
+
|
|
|
current_asmdata.getjumplabel(doobjectdestroy);
|
|
|
cg.a_label(current_asmdata.CurrAsmList,doobjectdestroyandreraise);
|
|
|
|
|
@@ -1458,6 +1474,7 @@ implementation
|
|
|
cg.a_label(current_asmdata.CurrAsmList,nextonlabel);
|
|
|
flowcontrol:=oldflowcontrol+(flowcontrol-[fc_inflowcontrol]);
|
|
|
paraloc1.done;
|
|
|
+ current_asmdata.CurrAsmList.concat(tai_marker.create(mark_NoLineInfoEnd));
|
|
|
|
|
|
{ next on node }
|
|
|
if assigned(left) then
|
|
@@ -1531,10 +1548,16 @@ implementation
|
|
|
exit;
|
|
|
end;
|
|
|
|
|
|
+ { don't generate line info for internal cleanup }
|
|
|
+ current_asmdata.CurrAsmList.concat(tai_marker.create(mark_NoLineInfoStart));
|
|
|
+
|
|
|
cg.a_label(current_asmdata.CurrAsmList,finallylabel);
|
|
|
{ just free the frame information }
|
|
|
free_exception(current_asmdata.CurrAsmList,excepttemps,1,finallylabel,true);
|
|
|
|
|
|
+ { end cleanup }
|
|
|
+ current_asmdata.CurrAsmList.concat(tai_marker.create(mark_NoLineInfoEnd));
|
|
|
+
|
|
|
{ finally code }
|
|
|
flowcontrol:=[fc_inflowcontrol];
|
|
|
secondpass(right);
|
|
@@ -1545,6 +1568,9 @@ implementation
|
|
|
if codegenerror then
|
|
|
exit;
|
|
|
|
|
|
+ { don't generate line info for internal cleanup }
|
|
|
+ current_asmdata.CurrAsmList.concat(tai_marker.create(mark_NoLineInfoStart));
|
|
|
+
|
|
|
{ the value should now be in the exception handler }
|
|
|
cg.g_exception_reason_load(current_asmdata.CurrAsmList,excepttemps.reasonbuf);
|
|
|
if implicitframe then
|
|
@@ -1637,6 +1663,9 @@ implementation
|
|
|
unget_exception_temps(current_asmdata.CurrAsmList,excepttemps);
|
|
|
cg.a_label(current_asmdata.CurrAsmList,endfinallylabel);
|
|
|
|
|
|
+ { end cleanup }
|
|
|
+ current_asmdata.CurrAsmList.concat(tai_marker.create(mark_NoLineInfoEnd));
|
|
|
+
|
|
|
current_procinfo.CurrExitLabel:=oldCurrExitLabel;
|
|
|
if assigned(current_procinfo.CurrBreakLabel) then
|
|
|
begin
|