ruby-changes:12443
From: nobu <ko1@a...>
Date: Thu, 16 Jul 2009 15:54:51 +0900 (JST)
Subject: [ruby-changes:12443] Ruby:r24143 (trunk): * bignum.c (rb_big_new, rb_bigzero_p), range.c (rb_range_values):
nobu 2009-07-16 15:52:29 +0900 (Thu, 16 Jul 2009) New Revision: 24143 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=24143 Log: * bignum.c (rb_big_new, rb_bigzero_p), range.c (rb_range_values): added for random.c. Modified files: trunk/ChangeLog trunk/bignum.c trunk/include/ruby/intern.h trunk/range.c Index: include/ruby/intern.h =================================================================== --- include/ruby/intern.h (revision 24142) +++ include/ruby/intern.h (revision 24143) @@ -75,6 +75,8 @@ VALUE rb_ary_replace(VALUE copy, VALUE orig); VALUE rb_get_values_at(VALUE, long, int, VALUE*, VALUE(*)(VALUE,long)); /* bignum.c */ +VALUE rb_big_new(long, int); +int rb_bigzero_p(VALUE x); VALUE rb_big_clone(VALUE); void rb_big_2comp(VALUE); VALUE rb_big_norm(VALUE); @@ -520,6 +522,7 @@ /* range.c */ VALUE rb_range_new(VALUE, VALUE, int); VALUE rb_range_beg_len(VALUE, long*, long*, long, int); +int rb_range_values(VALUE range, VALUE *begp, VALUE *endp, int *exclp); /* random.c */ unsigned long rb_genrand_int32(void); double rb_genrand_real(void); Index: ChangeLog =================================================================== --- ChangeLog (revision 24142) +++ ChangeLog (revision 24143) @@ -1,5 +1,8 @@ -Thu Jul 16 15:00:27 2009 Nobuyoshi Nakada <nobu@r...> +Thu Jul 16 15:52:25 2009 Nobuyoshi Nakada <nobu@r...> + * bignum.c (rb_big_new, rb_bigzero_p), range.c (rb_range_values): + added for random.c. + * random.c (rb_random_t): objectified. [EXPERIMENTAL] [ruby-dev:30954] Index: range.c =================================================================== --- range.c (revision 24142) +++ range.c (revision 24143) @@ -601,12 +601,11 @@ } } - -VALUE -rb_range_beg_len(VALUE range, long *begp, long *lenp, long len, int err) +int +rb_range_values(VALUE range, VALUE *begp, VALUE *endp, int *exclp) { VALUE b, e; - long beg, end, excl; + int excl; if (rb_obj_is_kind_of(range, rb_cRange)) { b = RANGE_BEG(range); @@ -620,9 +619,25 @@ e = rb_funcall(range, id_end, 0); excl = RTEST(rb_funcall(range, rb_intern("exclude_end?"), 0)); } + *begp = b; + *endp = e; + *exclp = excl; + return Qtrue; +} + +VALUE +rb_range_beg_len(VALUE range, long *begp, long *lenp, long len, int err) +{ + long beg, end, origbeg, origend; + VALUE b, e; + int excl; + + if (!rb_range_values(range, &b, &e, &excl)) + return Qfalse; beg = NUM2LONG(b); end = NUM2LONG(e); - + origbeg = beg; + origend = end; if (beg < 0) { beg += len; if (beg < 0) @@ -649,7 +664,7 @@ out_of_range: if (err) { rb_raise(rb_eRangeError, "%ld..%s%ld out of range", - NUM2LONG(b), excl ? "." : "", NUM2LONG(e)); + origbeg, excl ? "." : "", origend); } return Qnil; } Index: bignum.c =================================================================== --- bignum.c (revision 24142) +++ bignum.c (revision 24143) @@ -53,6 +53,12 @@ } int +rb_bigzero_p(VALUE x) +{ + return BIGZEROP(x); +} + +int rb_cmpint(VALUE val, VALUE a, VALUE b) { if (NIL_P(val)) { @@ -143,6 +149,12 @@ #define bignew(len,sign) bignew_1(rb_cBignum,len,sign) VALUE +rb_big_new(long len, int sign) +{ + return bignew(len, sign != 0); +} + +VALUE rb_big_clone(VALUE x) { VALUE z = bignew_1(CLASS_OF(x), RBIGNUM_LEN(x), RBIGNUM_SIGN(x)); -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/