factor/native/fixnum.c

28 lines
494 B
C

#include "factor.h"
#define BINARY_OP(x,y) \
FIXNUM x, y; \
y = env.dt; \
type_check(FIXNUM_TYPE,y); \
x = dpop(); \
type_check(FIXNUM_TYPE,x);
void primitive_fixnump(void)
{
check_non_empty(env.dt);
env.dt = tag_boolean(TAG(env.dt) == FIXNUM_TYPE);
}
void primitive_divide(void)
{
BINARY_OP(x,y);
/* division takes common factor of 8 out. */
env.dt = tag_fixnum(x / y);
}
void primitive_not(void)
{
type_check(FIXNUM_TYPE,env.dt);
env.dt = RETAG(UNTAG(~env.dt),FIXNUM_TYPE);
}