Commit graph

787 commits

Author SHA1 Message Date
Sei Lisa
be9145e3c3 Fix bug in float shrinking code. 2014-07-31 18:47:40 +02:00
Sei Lisa
a303ef2066 Unfold all assignment+operation operators to optimize them better.
With test case.
2014-07-31 18:44:50 +02:00
Sei Lisa
cb66f1ff4e Make if ... else if ... chains iterative, rather than recursive.
Should save some stack if the chain is long.
2014-07-31 05:41:15 +02:00
Sei Lisa
5bedc17b73 Fix bug where optimization disabled didn't return a value. 2014-07-31 05:39:20 +02:00
Sei Lisa
e5714eba25 Fix the obnoxious issue with globals propagation in full expressions.
Fixed by backtracking in the parser, and keeping a copy of the original expression if it's a simple_expr, which is used for output in place of the folded one.

There's still the potential issue that if a global is optimized away, then it will "come back" during output and cause an error because the definition is missing.
2014-07-31 04:47:19 +02:00
Sei Lisa
5b401ff9a5 Copy the node, don't just ref it. Also add comments on the simple_expr issue. 2014-07-31 04:07:03 +02:00
Sei Lisa
66417276ae Test cases for the previous commit 2014-07-31 03:31:42 +02:00
Sei Lisa
2cbed52bf7 Add optimization of declarations.
integer a = 0; -> integer a;
float f; -> float f = 0;
vector v; -> vector v = <0,0,0>;
rotation r -> rotation r = <0,0,0,1>;
2014-07-31 03:29:21 +02:00
Sei Lisa
6ec39aa745 Add a bunch of optimizations. Fix || and && results.
Notably, addition/subtraction, and llGetListLength -> !=[]

But also parenthesis removal etc.

With test coverage.
2014-07-31 02:53:51 +02:00
Sei Lisa
0a567b0a39 Clean up the help a bit, removing unimplemented options. 2014-07-31 02:02:53 +02:00
Sei Lisa
3ac4bc4f0d New option to optimize float-to-int conversion separately from sign optim.
The option is optfloats. Add support everywhere.
2014-07-31 01:37:18 +02:00
Sei Lisa
efc7f4406a Fix typo. Oops! 2014-07-31 01:34:34 +02:00
Sei Lisa
d1bbe26c49 vector v;<0,0,0>-v; triggered EParseTypeMismatch. Fixed. Also minor fixes.
Convert the self.__class__, which was terrible syntax, to the respective classes in the exceptions.

Fix the EInternal hack in the buitins.txt parser.
2014-07-31 01:25:15 +02:00
Sei Lisa
5e4c19e5ec Fix bug with adding immutable functions. 2014-07-30 23:36:35 +02:00
Sei Lisa
c724b53f20 Simplify main loop of lsloutput.py a bit 2014-07-30 16:01:23 +02:00
Sei Lisa
895e4f4668 Overall renaming of stuff to make it more understandable. 2014-07-30 16:00:00 +02:00
Sei Lisa
fb68273eed Turned everything upside down, and fixed a couple bugs.
Bugs fixed:
- %= and the new assignment operators were not emitting error on invalid types.
- List globals referenced in another global were duplicated entirely.
- Properly recognize -option in the command line.

Rest:
- Complete overhaul of the internal data structure.
  - Got rid of the symbol table plus mini-trees, and made everything one big tree plus an auxiliary symbol table.
  - No more special case hacks like using tuples instead of lists...
  - Got rid of the EXPR hack.
  - Dict-based, rather than list-based. Allows adding arbitrary data to any node or symbol entry.
