From bf121c0dfe119731f2f9658d823ea700b064dcc9 Mon Sep 17 00:00:00 2001 From: Mark H Weaver Date: Sat, 27 Mar 2010 17:35:46 -0400 Subject: [PATCH] Renumber IFLAGSs so the first 8 are reserved for lisp booleans. This enables more efficient implementations of several operations, e.g. scm_is_lisp_bool, canonicalize_boolean, fast_boolean_not, converting SCM booleans to C booleans, etc. * libguile/tags.h: Renumber IFLAGs. * libguile/print.c: Renumber iflagnames to match. * libguile/boolean.c: * libguile/boolean.h: SCM_XXX_ANOTHER_BOOLEAN_DONT_USE --> SCM_XXX_ANOTHER_BOOLEAN_DONT_USE_0 --- libguile/boolean.c | 2 +- libguile/boolean.h | 2 +- libguile/print.c | 4 +++- libguile/tags.h | 14 ++++++++------ 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/libguile/boolean.c b/libguile/boolean.c index 1ca0d78..3391d6c 100644 --- a/libguile/boolean.c +++ b/libguile/boolean.c @@ -49,7 +49,7 @@ verify (SCM_VALUES_DIFFER_IN_EXACTLY_ONE_BIT_POSITION \ (SCM_ELISP_NIL, SCM_EOL)); verify (SCM_VALUES_DIFFER_IN_EXACTLY_TWO_BIT_POSITIONS \ (SCM_ELISP_NIL, SCM_BOOL_F, SCM_BOOL_T, \ - SCM_XXX_ANOTHER_BOOLEAN_DONT_USE)); + SCM_XXX_ANOTHER_BOOLEAN_DONT_USE_0)); verify (SCM_VALUES_DIFFER_IN_EXACTLY_TWO_BIT_POSITIONS \ (SCM_ELISP_NIL, SCM_BOOL_F, SCM_EOL, \ SCM_XXX_ANOTHER_LISP_FALSE_DONT_USE)); diff --git a/libguile/boolean.h b/libguile/boolean.h index ba5313c..bc108f5 100644 --- a/libguile/boolean.h +++ b/libguile/boolean.h @@ -75,7 +75,7 @@ * * If SCM_ENABLE_ELISP is true, then scm_is_bool_or_nil(x) * returns 1 if and only if x is one of the following: SCM_BOOL_F, - * SCM_BOOL_T, SCM_ELISP_NIL, or SCM_XXX_ANOTHER_BOOLEAN_DONT_USE. + * SCM_BOOL_T, SCM_ELISP_NIL, or SCM_XXX_ANOTHER_BOOLEAN_DONT_USE_0. * Otherwise, it returns 0. */ #if SCM_ENABLE_ELISP diff --git a/libguile/print.c b/libguile/print.c index 8867e6b..ca38d42 100644 --- a/libguile/print.c +++ b/libguile/print.c @@ -68,7 +68,9 @@ static const char *iflagnames[] = "#", "()", "#t", - "#", + "#", + "#", + "#", "#", "#", "#", diff --git a/libguile/tags.h b/libguile/tags.h index 2e6dea2..d11bf68 100644 --- a/libguile/tags.h +++ b/libguile/tags.h @@ -498,7 +498,7 @@ enum scm_tc8_tags * must all be equal except for two bit positions. * (used to implement scm_is_lisp_false) * - * - SCM_ELISP_NIL, SCM_BOOL_F, SCM_BOOL_T, SCM_XXX_ANOTHER_BOOLEAN_DONT_USE + * - SCM_ELISP_NIL, SCM_BOOL_F, SCM_BOOL_T, SCM_XXX_ANOTHER_BOOLEAN_DONT_USE_0 * must all be equal except for two bit positions. * (used to implement scm_is_bool_or_nil) * @@ -519,12 +519,14 @@ enum scm_tc8_tags #define SCM_BOOL_T SCM_MAKIFLAG (4) #ifdef BUILDING_LIBGUILE -#define SCM_XXX_ANOTHER_BOOLEAN_DONT_USE SCM_MAKIFLAG (5) +#define SCM_XXX_ANOTHER_BOOLEAN_DONT_USE_0 SCM_MAKIFLAG (5) +#define SCM_XXX_ANOTHER_BOOLEAN_DONT_USE_1 SCM_MAKIFLAG (6) +#define SCM_XXX_ANOTHER_BOOLEAN_DONT_USE_2 SCM_MAKIFLAG (7) #endif -#define SCM_UNSPECIFIED SCM_MAKIFLAG (6) -#define SCM_UNDEFINED SCM_MAKIFLAG (7) -#define SCM_EOF_VAL SCM_MAKIFLAG (8) +#define SCM_UNSPECIFIED SCM_MAKIFLAG (8) +#define SCM_UNDEFINED SCM_MAKIFLAG (9) +#define SCM_EOF_VAL SCM_MAKIFLAG (10) /* When a variable is unbound this is marked by the SCM_UNDEFINED * value. The following is an unbound value which can be handled on @@ -534,7 +536,7 @@ enum scm_tc8_tags * the code which handles this value in C so that SCM_UNDEFINED can be * used instead. It is not ideal to let this kind of unique and * strange values loose on the Scheme level. */ -#define SCM_UNBOUND SCM_MAKIFLAG (9) +#define SCM_UNBOUND SCM_MAKIFLAG (11) #define SCM_UNBNDP(x) (scm_is_eq ((x), SCM_UNDEFINED)) -- 1.5.6.5