예제 #1
0
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);
}
예제 #2
0
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;

}
예제 #3
0
파일: print.c 프로젝트: jthornber/dmexec
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;
	}
}