From 576ac71d7835014a2ad2f57fc5cc24a57b027f9b Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 23 Jan 2009 17:39:57 +0000 Subject: [PATCH] fix performance problem in bitwise-bit-field svn: r13267 --- src/mzscheme/src/number.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/mzscheme/src/number.c b/src/mzscheme/src/number.c index ec3864deab..cb1740a801 100644 --- a/src/mzscheme/src/number.c +++ b/src/mzscheme/src/number.c @@ -2620,12 +2620,14 @@ static Scheme_Object *bitwise_bit_field (int argc, Scheme_Object *argv[]) v2 = SCHEME_INT_VAL(sb2); if (v2 >= v1) { v2 -= v1; - if ((v1 < (sizeof(long) * 8)) - && (v2 < (sizeof(long) * 8))) { + if (v2 < (sizeof(long) * 8)) { if (SCHEME_INTP(so)) { - long res; - res = ((SCHEME_INT_VAL(so) >> v1) & ((1 << v2) - 1)); - return scheme_make_integer(res); + if (v1 < (sizeof(long) * 8)) { + long res; + res = ((SCHEME_INT_VAL(so) >> v1) & ((1 << v2) - 1)); + return scheme_make_integer(res); + } else if (SCHEME_INT_VAL(so) > 0) + return scheme_make_integer(0); } else if (SCHEME_BIGPOS(so)) { bigdig d; long vd, vb, avail;