def test_reify_object(): obj = reify_object(Foo(1, var(3)), {var(3): 4}) assert obj.a == 1 assert obj.b == 4 f = Foo(1, 2) assert reify_object(f, {}) is f
def test_reify_slots(): class SlotsObject(object): __slots__ = ['myattr'] def __init__(self, myattr): self.myattr = myattr x = var() s = {x: 1} e = SlotsObject(x) assert reify_object(e, s), SlotsObject(1) assert reify_object(SlotsObject(1), s), SlotsObject(1)
def reify_lcons(lcons, s): ret = reify_object(lcons, s) try: # Simplify to a tuple once we've reified, if possible. ret = ret.as_tuple() except (TypeError, EarlyGoalError): pass return ret
def reify_ast(s): """ Reify ast objects in s """ for s_dict in s: for k, v in s_dict.items(): s_without_k = deepcopy(s_dict) print("Reifying {}:{} with {}".format(k, rec_ast_parse(v), rec_ast_parse(s_without_k))) try: v = reify_object(v, s_without_k) print("Reified object {}".format(k)) except AttributeError: v = reify(v, s_without_k) s_dict[k] = v print("Reified {} to {}".format(k, rec_ast_parse(v), s_without_k)) return s