From: "U.Nakamura" Date: 2002-03-15T13:35:49+09:00 Subject: [ruby-dev:16405] VC++ build error in latest CVS こんにちは、なかむら(う)です。 [ruby-talk:35851] [ruby-talk:35852]で指摘されてる件です。 以下のパッチでいけると思うんですが、ちょっと忙しいので他のプ ラットフォームは試せてません。 問題ないようでしたらcommitします。 Index: bignum.c =================================================================== RCS file: /src/ruby/bignum.c,v retrieving revision 1.59 diff -u -p -w -r1.59 bignum.c --- bignum.c 2002/03/14 06:23:43 1.59 +++ bignum.c 2002/03/15 04:32:24 @@ -27,7 +27,7 @@ typedef LONG_LONG BDIGIT_DBL_SIGNED; #elif SIZEOF_INT*2 <= SIZEOF_LONG typedef unsigned int BDIGIT; typedef unsigned long BDIGIT_DBL; -typedef long long BDIGIT_DBL_SIGNED; +typedef LONG_LONG BDIGIT_DBL_SIGNED; #else typedef unsigned short BDIGIT; typedef unsigned long BDIGIT_DBL; @@ -39,7 +39,7 @@ typedef long BDIGIT_DBL_SIGNED; #define BIGRAD ((BDIGIT_DBL)1 << BITSPERDIG) #define DIGSPERLONG ((unsigned int)(sizeof(long)/sizeof(BDIGIT))) #if HAVE_LONG_LONG -# define DIGSPERLL ((unsigned int)(sizeof(long long)/sizeof(BDIGIT))) +# define DIGSPERLL ((unsigned int)(sizeof(LONG_LONG)/sizeof(BDIGIT))) #endif #define BIGUP(x) ((BDIGIT_DBL)(x) << BITSPERDIG) #define BIGDN(x) RSHIFT(x,BITSPERDIG) @@ -514,7 +514,7 @@ rb_str_to_inum(str, base, badcheck) VALUE rb_ull2big(n) - unsigned long long n; + unsigned LONG_LONG n; { BDIGIT_DBL num = n; long i = 0; @@ -537,7 +537,7 @@ rb_ull2big(n) VALUE rb_ll2big(n) - long long n; + LONG_LONG n; { long neg = 0; VALUE big; @@ -555,7 +555,7 @@ rb_ll2big(n) VALUE rb_ull2inum(n) - unsigned long long n; + unsigned LONG_LONG n; { if (POSFIXABLE(n)) return INT2FIX(n); return rb_ull2big(n); @@ -563,7 +563,7 @@ rb_ull2inum(n) VALUE rb_ll2inum(n) - long long n; + LONG_LONG n; { if (FIXABLE(n)) return INT2FIX(n); return rb_ll2big(n); @@ -716,7 +716,7 @@ rb_big2long(x) #if HAVE_LONG_LONG -static unsigned long long +static unsigned LONG_LONG big2ull(x, type) VALUE x; char *type; @@ -725,7 +725,7 @@ big2ull(x, type) BDIGIT_DBL num; BDIGIT *ds; - if (len > sizeof(long long)/sizeof(BDIGIT)) + if (len > sizeof(LONG_LONG)/sizeof(BDIGIT)) rb_raise(rb_eRangeError, "bignum too big to convert into `%s'", type); ds = BDIGITS(x); num = 0; @@ -736,27 +736,27 @@ big2ull(x, type) return num; } -unsigned long long +unsigned LONG_LONG rb_big2ull(x) VALUE x; { - unsigned long long num = big2ull(x, "unsigned long long"); + unsigned LONG_LONG num = big2ull(x, "unsigned long long"); if (!RBIGNUM(x)->sign) return -num; return num; } -long long +LONG_LONG rb_big2ll(x) VALUE x; { - unsigned long long num = big2ull(x, "long long"); + unsigned LONG_LONG num = big2ull(x, "long long"); - if ((long long)num < 0 && (RBIGNUM(x)->sign - || (long long)num != LLONG_MIN)) { + if ((LONG_LONG)num < 0 && (RBIGNUM(x)->sign + || (LONG_LONG)num != LLONG_MIN)) { rb_raise(rb_eRangeError, "bignum too big to convert into `long long'"); } - if (!RBIGNUM(x)->sign) return -(long long)num; + if (!RBIGNUM(x)->sign) return -(LONG_LONG)num; return num; } Index: intern.h =================================================================== RCS file: /src/ruby/intern.h,v retrieving revision 1.83 diff -u -p -w -r1.83 intern.h --- intern.h 2002/03/14 06:23:43 1.83 +++ intern.h 2002/03/15 04:32:24 @@ -71,10 +71,10 @@ long rb_big2long _((VALUE)); unsigned long rb_big2ulong _((VALUE)); #define rb_big2uint(x) rb_big2ulong(x) #if HAVE_LONG_LONG -VALUE rb_ll2inum _((long long)); -VALUE rb_ull2inum _((unsigned long long)); -long long rb_big2ll _((VALUE)); -unsigned long long rb_big2ull _((VALUE)); +VALUE rb_ll2inum _((LONG_LONG)); +VALUE rb_ull2inum _((unsigned LONG_LONG)); +LONG_LONG rb_big2ll _((VALUE)); +unsigned LONG_LONG rb_big2ull _((VALUE)); #endif /* HAVE_LONG_LONG */ void rb_quad_pack _((char*,VALUE)); VALUE rb_quad_unpack _((const char*,int)); Index: numeric.c =================================================================== RCS file: /src/ruby/numeric.c,v retrieving revision 1.39 diff -u -p -w -r1.39 numeric.c --- numeric.c 2002/03/14 06:23:44 1.39 +++ numeric.c 2002/03/15 04:32:24 @@ -871,7 +871,7 @@ rb_num2fix(val) #if HAVE_LONG_LONG -long long +LONG_LONG rb_num2ll(val) VALUE val; { @@ -879,13 +879,13 @@ rb_num2ll(val) rb_raise(rb_eTypeError, "no implicit conversion from nil"); } - if (FIXNUM_P(val)) return (long long)FIX2LONG(val); + if (FIXNUM_P(val)) return (LONG_LONG)FIX2LONG(val); switch (TYPE(val)) { case T_FLOAT: if (RFLOAT(val)->value <= (double)LLONG_MAX && RFLOAT(val)->value >= (double)LLONG_MIN) { - return (long long)(RFLOAT(val)->value); + return (LONG_LONG)(RFLOAT(val)->value); } else { char buf[24]; @@ -914,14 +914,14 @@ rb_num2ll(val) } } -unsigned long long +unsigned LONG_LONG rb_num2ull(val) VALUE val; { if (TYPE(val) == T_BIGNUM) { return rb_big2ull(val); } - return (unsigned long long)rb_num2ll(val); + return (unsigned LONG_LONG)rb_num2ll(val); } #endif /* HAVE_LONG_LONG */ Index: ruby.h =================================================================== RCS file: /src/ruby/ruby.h,v retrieving revision 1.59 diff -u -p -w -r1.59 ruby.h --- ruby.h 2002/03/14 06:23:44 1.59 +++ ruby.h 2002/03/15 04:32:25 @@ -90,18 +90,26 @@ typedef unsigned long ID; # ifdef LONG_LONG_MAX # define LLONG_MAX LONG_LONG_MAX # else +# ifdef _I64_MAX +# define LLONG_MAX _I64_MAX +# else /* assuming 64bit(2's complement) long long */ # define LLONG_MAX 9223372036854775807LL # endif # endif +# endif # ifndef LLONG_MIN # ifdef LONG_LONG_MIN # define LLONG_MIN LONG_LONG_MIN # else +# ifdef _I64_MIN +# define LLONG_MIN _I64_MAX +# else # define LLONG_MIN (-LLONG_MAX-1) # endif # endif #endif +#endif #define FIXNUM_MAX (LONG_MAX>>1) #define FIXNUM_MIN RSHIFT((long)LONG_MIN,1) @@ -120,9 +128,9 @@ VALUE rb_uint2inum _((unsigned long)); #define rb_uint_new(v) rb_uint2inum(v) #if HAVE_LONG_LONG -VALUE rb_ll2inum _((long long)); +VALUE rb_ll2inum _((LONG_LONG)); #define LL2NUM(v) rb_ll2inum(v) -VALUE rb_ull2inum _((unsigned long long)); +VALUE rb_ull2inum _((unsigned LONG_LONG)); #define ULL2NUM(v) rb_ull2inum(v) #endif @@ -233,8 +241,8 @@ int rb_fix2int _((VALUE)); #endif #if HAVE_LONG_LONG -long long rb_num2ll _((VALUE)); -unsigned long long rb_num2ull _((VALUE)); +LONG_LONG rb_num2ll _((VALUE)); +unsigned LONG_LONG rb_num2ull _((VALUE)); # define NUM2LL(x) (FIXNUM_P(x)?FIX2LONG(x):rb_num2ll((VALUE)x)) #endif それでは -- U.Nakamura