Ejemplo n.º 1
0
u_object u_pair_create(u_object car, u_object cdr)
{
	gc_push(car);
	gc_push(cdr);   // all the pair created through gc module??
	
	u_pair *pair = gc_alloc_hobject();
	pair->type = U_PAIR;
	pair->val.pair.car = car;
	pair->val.pair.cdr = cdr;
	
	gc_pop();         // why pop ? what if no push, no pop?
	gc_pop();          

	return u_pair_to_obj(pair);   // also the key  point
	
}
Ejemplo n.º 2
0
Archivo: prim.c Proyecto: 8l/lisp-1
sexp_t *prim_append(sexp_t *args)
{
	sexp_t *lst, *ret;
	if (list_len(args) == 0)
		return nil;
	if (isnil(car(args)))
		return prim_append(cdr(args));
	if (isnil(cdr(args)))
		return copy_list(car(args));
	if (!iscons(car(args)) || list_len(car(args)) < 0) {
		fprintf(stderr, "error: proper list expected\n");
		return NULL;
	}
	for (ret = lst = copy_list(car(args)); cdr(lst) != nil; lst = cdr(lst))
		;
	gc_push(&ret);
	lst->data = make_cons(car(lst), prim_append(cdr(args)));
	gc_pop();
	return ret;
}