factor/native/cons.c

46 lines
638 B
C
Raw Normal View History

2004-07-16 02:26:21 -04:00
#include "factor.h"
2004-07-24 17:37:42 -04:00
CONS* cons(CELL car, CELL cdr)
2004-07-16 02:26:21 -04:00
{
2004-08-04 22:43:58 -04:00
CONS* cons = allot(sizeof(CONS));
2004-07-16 02:26:21 -04:00
cons->car = car;
cons->cdr = cdr;
return cons;
}
void primitive_consp(void)
{
drepl(tag_boolean(typep(CONS_TYPE,dpeek())));
2004-07-16 02:26:21 -04:00
}
void primitive_cons(void)
{
CELL cdr = dpop();
CELL car = dpop();
dpush(tag_cons(cons(car,cdr)));
2004-07-16 02:26:21 -04:00
}
void primitive_car(void)
{
drepl(car(dpeek()));
2004-07-16 02:26:21 -04:00
}
void primitive_cdr(void)
{
drepl(cdr(dpeek()));
2004-07-16 02:26:21 -04:00
}
void primitive_set_car(void)
2004-07-16 02:26:21 -04:00
{
CELL cons = dpop();
CELL car = dpop();
untag_cons(cons)->car = car;
2004-07-16 02:26:21 -04:00
}
void primitive_set_cdr(void)
2004-07-16 02:26:21 -04:00
{
CELL cons = dpop();
CELL cdr = dpop();
untag_cons(cons)->cdr = cdr;
2004-07-16 02:26:21 -04:00
}