Sei Lisa
535dc8434c
Allow a code block instead of a ':' as terminator for 'case' and 'default'.
...
For Firestorm compatibility.
2015-03-13 05:16:22 +01:00
Sei Lisa
39b6036671
Remove 'Scope' from functions in symbol table. Function scope is always 0.
2015-03-13 05:12:09 +01:00
Sei Lisa
4f8d2979aa
Fix typo in EParseFunctionMismatch.
2015-03-13 03:28:51 +01:00
Sei Lisa
63e3021a6d
Comment tweaking.
2015-03-09 13:20:37 +01:00
Sei Lisa
9c926b6fec
Fix obsolete comment.
...
There was a time where I decided that the tree would be stored inside the symbol table, as values for the global symbols. I changed my mind later and separated them, but that comment remained.
2015-03-09 01:07:55 +01:00
Sei Lisa
6a0eebf157
Implement a couple subtleties of the lexer in the handling of strings.
...
First, a string does not have its own context, it's a regular expression, therefore if there isn't a matching closing quote until EOF, it's not an unterminated string. It plainly *isn't* a string.
Second, the string lexer searches for either the regexp '[^"\\]' (any character except a double quote or a backslash) or the regexp '\\.', that is, a backslash followed by an "any character" meta. But the "any character" meta does NOT match a newline. The consequence is that a '\' followed by a newline cancels the matching, and the whole thing is not considered a string.
Isolated double quotes are then plain ignored as many other characters.
An example illustrating both cases:
```
default
{
state_entry()
{
string msg = "Hello, Avatar!";
llOwnerSay"(msg); // the opening quote will be ignored
// the following backslash at EOL cancels the previous double quote: \
llOwnerSay(llGetKey(")); // Unterminated string; unmatched so ignored.
}
}
```
2015-03-08 16:53:58 +01:00
Sei Lisa
1e8b77bf50
Rather than generating random identifiers for locals, prefix them with 'loc_'.
...
Should help improving readability of the optimized script.
2015-03-07 14:51:51 +01:00
Sei Lisa
a292846d28
Fix missing scope table index when generating the call to lazy_list_set.
2015-03-07 14:50:25 +01:00
Sei Lisa
562154e7aa
Remove the symbol table entry too when removing a global state/function/var.
2015-03-07 14:33:11 +01:00
Sei Lisa
59cdd64228
Warn about float constants that can't be represented in globals. Also don't duplicate the globals warnings.
2015-03-06 23:26:58 +01:00
Sei Lisa
c1d837674c
Forgot to exclude globals from this optimization somehow.
2015-03-06 22:55:28 +01:00
Sei Lisa
a9179f2779
Read the data files from the same path where the script resides.
2015-03-06 20:29:54 +01:00
Sei Lisa
c68a1f4ad6
Add copyright notices to all files, to prepare the program for release.
2015-03-05 23:18:41 +01:00
Sei Lisa
33de6c0efc
Comment typo, brackets->braces.
2015-03-05 20:18:13 +01:00
Sei Lisa
308ca7c8ff
Add support for 'break n;' and 'continue n;'. Also simplify the break/continue stacks handling code and fix some bugs.
2015-03-05 20:12:32 +01:00
Sei Lisa
d4035b0723
Add incompatibility note on JSON.
2015-03-05 18:48:28 +01:00
Sei Lisa
e5cb37dfe4
For now, enable the RE
2015-03-05 14:42:02 +01:00
Sei Lisa
f730843762
More TODO tweaking.
2015-03-05 06:20:11 +01:00
Sei Lisa
7fb345b222
'case' needed to be in the list of 4-char words to avoid. Also tweak a comment.
2015-03-05 06:18:53 +01:00
Sei Lisa
cbcf60767a
Implement break/continue and switch().
...
While on it, reorganize the help text and enable 'dcr' by default.
2015-03-05 01:37:32 +01:00
Sei Lisa
a36715f121
Add reference source, comments.
2015-03-04 02:01:03 +01:00
Sei Lisa
8b9676e5dc
Fix missing 'paramscope', remove commented out old body, simplify.
2015-03-04 01:51:08 +01:00
Sei Lisa
a6127cf144
lazylistcompat idea ditched.
2015-03-04 00:40:07 +01:00
Sei Lisa
87b6002b6c
Fix the bug detected in llListReplaceList.
2015-03-04 00:31:55 +01:00
Sei Lisa
8ea6ae50fd
Replace the lazy_list_set function with a more compact one.
2015-03-03 20:00:40 +01:00
Sei Lisa
b73805e0ce
Add "lazy lists" assignment support (mylist[index] = value).
...
Add support for LAMBDA (empty) tree nodes while on it, that allow us to define private stuff at the top without caring about Loc.
2015-03-03 17:59:51 +01:00
Sei Lisa
7e521780d6
Two more optimizations TODO
2015-03-03 17:49:57 +01:00
Sei Lisa
e36fc83b39
Noted important bug in llListReplaceList
2015-03-03 17:26:50 +01:00
Sei Lisa
0b55f6e64d
Oops, the operator is !, not -
2015-03-03 02:20:31 +01:00
Sei Lisa
05d46e9ac3
Optimize comparisons of the form int>2147483647 or int<-2147483648 and expand (>=, <=, !=) to !(<, >, ==) respectively.
2015-03-03 02:16:00 +01:00
Sei Lisa
493aed6c39
Optimize (-a)*b or a*(-b) to -(a*b), revisiting the expression.
...
This obviates the need for (-a)*(-b) because it will be simplified automatically. It also enables (a+1)*b-1 to be simplified to just ~(~a*b). Still missing simplifying a*b+b to (a+1)*b, but that's more complicated.
2015-03-03 01:46:53 +01:00
Sei Lisa
22a1a2e8ba
Document the change to the symtab structure.
2015-03-03 00:51:48 +01:00
Sei Lisa
01f2bba2f4
Make *-2 and *2 only work for local variables. Needed an adition to the parser.
2015-03-03 00:49:14 +01:00
Sei Lisa
d8f42a5071
Remove obsolete comment about parentheses (they are now implicit).
2015-03-03 00:47:15 +01:00
Sei Lisa
c650ad26f8
Comment changes only.
2015-03-02 23:28:14 +01:00
Sei Lisa
3b7e461d82
Convert [x] -> (list)x except in globals.
2015-02-28 22:48:11 +01:00
Sei Lisa
831296eddc
Minor shortening of name to fit in line
2015-02-28 21:46:19 +01:00
Sei Lisa
762bf1f27b
Add some FIXMEs and TODOs, remove comment that no longer makes sense.
2015-02-28 20:39:23 +01:00
Sei Lisa
0ca5a8f5b0
Fix typo that made function calls be wrapped in parentheses on output.
...
No biggie, but what's right is right.
2015-02-28 20:37:59 +01:00
Sei Lisa
e30a4ea25d
Fix addstrings option (oops).
2015-02-28 20:37:18 +01:00
Sei Lisa
8f83e2f1ab
Add "addstrings" option (disabled by default) to select whether to automatically concatenate strings during constant folding.
2015-02-28 20:01:51 +01:00
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
1440f7811e
Fix bug where (float)"infi" did not produce Infinity.
2015-02-28 17:34:26 +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