STINNER Victor added the comment: Hi, I have a project called "astoptimizer" which does the same job than the CPython peephole optimizer, but it is implemented in Python.
To avoid this issue (create an huge object and then discard it because it is too large), I have a "check_binop_cst" function which checks if the result will fit into the configuration constraints: https://bitbucket.org/haypo/astoptimizer/src/024c05ae410458813c20fafe8fe5b8d3cf980f52/astoptimizer/optimizer.py?at=default#cl-598 Check for "a * b" : ------------- if isinstance(op, ast.Mult): if isinstance(right, INT_TYPES): # str * int if isinstance(left, STR_TYPES): return (len(left) * right <= self.config.max_string_length) # tuple * int if isinstance(left, tuple): return (len(left) * right <= self.config.max_tuple_length) if isinstance(left, INT_TYPES): # int * str if isinstance(right, STR_TYPES): return (left * len(right) <= self.config.max_string_length) # int * tuple if isinstance(right, tuple): return (left * len(right) <= self.config.max_tuple_length) ------------- Constraints in the config: https://bitbucket.org/haypo/astoptimizer/src/024c05ae410458813c20fafe8fe5b8d3cf980f52/astoptimizer/config.py?at=default#cl-187 Astoptimizer supports the following "constant" types: int, float, complex, bytes, str, tuple, "name constant" (True, False, None). The frozenset type is also supported if the builtins are declared as "cosntant" too. ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue21074> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com