[#22494] [ANN] YARV: Yet another RubyVM 0.0.0- — "K.Sasada" <ko1@...>
あけましておめでとうございます。
まつもと ゆきひろです
なかだです。
nobu.nakada@nifty.ne.jp wrote :
[#22503] can't require — IWATSUKI Hiroyuki <don@...>
岩月と申します。
なかだです。
まつもと ゆきひろです
岩月と申します。
山本です。
岩月と申します。
なかだです。
山本です。
なかだです。
山本です。
なかだです。
まつもと ゆきひろです
In article <1073474004.933446.5475.nullmailer@picachu.netlab.jp>,
なかだです。
山本です。なかださんのコードで気になった点が3つあります。
なかだです。
山本です。
山本です。
なかだです。
山本です。
山本です。
山本です。
まつもと ゆきひろです
山本です。
山本です。
まつもと ゆきひろです
山本です。
山本です。
まつもと ゆきひろです
山本です。
まつもと ゆきひろです
山本です。
山本です。
山本です。
まつもと ゆきひろです
山本です。
山本です。
山本です。
なかだです。
山本です。WinCVS + byacc + sed をインストールして、ビルドできるようになりました。
山本です。
山本です。
山本です。
まつもと ゆきひろです
山本です。
まつもと ゆきひろです
山本です。
山本です。
なかだです。
まつもと ゆきひろです
山本です。
なかだです。
山本です。
山本です。
まつもと ゆきひろです
山本です。
なかだです。
山本です。
山本です。
山本です。
まつもと ゆきひろです
山本です。
山本です。
まつもと ゆきひろです
[#22507] Re: config.h generated for MVC not usable to compile an app with BCC 5.5 (PR#1242) — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
[#22588] marshaling a class which is defined under singleton class — Tanaka Akira <akr@...17n.org>
次のように、特異クラス内で定義したクラスを marshal するとエラーが出ま
[#22589] marshaling a time with singletom method. — Tanaka Akira <akr@...17n.org>
ふと気がついたのですが、
[#22590] empty proc equality — Tanaka Akira <akr@...17n.org>
次のように、異なる空の proc が == になるのは意図されているのでしょうか。
なかだです。
In article <200401160217.i0G2Hn2U005256@sharui.nakada.kanuma.tochigi.jp>,
なかだです。
まつもと ゆきひろです
[#22608] Time#[+-] when given a negative argument — siena@... (Siena. / SHINAGAWA, Norihide)
Siena. です。
[#22621] marshaling a object which have singleton class which have singleton method — Tanaka Akira <akr@...17n.org>
次のように、特異クラスに特異メソッドをつけた場合、Marshal.dump が失敗
In article <1074477335.411187.19623.nullmailer@picachu.netlab.jp>,
[#22624] Find.find raises SecurityError in $SAFE>=1 — Tietew <tietew-ml-ruby-dev@...>
Tietew です。
まつもと ゆきひろです
[#22634] build faild on Linux/ia64 — akira yamada <akira@...>
まつもと ゆきひろです
[#22662] NODE_NEWLINE -> NEWILNE flag — "NAKAMURA, Hiroshi" <nakahiro@...>
なひです。
[#22688] output directory for extensions — nobu.nakada@...
なかだです。
まつもと ゆきひろです
なかだです。
なかだです。
[#22691] 次期リリースでの新規添付ライブラリ — "Kawaji, Shinya" <kawaji@...>
かわじ、です
まつもと ゆきひろです
まつもと ゆきひろです
かわじ、です。
[#22763] $: trick in test/* — "NAKAMURA, Hiroshi" <nakahiro@...>
なひです。
In article <1075383555.811739.10596.nullmailer@picachu.netlab.jp>,
まつもと ゆきひろです
[ruby-dev:22675] Re: Time#[+-] when given a negative argument
In article <200401210619.i0L6J6804314@cumail.chiba-u.jp>,
siena@faculty.chiba-u.jp (Siena. / SHINAGAWA, Norihide) writes:
> double から time_t にして演算するのではなく、dounle で
> 演算してから結果を time_t に戻す方が簡単かもしれないと
> 思いましたが、time_t が 64bit の環境では仮数部の桁溢れに
> 注意しないとならないので、すっぱりとは行かないのですね。
ここは面倒ですよねぇ。
> はい。sign で場合分けしている点と、time_plus() と time_minus() で
> 原理的には同じコードが重複している点を指していました。
> リファクタリングすべきかなと思いながらも、やっつけ仕事で
> 済ましてしまったので。ちょっと気になっていたのでした。
ちょっとやってみまたところ、8行短くなりました。
ただ、書いていて疑問に思ったのですが、そちらの環境では usec まわりはちゃ
んと動いているんでしょうか?
たとえば、time_plus に
usec = tobj->tv.tv_usec + (time_t)(d*1e6);
というコードがあります。これは Time.at(1.25) + (-0.5) とかやると d が
-0.5 になって、time_t という unsigned な型にキャストして変なことがおき
るんじゃないかと思うんですが。
他にも time_overflow_p の
if (usec < 0) { /* usec negative overflow */
とかは time_t が unsigned だと動く気がしません。
これに関連して聞きたいんですが、そちらの環境では struct timeval の
tv_usec の型は何でしょう?
ちなみに SUSv3 的には tv_usec は suseconds_t となっていて、これは
signed な整数型で [-1, 1000000] の範囲を表現できるとなっています。
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]