Commit graph

115 commits

Author SHA1 Message Date
Sei Lisa
6ea01c4242 Added optimizations for most operators, and 'cornermath' option.
Only remaining operators are < <= > >= &.
2015-02-28 18:30:04 +01:00
Sei Lisa
42ac090f03 Big bunch of expressions optimized, boolean/bitwise, and some new ideas.
a != -1 is now optimized to ~a in conditions. a == 1, a != 1, etc. are all optimized. a||b -> a|b is done. a^0, a^-1 are optimized. a&&b is transformed to !(!a|!b), but not yet into a&b when possible.
2015-02-28 05:14:52 +01:00
Sei Lisa
1dea1bd12c Make parentheses no longer explicit in the AST (Beta).
The output module adds parentheses where necessary, depending on the evaluation order in the tree. Or that's the idea. Prone to bugs, let's see how it bodes.
2015-02-28 00:43:26 +01:00
Sei Lisa
59451b90e5 On second thought, parentheses are only needed for ~ because it binds tighter. 2015-02-27 20:12:17 +01:00
Sei Lisa
25cbb91b6e Fix bug where n*3+1 was optimized as -~n*3 rather than as -~(n*3). Also merge -2 with -1 and +2 with +1. 2015-02-27 20:05:14 +01:00
Sei Lisa
2047a128fb Add two TODO items about parameters to common functions. 2015-02-27 19:20:31 +01:00
Sei Lisa
536b1ed2f9 Fix comments that mentioned the wrong property. 2015-02-27 19:18:28 +01:00
Sei Lisa
07590ea850 Fix bug where (a * 5) + 4 was converted to a + 5 + 4. 2015-02-27 19:12:22 +01:00
Sei Lisa
6fb947fbc9 (Limitedly) apply distributive law for string and integer addition. 2015-02-12 07:47:35 +01:00
Sei Lisa
db862bb4a6 Multi-commit:
- Fix a bunch of bugs found during the debut of the LSL calculator.
- Add infrastructure for functions to be able to produce a result or not depending on arguments. Fixes the llBase64ToInteger/llXorBase64/llXorBase64StringsCorrect cases where they are not deterministic, and allows for the addition of some extra functions whose value can be determined in some cases (e.g. llDetectedType(-1) is always 0). Added several such functions in a new module.
- Add the constant folding option to the help and the default options.
2015-02-11 05:43:13 +01:00
Sei Lisa
716be215f2 Fix double negation and constant nodes; add optimization of -~-~ chains. Fix a case of addition. Add a case of parentheses.
(Changes were pending since Aug 19)
2014-12-13 14:16:28 +01:00
Sei Lisa
c2a30fb9ee Simplify const + nonconst + const and nonconst + const + const. 2014-08-19 19:45:47 +02:00
Sei Lisa
c2437b33e7 Optimize [] + nonlist as (list)nonlist.
And minor comment changes.
2014-08-17 16:31:46 +02:00
Sei Lisa
8e5166bb2e Move the constant folding code to lslfoldconst.py.
lsloptimizer remains as the "conductor" and option handler.

As a result, new options have been added to enable DCR and constant folding.
2014-08-13 14:19:58 +02:00
Sei Lisa
beea757a0a Fork (add a copy of) lsloptimizer.py as lslfoldconst.py.
This commit is just a copy, to hopefully help git track it. The changes come in the next commit.
2014-08-13 14:02:05 +02:00