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;