Hi, purely selfish request here, I'd like to make a minor change to the
parser... Just a bitty one... You won't even feel it...
Currently, when the parser encounters: expr1 > expr2 it quietly (and
reasonably) switches it around to expr2 < expr1 so that is can reuse the
ZEND_IS_SMALLER op. The executor has no idea this has occured, but heck,
why does it need to know after all?
Enter PECL/operator, which tries to implement operator overloading for
objects (and does a decent job at that). In the interrest of ease of use
and consistency, every overloaded binary operator is [meant to be] left
associative. This is, in the expression expr1 op expr2 expr1 gets to
decide how it will combine-with/compare-to expr2.
Since greater-than (and greater-than-or-equal-to) are quietly flipped,
PECL/operator has no way to tell the difference between the two and has to
assume op1 < op2 (when in fact op2 > op1 may be the correct view). To solve
this I've bundled a patch with PECL/operator to set the otherwise unused
extended_value to a 0/1 value depending on whether it's genuinely less-than
or greater-than.
There are sleaker ways to do this than what's included in the patch (e.g. a
new zend_do_() method really isn't needed), but I was attempting to touch as
little as possible in implementing it.
Is there a chance of this getting merged into the engine? Or is that just
entirely too imposing for such an edge case extension.
http://cvs.php.net/viewcvs.cgi/pecl/operator/compare-greater-5.1.2.diff?view=markup&rev=1.2
-Sara
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php