diff --git a/fatoptimizer/builtins.py b/fatoptimizer/builtins.py index 4165251..06e455d 100644 --- a/fatoptimizer/builtins.py +++ b/fatoptimizer/builtins.py @@ -8,13 +8,13 @@ def _chr_check_args(args): - code_point = args[0] - return 0 <= code_point <= 0x10ffff + # args[0] => code_point + return 0 <= args[0] <= 0x10ffff def _complex_check_args(args): - code_point = args[0] - return 0 <= code_point <= 0x10ffff + # args[0] => code_point + return 0 <= args[0] <= 0x10ffff def _divmod_check_args(args): @@ -23,32 +23,31 @@ def _divmod_check_args(args): def _ord_check_args(args): - string = args[0] - return (len(string) == 1) + # param args[0] is a string + return (len(args[0]) == 1) def _bytes_check_args(args): - arg = args[0] - if not isinstance(arg, tuple): + if not isinstance(args[0], tuple): return True - return all(0 <= item <= 255 for item in arg) + return all(0 <= item <= 255 for item in args[0]) def _pow_check_args(config, args): - num = args[0] - exp = args[1] + # num => args[0] + # exp => args[1] if len(args) >= 3: - mod = args[2] + # mod => args[2] + return check_pow(config, args[0], args[1], args[2]) else: - mod = None - return check_pow(config, num, exp, mod) + # mod => None + return check_pow(config, args[0], args[1], None) def add_pure_builtins(config): def add(name, *args, **kw): func = getattr(builtins, name) - pure_func = PureFunction(func, name, *args, **kw) - config._pure_builtins[name] = pure_func + config._pure_builtins[name] = PureFunction(func, name, *args, **kw) ANY_TYPE = None @@ -76,6 +75,7 @@ def add(name, *args, **kw): add('int', 1, FLOAT_TYPES + STR_TYPES, # catch ValueError for int('xyz') exceptions=ValueError) + add('len', 1, ITERABLE_TYPES) add('list', 1, ITERABLE_TYPES) add('oct', 1, int) diff --git a/fatoptimizer/config.py b/fatoptimizer/config.py index 7ec2212..bdb577a 100644 --- a/fatoptimizer/config.py +++ b/fatoptimizer/config.py @@ -1,7 +1,8 @@ import builtins from .tools import get_constant_size, ITERABLE_TYPES - +# ISSUE : SystemError: Parent module '' not loaded, cannot perform relative import +# StackOverFlow search : http://stackoverflow.com/questions/16981921/relative-imports-in-python-3 class Config: # FIXME: use dir()? diff --git a/fatoptimizer/methods.py b/fatoptimizer/methods.py index 5f37f44..8725f21 100644 --- a/fatoptimizer/methods.py +++ b/fatoptimizer/methods.py @@ -53,5 +53,6 @@ def add(obj_type, name, *args, **kw): check_args=check_encoding, exceptions=UnicodeEncodeError) # FIXME: add more str methods - + add(str, 'upper', 0) + add(str,'lower', 0) # FIXME: tuple: count, index diff --git a/test_fatoptimizer.py b/test_fatoptimizer.py index a8badf6..72d200c 100644 --- a/test_fatoptimizer.py +++ b/test_fatoptimizer.py @@ -3206,6 +3206,13 @@ def test_str_encode(self): self.check_dont_optimize(r'"ab\xff".encode("big5")') self.check_dont_optimize(r'"ab\xff".encode("ascii", "backslashreplace")') + def test_str_upper(self): + + self.check_optimize(r'"abc".upper()','"ABC"') + + def test_str_lower(self): + + self.check_optimize(r'"ABC".lower()','"abc"') if __name__ == "__main__": unittest.main()