LSL-PyOptimizer/unit_tests/expr.suite/opts.out
Sei Lisa ec509b3840 Fix parenthesization of unary minus
The algorithm for adding parentheses around unary operators was not working properly. It converted a * (-b) * c into a * -b * c, which LSL handles as a * -(b * c).

Fix and add test cases for that. One of the test cases shows an example where the difference matters: 0 * (-1e20) * 1e20 should result in 0.0, but if wrongly parenthesized, it gives NaN, because 1e20*1e20 gives infinity due to float overflow, and minus infinity times 0 is indeterminate.

The addition of parentheses has been improved, but it still does not eliminate every redundant parenthesis.

Also fix the horrendous typo of using "operands" where it should be "operators".
2019-05-04 23:20:20 +02:00

31 lines
No EOL
901 B
Text

[ -~llGetLinkNumber()
, -~-~llGetLinkNumber()
, 3 + llGetLinkNumber()
, 4 + llGetLinkNumber()
, ~-llGetLinkNumber()
, ~-~-llGetLinkNumber()
, ((integer)-3) + llGetLinkNumber()
, ((integer)-4) + llGetLinkNumber()
, 3 + llGetLinkNumber()
, ((integer)-3) + llGetLinkNumber()
, 5 + llGetLinkNumber()
, ~-llGetLinkNumber()
, ~-~-llGetLinkNumber()
, llGetLinkNumber() == 2
, llGetLinkNumber() + llGetLinkNumber() + llGetLinkNumber()
, 2 < llGetLinkNumber()
, llGetLinkNumber() < 2
, 2 + (1 + llGetTime())
, 11 + llGetLinkNumber()
, 5 == llGetLinkNumber()
, ((integer)-5) + llGetLinkNumber() == 12
, !(((integer)-5) + llGetLinkNumber() == 12)
, 3 + llGetLinkNumber()
, ~llGetLinkNumber()
, llGetLinkNumber()
, -(~-~llGetLinkNumber() + ~-~llGetLinkNumber())
, -~-~llGetLinkNumber() + ~-~-llGetLinkNumber()
, ~-~-llGetLinkNumber() + ~-~-llGetLinkNumber()
, 5 + llGetLinkNumber() + (5 + llGetLinkNumber())
, 0
]