[#20490] [BUG] evalがらみでSIGSEGV — "yamamoto madoka" <dan@...2.so-net.ne.jp>
こんにちは、山本 円と申します。
[#20495] 不正なバイト列とのマッチ — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#20499] Re: [ruby-cvs] ruby/ext/curses: * string.c (rb_str_shared_replace): clear flags before copy. — nobu.nakada@...
なかだです。
まつもと ゆきひろです
わたなべです。
まつもと ゆきひろです
わたなべです。
[#20525] [BigDecimal] changing rule of coerce — "Tadashi Saito" <shiba@...2.accsnet.ne.jp>
斎藤です。
小林です。
まつもと ゆきひろです
小林です。
小林です。
前田です。
小林です。
小林です。
小林です。
小林です。
小林です。
[#20570] Marshal upgrade — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
咳といいます。
まつもと ゆきひろです
まつもと ゆきひろです
新井です。
新井です。
まつもと ゆきひろです
咳といいます。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
[#20580] add library(Re:ruby-dev:20570) — たむらけんいち <sgs02516@...>
たむらです。
なひです。
In message <038d01c349cb$eaad71d0$93222fc0@sarion.co.jp>,
まつもと ゆきひろです
In message <1058171960.400840.10041.nullmailer@picachu.netlab.jp>,
話をそらしてしまうかもしれませんが、
In message <20030714.183104.09092354.taca@back-street.net>,
In message <20030715.013655.424936247.gotoyuzo@kotetsu.does.notwork.org>
In message <20030715.025907.26217115.taca@back-street.net>,
In message <20030715.051853.968499478.gotoyuzo@kotetsu.does.notwork.org>
In message <20030721.163444.09092937.taca@back-street.net>,
In message <20030721.191306.60866533.gotoyuzo@kotetsu.does.notwork.org>
In message <20030721.211845.20473808.taca@back-street.net>,
In message <20030722.002037.774147317.gotoyuzo@kotetsu.does.notwork.org>
In message <20030722.003236.72433302.taca@back-street.net>,
[#20582] rexmlのuconv依存 — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
まつもと ゆきひろです
In article <1057770842.878440.16422.nullmailer@picachu.netlab.jp>,
なかだです。
In article <200307100751.h6A7pLFs003667@sharui.nakada.kanuma.tochigi.jp>,
[#20606] ruby-1.8.0 on BSD/OS — OHARA Shigeki <os@...>
大原です。
[#20613] compiling Ruby on AIX (powerpc-ibm-aix4.3.3.0) and Alpha OSF/1 (alphaev67-dec-osf5.1) — NISHIMATSU Takeshi <t-nissie@...>
西松と申します.
なかだです。
西松です. お返事が遅くなり申し訳ありません.
[#20631] SOAP4R in 1.8.0? — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#20655] frozen ThreadGroup — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
まつもと ゆきひろです
永井@知能.九工大です.
まつもと ゆきひろです
永井@知能.九工大です.
まつもと ゆきひろです
永井@知能.九工大です.
永井@知能.九工大です.
まつもと ゆきひろです
永井@知能.九工大です.
まつもと ゆきひろです
In article <1058719939.886480.22830.nullmailer@picachu.netlab.jp>,
[#20680] 1.8.0 on IA64 etc. — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#20691] Re: [Oniguruma] explicit capture — kkosako@...
> -----Original Message-----
[#20716] Re: [Oniguruma] explicit capture — kkosako@...
> -----Original Message-----
[#20748] [BigDecimal] exception handling — "Tadashi Saito" <shiba@...2.accsnet.ne.jp>
斎藤です。
[#20765] Re: [ruby-cvs] ruby/lib: * lib/tmpdir.rb: new library to get temporary directory path, — WATANABE Hirofumi <eban@...>
わたなべです。
まつもと ゆきひろです
わたなべです。
まつもと ゆきひろです
わたなべです。
[#20780] complex.rb — Masahiro TANAKA <masa@...>
complex.rb についての修正案を[ruby-math:00543]で提案しましたが、その後
まつもと ゆきひろです
けいじゅ@いしつかです.
At Tue, 22 Jul 2003 17:30:31 +0900, Yukihiro Matsumoto wrote:
まつもと ゆきひろです
けいじゅ@いしつかです.
At Sat, 26 Jul 2003 06:52:21 +0900, 石塚圭樹 wrote:
[#20791] 1.8.0 preview4 schedule — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
永井@知能.九工大です.
[#20795] warning: terminated thread — Masatoshi SEKI <m_seki@...>
咳といいます。
mput です。こんばんわ。
まつもと ゆきひろです
[#20800] 0**(-1) with rational — Tanaka Akira <akr@...17n.org>
そういえば思い出したのですが、rational を require しているときとしてい
At Wed, 23 Jul 2003 03:30:41 +0900, Tanaka Akira wrote:
[#20810] Rational 始めました。 — Shin-ichiro HARA <sinara@...>
原です。
けいじゅ@いしつかです.
In article <200307241940.EAA14225.keiju@ishitsuka.com>,
けいじゅ@いしつかです.
In article <200307271500.AAA04363.keiju@bc.mbn.or.jp>,
[#20818] ThreadGroup#wait — nobu.nakada@...
なかだです。
まつもと ゆきひろです
[#20868] ruby 1.8.0 preview4 — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#20887] ext/openssl undefined BN_pseudo_rand_range — Kazuhiro Yoshida <moriq@...>
もりきゅうです。
[#20915] [BUG] errno == 0 — Kazuhiro Yoshida <moriq@...>
もりきゅうです。win32だけかもしれません。
まつもと ゆきひろです
もりきゅうです。
[#20932] move ChangeLog — Tanaka Akira <akr@...17n.org>
提案なんですが、1.8.0 が出たらそこまでのぶんの ChangeLog を移動しませ
[#20949] multiple Tk interpreter support — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
[#20954] ruby 1.8.0 preview5 — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
もりきゅうです。
Siena. です。
[#20957] [BigDecimal] conflict between Numeric#div and BigDecimal#div — "Tadashi Saito" <shiba@...2.accsnet.ne.jp>
斎藤です。
At Mon, 28 Jul 2003 18:26:20 +0900, Tadashi Saito wrote:
まつもと ゆきひろです
At Mon, 28 Jul 2003 21:16:08 +0900, Yukihiro Matsumoto wrote:
まつもと ゆきひろです
At Tue, 29 Jul 2003 14:43:19 +0900, Yukihiro Matsumoto wrote:
原です。
[#20989] Re: [Oniguruma] explicit capture — kkosako@...
> -----Original Message-----
[#21027] -W option — WATANABE Hirofumi <eban@...>
わたなべです。
[ruby-dev:21033] [BigDecimal] modify methods result from Comparable
斎藤です。
BigDecimal中の比較周りのメソッドは、残念ながらその起源である
Comparableの定義とは異なってしまっています。
ということで、それらの修正を含んだパッチです。
もしよければ取り込んで下さい。よろしくお願いします。
# num_coerce_relopがstaticなので、4関数分くらい再発明が必要に
# なっています。既にrb_num_coerce_cmpもありますし、relopの方も
# 公開するのがいいと思うのですが、どうでしょうか。>まつもとさん
Index: bigdecimal.c
===================================================================
RCS file: /src/ruby/ext/bigdecimal/bigdecimal.c,v
retrieving revision 1.17
diff -u -p -r1.17 bigdecimal.c
--- bigdecimal.c 29 Jul 2003 07:52:48 -0000 1.17
+++ bigdecimal.c 30 Jul 2003 16:47:06 -0000
@@ -90,31 +90,39 @@ coerce_rescue(VALUE *x)
{
rb_raise(rb_eTypeError, "%s can't be coerced into %s",
rb_special_const_p(x[1])?
- rb_str2cstr(rb_inspect(x[1]),0):
- rb_class2name(CLASS_OF(x[1])),
- rb_class2name(CLASS_OF(x[0])));
- return (VALUE)0;
+ RSTRING(rb_inspect(x[1]))->ptr:
+ rb_obj_classname(x[1]),
+ rb_obj_classname(x[0]));
+ return Qnil;
}
-static void
-do_coerce(VALUE *x, VALUE *y)
+static int
+do_coerce(VALUE *x, VALUE *y, int err)
{
VALUE ary;
VALUE a[2];
a[0] = *x; a[1] = *y;
- ary = rb_rescue(coerce_body, (VALUE)a, coerce_rescue, (VALUE)a);
+ ary = rb_rescue(coerce_body, (VALUE)a, err?coerce_rescue:0, (VALUE)a);
if (TYPE(ary) != T_ARRAY || RARRAY(ary)->len != 2) {
- rb_raise(rb_eTypeError, "coerce must return [x, y]");
+ if (err) rb_raise(rb_eTypeError, "coerce must return [x, y]");
+ return Qfalse;
}
*x = RARRAY(ary)->ptr[0];
*y = RARRAY(ary)->ptr[1];
+ return Qtrue;
}
static VALUE
-DoSomeOne(VALUE x, VALUE y)
+num_coerce_relop(VALUE x, VALUE y)
{
- do_coerce(&x, &y);
- return rb_funcall(x, rb_frame_last_func(), 1, y);
+ VALUE c, x0 = x, y0 = y;
+
+ if (!do_coerce(&x, &y, Qfalse) ||
+ NIL_P(c = rb_funcall(x, rb_frame_last_func(), 1, y))) {
+ rb_cmperr(x0, y0);
+ return Qnil; /* not reached */
+ }
+ return c;
}
static void
@@ -176,8 +184,8 @@ SomeOneMayDoIt:
if(must) {
rb_raise(rb_eTypeError, "%s can't be coerced into BigDecimal",
rb_special_const_p(v)?
- rb_str2cstr(rb_inspect(v),0):
- rb_class2name(CLASS_OF(v))
+ RSTRING(rb_inspect(v))->ptr:
+ rb_obj_classname(v)
);
}
return NULL; /* NULL means to coerce */
@@ -489,7 +497,7 @@ BigDecimal_add(VALUE self, VALUE r)
GUARD_OBJ(a,GetVpValue(self,1));
b = GetVpValue(r,0);
- if(!b) return DoSomeOne(self,r);
+ if(!b) return rb_num_coerce_bin(self,r);
SAVE(b);
if(VpIsNaN(b)) return b->obj;
@@ -518,7 +526,7 @@ BigDecimal_sub(VALUE self, VALUE r)
GUARD_OBJ(a,GetVpValue(self,1));
b = GetVpValue(r,0);
- if(!b) return DoSomeOne(self,r);
+ if(!b) return rb_num_coerce_bin(self,r);
SAVE(b);
if(VpIsNaN(b)) return b->obj;
@@ -539,18 +547,6 @@ BigDecimal_sub(VALUE self, VALUE r)
return ToValue(c);
}
-static S_INT
-BigDecimalCmp(VALUE self, VALUE r)
-{
- ENTER(5);
- Real *a, *b;
- GUARD_OBJ(a,GetVpValue(self,1));
- b = GetVpValue(r,0);
- if(!b) return DoSomeOne(self,r);
- SAVE(b);
- return VpComp(a, b);
-}
-
static VALUE
BigDecimal_zero(VALUE self)
{
@@ -569,8 +565,14 @@ static VALUE
BigDecimal_comp(VALUE self, VALUE r)
{
S_INT e;
- e = BigDecimalCmp(self, r);
- if(e==999) return rb_float_new(VpGetDoubleNaN());
+ ENTER(5);
+ Real *a, *b;
+ GUARD_OBJ(a,GetVpValue(self,1));
+ b = GetVpValue(r,0);
+ if(!b) return rb_num_coerce_cmp(self,r);
+ SAVE(b);
+ e = VpComp(a, b);
+ if(e==999) return Qnil;
return INT2FIX(e);
}
@@ -581,7 +583,7 @@ BigDecimal_eq(VALUE self, VALUE r)
Real *a, *b;
GUARD_OBJ(a,GetVpValue(self,1));
b = GetVpValue(r,0);
- if(!b) return Qfalse; /* Not comparable */
+ if(!b) return Qnil; /* Not comparable */
SAVE(b);
return VpComp(a, b)? Qfalse:Qtrue;
}
@@ -602,7 +604,12 @@ static VALUE
BigDecimal_lt(VALUE self, VALUE r)
{
S_INT e;
- e = BigDecimalCmp(self, r);
+ ENTER(1);
+ Real *a, *b;
+ GUARD_OBJ(a,GetVpValue(self,1));
+ b = GetVpValue(r,0);
+ if(!b) return num_coerce_relop(self, r);
+ e = VpComp(a, b);
if(e==999) return Qfalse;
return(e < 0) ? Qtrue : Qfalse;
}
@@ -611,7 +618,12 @@ static VALUE
BigDecimal_le(VALUE self, VALUE r)
{
S_INT e;
- e = BigDecimalCmp(self, r);
+ ENTER(1);
+ Real *a, *b;
+ GUARD_OBJ(a,GetVpValue(self,1));
+ b = GetVpValue(r,0);
+ if(!b) return num_coerce_relop(self, r);
+ e = VpComp(a, b);
if(e==999) return Qfalse;
return(e <= 0) ? Qtrue : Qfalse;
}
@@ -620,7 +632,12 @@ static VALUE
BigDecimal_gt(VALUE self, VALUE r)
{
S_INT e;
- e = BigDecimalCmp(self, r);
+ ENTER(1);
+ Real *a, *b;
+ GUARD_OBJ(a,GetVpValue(self,1));
+ b = GetVpValue(r,0);
+ if(!b) return num_coerce_relop(self, r);
+ e = VpComp(a, b);
if(e==999) return Qfalse;
return(e > 0) ? Qtrue : Qfalse;
}
@@ -629,7 +646,12 @@ static VALUE
BigDecimal_ge(VALUE self, VALUE r)
{
S_INT e;
- e = BigDecimalCmp(self, r);
+ ENTER(1);
+ Real *a, *b;
+ GUARD_OBJ(a,GetVpValue(self,1));
+ b = GetVpValue(r,0);
+ if(!b) return num_coerce_relop(self, r);
+ e = VpComp(a, b);
if(e==999) return Qfalse;
return(e >= 0) ? Qtrue : Qfalse;
}
@@ -654,7 +676,7 @@ BigDecimal_mult(VALUE self, VALUE r)
GUARD_OBJ(a,GetVpValue(self,1));
b = GetVpValue(r,0);
- if(!b) return DoSomeOne(self,r);
+ if(!b) return rb_num_coerce_bin(self,r);
SAVE(b);
mx = a->Prec + b->Prec;
@@ -673,7 +695,7 @@ BigDecimal_divide(Real **c, Real **res,
GUARD_OBJ(a,GetVpValue(self,1));
b = GetVpValue(r,0);
- if(!b) return DoSomeOne(self,r);
+ if(!b) return rb_num_coerce_bin(self,r);
SAVE(b);
*div = b;
mx =(a->MaxPrec + b->MaxPrec + 1) * VpBaseFig();
@@ -717,7 +739,7 @@ BigDecimal_DoDivmod(VALUE self, VALUE r,
GUARD_OBJ(a,GetVpValue(self,1));
b = GetVpValue(r,0);
- if(!b) return DoSomeOne(self,r);
+ if(!b) return rb_num_coerce_bin(self,r);
SAVE(b);
mx = a->Prec;
@@ -759,7 +781,7 @@ BigDecimal_divremain(VALUE self, VALUE r
GUARD_OBJ(a,GetVpValue(self,1));
b = GetVpValue(r,0);
- if(!b) return DoSomeOne(self,r);
+ if(!b) return rb_num_coerce_bin(self,r);
SAVE(b);
mx =(a->MaxPrec + b->MaxPrec) *VpBaseFig();
--
斎藤ただし