Пример #1
0
def __parse_literal_expression(string_expr):
    if tac.is_stackvar(string_expr):
        return ast.Name
    body = ast.parse(string_expr).body
    assert len(body) == 1
    expr = body[0]
    return type(expr.value)
Пример #2
0
 def single_block_update(block, in_cons_map):
     cons_map = in_cons_map.copy()
     for i, ins in enumerate(block):
         if ins.is_assign and len(ins.gens) == len(ins.uses) == 1 and is_stackvar(ins.gens[0]):
             [lhs], [rhs] = ins.gens, ins.uses
             if rhs in cons_map:
                 rhs = cons_map[rhs]
             cons_map[lhs] = rhs
         else:
             uses = [(cons_map.get(v, v))
                      for v in ins.uses]
             if ins.is_inplace:
                 uses[1] = ins.uses[1]
             uses = tuple(uses)
             block[i] = ins._replace(uses=tuple(uses))
             for v in chain(ins.gens, ins.kills):
                 if v in cons_map:
                     del cons_map[v]
     return cons_map
Пример #3
0
def undef(kills, gens):
    return tuple(('_' if v in kills and tac.is_stackvar(v) else v)
                 for v in gens)