This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Lexical scoping in case statement is tricky.
authorJarkko Hietaniemi <jhi@iki.fi>
Fri, 5 Feb 2016 21:06:53 +0000 (16:06 -0500)
committerJarkko Hietaniemi <jhi@iki.fi>
Sun, 7 Feb 2016 13:23:46 +0000 (08:23 -0500)
commit84f05d5723e1566ac2e5ee7c4700a66efbbcd2ff
treec2cef26544c696e60d3f8a53a502f3996a811010
parent4b5c941e759b9302cc3663703de38cb61f3554db
Lexical scoping in case statement is tricky.

Coverity CID 135142: Structurally dead code (UNREACHABLE)

The case labels are just effectively goto labels, and therefore
any variable initialization will not happen.  That is not the case
luckily here, the variables will be always overwritten as needed.
But better not to introduce false lexical scopes to avoid future
misery.

In the general case, the only way to have lexically tighter scopes is
to have dedicated blocks for each case, but that doesn't easily work here,
with all the tricky jumping.

We could switch() the second time on CxTYPE(), and have these variables
scoped on an inner block, but since this is hot hot hot code, better
not to mess with that, and just hoist the variables to an outer scope.
Any deeper refactoring should be done with profilers at hand.
pp_hot.c