[#23295] [proposal] new function for mathing path name — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
6 messages
2004/04/01
[#23296] Re: [proposal] new function for mathing path name
— matz@... (Yukihiro Matsumoto)
2004/04/01
まつもと ゆきひろです
[#23309] 100000000000000000000000 == 100000000000000000000000.0 — Tanaka Akira <akr@...17n.org>
ふと (またしても) 気がついたのですが、次のように
5 messages
2004/04/02
[#23310] Re: 100000000000000000000000 == 100000000000000000000000.0
— matz@... (Yukihiro Matsumoto)
2004/04/02
まつもと ゆきひろです
[#23311] Re: 100000000000000000000000 == 100000000000000000000000.0
— Tanaka Akira <akr@...17n.org>
2004/04/02
In article <1080884868.201381.30812.nullmailer@picachu.netlab.jp>,
[#23324] test_pack_U/test_huge_difference error — MIYAMUKO Katsuyuki <k-miyamuko@...>
みやむこです。
9 messages
2004/04/05
[#23353] Re: test_pack_U/test_huge_difference error
— "NAKAMURA, Hiroshi" <nakahiro@...>
2004/04/08
なひです。
[#23332] to_str再考 — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
15 messages
2004/04/05
[#23392] Re: to_str再考
— nobu.nakada@...
2004/04/16
なかだです。
[#23396] Re: to_str再考
— Tanaka Akira <akr@...17n.org>
2004/04/16
In article <200404160100.i3G10FjJ003540@sharui.nakada.niregi.kanuma.tochigi.jp>,
[#23346] Solaris Errno::E000 — とみたまさひろ <tommy@...>
とみたです。
4 messages
2004/04/07
[#23380] [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
17 messages
2004/04/15
[#23400] Re: [SEGV] make test-all (bccwin32 ruby1.9.0)
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/04/16
山本です。落ちる場所がわかりました。
[#23402] Re: [SEGV] make test-all (bccwin32 ruby1.9.0)
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/04/16
山本です。
[#23403] Re: [SEGV] make test-all (bccwin32 ruby1.9.0)
— nobu.nakada@...
2004/04/16
なかだです。
[#23405] Re: [SEGV] make test-all (bccwin32 ruby1.9.0)
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/04/16
山本です。
[#23407] Re: [SEGV] make test-all (bccwin32 ruby1.9.0)
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/04/16
山本です。
[#23412] Re: [SEGV] make test-all (bccwin32 ruby1.9.0)
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/04/20
山本です。原因を絞り込めました。
[#23413] Re: [SEGV] make test-all (bccwin32 ruby1.9.0)
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/04/20
山本です。
[#23414] Re: [SEGV] make test-all (bccwin32 ruby1.9.0)
— "U.Nakamura" <usa@...>
2004/04/20
こんにちは、なかむら(う)です。
[#23415] Re: [SEGV] make test-all (bccwin32 ruby1.9.0)
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/04/20
山本です。
[#23416] Re: [SEGV] make test-all (bccwin32 ruby1.9.0)
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/04/20
山本です。
[#23417] Re: [SEGV] make test-all (bccwin32 ruby1.9.0)
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/04/20
山本です。SEGVの原因がわかりました。
[#23418] Re: [SEGV] make test-all (bccwin32 ruby1.9.0)
— nobu.nakada@...
2004/04/20
なかだです。
[#23381] gdbm read only access — Tanaka Akira <akr@...17n.org>
ふと、GDBM を read only で access したくなったのですが、GDBM.open には
4 messages
2004/04/15
[#23385] Process::Status as boolean — nobu.nakada@...
なかだです。
7 messages
2004/04/15
[#23394] drb test failure due to multiple value class — nobu.nakada@...
なかだです。
3 messages
2004/04/16
[#23408] Ruby/Bsearch — MoonWolf <moonwolf@...>
MoonWolfです。
6 messages
2004/04/19
[#23432] Resolv.getaddress(IPv6) causes error — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
7 messages
2004/04/23
[#23433] Re: Resolv.getaddress(IPv6) causes error
— Tanaka Akira <akr@...17n.org>
2004/04/23
In article <20040423115903.F2C7.USA@garbagecollect.jp>,
[#23434] Re: Resolv.getaddress(IPv6) causes error
— "U.Nakamura" <usa@...>
2004/04/23
こんにちは、なかむら(う)です。
[#23443] [Oniguruma] Version 2.2.8 — <kkosako@...>
ftp.ruby-lang.orgとhttp://www.geocities.jp/kosako1/に、
6 messages
2004/04/27
[ruby-dev:23341] Re: Time#[+-] when given a negative argument
From:
matz@... (Yukihiro Matsumoto)
Date:
2004-04-06 07:42:35 UTC
List:
ruby-dev #23341
まつもと ゆきひろです
In message "[ruby-dev:22675] Re: Time#[+-] when given a negative argument"
on 04/01/23, Tanaka Akira <akr@m17n.org> writes:
|> はい。sign で場合分けしている点と、time_plus() と time_minus() で
|> 原理的には同じコードが重複している点を指していました。
|> リファクタリングすべきかなと思いながらも、やっつけ仕事で
|> 済ましてしまったので。ちょっと気になっていたのでした。
|
|ちょっとやってみまたところ、8行短くなりました。
これでコミットしていただけませんか。
|Index: configure.in
|===================================================================
|RCS file: /src/ruby/configure.in,v
|retrieving revision 1.221
|diff -p -u -r1.221 configure.in
|--- configure.in 21 Jan 2004 16:09:40 -0000 1.221
|+++ configure.in 23 Jan 2004 13:57:02 -0000
|@@ -205,6 +205,7 @@ AC_CHECK_SIZEOF(off_t, 0)
| AC_CHECK_SIZEOF(void*, 4)
| AC_CHECK_SIZEOF(float, 4)
| AC_CHECK_SIZEOF(double, 8)
|+AC_CHECK_SIZEOF(time_t, 0)
|
| AC_CACHE_CHECK(for prototypes, rb_cv_have_prototypes,
| [AC_TRY_COMPILE([int foo(int x) { return 0; }], [return foo(10);],
|Index: time.c
|===================================================================
|RCS file: /src/ruby/time.c,v
|retrieving revision 1.95
|diff -p -u -r1.95 time.c
|--- time.c 18 Jan 2004 14:16:47 -0000 1.95
|+++ time.c 23 Jan 2004 13:57:02 -0000
|@@ -1168,6 +1168,57 @@ time_to_s(time)
| return rb_str_new(buf, len);
| }
|
|+#if SIZEOF_TIME_T == SIZEOF_LONG
|+typedef unsigned long unsigned_time_t;
|+#elif SIZEOF_TIME_T == SIZEOF_LONG_LONG
|+typedef unsigned long long unsigned_time_t;
|+#else
|+# error cannot find integer type which size is same as time_t.
|+#endif
|+
|+static VALUE
|+time_add(tobj, offset, sign)
|+ struct time_object *tobj;
|+ VALUE offset;
|+ int sign;
|+{
|+ double v = NUM2DBL(offset);
|+ double f, d;
|+ unsigned_time_t sec_off;
|+ time_t usec_off, sec, usec;
|+ VALUE result;
|+
|+ if (v < 0) {
|+ v = -v;
|+ sign = -sign;
|+ }
|+ d = modf(v, &f);
|+ sec_off = (unsigned_time_t)f;
|+ if (f != (double)sec_off)
|+ rb_raise(rb_eRangeError, "time %s %f out of Time range",
|+ sign < 0 ? "-" : "+", v);
|+ usec_off = (time_t)(d*1e6);
|+
|+ if (sign < 0) {
|+ sec = tobj->tv.tv_sec - sec_off;
|+ usec = tobj->tv.tv_usec - usec_off;
|+ if (sec > tobj->tv.tv_sec)
|+ rb_raise(rb_eRangeError, "time - %f out of Time range", v);
|+ }
|+ else {
|+ sec = tobj->tv.tv_sec + sec_off;
|+ usec = tobj->tv.tv_usec + usec_off;
|+ if (sec < tobj->tv.tv_sec)
|+ rb_raise(rb_eRangeError, "time + %f out of Time range", v);
|+ }
|+ result = rb_time_new(sec, usec);
|+ if (tobj->gmt) {
|+ GetTimeval(result, tobj);
|+ tobj->gmt = 1;
|+ }
|+ return result;
|+}
|+
| /*
| * call-seq:
| * time + numeric => time
|@@ -1184,42 +1235,12 @@ time_plus(time1, time2)
| VALUE time1, time2;
| {
| struct time_object *tobj;
|- time_t sec, usec;
|- double f, d, v;
|- int sign;
|-
| GetTimeval(time1, tobj);
|
| if (TYPE(time2) == T_DATA && RDATA(time2)->dfree == time_free) {
| rb_raise(rb_eTypeError, "time + time?");
| }
|- v = NUM2DBL(time2);
|- d = modf(v, &f);
|- sign = (f < 0 ? -1 : 1);
|- f *= sign;
|- sec = (time_t)f;
|- if (f != (double)sec) {
|- rb_raise(rb_eRangeError, "time + %f out of Time range", v);
|- }
|-#ifndef NEGATIVE_TIME_T
|- if (sign < 0 && f >= tobj->tv.tv_sec) {
|- rb_raise(rb_eArgError, "time must be positive");
|- }
|-#endif
|- usec = tobj->tv.tv_usec + (time_t)(d*1e6);
|- sec = (sign > 0 ? tobj->tv.tv_sec + sec : tobj->tv.tv_sec - sec);
|-#ifdef NEGATIVE_TIME_T
|- if ((tobj->tv.tv_sec >= 0 && sign >= 0 && sec < 0) ||
|- (tobj->tv.tv_sec <= 0 && sign <= 0 && sec > 0)) {
|- rb_raise(rb_eRangeError, "time + %f out of Time range", v);
|- }
|-#endif
|- time2 = rb_time_new(sec, usec);
|- if (tobj->gmt) {
|- GetTimeval(time2, tobj);
|- tobj->gmt = 1;
|- }
|- return time2;
|+ return time_add(tobj, time2, 1);
| }
|
| /*
|@@ -1242,13 +1263,11 @@ time_minus(time1, time2)
| VALUE time1, time2;
| {
| struct time_object *tobj;
|- time_t sec, usec;
|- double f, d, v;
|- int sign;
|
| GetTimeval(time1, tobj);
| if (TYPE(time2) == T_DATA && RDATA(time2)->dfree == time_free) {
| struct time_object *tobj2;
|+ double f;
|
| GetTimeval(time2, tobj2);
| f = (double)tobj->tv.tv_sec - (double)tobj2->tv.tv_sec;
|@@ -1257,34 +1276,7 @@ time_minus(time1, time2)
|
| return rb_float_new(f);
| }
|- v = NUM2DBL(time2);
|- d = modf(v, &f);
|- sign = (f < 0 ? -1 : 1);
|- f *= sign;
|- sec = (time_t)f;
|- if (f != (double)sec) {
|- rb_raise(rb_eRangeError, "time - %f out of Time range", v);
|- }
|-#ifndef NEGATIVE_TIME_T
|- if (sign > 0 && f >= tobj->tv.tv_sec) {
|- rb_raise(rb_eArgError, "time must be positive");
|- }
|-#endif
|- usec = tobj->tv.tv_usec - (time_t)(d*1e6);
|- sec = (sign > 0 ? tobj->tv.tv_sec - sec : tobj->tv.tv_sec + sec);
|-#ifdef NEGATIVE_TIME_T
|- if ((tobj->tv.tv_sec <= 0 && sign >= 0 && sec > 0) ||
|- (tobj->tv.tv_sec >= 0 && sign <= 0 && sec < 0)) {
|- rb_raise(rb_eRangeError, "time - %f out of Time range", v);
|- }
|-#endif
|-
|- time2 = rb_time_new(sec, usec);
|- if (tobj->gmt) {
|- GetTimeval(time2, tobj);
|- tobj->gmt = 1;
|- }
|- return time2;
|+ return time_add(tobj, time2, -1);
| }
|
| /*
|--
|[田中 哲][たなか あきら][Tanaka Akira]