core expr: optimizations fixes for $v op 0|1 -> $v
authorAndrei Pelinescu-Onciul <andrei@iptel.org>
Tue, 5 May 2009 14:15:01 +0000 (16:15 +0200)
committerAndrei Pelinescu-Onciul <andrei@iptel.org>
Tue, 5 May 2009 14:28:48 +0000 (16:28 +0200)
commit9c3327d5742b1f8280b159c7ea228b95bb2e8f35
tree62e0e0ed9d4243cd21caa8b4710e157ecc2f92d6
parent0b3019f699dfb999be04572d4c35a613b6032435
core expr:  optimizations fixes for $v op 0|1 -> $v

- fix missing cast for the  $v <op> c -> $v optimizations
  (e.g. $v - 0 -> $v, 1 * $v -> $v): instead of replacing
  $v <op> c with $v use (type_of(<op>)) $v.  $v without the cast
  to the type produced by the operator is used now only when
  type_of($v)==type_of(<op>).
  E.g.: 1 * $v -> (int)$v
        1 * ($v/$w) -> $v/$w  ($v/$w produces always an int, so no
                               need for the cast)
  Bug example:  1*"2"+3 was optimized to "2"+3 == "23" instead of
  (int)"2"+3 == 5.

- better debugging messages
rvalue.c