def generic_visit(self, node): if node in self.constant_expressions: try: fake_node = ast.Expression( node.value if isinstance(node, ast.Index) else node) code = compile(fake_node, '<constant folding>', 'eval') value = eval(code, self.env) new_node = self.to_ast(value) if (isinstance(node, ast.Index) and not isinstance(new_node, ast.Index)): new_node = ast.Index(new_node) return new_node except Exception: # as e: #print ast.dump(node) #print 'error in constant folding: ', e return Transformation.generic_visit(self, node) else: return Transformation.generic_visit(self, node)