mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 20:09:27 +02:00
* free temps created for case-of-string-statements
git-svn-id: trunk@22100 -
This commit is contained in:
parent
f3ad4af343
commit
3983342648
@ -646,7 +646,7 @@ implementation
|
|||||||
function tcasenode.pass_1 : tnode;
|
function tcasenode.pass_1 : tnode;
|
||||||
var
|
var
|
||||||
i : integer;
|
i : integer;
|
||||||
node_thenblock,node_elseblock,if_node : tnode;
|
node_thenblock,node_elseblock,if_node,temp_cleanup : tnode;
|
||||||
tempcaseexpr : ttempcreatenode;
|
tempcaseexpr : ttempcreatenode;
|
||||||
if_block, init_block, stmt_block : tblocknode;
|
if_block, init_block, stmt_block : tblocknode;
|
||||||
stmt : tstatementnode;
|
stmt : tstatementnode;
|
||||||
@ -684,6 +684,7 @@ implementation
|
|||||||
begin
|
begin
|
||||||
result:=nil;
|
result:=nil;
|
||||||
init_block:=nil;
|
init_block:=nil;
|
||||||
|
temp_cleanup:=nil;
|
||||||
expectloc:=LOC_VOID;
|
expectloc:=LOC_VOID;
|
||||||
|
|
||||||
{ evalutes the case expression }
|
{ evalutes the case expression }
|
||||||
@ -702,6 +703,7 @@ implementation
|
|||||||
tempcaseexpr :=
|
tempcaseexpr :=
|
||||||
ctempcreatenode.create(
|
ctempcreatenode.create(
|
||||||
left.resultdef, left.resultdef.size, tt_persistent, true);
|
left.resultdef, left.resultdef.size, tt_persistent, true);
|
||||||
|
temp_cleanup := ctempdeletenode.create(tempcaseexpr);
|
||||||
typecheckpass(tnode(tempcaseexpr));
|
typecheckpass(tnode(tempcaseexpr));
|
||||||
|
|
||||||
addstatement(stmt, tempcaseexpr);
|
addstatement(stmt, tempcaseexpr);
|
||||||
@ -766,6 +768,8 @@ implementation
|
|||||||
addstatement(stmt,cgotonode.create(endlabel.labsym));
|
addstatement(stmt,cgotonode.create(endlabel.labsym));
|
||||||
addstatement(stmt, stmt_block);
|
addstatement(stmt, stmt_block);
|
||||||
addstatement(stmt, endlabel);
|
addstatement(stmt, endlabel);
|
||||||
|
if assigned(temp_cleanup) then
|
||||||
|
addstatement(stmt, temp_cleanup);
|
||||||
result := if_block;
|
result := if_block;
|
||||||
elseblock := nil;
|
elseblock := nil;
|
||||||
exit;
|
exit;
|
||||||
|
Loading…
Reference in New Issue
Block a user