On Tue, Nov 10, 2015 at 1:42 PM, Nikita Popov <nikita....@gmail.com> wrote:
> 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. > I see the problem. We can't statically define live-ranges for finally code, because we don't know where it's going to be called from. May be we may reconstruct this at run-time. Thanks. Dmitry, > > Nikita > >