diff --git a/lslopt/lslfoldconst.py b/lslopt/lslfoldconst.py index 7c98bac..79ea3d8 100644 --- a/lslopt/lslfoldconst.py +++ b/lslopt/lslfoldconst.py @@ -1001,7 +1001,7 @@ class foldconst(object): warning(u"Can't optimize call to %s because it would generate a tab character (you can force the optimization with the 'foldtabs' option, or disable this warning by disabling the 'warntabs' option)." % node['name'].decode('utf8')) return parent[index] = {'nt':'CONST', 't':node['t'], 'value':value, 'SEF':True} - elif node['name'] == 'llGetListLength': + elif self.optlistlength and node['name'] == 'llGetListLength': # Convert llGetListLength(expr) to (expr != []) node = {'nt':'CONST', 't':'list', 'value':[]} parent[index] = node = {'nt':'!=', 't':'list', 'ch':[child[0], node]} diff --git a/lslopt/lsloptimizer.py b/lslopt/lsloptimizer.py index 27b0ee6..3684360 100644 --- a/lslopt/lsloptimizer.py +++ b/lslopt/lsloptimizer.py @@ -74,6 +74,7 @@ class optimizer(foldconst, renamer, deadcode): self.shrinknames = 'shrinknames' in options self.constfold = 'constfold' in options + self.optlistlength = 'listlength' in options self.dcr = 'dcr' in options # Math that works fine except in rare corner-cases can be optimized. diff --git a/main.py b/main.py index 25f2533..2884afd 100755 --- a/main.py +++ b/main.py @@ -282,6 +282,7 @@ Case insensitive. would keep a single copy of "longstring", while if the strings are added, both "alongstring" and "blongstring" take memory. + ListLength + Optimize llGetListLength(arg) to arg!=[]. Miscellaneous options @@ -318,7 +319,7 @@ validoptions = frozenset(('extendedglobalexpr','breakcont','extendedtypecast', 'extendedassignment','allowkeyconcat','allowmultistrings','duplabels', 'lazylists','enableswitch','errmissingdefault','funcoverride','optimize', 'optsigns','optfloats','constfold','dcr','shrinknames','addstrings', - 'foldtabs','warntabs','processpre','explicitcast', + 'foldtabs','warntabs','processpre','explicitcast','listlength', 'help','lso','expr' # 'clear' is handled as a special case )) @@ -334,6 +335,7 @@ def main(argv): options = set(('extendedglobalexpr','extendedtypecast','extendedassignment', 'allowkeyconcat','allowmultistrings','processpre','warntabs','optimize', 'optsigns','optfloats','constfold','dcr','errmissingdefault', + 'listlength', )) assert not (options - validoptions), (u"Default options not present in"