diff --git a/include/chibi/features.h b/include/chibi/features.h index 22200011..eca5eb70 100644 --- a/include/chibi/features.h +++ b/include/chibi/features.h @@ -757,6 +757,10 @@ #endif #endif +#ifndef SEXP_USE_SIGNED_SHIFTS +#define SEXP_USE_SIGNED_SHIFTS 0 +#endif + #ifdef PLAN9 #define strcasecmp cistrcmp #define strncasecmp cistrncmp diff --git a/include/chibi/sexp.h b/include/chibi/sexp.h index 6725497c..e9e3eb92 100755 --- a/include/chibi/sexp.h +++ b/include/chibi/sexp.h @@ -801,8 +801,13 @@ SEXP_API int sexp_idp(sexp x); #define sexp_make_boolean(x) ((x) ? SEXP_TRUE : SEXP_FALSE) #define sexp_unbox_boolean(x) (((x) == SEXP_FALSE) ? 0 : 1) +#if SEXP_USE_SIGNED_SHIFTS #define sexp_make_fixnum(n) ((sexp) ((((sexp_sint_t)(n))<>SEXP_FIXNUM_BITS) +#else +#define sexp_make_fixnum(n) ((sexp) ((((sexp_sint_t)(n))*(sexp_sint_t)(1uL<