def test_try_peval_expression(): class Dummy(): pass x = Dummy() evaluated, value = try_peval_expression(ast.Name(id='x', ctx=ast.Load()), dict(x=x)) assert evaluated assert value is x node = ast.Name(id='y', ctx=ast.Load()) evaluated, value = try_peval_expression(node, dict(x=x)) assert not evaluated assert value is node
def handle_If(node, ctx, walk_field, **kwds): evaluated, test = try_peval_expression(node.test, ctx.bindings) if evaluated: taken_node = node.body if test else node.orelse new_node = walk_field(taken_node, block_context=True) return new_node else: return node
def handle_Call(state, node, prepend, **_): gen_sym = state.gen_sym constants = state.constants evaluated, fn = try_peval_expression(node.func, constants) if not evaluated or not get_inline_tag(fn): return state, node return_name, gen_sym = gen_sym('return') inlined_body, gen_sym, constants = _inline(node, gen_sym, return_name, constants) prepend(inlined_body) new_state = state.update(gen_sym=gen_sym, constants=constants) return new_state, ast.Name(id=return_name, ctx=ast.Load())