[#32171] autoload_delete — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
[#32185] Date#+に大きな数字を与えるとおかしな日付に — "madoka yamamoto" <yamamotomadoka@...>
こんにちは、山本と申します。
> Dateオブジェクトに+で大きな数字を与えるとおかしくなるようです。
山本です。
> アルゴリズムの意味がわからないで書いた、表層的なパッチなので
Hi,
> 1.9ではRationalとComplexを組み込みに、という話はありましたが、
原です。
ささだです.
[#32192] test-all results - ruby 1.9.0 (2007-11-09 patchlevel 0) [i686-linux] — SASADA Koichi <ko1@...>
ささだです.
[#32198] [提案] Array#tail — "Yusuke ENDOH" <mame@...>
遠藤と申します。
まつもと ゆきひろです
西山と申します
遠藤です。
[#32204] yydebug — Nobuyoshi Nakada <nobu@...>
なかだです。
[#32205] Use two pipes for duplex IO.popen — Tanaka Akira <akr@...>
改心して duplex な IO.popen で socketpair を使うのはやめよう
なかだです。
In article <20071111120021.7f0592e5.nobu@ruby-lang.org>,
[#32206] Integer#ord for 1.8 — Tanaka Akira <akr@...>
1.9 と 1.8 の両方で ?a.ord で 97 が得られるように、1.8 に
[#32219] trunkでビルド失敗 — KIMURA Koichi <kimura.koichi@...>
木村です。
[#32247] round missing (mswin32) — KIMURA Koichi <kimura.koichi@...>
木村です。
[#32263] toplevel irb method — SASADA Koichi <ko1@...>
ささだです.
まつもと ゆきひろです
[#32266] version string — SASADA Koichi <ko1@...>
ささだです.
[#32268] RFLOAT_VALUE(val), DOUBLE2NUM(dbl) — SASADA Koichi <ko1@...>
ささだです.
SASADA Koichi wrote:
[#32306] nanosecond Time and stat — Tanaka Akira <akr@...>
最近、nanosecond 単位な timestamp があるようです。
In article <874pflntd5.fsf@fsij.org>,
まつもと ゆきひろです
In article <E1Iu2GD-0004Wh-1I@x31>,
[#32308] core dump with undef/alias using dynamic symbols — Tadashi Saito <shiba@...2.accsnet.ne.jp>
斎藤と申します。
遠藤と申します。
ささだです.
遠藤です。
ささだです.
[#32329] enumerator with single array and multiple arguments. — Tanaka Akira <akr@...>
enumerator を通すとひとつの配列と複数の引数が区別できません。
[#32330] defined?($&) — Tanaka Akira <akr@...>
ふと気がついたんですが、defined?($&) が "expression" になり
まつもと ゆきひろです
まつもと ゆきひろです
ささだです.
[#32333] test/ruby/test_eval.rb — SASADA Koichi <ko1@...>
ささだです.
まつもと ゆきひろです
ささだです.
まつもと ゆきひろです
[#32348] DRb test leaves ut_eval.rb process — Tanaka Akira <akr@...>
DRb のテストをすると、(テストがいろいろと失敗する他に) プロ
[#32352] 1.9.1のリリース時期について — KIMURA Koichi <hogemuta@...>
木村です。
まつもと ゆきひろです
木村です。
まつもと ゆきひろです
[#32403] Next 1.8.6 patch release? (was Re: 1.9.1のリリース時期について) — Takahiro Kambe <taca@...>
こんばんは。
卜部です。
まつもと ゆきひろです
こんにちは、なかむら(う)です。
成瀬です。
卜部です。
遠藤と申します。
遠藤です。
ささだです.
まつもと ゆきひろです
[#32404] SEGV on child process by fork on GC.stress. — Tanaka Akira <akr@...>
GC.stress = true 下で fork すると子プロセスが SEGV します。
まつもと ゆきひろです
In article <E1Iy7HA-0006zn-37@x31>,
まつもと ゆきひろです
ささだです.
[#32409] Re: [ruby-cvs:21293] Ruby:r14056 (trunk): * signal.c (trap_signm): SIGVTALRM no longer used for green — SASADA Koichi <ko1@...>
ささだです.
さとうふみやす @ OSS テクノロジです。
ささだです.
まつもと ゆきひろです
[ruby-dev:32355] Re: core dump with undef/alias using dynamic symbols
遠藤と申します。
07/11/19 に Tadashi Saito<shiba@mail2.accsnet.ne.jp> さんは書きました:
> undefに式展開を伴うシンボルを渡すと、以下のようにcoreを吐きます。
>
> $ ruby-trunk -ve 'undef :"#{foo}"'
(snip)
この問題は落ちないように対応されたようですが、式展開がされないようです。
$ ./miniruby -e 'def foobar; end; undef :"foo#{ :bar }"'
-e:1:in `<main>': undefined method `foo' for class `Object' (NameError)
スタックからシンボルを読み込んで alias や undef をするバイトコード命令を
(見よう見まねで) 追加してみました。余計なお世話だったらすみません。
Index: insns.def
===================================================================
--- insns.def (revision 14012)
+++ insns.def (working copy)
@@ -769,6 +769,28 @@
/**
@c setting
+ @e make alias (if v_p is Qtrue, make valias)
+ @j シンボルを受け取って alias を作る。もし v_p が Qtrue なら、valias (global variable) を作る。
+ */
+DEFINE_INSN
+alias_with_symbol
+(VALUE v_p)
+(VALUE id1, VALUE id2)
+()
+{
+ VALUE klass;
+
+ if (v_p == Qtrue) {
+ rb_alias_variable(SYM2ID(id1), SYM2ID(id2));
+ }
+ else {
+ klass = get_cref(GET_ISEQ(), GET_LFP())->nd_clss;
+ rb_alias(klass, SYM2ID(id1), SYM2ID(id2));
+ }
+}
+
+/**
+ @c setting
@e undef
@j undef を行う。
*/
@@ -785,6 +807,22 @@
/**
@c setting
+ @e undef_with_symbol
+ @j シンボルを受け取って undef を行う。
+ */
+DEFINE_INSN
+undef_with_symbol
+()
+(VALUE id)
+()
+{
+ VALUE klass = get_cref(GET_ISEQ(), GET_LFP())->nd_clss;
+ rb_undef(klass, SYM2ID(id));
+ INC_VM_STATE_VERSION();
+}
+
+/**
+ @c setting
@e defined?
@j defined? を行う。
*/
Index: compile.c
===================================================================
--- compile.c (revision 14012)
+++ compile.c (working copy)
@@ -4064,17 +4064,40 @@
}
case NODE_ALIAS:{
VALUE s1, s2;
- enum node_type t;
+ enum node_type t1, t2;
- if (((t = nd_type(node->u1.node)) != NODE_LIT && t != NODE_DSYM) ||
- ((t = nd_type(node->u2.node)) != NODE_LIT && t != NODE_DSYM)) {
+ t1 = nd_type(node->u1.node);
+ t2 = nd_type(node->u2.node);
+ if (t1 == NODE_LIT && t2 == NODE_LIT) {
+ s1 = node->u1.node->nd_lit;
+ s2 = node->u2.node->nd_lit;
+ ADD_INSN3(ret, nd_line(node), alias, Qfalse, ID2SYM(rb_to_id(s1)),
+ ID2SYM(rb_to_id(s2)));
+ }
+ else if ((t1 == NODE_LIT || t1 == NODE_DSYM) &&
+ (t2 == NODE_LIT || t2 == NODE_DSYM)) {
+ if (t1 == NODE_LIT) {
+ s1 = node->u1.node->nd_lit;
+ ADD_INSN1(ret, nd_line(node), putobject, ID2SYM(rb_to_id(s1)));
+ }
+ else {
+ compile_dstr(iseq, ret, node->u1.node);
+ ADD_SEND(ret, nd_line(node), ID2SYM(idIntern), INT2FIX(0));
+ }
+ if (t2 == NODE_LIT) {
+ s2 = node->u2.node->nd_lit;
+ ADD_INSN1(ret, nd_line(node), putobject, ID2SYM(rb_to_id(s2)));
+ }
+ else {
+ compile_dstr(iseq, ret, node->u2.node);
+ ADD_SEND(ret, nd_line(node), ID2SYM(idIntern), INT2FIX(0));
+ }
+ ADD_INSN1(ret, nd_line(node), alias_with_symbol, Qfalse);
+ }
+ else {
rb_compile_bug(ERROR_ARGS "alias args must be NODE_LIT or NODE_DSYM");
}
- s1 = node->u1.node->nd_lit;
- s2 = node->u2.node->nd_lit;
- ADD_INSN3(ret, nd_line(node), alias, Qfalse, ID2SYM(rb_to_id(s1)),
- ID2SYM(rb_to_id(s2)));
if (!poped) {
ADD_INSN(ret, nd_line(node), putnil);
}
@@ -4090,11 +4113,19 @@
}
case NODE_UNDEF:{
enum node_type t = nd_type(node->u2.node);
- if (t != NODE_LIT && t != NODE_DSYM) {
- rb_compile_bug(ERROR_ARGS "undef args must be NODE_LIT");
+ switch (t) {
+ case NODE_LIT:
+ ADD_INSN1(ret, nd_line(node), undef,
+ ID2SYM(rb_to_id(node->u2.node->nd_lit)));
+ break;
+ case NODE_DSYM:
+ compile_dstr(iseq, ret, node->u2.node);
+ ADD_SEND(ret, nd_line(node), ID2SYM(idIntern), INT2FIX(0));
+ ADD_INSN(ret, nd_line(node), undef_with_symbol);
+ break;
+ default:
+ rb_compile_bug(ERROR_ARGS "undef args must be NODE_LIT or NODE_DSYM");
}
- ADD_INSN1(ret, nd_line(node), undef,
- ID2SYM(rb_to_id(node->u2.node->nd_lit)));
if (!poped) {
ADD_INSN(ret, nd_line(node), putnil);
}
--
Yusuke ENDOH <mame@tsg.ne.jp>