- Added a few coverage tests for the new code.
- Return values can now be chained; the functions parameter requirement is gone. Still not fully convinced, though. My guess is that a parser object should be passed between functions instead. Will do for now.
2014-07-30 04:54:16 +02:00
Sei Lisa
5d4abf967d Comment changes - just make the idea more explicit. 2014-07-28 21:39:36 +02:00
Sei Lisa
3b4bf13a10 Add coverage for new stuff. 2014-07-28 21:19:23 +02:00
Sei Lisa
c748472187 Compress floats as much as possible. Also output NaN and Infinity as strings. 2014-07-28 20:38:44 +02:00
Sei Lisa
cd9fa96055 Format ELSE IF in a single line. 2014-07-28 19:36:01 +02:00
Sei Lisa
56d51b835c Hack to make identifiers in globals in non-global-expression mode work. 2014-07-28 19:20:36 +02:00
Sei Lisa
b441c1774f Fix incorrect warning when a global vector/quat/list contains an ident 2014-07-28 18:46:37 +02:00
Sei Lisa
02c84ca99c Add default options and option activation/deactivation. 2014-07-28 18:19:50 +02:00
Sei Lisa
443b5a2258 Fix bug where floats in global lists would be output as integers. 2014-07-28 18:13:48 +02:00
Sei Lisa
a6b3a0946f Enable foldtabs warning 2014-07-28 17:39:35 +02:00
Sei Lisa
538d9ab66e Change -o to -O; document "-" as stdin 2014-07-28 17:28:12 +02:00
Sei Lisa
d55f873fd5 Add tab warning and future option documentation. 2014-07-28 17:26:05 +02:00
Sei Lisa
6c00400d7d Add coverage for new preprocessor option. 2014-07-28 02:45:30 +02:00
Sei Lisa
108bbe5395 Some documentation rewordings. 2014-07-28 02:44:51 +02:00
Sei Lisa
eab0bec84b Add preprocessor skip option, command line options and help, options for all functions, and enhance parentheses removal. 2014-07-28 02:13:08 +02:00
Sei Lisa
ae94e80c34 Add a regression test for a case that failed before the globals fix. 2014-07-28 01:01:10 +02:00
Sei Lisa
8907a59d5f Fix remaining bug in optimizer, and minor fixes.
- Get rid of Fold().

- Handle globalmode properly. It was sometimes active during function calls.

- Change all warning() calls to not use Unicode, just in case the output is redirected to file.

- Cosmetic fixes and TODO items.
2014-07-27 23:33:20 +02:00
Sei Lisa
7f6351c5e6 Fix prob with output to pipe. Change output logic.
Now a return status of 0 doesn't invoke sys.exit.
2014-07-27 23:31:48 +02:00
Sei Lisa
64e5d0dc92 Check that it's a variable definition before collapsing or giving warning. 2014-07-27 22:04:15 +02:00
Sei Lisa
100de9c8e9 Fix output of lists < 5 elements 2014-07-27 21:23:57 +02:00
Sei Lisa
3dd73f218f Fix a few more statements missing. 2014-07-27 21:05:57 +02:00
Sei Lisa
dde3c08f61 Add TODO item: skip preprocessor directives. 2014-07-27 21:05:01 +02:00
Sei Lisa
0f55129f71 Add important comment 2014-07-27 21:04:31 +02:00
Sei Lisa
6af4f40752 Add TODO items 2014-07-27 20:48:37 +02:00
Sei Lisa
1747028211 Finish coverage tests. 2014-07-27 20:26:24 +02:00
Sei Lisa
7623c444a8 Forgot empty statement. Also make warning more prominent. 2014-07-27 20:14:25 +02:00
Sei Lisa
19ca34d7e0 Expand the test case to include more coverage. Triggers errors. 2014-07-27 20:13:12 +02:00
Sei Lisa
e57c21a73a Fix FIELD and IDENT in globals. 2014-07-27 20:03:57 +02:00
Sei Lisa
30efb5d14c Bug fix: look up library functions too! 2014-07-27 19:18:05 +02:00
Sei Lisa
f3339b0906 Fix an infinite recursion by disallowing forward globals in global var defs. 2014-07-27 18:42:55 +02:00
Sei Lisa
716374eb83 Add test cases that failed without the previous commit. 2014-07-27 18:08:18 +02:00
Sei Lisa
c483d5ea71 Bunch of bug fixes. 2014-07-27 18:07:35 +02:00
Sei Lisa
f1656c41aa Import 'warning' from lslparse instead of redefining. Cosmetic fixes. 2014-07-27 18:05:11 +02:00
Sei Lisa
26ab4f0382 Fix class definitions to make sense (le-sigh - python quirk) 2014-07-27 17:40:26 +02:00