Add default options and option activation/deactivation.

This commit is contained in:
Sei Lisa 2014-07-28 18:19:50 +02:00
parent 443b5a2258
commit 02c84ca99c

42
main.py
View file

@ -9,37 +9,39 @@ def main():
if len(sys.argv) < 2: if len(sys.argv) < 2:
sys.stderr.write(r'''LSL optimizer v0.1 sys.stderr.write(r'''LSL optimizer v0.1
Usage: %s [-O option[,option[,...]]] filename Usage: %s [-O [+|-]option[,[+|-]option[,...]]] filename
That's an upper case o, not the number zero.
If filename is a dash (-) then standard input is used. If filename is a dash (-) then standard input is used.
Options (* means not implemented): Options (+ means default, - means not default, * means not implemented):
extendedglobalexpr Enables arbitrary expressions in globals (as opposed to +extendedglobalexpr Enables arbitrary expressions in globals (as opposed to
dull simple expressions allowed by regular LSL). Needs dull simple expressions allowed by regular LSL). Needs
the optimizer to run for the result to be compilable. the optimizer to run for the result to be compilable.
extendedtypecast Allows extended typecast syntax e.g. (string)(integer)a +extendedtypecast Allows extended typecast syntax e.g. (string)(integer)a
is valid with this option. is valid with this option.
extendedassignment Enables &=, |=, ^=, <<=, >>= assignment operators. +extendedassignment Enables &=, |=, ^=, <<=, >>= assignment operators.
explicitcast Add explicit casts where they are implicit. This option -explicitcast Add explicit casts where they are implicit. This option
is useless with 'optimize' and 'optsigns', and is of is useless with 'optimize' and 'optsigns', and is of
basically no use in general. basically no use in general.
allowkeyconcat Allow string + key and key + string (both return string) +allowkeyconcat Allow string + key and key + string (both return string)
allowmultistrings Allow C-like string juxtaposition, e.g. "ab" "cd" means +allowmultistrings Allow C-like string juxtaposition, e.g. "ab" "cd" means
"abcd", no concatenation involved. Very useful when used "abcd", no concatenation involved. Very useful when used
with a preprocessor (although the optimizer would with a preprocessor (although the optimizer would
optimize concatenated strings if they are parenthesized optimize concatenated strings if they are parenthesized
correctly, see note at the footer). correctly, see note at the footer).
skippreproc Skip preprocessor directives in the source as if they +skippreproc Skip preprocessor directives in the source as if they
were comments. Not useful unless the script is itself were comments. Not useful unless the script is itself
the output of a preprocessor like cpp, which inserts the output of a preprocessor like cpp, which inserts
directives like: # 123 "filename". directives like: # 123 "filename".
optimize Runs the optimizer. +optimize Runs the optimizer.
optsigns Optimize signs and float as int. +optsigns Optimize signs and float as int.
foldtabs Tabs can't be copy-pasted, so they aren't optimized by -foldtabs Tabs can't be copy-pasted, so they aren't optimized by
default. But with support from the viewer, they can be default. But with support from the viewer, they can be
folded too and make it to the uploaded source. This folded too and make it to the uploaded source. This
option overrides that check, enabling optimization of option overrides that check, enabling optimization of
strings with tabs. strings with tabs. The resulting source isn't guaranteed
to be copy-paste-able to a different script, though.
* allowcescapes Enables use of \r, \b, \xNN, \NNN, etc. * allowcescapes Enables use of \r, \b, \xNN, \NNN, etc.
* enableswitch Enables Firestorm-compatible switch statements * enableswitch Enables Firestorm-compatible switch statements
(not recommended) (not recommended)
@ -52,14 +54,24 @@ means that e.g. a + 3 + 5 is not optimized to a + 8; however a + (3 + 5) is.
''' % sys.argv[0]) ''' % sys.argv[0])
return 1 return 1
options = set(('extendedglobalexpr','extendedtypecast','extendedassignment',
'allowkeyconcat','allowmultistrings','skippreproc','optimize','optsigns'
))
if sys.argv[1] == '-O': if sys.argv[1] == '-O':
if len(sys.argv) < 4: if len(sys.argv) < 4:
sys.stderr.write('Command line: Not enough parameters\n') sys.stderr.write('Command line: Not enough parameters\n')
return 1 return 1
options = sys.argv[2].split(',') optchanges = sys.argv[2].split(',')
for chg in optchanges:
if chg[0:1] != '+':
chg = '+' + chg
if chg[0] == '-':
options.discard(chg[1:])
else:
options.add(chg[1:])
fname = sys.argv[3] fname = sys.argv[3]
else: else:
options = ()
fname = sys.argv[1] fname = sys.argv[1]
p = parser() p = parser()