1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-01 12:20:26 +02:00

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
This commit is contained in:
Mark H Weaver 2010-03-27 17:35:46 -04:00 committed by Andy Wingo
parent 98dcf051e0
commit f60c2c4e10
4 changed files with 13 additions and 9 deletions

View file

@ -49,7 +49,7 @@ verify (SCM_VALUES_DIFFER_IN_EXACTLY_ONE_BIT_POSITION \
(SCM_ELISP_NIL, SCM_EOL)); (SCM_ELISP_NIL, SCM_EOL));
verify (SCM_VALUES_DIFFER_IN_EXACTLY_TWO_BIT_POSITIONS \ verify (SCM_VALUES_DIFFER_IN_EXACTLY_TWO_BIT_POSITIONS \
(SCM_ELISP_NIL, SCM_BOOL_F, SCM_BOOL_T, \ (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 \ verify (SCM_VALUES_DIFFER_IN_EXACTLY_TWO_BIT_POSITIONS \
(SCM_ELISP_NIL, SCM_BOOL_F, SCM_EOL, \ (SCM_ELISP_NIL, SCM_BOOL_F, SCM_EOL, \
SCM_XXX_ANOTHER_LISP_FALSE_DONT_USE)); SCM_XXX_ANOTHER_LISP_FALSE_DONT_USE));

View file

@ -75,7 +75,7 @@
* *
* If SCM_ENABLE_ELISP is true, then scm_is_bool_or_nil(x) * 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, * 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. * Otherwise, it returns 0.
*/ */
#if SCM_ENABLE_ELISP #if SCM_ENABLE_ELISP

View file

@ -68,7 +68,9 @@ static const char *iflagnames[] =
"#<XXX UNUSED LISP FALSE -- DO NOT USE -- SHOULD NEVER BE SEEN XXX>", "#<XXX UNUSED LISP FALSE -- DO NOT USE -- SHOULD NEVER BE SEEN XXX>",
"()", "()",
"#t", "#t",
"#<XXX UNUSED BOOLEAN -- DO NOT USE -- SHOULD NEVER BE SEEN XXX>", "#<XXX UNUSED BOOLEAN 0 -- DO NOT USE -- SHOULD NEVER BE SEEN XXX>",
"#<XXX UNUSED BOOLEAN 1 -- DO NOT USE -- SHOULD NEVER BE SEEN XXX>",
"#<XXX UNUSED BOOLEAN 2 -- DO NOT USE -- SHOULD NEVER BE SEEN XXX>",
"#<unspecified>", "#<unspecified>",
"#<undefined>", "#<undefined>",
"#<eof>", "#<eof>",

View file

@ -498,7 +498,7 @@ enum scm_tc8_tags
* must all be equal except for two bit positions. * must all be equal except for two bit positions.
* (used to implement scm_is_lisp_false) * (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. * must all be equal except for two bit positions.
* (used to implement scm_is_bool_or_nil) * (used to implement scm_is_bool_or_nil)
* *
@ -519,12 +519,14 @@ enum scm_tc8_tags
#define SCM_BOOL_T SCM_MAKIFLAG (4) #define SCM_BOOL_T SCM_MAKIFLAG (4)
#ifdef BUILDING_LIBGUILE #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 #endif
#define SCM_UNSPECIFIED SCM_MAKIFLAG (6) #define SCM_UNSPECIFIED SCM_MAKIFLAG (8)
#define SCM_UNDEFINED SCM_MAKIFLAG (7) #define SCM_UNDEFINED SCM_MAKIFLAG (9)
#define SCM_EOF_VAL SCM_MAKIFLAG (8) #define SCM_EOF_VAL SCM_MAKIFLAG (10)
/* When a variable is unbound this is marked by the SCM_UNDEFINED /* When a variable is unbound this is marked by the SCM_UNDEFINED
* value. The following is an unbound value which can be handled on * 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 * 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 * used instead. It is not ideal to let this kind of unique and
* strange values loose on the Scheme level. */ * 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)) #define SCM_UNBNDP(x) (scm_is_eq ((x), SCM_UNDEFINED))