[#37959] [Bug:trunk] I can modify literals — Yusuke ENDOH <mame@...>

遠藤です。

13 messages 2009/02/10

[#38005] Is URI.decode() broken? — MOROHASHI Kyosuke <moronatural@...>

もろはしです。いつもお世話になっております。

39 messages 2009/02/14
[#38006] Re: Is URI.decode() broken? — Nobuyoshi Nakada <nobu@...> 2009/02/14

なかだです。

[#38009] Re: Is URI.decode() broken? — "NARUSE, Yui" <naruse@...> 2009/02/14

成瀬です、

[#38016] Re: Is URI.decode() broken? — Fujioka <fuj@...> 2009/02/15

xibbarこと藤岡です。

[#38017] Re: Is URI.decode() broken? — "NARUSE, Yui" <naruse@...> 2009/02/15

成瀬です。

[#38040] Re: Is URI.decode() broken? — akira yamada / やまだあきら <akira@...> 2009/02/17

NARUSE, Yui さんは書きました:

[#38124] Re: Is URI.decode() broken? — "NARUSE, Yui" <naruse@...> 2009/03/03

成瀬です。

[#39214] Re: Is URI.decode() broken? — akira yamada / やまだあきら <akira@...> 2009/09/02

(2009年03月03日 22:45), NARUSE, Yui さんは書きました:

[#39218] Re: Is URI.decode() broken? — "NARUSE, Yui" <naruse@...> 2009/09/02

成瀬です。

[#39236] Re: Is URI.decode() broken? — Tanaka Akira <akr@...> 2009/09/05

In article <4A9E44DD.6050706@airemix.jp>,

[#39242] Re: Is URI.decode() broken? — KOSAKI Motohiro <kosaki.motohiro@...> 2009/09/07

小崎@思いつきを適当に書いてみるテスト

[#39246] Re: Is URI.decode() broken? — Tanaka Akira <akr@...> 2009/09/07

In article <20090907091830.2C7A.A69D9226@jp.fujitsu.com>,

[#38096] 多重代入やメソッド引数の展開でto_aが呼ばれます — nagachika <nagachika00@...>

nagachika と申します。

10 messages 2009/02/26

[#38098] ブロック引数と括弧・引数なしsuper — Shugo Maeda <shugo@...>

前田です。

12 messages 2009/02/27

[ruby-dev:37983] Re: [Bug #1137](Closed) I can modify literals

From: SASADA Koichi <ko1@...>
Date: 2009-02-12 21:16:58 UTC
List: ruby-dev #37983
 ささだです.

 rb_*_replace を使うんじゃなくて,新しい API を作るのはどうでしょう.
rb_*_from() という名前は,後で後悔しそうな気はします.もっと泥臭い名前の
方がいいかも.

Index: array.c
===================================================================
--- array.c	(リビジョン 22272)
+++ array.c	(作業コピー)
@@ -1468,6 +1468,12 @@ rb_ary_dup(VALUE ary)
     return dup;
 }

+VALUE
+rb_ary_new_from(VALUE ary)
+{
+    return rb_ary_new4(RARRAY_LEN(ary), RARRAY_PTR(ary));
+}
+
 extern VALUE rb_output_fs;

 static VALUE
Index: insns.def
===================================================================
--- insns.def	(リビジョン 22272)
+++ insns.def	(作業コピー)
@@ -373,7 +373,7 @@ putstring
 ()
 (VALUE val)
 {
-    val = rb_str_replace(rb_str_new(0, 0), str);
+    val = rb_str_new_from(str);
 }

 /**
@@ -460,7 +460,7 @@ duparray
 ()
 (VALUE val)
 {
-    val = rb_ary_replace(rb_ary_new2(0), ary);
+    val = rb_ary_new_from(ary);
 }

 /**
Index: vm_core.h
===================================================================
--- vm_core.h	(リビジョン 22272)
+++ vm_core.h	(作業コピー)
@@ -598,6 +598,9 @@ NOINLINE(void rb_gc_save_machine_context

 #define sysstack_error GET_VM()->special_exceptions[ruby_error_sysstack]

+VALUE rb_str_new_from(VALUE str);
+VALUE rb_ary_new_from(VALUE ary);
+
 /* for thread */

 #if RUBY_VM_THREAD_MODEL == 2
Index: iseq.c
===================================================================
--- iseq.c	(リビジョン 22272)
+++ iseq.c	(作業コピー)
@@ -704,7 +704,7 @@ insn_operand_intern(rb_iseq_t *iseq,
 	if (hidden_obj_p(op)) {
 	    switch (BUILTIN_TYPE(op)) {
 	      case T_STRING:
-		op = rb_str_replace(rb_str_new(0, 0), op);
+		op = rb_str_new_from(op);
 		break;
 	      case T_ARRAY:
 		op = rb_ary_replace(rb_ary_new2(0), op);
Index: string.c
===================================================================
--- string.c	(リビジョン 22272)
+++ string.c	(作業コピー)
@@ -829,6 +829,11 @@ rb_str_dup(VALUE str)
     return str_duplicate(rb_obj_class(str), str);
 }

+VALUE
+rb_str_new_from(VALUE str)
+{
+    return rb_str_replace(str_alloc(rb_cString), str);
+}

 /*
  *  call-seq:

-- 
// SASADA Koichi at atdot dot net

In This Thread