diff options
author | Dirk Herrmann <dirk@dirk-herrmanns-seiten.de> | 2003-09-18 20:55:40 +0000 |
---|---|---|
committer | Dirk Herrmann <dirk@dirk-herrmanns-seiten.de> | 2003-09-18 20:55:40 +0000 |
commit | 534c55a97d9860059a2d2042263cce3cad364b2c (patch) | |
tree | d50165f4aa115e6fac127fcd8fdfd51eac834ffc /libguile/numbers.h | |
parent | 29c4382afda07debaef4f5d2534f5272bca15fdd (diff) | |
download | guile-534c55a97d9860059a2d2042263cce3cad364b2c.tar.gz |
This set of patches introduces a new tc7 code scm_tc7_number for
numbers. Bignums, reals and complex numbers are turned from smobs
into subtypes of scm_tc7_number.
* tags.h (scm_tc7_number): New.
* eq.c (scm_equal_p), eval.c (SCM_CEVAL), evalext.c
(scm_self_evaluating_p), gc-card.c (scm_i_sweep_card), gc-mark.c
(scm_gc_mark_dependencies), goops.c (create_smob_classes), hash.c
(scm_hasher), numbers.c, numbers.h (SCM_NUMP), objects.c
(scm_class_of), print.c (scm_iprin1), smob.c
(scm_smob_prehistory): Don't handle bignums, reals and complex
numbers as subtypes of scm_tc7_smob any more.
* numbers.h, tags.h (scm_tc16_big, scm_tc16_real,
scm_tc16_complex): Moved definitions from tags.h to numbers.h.
Diffstat (limited to 'libguile/numbers.h')
-rw-r--r-- | libguile/numbers.h | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/libguile/numbers.h b/libguile/numbers.h index 4172c703e..10e8eddc9 100644 --- a/libguile/numbers.h +++ b/libguile/numbers.h @@ -121,6 +121,16 @@ /* Numbers */ + +/* Note that scm_tc16_real and scm_tc16_complex are given tc16-codes that only + * differ in one bit: This way, checking if an object is an inexact number can + * be done quickly (using the TYP16S macro). */ + +/* Number subtype 1 to 3 (note the dependency on the predicate SCM_NUMP) */ +#define scm_tc16_big (scm_tc7_number + 1 * 256L) +#define scm_tc16_real (scm_tc7_number + 2 * 256L) +#define scm_tc16_complex (scm_tc7_number + 3 * 256L) + #define SCM_INEXACTP(x) (!SCM_IMP (x) && SCM_TYP16S (x) == scm_tc16_real) #define SCM_REALP(x) (!SCM_IMP (x) && SCM_TYP16 (x) == scm_tc16_real) #define SCM_COMPLEXP(x) (!SCM_IMP (x) && SCM_TYP16 (x) == scm_tc16_complex) @@ -136,7 +146,7 @@ #define SCM_NUMBERP(x) (SCM_INUMP(x) || SCM_NUMP(x)) #define SCM_NUMP(x) (!SCM_IMP(x) \ - && (0xfcff & SCM_CELL_TYPE (x)) == scm_tc7_smob) + && (0xfcff & SCM_CELL_TYPE (x)) == scm_tc7_number) |