factor/native/cons.c

47 lines
706 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)
{
2004-07-17 18:35:09 -04:00
check_non_empty(env.dt);
env.dt = tag_boolean(typep(CONS_TYPE,env.dt));
2004-07-16 02:26:21 -04:00
}
void primitive_cons(void)
{
check_non_empty(env.dt);
check_non_empty(dpeek());
env.dt = tag_cons(cons(dpop(),env.dt));
}
void primitive_car(void)
{
env.dt = car(env.dt);
}
void primitive_cdr(void)
{
env.dt = cdr(env.dt);
}
void primitive_set_car(void)
2004-07-16 02:26:21 -04:00
{
check_non_empty(dpeek());
untag_cons(env.dt)->car = dpop();
env.dt = dpop();
}
void primitive_set_cdr(void)
2004-07-16 02:26:21 -04:00
{
check_non_empty(dpeek());
untag_cons(env.dt)->cdr = dpop();
env.dt = dpop();
}