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