From 7b7aa8d5427e3c9ddb78dfac9e217b5ca655dbd9 Mon Sep 17 00:00:00 2001 From: florian Date: Wed, 4 Feb 2015 21:19:40 +0000 Subject: [PATCH] * remove statements with only a nothing node when they are the only children of a block git-svn-id: trunk@29628 - --- compiler/nbas.pas | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/compiler/nbas.pas b/compiler/nbas.pas index da6e222a4c..92be6968a9 100644 --- a/compiler/nbas.pas +++ b/compiler/nbas.pas @@ -540,18 +540,30 @@ implementation { main program body, and those nodes should always be blocknodes } { since that's what the compiler expects elsewhere. } - { if the current block contains only one statement, and } - { this one statement only contains another block, replace } - { this block with that other block. } if assigned(left) and - not assigned(tstatementnode(left).right) and - (tstatementnode(left).left.nodetype = blockn) then + not assigned(tstatementnode(left).right) then begin - result:=tstatementnode(left).left; - tstatementnode(left).left:=nil; - { make sure the nf_block_with_exit flag is safeguarded } - result.flags:=result.flags+(flags*[nf_block_with_exit,nf_usercode_entry]); - exit; + case tstatementnode(left).left.nodetype of + blockn: + begin + { if the current block contains only one statement, and + this one statement only contains another block, replace + this block with that other block. } + result:=tstatementnode(left).left; + tstatementnode(left).left:=nil; + { make sure the nf_block_with_exit flag is safeguarded } + result.flags:=result.flags+(flags*[nf_block_with_exit,nf_usercode_entry]); + exit; + end; + nothingn: + begin + { if the block contains only a statement with a nothing node, + get rid of the statement } + left.Free; + left:=nil; + exit; + end; + end; end; end;