Esempio n. 1
0
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
Esempio n. 2
0
 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
Esempio n. 3
0
    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())