On Thu, Mar 24, 2016 at 11:12 AM, Sara Golemon <poll...@php.net> wrote: > After some discussion (and realizing the referenced implementation > needed more work that a simple replacement of tokens), I've decided > the close this vote, work with Midori on both implementations some > more, and reopen at a later time with a complete implementation > (possibly combined with ??=) > https://github.com/php/php-src/compare/master...sgolemon:short-ternary.coalesce
I've gone from scratch to implement this branch which doesn't introduce any new opcodes, but it does add a new AST kind which is compiled into something closely (but not quite) resembling a regular short ternary. It cheats slightly by assuming that since child[0] comes from a `variable` in the parser that zend_compile_var() on it will always yield IS_CV/IS_VAR, and I've got an assert in to guard on that, but a second set of eyes would be nice there. You'll notice there's a new runtime check in ZEND_JMP_SET to handle the IS_INDIRECT case (which I see resulting from the dim/obj paths. It's hidden behind an existing check for IS_VAR/IS_CV, so anything producing a TMP won't hit it. Hopefully it's not too harsh. Based on feedback, I hope to add the ??= version of this implementation as another commit and let Midori unify the two RFCs into one. (unless someone objects to that) -Sara -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php