factor/native/cons.c

41 lines
558 B
C

#include "factor.h"
CELL cons(CELL car, CELL cdr)
{
CONS* cons = allot(sizeof(CONS));
cons->car = car;
cons->cdr = cdr;
return tag_cons(cons);
}
void primitive_cons(void)
{
CELL cdr = dpop();
CELL car = dpop();
dpush(cons(car,cdr));
}
void primitive_car(void)
{
drepl(car(dpeek()));
}
void primitive_cdr(void)
{
drepl(cdr(dpeek()));
}
void primitive_set_car(void)
{
CELL cons = dpop();
CELL car = dpop();
untag_cons(cons)->car = car;
}
void primitive_set_cdr(void)
{
CELL cons = dpop();
CELL cdr = dpop();
untag_cons(cons)->cdr = cdr;
}