We disable type check in unreachable code, but when the unreachable code
is enclosed within a block-like structure, the block as a whole has a
valid type and we should continue type checking after the block. But it
looks we currently only do that for blocks and not other block-like
structures (loops, trys, and ifs). Also unreachable code within
if's true body shouldn't disable type checking in else body, and
that in try body shouldn't disable type checking in catch/catch_all
body.
This also causes the values/types on the stack to be correctly checked
when encounterint catch, catch_all, and delegate.
This code is just moved from below