Changeset 8504 in project


Ignore:
Timestamp:
02/17/08 00:11:29 (12 years ago)
Author:
Kon Lovett
Message:

BITWISE_UINT_ONLY - not.

Location:
chicken/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • chicken/trunk/buildsvnrevision

    r8457 r8504  
    1 8456
     18501
  • chicken/trunk/runtime.c

    r8468 r8504  
    2626*/
    2727
     28#define BITWISE_UINT_ONLY
    2829
    2930#include "chicken.h"
     
    276277                                       else n = (C_uword)f; \
    277278                                     }
     279
     280#define C_check_uintX(x, f, n, w)    if(((x) & C_FIXNUM_BIT) != 0) n = C_unfix(x); \
     281                                      else if(C_immediatep(x) || C_block_header(x) != C_FLONUM_TAG) \
     282                                        barf(C_BAD_ARGUMENT_TYPE_NO_NUMBER_ERROR, w, x); \
     283                                      else { double _m; \
     284                                        f = C_flonum_magnitude(x); \
     285                                        if(modf(f, &_m) != 0.0 || f > C_UWORD_MAX) \
     286                                          barf(C_BAD_ARGUMENT_TYPE_NO_UINTEGER_ERROR, w, x); \
     287                                        else n = (C_uword)f; \
     288                                      }
    278289
    279290#ifdef C_SIXTY_FOUR
     
    53755386  C_uword nn1, nn2;
    53765387
     5388# ifdef BITWISE_UINT_ONLY
    53775389  C_check_uint(n1, f1, nn1, "bitwise-and");
    53785390  C_check_uint(n2, f2, nn2, "bitwise-and");
     5391# else
     5392  C_check_uintX(n1, f1, nn1, "bitwise-and");
     5393  C_check_uintX(n2, f2, nn2, "bitwise-and");
     5394# endif
    53795395  nn1 = C_limit_fixnum(nn1 & nn2);
    53805396
     
    53895405  C_uword nn1, nn2;
    53905406
     5407# ifdef BITWISE_UINT_ONLY
    53915408  C_check_uint(n1, f1, nn1, "bitwise-ior");
    53925409  C_check_uint(n2, f2, nn2, "bitwise-ior");
     5410# else
     5411  C_check_uintX(n1, f1, nn1, "bitwise-ior");
     5412  C_check_uintX(n2, f2, nn2, "bitwise-ior");
     5413# endif
    53935414  nn1 = C_limit_fixnum(nn1 | nn2);
    53945415
     
    54035424  C_uword nn1, nn2;
    54045425
     5426# ifdef BITWISE_UINT_ONLY
    54055427  C_check_uint(n1, f1, nn1, "bitwise-xor");
    54065428  C_check_uint(n2, f2, nn2, "bitwise-xor");
     5429# else
     5430  C_check_uintX(n1, f1, nn1, "bitwise-xor");
     5431  C_check_uintX(n2, f2, nn2, "bitwise-xor");
     5432# endif
    54075433  nn1 = C_limit_fixnum(nn1 ^ nn2);
    54085434
     
    54265452    barf(C_OUT_OF_RANGE_ERROR, "bit-set?", n, i);
    54275453
     5454# ifdef BITWISE_UINT_ONLY
    54285455  C_check_uint(n, f1, nn1, "bit-set?");
     5456# else
     5457  C_check_uintX(n, f1, nn1, "bit-set?");
     5458# endif
    54295459  return C_mk_bool((nn1 & (1 << index)) != 0);
    54305460}
     
    54365466  C_uword nn;
    54375467
     5468# ifdef BITWISE_UINT_ONLY
    54385469  C_check_uint(n, f, nn, "bitwise-not");
     5470# else
     5471  C_check_uintX(n, f, nn, "bitwise-not");
     5472# endif
    54395473  nn = C_limit_fixnum(~nn);
    54405474
Note: See TracChangeset for help on using the changeset viewer.