Commit graph

18 commits

Author SHA1 Message Date
Sei Lisa
642f8e995d Fix missing comma that prevented --libdata from working
It doesn't seem to be much used, considering it's broken since revision 0af2349e where the feature was first introduced, and it hasn't been reported.
2022-12-20 21:49:32 +01:00
Sei Lisa
bf72d2c3bf Allow //pragma inline or /*pragma inline*/ for inlining a function
They are transformed by the scanner to the identifier `inline`, which is how the parser identifies it. This solves the comment problem, but it results in a funny side effect. Now, in inline mode, /*pragma inline*/ will always be the identifier `inline`, therefore this is valid:

    integer /*pragma inline*/ = 5;
    llOwnerSay((string)inline); // will say 5

Not overly elegant, but better than making up a specific token or declaring comments as tokens or the like.
2021-10-17 20:29:22 +02:00
Sei Lisa
f8cf78dfac Progress towards dual Python 2 & 3 2020-11-09 02:28:57 +01:00
Pedro Gimeno
4c49e87f4c Add -y to test entries without an .err file; improve consistency 2020-11-08 19:07:07 +01:00
Sei Lisa
d5b83d50c4 Fix test case in the last commit 2020-11-02 11:14:32 +01:00
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
Sei Lisa
7282e539d0 Add a directory that is important for tests
It had no files, so git didn't include it. Sigh.
2019-02-04 19:05:08 +01:00
Sei Lisa
36ed90c9ba Revert _Pragma operator
Revert "Add support for C11-style _Pragma operator on processpre".
Revert "Add unit test for the _Pragma operator".

This reverts commits 31fcb331c7 and e261ac2121.

This should rather be the job of the preprocessor, which should generate #pragma lines. gcc does that.
2019-01-17 20:30:04 +01:00
Sei Lisa
e261ac2121 Add unit test for the _Pragma operator 2019-01-15 20:38:19 +01:00
Sei Lisa
8043cb7c9f Add two forgotten files from the inline tests 2019-01-15 20:35:17 +01:00
Sei Lisa
42f47d38f0 Fix swaps and other misoptimizations
This undoes 454d44e85f
2019-01-11 02:09:15 +01:00
Sei Lisa
5bfb218505 Perform redundant jump elimination in lastpass
This is a first try at redundant jump removal (jumps that target the very next instruction). It's too basic in several ways.

- The statement is replaced by a ';' instead of removed.
- If the jump was the only statement in an if, when the if becomes empty, it's not folded.
- Jumps that are last in the 'then' branch of if+else are not visible. This would need either to track multiple last statements, or to have some means to anticipate what the next statement is at every statement. A Control Flow Graph would help a lot.
- When a label is immediately followed by a jump, all jumps to that label should target the destination of that jump if it's in scope. Added to TODO.
- It misses some optimizations when not expanding WHILE and FOR into IF/JUMP.

Moving everything to an earlier stage would help with some of these, especially with ';' and 'if' folding. Unconditionally expanding WHILE and FOR would also help.
2019-01-06 22:32:19 +01:00
Sei Lisa
574f92d08e Allow #pragma OPT inline 2019-01-06 02:20:34 +01:00
Sei Lisa
c5fd4932f1 Finish inlining for all loop conditions 2019-01-06 01:59:36 +01:00
Sei Lisa
852fec2f26 Inliner: Add and use newSymtab() and newId() 2019-01-06 01:10:21 +01:00
Sei Lisa
47a324f4a6 Coverage test lsloutput-1 is prone to exceptions. Activate -y. 2019-01-06 00:50:42 +01:00
Sei Lisa
ddec4c464e Inline functions in 'do' loop conditions have been fixed 2019-01-05 23:10:01 +01:00
Sei Lisa
1867dc78e7 Add the new test suite.
This test suite has been in use for a long time now, in place of the obsolete and unmanageable testparser.py and testfuncs.py. It verifies the complete optimizer output to stdout and stderr, to ensure that the output matches the expectations.

See unit_tests/README.txt for more info.
2019-01-04 20:27:36 +01:00