* free temps created for case-of-string-statements

git-svn-id: trunk@22100 -
This commit is contained in:
Jonas Maebe 2012-08-16 19:22:23 +00:00
parent f3ad4af343
commit 3983342648

View File

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