Re: [RFC] Interval Comparison

From: Date: Fri, 11 Nov 2016 17:03:45 +0000
Subject: Re: [RFC] Interval Comparison
References: 1 2 3 4 5 6 7 8  Groups: php.internals 
Request: Send a blank email to internals+get-96835@lists.php.net to get a copy of this message
On Wed, Nov 9, 2016 at 12:48 PM Fleshgrinder <php@fleshgrinder.com> wrote: > On 11/8/2016 10:57 PM, David Walker wrote: > > I don't think that alone allows the chaining of comparisons. I'd have to > > look closer, but it'd seem to me that zend_ast_create_binary_op > > (ZEND_AST_BINARY_OP) evaluation might need to be amended as well. Seems > it > > eventually calls a `op(zval*,zval*,zval*) so the evaluated end of: one op > > would be a true/false, when comparing against another boolean op. > > > > Regardless of implementation, the core question you raised was should > > something like it exist, I'm still a strong yes on that front. I'd just > > promote introducing the left precedence and allowing the arbitrary chains > > of comparison, rather than just a single interval comparison. > > > > cheers > > -- > > Dave > > > > Yeah maybe not that easy but also not too complicated if we add > associativity to the mix. I am open for both variations and could write > up an RFC with a vote for both if desired. > > Not sure if I find the time to look into actual implementation but I > most certainly can try. > I took a quick stab at implementing, and had something working for constant expressions, but handling something akin to: $a = 2; if (1 < $a++ < 3) { ... } Is a bit awkward in our expansions of : if (1 < $a++ && $a++ < 3). Seems as if when processing the chain here, you'd need to see if the left node has a child, and somehow ensure you get the evaluated value somehow, to override the "left" node. So logically expansion of the above would be if (1 < $a++ && 3 < 3). I think the same would have too somehow handle (either by syntax error or something) that if a non-numeric value creeps into a binary-op-compare we error like: if (1 < (2==3) < 3). Just some food for thought -- Dave

« previous php.internals (#96835) next »