Changeset 13756 in project


Ignore:
Timestamp:
03/14/09 18:31:20 (11 years ago)
Author:
Kon Lovett
Message:

Better impl of BITWISE_UINT_ONLY. Undefined BITWISE_UINT_ONLY since the manual says integers are accepted.

Location:
chicken/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • chicken/trunk/chicken-primitive-object-inlines.scm

    r13743 r13756  
    279279(define-inline (%fx<= x y) (##core#inline "C_fixnum_less_or_equal_p" x y))
    280280
    281 (define-inline (%fxclosed-right? l x h) (and (%< l x) (%fx<= x h)))
    282 (define-inline (%fxclosed? l x h) (and (%<= l x) (%fx<= x h)))
    283 (define-inline (%fxclosed-left? l x h) (and (%<= l x) (%fx< x h)))
     281(define-inline (%fxclosed-right? l x h) (and (fx%< l x) (%fx<= x h)))
     282(define-inline (%fxclosed? l x h) (and (%fx<= l x) (%fx<= x h)))
     283(define-inline (%fxclosed-left? l x h) (and (%fx<= l x) (%fx< x h)))
    284284
    285285(define-inline (%fxzero? fx) (%fx= 0 fx))
  • chicken/trunk/runtime.c

    r13339 r13756  
    134134#endif
    135135
    136 #define BITWISE_UINT_ONLY
    137 
    138136/* Parameters: */
    139137
     
    249247                                     }
    250248
     249#ifdef BITWISE_UINT_ONLY
    251250#define C_check_uint(x, f, n, w)    if(((x) & C_FIXNUM_BIT) != 0) n = C_unfix(x); \
    252251                                     else if(C_immediatep(x) || C_block_header(x) != C_FLONUM_TAG) \
     
    258257                                       else n = (C_uword)f; \
    259258                                     }
    260 
    261 #define C_check_uintX(x, f, n, w)    if(((x) & C_FIXNUM_BIT) != 0) n = C_unfix(x); \
     259#else
     260#define C_check_uint(x, f, n, w)    if(((x) & C_FIXNUM_BIT) != 0) n = C_unfix(x); \
    262261                                      else if(C_immediatep(x) || C_block_header(x) != C_FLONUM_TAG) \
    263262                                        barf(C_BAD_ARGUMENT_TYPE_NO_NUMBER_ERROR, w, x); \
     
    268267                                        else n = (C_uword)f; \
    269268                                      }
    270 
    271 #define C_check_uintX(x, f, n, w)    if(((x) & C_FIXNUM_BIT) != 0) n = C_unfix(x); \
    272                                       else if(C_immediatep(x) || C_block_header(x) != C_FLONUM_TAG) \
    273                                         barf(C_BAD_ARGUMENT_TYPE_NO_NUMBER_ERROR, w, x); \
    274                                       else { double _m; \
    275                                         f = C_flonum_magnitude(x); \
    276                                         if(modf(f, &_m) != 0.0 || f > C_UWORD_MAX) \
    277                                           barf(C_BAD_ARGUMENT_TYPE_NO_UINTEGER_ERROR, w, x); \
    278                                         else n = (C_uword)f; \
    279                                       }
     269#endif
    280270
    281271#ifdef C_SIXTY_FOUR
     
    54315421  C_uword nn1, nn2;
    54325422
    5433 # ifdef BITWISE_UINT_ONLY
    54345423  C_check_uint(n1, f1, nn1, "bitwise-and");
    54355424  C_check_uint(n2, f2, nn2, "bitwise-and");
    5436 # else
    5437   C_check_uintX(n1, f1, nn1, "bitwise-and");
    5438   C_check_uintX(n2, f2, nn2, "bitwise-and");
    5439 # endif
    54405425  nn1 = C_limit_fixnum(nn1 & nn2);
    54415426
     
    54505435  C_uword nn1, nn2;
    54515436
    5452 # ifdef BITWISE_UINT_ONLY
    54535437  C_check_uint(n1, f1, nn1, "bitwise-ior");
    54545438  C_check_uint(n2, f2, nn2, "bitwise-ior");
    5455 # else
    5456   C_check_uintX(n1, f1, nn1, "bitwise-ior");
    5457   C_check_uintX(n2, f2, nn2, "bitwise-ior");
    5458 # endif
    54595439  nn1 = C_limit_fixnum(nn1 | nn2);
    54605440
     
    54695449  C_uword nn1, nn2;
    54705450
    5471 # ifdef BITWISE_UINT_ONLY
    54725451  C_check_uint(n1, f1, nn1, "bitwise-xor");
    54735452  C_check_uint(n2, f2, nn2, "bitwise-xor");
    5474 # else
    5475   C_check_uintX(n1, f1, nn1, "bitwise-xor");
    5476   C_check_uintX(n2, f2, nn2, "bitwise-xor");
    5477 # endif
    54785453  nn1 = C_limit_fixnum(nn1 ^ nn2);
    54795454
     
    54975472    barf(C_OUT_OF_RANGE_ERROR, "bit-set?", n, i);
    54985473
    5499 # ifdef BITWISE_UINT_ONLY
    55005474  C_check_uint(n, f1, nn1, "bit-set?");
    5501 # else
    5502   C_check_uintX(n, f1, nn1, "bit-set?");
    5503 # endif
    55045475  return C_mk_bool((nn1 & (1 << index)) != 0);
    55055476}
     
    55115482  C_uword nn;
    55125483
    5513 # ifdef BITWISE_UINT_ONLY
    55145484  C_check_uint(n, f, nn, "bitwise-not");
    5515 # else
    5516   C_check_uintX(n, f, nn, "bitwise-not");
    5517 # endif
    55185485  nn = C_limit_fixnum(~nn);
    55195486
Note: See TracChangeset for help on using the changeset viewer.