complex numbers
parent
d7eb8e8b2d
commit
2740c77a10
|
@ -1,5 +1,8 @@
|
||||||
+ native:
|
+ native:
|
||||||
|
|
||||||
|
- printing floats: append .0 always
|
||||||
|
- vector=
|
||||||
|
- make-image: take a parameter, include le & be images in dist
|
||||||
- do something about "base" variable -- too fragile
|
- do something about "base" variable -- too fragile
|
||||||
ERROR: I/O error: [ "primitive_read_line_fd_8" "Resource temporarily unavailable" ]
|
ERROR: I/O error: [ "primitive_read_line_fd_8" "Resource temporarily unavailable" ]
|
||||||
- errors: don't show .factor-rc
|
- errors: don't show .factor-rc
|
||||||
|
|
2
build.sh
2
build.sh
|
@ -1,5 +1,5 @@
|
||||||
export CC=gcc34
|
export CC=gcc34
|
||||||
export CFLAGS="-pedantic -Wall -Winline -O2 -march=pentium4 -fomit-frame-pointer"
|
export CFLAGS="-pedantic -Wall -Winline -Os -march=pentium4 -fomit-frame-pointer"
|
||||||
|
|
||||||
$CC $CFLAGS -o f native/*.c
|
$CC $CFLAGS -o f native/*.c
|
||||||
|
|
||||||
|
|
|
@ -134,6 +134,11 @@ IN: cross-compiler
|
||||||
float?
|
float?
|
||||||
str>float
|
str>float
|
||||||
unparse-float
|
unparse-float
|
||||||
|
complex?
|
||||||
|
real
|
||||||
|
imaginary
|
||||||
|
>rect
|
||||||
|
rect>
|
||||||
+
|
+
|
||||||
-
|
-
|
||||||
*
|
*
|
||||||
|
|
|
@ -68,7 +68,9 @@ USE: words
|
||||||
: cons-tag BIN: 010 ;
|
: cons-tag BIN: 010 ;
|
||||||
: object-tag BIN: 011 ;
|
: object-tag BIN: 011 ;
|
||||||
: rational-tag BIN: 100 ;
|
: rational-tag BIN: 100 ;
|
||||||
: header-tag BIN: 101 ;
|
: complex-tag BIN: 101 ;
|
||||||
|
: header-tag BIN: 110 ;
|
||||||
|
: gc-fwd-ptr BIN: 111 ; ( we don't output these )
|
||||||
|
|
||||||
: immediate ( x tag -- tagged ) swap tag-bits shift< bitor ;
|
: immediate ( x tag -- tagged ) swap tag-bits shift< bitor ;
|
||||||
: >header ( id -- tagged ) header-tag immediate ;
|
: >header ( id -- tagged ) header-tag immediate ;
|
||||||
|
|
|
@ -63,7 +63,7 @@ USE: stack
|
||||||
jinvoke-static ; inline
|
jinvoke-static ; inline
|
||||||
|
|
||||||
: /mod ( a b -- a/b a%b )
|
: /mod ( a b -- a/b a%b )
|
||||||
2dup / >fixnum -rot mod ;
|
2dup /i -rot mod ;
|
||||||
|
|
||||||
: > ( a b -- boolean )
|
: > ( a b -- boolean )
|
||||||
[ "java.lang.Number" "java.lang.Number" ]
|
[ "java.lang.Number" "java.lang.Number" ]
|
||||||
|
|
|
@ -79,6 +79,7 @@ primitives,
|
||||||
"/library/vocabulary-style.factor"
|
"/library/vocabulary-style.factor"
|
||||||
"/library/words.factor"
|
"/library/words.factor"
|
||||||
"/library/math/math-combinators.factor"
|
"/library/math/math-combinators.factor"
|
||||||
|
"/library/math/list-math.factor"
|
||||||
"/library/math/namespace-math.factor"
|
"/library/math/namespace-math.factor"
|
||||||
"/library/test/test.factor"
|
"/library/test/test.factor"
|
||||||
"/library/platform/native/arithmetic.factor"
|
"/library/platform/native/arithmetic.factor"
|
||||||
|
|
|
@ -73,19 +73,20 @@ USE: unparser
|
||||||
|
|
||||||
: class-of ( obj -- name )
|
: class-of ( obj -- name )
|
||||||
[
|
[
|
||||||
[ fixnum? ] [ drop "fixnum" ]
|
[ fixnum? ] [ drop "fixnum" ]
|
||||||
[ bignum? ] [ drop "bignum" ]
|
[ bignum? ] [ drop "bignum" ]
|
||||||
[ ratio? ] [ drop "ratio" ]
|
[ ratio? ] [ drop "ratio" ]
|
||||||
[ float? ] [ drop "float" ]
|
[ float? ] [ drop "float" ]
|
||||||
[ cons? ] [ drop "cons" ]
|
[ complex? ] [ drop "complex" ]
|
||||||
[ word? ] [ drop "word" ]
|
[ cons? ] [ drop "cons" ]
|
||||||
[ f = ] [ drop "f" ]
|
[ word? ] [ drop "word" ]
|
||||||
[ t = ] [ drop "t" ]
|
[ f = ] [ drop "f" ]
|
||||||
[ vector? ] [ drop "vector" ]
|
[ t = ] [ drop "t" ]
|
||||||
[ string? ] [ drop "string" ]
|
[ vector? ] [ drop "vector" ]
|
||||||
[ sbuf? ] [ drop "sbuf" ]
|
[ string? ] [ drop "string" ]
|
||||||
[ handle? ] [ drop "handle" ]
|
[ sbuf? ] [ drop "sbuf" ]
|
||||||
[ drop t ] [ drop "unknown" ]
|
[ handle? ] [ drop "handle" ]
|
||||||
|
[ drop t ] [ drop "unknown" ]
|
||||||
] cond ;
|
] cond ;
|
||||||
|
|
||||||
: toplevel ( -- )
|
: toplevel ( -- )
|
||||||
|
|
|
@ -36,24 +36,51 @@ FLOAT* ratio_to_float(CELL tagged)
|
||||||
return (FLOAT*)UNTAG(divfloat(r->numerator,r->denominator));
|
return (FLOAT*)UNTAG(divfloat(r->numerator,r->denominator));
|
||||||
}
|
}
|
||||||
|
|
||||||
void primitive_numberp(void)
|
bool realp(CELL tagged)
|
||||||
{
|
{
|
||||||
check_non_empty(env.dt);
|
switch(type_of(tagged))
|
||||||
|
|
||||||
switch(type_of(env.dt))
|
|
||||||
{
|
{
|
||||||
case FIXNUM_TYPE:
|
case FIXNUM_TYPE:
|
||||||
case BIGNUM_TYPE:
|
case BIGNUM_TYPE:
|
||||||
case RATIO_TYPE:
|
case RATIO_TYPE:
|
||||||
case FLOAT_TYPE:
|
case FLOAT_TYPE:
|
||||||
env.dt = T;
|
return true;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
env.dt = F;
|
return false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool numberp(CELL tagged)
|
||||||
|
{
|
||||||
|
return realp(tagged) || type_of(tagged) == COMPLEX_TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void primitive_numberp(void)
|
||||||
|
{
|
||||||
|
check_non_empty(env.dt);
|
||||||
|
env.dt = tag_boolean(numberp(env.dt));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool zerop(CELL tagged)
|
||||||
|
{
|
||||||
|
switch(type_of(tagged))
|
||||||
|
{
|
||||||
|
case FIXNUM_TYPE:
|
||||||
|
return tagged == 0;
|
||||||
|
case BIGNUM_TYPE:
|
||||||
|
return ((BIGNUM*)UNTAG(tagged))->n == 0;
|
||||||
|
case FLOAT_TYPE:
|
||||||
|
return ((FLOAT*)UNTAG(tagged))->n == 0.0;
|
||||||
|
case RATIO_TYPE:
|
||||||
|
return false;
|
||||||
|
default:
|
||||||
|
critical_error("Bad parameter to zerop",tagged);
|
||||||
|
return false; /* Can't happen */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
CELL to_integer(CELL tagged)
|
CELL to_integer(CELL tagged)
|
||||||
{
|
{
|
||||||
RATIO* r;
|
RATIO* r;
|
||||||
|
@ -67,7 +94,7 @@ CELL to_integer(CELL tagged)
|
||||||
r = (RATIO*)UNTAG(tagged);
|
r = (RATIO*)UNTAG(tagged);
|
||||||
return divint(r->numerator,r->denominator);
|
return divint(r->numerator,r->denominator);
|
||||||
default:
|
default:
|
||||||
type_error(FIXNUM_TYPE,tagged);
|
type_error(INTEGER_TYPE,tagged);
|
||||||
return NULL; /* can't happen */
|
return NULL; /* can't happen */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,14 +35,28 @@ CELL OP(CELL x, CELL y) \
|
||||||
return OP##_fixnum(x,y); \
|
return OP##_fixnum(x,y); \
|
||||||
case RATIO_TYPE: \
|
case RATIO_TYPE: \
|
||||||
if(integerOnly) \
|
if(integerOnly) \
|
||||||
return OP(x,to_integer(y)); \
|
{ \
|
||||||
|
type_error(FIXNUM_TYPE,y); \
|
||||||
|
return F; \
|
||||||
|
} \
|
||||||
else \
|
else \
|
||||||
return OP##_ratio((CELL)fixnum_to_ratio(x),y); \
|
return OP##_ratio((CELL)fixnum_to_ratio(x),y); \
|
||||||
|
case COMPLEX_TYPE: \
|
||||||
|
if(integerOnly) \
|
||||||
|
{ \
|
||||||
|
type_error(FIXNUM_TYPE,y); \
|
||||||
|
return F; \
|
||||||
|
} \
|
||||||
|
else \
|
||||||
|
return OP##_complex((CELL)complex(x,tag_fixnum(0)),y); \
|
||||||
case BIGNUM_TYPE: \
|
case BIGNUM_TYPE: \
|
||||||
return OP##_bignum((CELL)fixnum_to_bignum(x),y); \
|
return OP##_bignum((CELL)fixnum_to_bignum(x),y); \
|
||||||
case FLOAT_TYPE: \
|
case FLOAT_TYPE: \
|
||||||
if(integerOnly) \
|
if(integerOnly) \
|
||||||
return OP(x,to_integer(y)); \
|
{ \
|
||||||
|
type_error(FIXNUM_TYPE,y); \
|
||||||
|
return F; \
|
||||||
|
} \
|
||||||
else \
|
else \
|
||||||
return OP##_float((CELL)fixnum_to_float(x),y); \
|
return OP##_float((CELL)fixnum_to_float(x),y); \
|
||||||
default: \
|
default: \
|
||||||
|
@ -54,29 +68,53 @@ CELL OP(CELL x, CELL y) \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
case RATIO_TYPE: \
|
case RATIO_TYPE: \
|
||||||
|
\
|
||||||
|
if(integerOnly) \
|
||||||
|
{ \
|
||||||
|
type_error(FIXNUM_TYPE,x); \
|
||||||
|
return F; \
|
||||||
|
} \
|
||||||
\
|
\
|
||||||
switch(type_of(y)) \
|
switch(type_of(y)) \
|
||||||
{ \
|
{ \
|
||||||
case FIXNUM_TYPE: \
|
case FIXNUM_TYPE: \
|
||||||
if(integerOnly) \
|
return OP##_ratio(x,(CELL)fixnum_to_ratio(y)); \
|
||||||
return OP(to_integer(x),y); \
|
|
||||||
else \
|
|
||||||
return OP##_ratio(x,(CELL)fixnum_to_ratio(y)); \
|
|
||||||
case RATIO_TYPE: \
|
case RATIO_TYPE: \
|
||||||
if(integerOnly) \
|
return OP##_ratio(x,y); \
|
||||||
return OP(to_integer(x),to_integer(y)); \
|
case COMPLEX_TYPE: \
|
||||||
else \
|
return OP##_complex((CELL)complex(x,tag_fixnum(0)),y); \
|
||||||
return OP##_ratio(x,y); \
|
|
||||||
case BIGNUM_TYPE: \
|
case BIGNUM_TYPE: \
|
||||||
if(integerOnly) \
|
return OP##_ratio(x,(CELL)bignum_to_ratio(y)); \
|
||||||
return OP(to_integer(x),y); \
|
|
||||||
else \
|
|
||||||
return OP##_ratio(x,(CELL)bignum_to_ratio(y)); \
|
|
||||||
case FLOAT_TYPE: \
|
case FLOAT_TYPE: \
|
||||||
if(integerOnly) \
|
return OP##_float((CELL)ratio_to_float(x),y); \
|
||||||
return OP(to_integer(x),to_integer(y)); \
|
default: \
|
||||||
|
if(anytype) \
|
||||||
|
return OP##_anytype(x,y); \
|
||||||
else \
|
else \
|
||||||
return OP##_float((CELL)ratio_to_float(x),y); \
|
type_error(FIXNUM_TYPE,y); \
|
||||||
|
return F; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
case COMPLEX_TYPE: \
|
||||||
|
\
|
||||||
|
if(integerOnly) \
|
||||||
|
{ \
|
||||||
|
type_error(FIXNUM_TYPE,x); \
|
||||||
|
return F; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
switch(type_of(y)) \
|
||||||
|
{ \
|
||||||
|
case FIXNUM_TYPE: \
|
||||||
|
return OP##_complex(x,(CELL)complex(y,tag_fixnum(0))); \
|
||||||
|
case RATIO_TYPE: \
|
||||||
|
return OP##_complex(x,(CELL)complex(y,tag_fixnum(0))); \
|
||||||
|
case COMPLEX_TYPE: \
|
||||||
|
return OP##_complex(x,y); \
|
||||||
|
case BIGNUM_TYPE: \
|
||||||
|
return OP##_complex(x,(CELL)complex(y,tag_fixnum(0))); \
|
||||||
|
case FLOAT_TYPE: \
|
||||||
|
return OP##_complex(x,(CELL)complex(y,tag_fixnum(0))); \
|
||||||
default: \
|
default: \
|
||||||
if(anytype) \
|
if(anytype) \
|
||||||
return OP##_anytype(x,y); \
|
return OP##_anytype(x,y); \
|
||||||
|
@ -93,14 +131,28 @@ CELL OP(CELL x, CELL y) \
|
||||||
return OP##_bignum(x,(CELL)fixnum_to_bignum(y)); \
|
return OP##_bignum(x,(CELL)fixnum_to_bignum(y)); \
|
||||||
case RATIO_TYPE: \
|
case RATIO_TYPE: \
|
||||||
if(integerOnly) \
|
if(integerOnly) \
|
||||||
return OP(x,to_integer(y)); \
|
{ \
|
||||||
|
type_error(BIGNUM_TYPE,y); \
|
||||||
|
return F; \
|
||||||
|
} \
|
||||||
else \
|
else \
|
||||||
return OP##_ratio((CELL)bignum_to_ratio(x),y); \
|
return OP##_ratio((CELL)bignum_to_ratio(x),y); \
|
||||||
|
case COMPLEX_TYPE: \
|
||||||
|
if(integerOnly) \
|
||||||
|
{ \
|
||||||
|
type_error(BIGNUM_TYPE,y); \
|
||||||
|
return F; \
|
||||||
|
} \
|
||||||
|
else \
|
||||||
|
return OP##_complex((CELL)complex(x,tag_fixnum(0)),y); \
|
||||||
case BIGNUM_TYPE: \
|
case BIGNUM_TYPE: \
|
||||||
return OP##_bignum(x,y); \
|
return OP##_bignum(x,y); \
|
||||||
case FLOAT_TYPE: \
|
case FLOAT_TYPE: \
|
||||||
if(integerOnly) \
|
if(integerOnly) \
|
||||||
return OP(x,to_integer(y)); \
|
{ \
|
||||||
|
type_error(BIGNUM_TYPE,y); \
|
||||||
|
return F; \
|
||||||
|
} \
|
||||||
else \
|
else \
|
||||||
return OP##_float((CELL)bignum_to_float(x),y); \
|
return OP##_float((CELL)bignum_to_float(x),y); \
|
||||||
default: \
|
default: \
|
||||||
|
@ -112,34 +164,27 @@ CELL OP(CELL x, CELL y) \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
case FLOAT_TYPE: \
|
case FLOAT_TYPE: \
|
||||||
\
|
\
|
||||||
|
if(integerOnly) \
|
||||||
|
{ \
|
||||||
|
type_error(FIXNUM_TYPE,x); \
|
||||||
|
return F; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
switch(type_of(y)) \
|
switch(type_of(y)) \
|
||||||
{ \
|
{ \
|
||||||
case FIXNUM_TYPE: \
|
case FIXNUM_TYPE: \
|
||||||
if(integerOnly) \
|
return OP##_float(x,(CELL)fixnum_to_float(y)); \
|
||||||
return OP(to_integer(x),y); \
|
|
||||||
else \
|
|
||||||
return OP##_float(x,(CELL)fixnum_to_float(y)); \
|
|
||||||
case RATIO_TYPE: \
|
case RATIO_TYPE: \
|
||||||
if(integerOnly) \
|
return OP##_float(x,(CELL)ratio_to_float(y)); \
|
||||||
return OP(x,to_integer(y)); \
|
case COMPLEX_TYPE: \
|
||||||
else \
|
return OP##_complex((CELL)complex(x,tag_fixnum(0)),y); \
|
||||||
return OP##_float(x,(CELL)ratio_to_float(y)); \
|
|
||||||
case BIGNUM_TYPE: \
|
case BIGNUM_TYPE: \
|
||||||
if(integerOnly) \
|
return OP##_float(x,(CELL)bignum_to_float(y)); \
|
||||||
return OP(to_integer(x),y); \
|
|
||||||
else \
|
|
||||||
return OP##_float(x,(CELL)bignum_to_float(y)); \
|
|
||||||
case FLOAT_TYPE: \
|
case FLOAT_TYPE: \
|
||||||
if(integerOnly) \
|
return OP##_float(x,y); \
|
||||||
return OP(to_integer(x),to_integer(y)); \
|
|
||||||
else \
|
|
||||||
return OP##_float(x,y); \
|
|
||||||
default: \
|
default: \
|
||||||
if(anytype) \
|
type_error(FLOAT_TYPE,y); \
|
||||||
return OP##_anytype(x,y); \
|
|
||||||
else \
|
|
||||||
type_error(FLOAT_TYPE,y); \
|
|
||||||
return F; \
|
return F; \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
|
@ -159,8 +204,12 @@ void primitive_##OP(void) \
|
||||||
env.dt = OP(x,y); \
|
env.dt = OP(x,y); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool realp(CELL tagged);
|
||||||
|
bool numberp(CELL tagged);
|
||||||
void primitive_numberp(void);
|
void primitive_numberp(void);
|
||||||
|
|
||||||
|
bool zerop(CELL tagged);
|
||||||
|
|
||||||
FIXNUM to_fixnum(CELL tagged);
|
FIXNUM to_fixnum(CELL tagged);
|
||||||
void primitive_to_fixnum(void);
|
void primitive_to_fixnum(void);
|
||||||
BIGNUM* to_bignum(CELL tagged);
|
BIGNUM* to_bignum(CELL tagged);
|
||||||
|
|
|
@ -47,6 +47,7 @@ typedef unsigned char BYTE;
|
||||||
#include "bignum.h"
|
#include "bignum.h"
|
||||||
#include "ratio.h"
|
#include "ratio.h"
|
||||||
#include "float.h"
|
#include "float.h"
|
||||||
|
#include "complex.h"
|
||||||
#include "arithmetic.h"
|
#include "arithmetic.h"
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
|
|
|
@ -48,6 +48,11 @@ XT primitives[] = {
|
||||||
primitive_floatp,
|
primitive_floatp,
|
||||||
primitive_str_to_float,
|
primitive_str_to_float,
|
||||||
primitive_float_to_str,
|
primitive_float_to_str,
|
||||||
|
primitive_complexp,
|
||||||
|
primitive_real,
|
||||||
|
primitive_imaginary,
|
||||||
|
primitive_to_rect,
|
||||||
|
primitive_from_rect,
|
||||||
primitive_add,
|
primitive_add,
|
||||||
primitive_subtract,
|
primitive_subtract,
|
||||||
primitive_multiply,
|
primitive_multiply,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
extern XT primitives[];
|
extern XT primitives[];
|
||||||
#define PRIMITIVE_COUNT 107
|
#define PRIMITIVE_COUNT 112
|
||||||
|
|
||||||
CELL primitive_to_xt(CELL primitive);
|
CELL primitive_to_xt(CELL primitive);
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
RATIO* ratio(CELL numerator, CELL denominator)
|
RATIO* ratio(CELL numerator, CELL denominator)
|
||||||
{
|
{
|
||||||
RATIO* ratio = (RATIO*)allot(sizeof(RATIO));
|
RATIO* ratio = allot(sizeof(RATIO));
|
||||||
ratio->numerator = numerator;
|
ratio->numerator = numerator;
|
||||||
ratio->denominator = denominator;
|
ratio->denominator = denominator;
|
||||||
return ratio;
|
return ratio;
|
||||||
|
@ -26,7 +26,7 @@ void primitive_numerator(void)
|
||||||
env.dt = untag_ratio(env.dt)->numerator;
|
env.dt = untag_ratio(env.dt)->numerator;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
type_error(RATIO_TYPE,env.dt);
|
type_error(RATIONAL_TYPE,env.dt);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,7 @@ void primitive_denominator(void)
|
||||||
env.dt = untag_ratio(env.dt)->denominator;
|
env.dt = untag_ratio(env.dt)->denominator;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
type_error(RATIO_TYPE,env.dt);
|
type_error(RATIONAL_TYPE,env.dt);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,20 +60,32 @@ void* allot_object(CELL type, CELL length)
|
||||||
|
|
||||||
CELL object_size(CELL pointer)
|
CELL object_size(CELL pointer)
|
||||||
{
|
{
|
||||||
|
CELL size;
|
||||||
|
|
||||||
switch(TAG(pointer))
|
switch(TAG(pointer))
|
||||||
{
|
{
|
||||||
case CONS_TYPE:
|
case CONS_TYPE:
|
||||||
return align8(sizeof(CONS));
|
size = sizeof(CONS);
|
||||||
|
break;
|
||||||
case WORD_TYPE:
|
case WORD_TYPE:
|
||||||
return align8(sizeof(WORD));
|
size = sizeof(WORD);
|
||||||
|
break;
|
||||||
case RATIO_TYPE:
|
case RATIO_TYPE:
|
||||||
return align8(sizeof(RATIO));
|
size = sizeof(RATIO);
|
||||||
|
break;
|
||||||
|
case COMPLEX_TYPE:
|
||||||
|
size = sizeof(COMPLEX);
|
||||||
|
break;
|
||||||
case OBJECT_TYPE:
|
case OBJECT_TYPE:
|
||||||
return untagged_object_size(UNTAG(pointer));
|
size = untagged_object_size(UNTAG(pointer));
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
critical_error("Cannot determine size",pointer);
|
critical_error("Cannot determine size",pointer);
|
||||||
return -1;
|
size = 0; /* Can't happen */
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return align8(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
CELL untagged_object_size(CELL pointer)
|
CELL untagged_object_size(CELL pointer)
|
||||||
|
|
|
@ -10,8 +10,9 @@
|
||||||
#define CONS_TYPE 2
|
#define CONS_TYPE 2
|
||||||
#define OBJECT_TYPE 3
|
#define OBJECT_TYPE 3
|
||||||
#define RATIO_TYPE 4
|
#define RATIO_TYPE 4
|
||||||
#define HEADER_TYPE 5
|
#define COMPLEX_TYPE 5
|
||||||
#define GC_COLLECTED 6 /* See gc.c */
|
#define HEADER_TYPE 6
|
||||||
|
#define GC_COLLECTED 7 /* See gc.c */
|
||||||
|
|
||||||
/*** Header types ***/
|
/*** Header types ***/
|
||||||
|
|
||||||
|
@ -35,6 +36,11 @@ CELL empty;
|
||||||
#define BIGNUM_TYPE 14
|
#define BIGNUM_TYPE 14
|
||||||
#define FLOAT_TYPE 15
|
#define FLOAT_TYPE 15
|
||||||
|
|
||||||
|
/* Pseudo-types. For error reporting only. */
|
||||||
|
#define INTEGER_TYPE 100 /* FIXNUM or BIGNUM */
|
||||||
|
#define RATIONAL_TYPE 101 /* INTEGER or RATIO */
|
||||||
|
#define REAL_TYPE 102 /* RATIONAL or FLOAT */
|
||||||
|
|
||||||
bool typep(CELL type, CELL tagged);
|
bool typep(CELL type, CELL tagged);
|
||||||
CELL type_of(CELL tagged);
|
CELL type_of(CELL tagged);
|
||||||
void type_check(CELL type, CELL tagged);
|
void type_check(CELL type, CELL tagged);
|
||||||
|
|
Loading…
Reference in New Issue