On Tue, Nov 10, 2015 at 10:53 AM, Dmitry Stogov <dmi...@zend.com> wrote:

> Hi,
>
> Please take a look into
> https://gist.github.com/dstogov/43eaa3f3b68583877322
>
> This is variation on Bob's idea about variable liveness.
> The patch is incomplete. Liveness construction is still naive. However,
> all tests are passed.
>
> Ranges are represented by start/end/variable cartages. (I suppose this
> representation is more compact, than in the original proposal).
> In general, it's possible to use few ranges for the same variable, if its
> whole live range is not linear. (this is not implemented yet).
>
> Related ideas and tests are welcome.
>
> Thanks. Dmitry.
>

One leak this does not cover yet is a discarded delayed return value:

function test() {
    try {
        $a = [1, 2, 3];
        return $a + [];
    } finally {
        throw new Exception;
    }
}

try {
    test();
} catch (Exception $e) {}

This case is a bit tricky because it violates the usual invariant that all
temporaries have well-defined liveness ranges (either alive or not, no
maybe). We'd have to change that first.

Nikita

Reply via email to