void test_refs_are_destruction_safe() { Branch branch; Term* a = branch.compile("a = 1"); caValue ref; set_ref(&ref, a); test_assert(as_ref(&ref) == a); clear_branch(&branch); test_assert(as_ref(&ref) == NULL); }
void reftest () { /* std::cout << "----------------" << std::endl; auto t1 = range(10); auto t2 = as_ref(range(10)); std::cout << typeid(t1).name() << std::endl; std::cout << typeid(t2).name() << std::endl; for (auto n : t2) { std::cout << n << " "; } */ std::cout << std::endl << "----------------" << std::endl; { range_impl<int> r = range(5); for (auto n : generate ([](int x){ return x * x;}, as_ref(r))) { std::cout << n << std::endl; } } std::cout << std::endl << "----------------" << std::endl; { range_impl<int> r = range(5); for (auto n : generate ([](int x){ return x * x;}, r)) { std::cout << n << std::endl; } } std::cout << std::endl << "----------------" << std::endl; }
void print(FILE *stream, Value v) { switch (get_tag(v)) { case TAG_FIXNUM: fprintf(stream, "%d", as_fixnum(v)); break; case TAG_REF: switch (get_type(v)) { case PRIMITIVE: fprintf(stream, "#<procedure %s>", ((Primitive *) as_ref(v))->name); break; case STRING: print_string(stream, v.ptr); break; case CONS: print_list(stream, v); break; case SYMBOL: print_symbol(stream, v.ptr); break; case FIXNUM: fprintf(stream, "~boxed fixnum?!~"); break; case CLOSURE: fprintf(stream, "~closure~"); break; case NIL: fprintf(stream, "()"); break; case VECTOR: fprintf(stream, "~vector~"); break; case VBLOCK: fprintf(stream, "~vblock~"); break; case HTABLE: fprintf(stream, "~htable~"); break; case HBLOCK: fprintf(stream, "~hblock~"); break; case STATIC_ENV: fprintf(stream, "~static-env~"); break; case FRAME: fprintf(stream, "~frame~"); break; case THUNK: fprintf(stream, "~thunk~"); break; case RAW: fprintf(stream, "~raw~"); break; } break; case TAG_NIL: fprintf(stream, "()"); break; } }