[#11110] README.EXT.jp — Kazuhiro NISHIYAMA <zn@...>
README.EXT.jpを見てて気になったところがあったのでパッチです。
[#11115] proc{|a|}.arity — Kazuhiro NISHIYAMA <zn@...>
proc{|a|}.arity #=> -2
[#11131] Re: SIGINT on windows — Daisuke Aoki <dai@...>
青木です。
青木です。
青木です。
なかだです。
なかだです。
青木です。
なかだです。
[#11138] copy-on-write for substr — Shugo Maeda <shugo@...>
前田です。
前田です。
まつもと ゆきひろです
[#11146] /(?=a)b/ — Minero Aoki <aamine@...>
あおきです。
[#11158] [Patch] tracer.rb in 1.6.1 — "NAKAMURA, Hiroshi" <nakahiro@...>
なひです.
[#11159] net/protocol.rb ProtocolError#initialize — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#11161] 複数 Thread で止まった — Kazuhiro NISHIYAMA <zn@...>
あるプログラムで//pのwarningが別スレッドの$!.to_sと
[#11166] cgi.rb — akira yamada / やまだあきら <akira@...>
[#11183] EPOC32 and Ruby 1.7 — WATANABE Hirofumi <eban@...>
わたなべです.
まつもと ゆきひろです
On Fri, 13 Oct 2000 00:17:14 +0900
同じ問題を短いスクリプトで再現できました。
まつもと ゆきひろです
On Sat, 14 Oct 2000 03:41:18 +0900
On Sat, 14 Oct 2000 05:17:32 +0900
まつもと ゆきひろです
On Sat, 14 Oct 2000 23:45:08 +0900
まつもと ゆきひろです
前田です。
[ruby-dev:11205]と同じスクリプトで-dをつけていると
On Sun, 15 Oct 2000 02:11:02 +0900
On Sun, 15 Oct 2000 04:24:58 +0900
[#11196] malloc trouble in thread — GOTOU YUUZOU <gotoyuzo@...>
ごとうゆうぞうです。
[#11306] Ruby I18N — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
たけ(tk)です。
長沢です。
まつもと ゆきひろです
前田です。
高橋征義です。
At Mon, 30 Oct 2000 13:15:23 +0900,
某2ちゃんねるで自分の名前を見つけてびびった高橋征義です。
まつもと ゆきひろです
たけ(tk)です。
高橋征義です。
まつもと ゆきひろです
高橋征義です。
たけ(tk)です。
まつもと ゆきひろです
たけ(tk)です。
まつもと ゆきひろです
永井@知能.九工大です.
まつもと ゆきひろです
たけ(tk)です。 ・・ 長文ご注意。
まつもと ゆきひろです
At Tue, 7 Nov 2000 15:46:29 +0900,
まつもと ゆきひろです
In article <E13t3dt-0002Fp-00@ev.netlab.zetabits.co.jp>,
まつもと ゆきひろです
たけ(tk)です。
At Tue, 7 Nov 2000 19:06:27 +0900,
たけ(tk)です。
あおきです。
たけ(tk)です。
あおきです。
On Wed, 8 Nov 2000 15:41:58 +0900
あおきです。
On Fri, 10 Nov 2000 01:59:09 +0900
In article <E13t4Hq-0002GS-00@ev.netlab.zetabits.co.jp>,
まつもと ゆきひろです
In article <E13tMYW-0002te-00@ev.netlab.zetabits.co.jp>,
まつもと ゆきひろです
たけ(tk)です。
まつもと ゆきひろです
たけ(tk)です。
たけ(tk)です。
まつもと ゆきひろです
たけ(tk)です。
まつもと ゆきひろです
たけ(tk)です。
まつもと ゆきひろです
In article <E13tNkT-00030l-00@ev.netlab.zetabits.co.jp>,
たけ(tk)です。
たけ(tk)です。
[#11312] confused error message on Windows 2000 — Katsuyuki Komatsu <komatsu@...>
小松です。
まつもと ゆきひろです
なかだです。
[ruby-dev:11138] copy-on-write for substr
前田です。
rb_str_substr()をcopy-on-writeにするパッチです。
dupされたものと区別するためにフラグを増やしたんですが、問題がある
でしょうか?
--
前田 修吾
Index: string.c
===================================================================
RCS file: /home/cvs/ruby/string.c,v
retrieving revision 1.46
diff -u -r1.46 string.c
--- string.c 2000/10/02 07:48:33 1.46
+++ string.c 2000/10/06 08:14:23
@@ -28,6 +28,7 @@
VALUE rb_cString;
#define STR_NO_ORIG FL_USER2
+#define STR_SUBSTR FL_USER3
VALUE rb_fs;
@@ -99,7 +100,7 @@
{
if (OBJ_FROZEN(orig)) return orig;
if (RSTRING(orig)->orig) {
- if (FL_TEST(orig, STR_NO_ORIG)) {
+ if (FL_TEST(orig, STR_NO_ORIG|STR_SUBSTR)) {
orig = rb_str_new(RSTRING(orig)->ptr, RSTRING(orig)->len);
OBJ_FREEZE(orig);
return orig;
@@ -195,7 +196,12 @@
klass = (VALUE)RCLASS(klass)->super;
}
- if (OBJ_FROZEN(str)) str2 = rb_str_new3(str);
+ if (FL_TEST(str, STR_SUBSTR)) {
+ str2 = rb_str_new(RSTRING(str)->ptr, RSTRING(str)->len);
+ }
+ else if (OBJ_FROZEN(str)) {
+ str2 = rb_str_new3(str);
+ }
else if (FL_TEST(str, STR_NO_ORIG)) {
str2 = rb_str_new(RSTRING(str)->ptr, RSTRING(str)->len);
}
@@ -348,9 +354,32 @@
len = 0;
}
if (len == 0) return rb_str_new(0,0);
-
- str2 = rb_str_new(RSTRING(str)->ptr+beg, len);
+
+ if (OBJ_FROZEN(str)) {
+ str2 = rb_str_new3(str);
+ RSTRING(str2)->ptr = RSTRING(str)->ptr + beg;
+ RSTRING(str2)->len = len;
+ }
+ else if (FL_TEST(str, STR_NO_ORIG)) {
+ str2 = rb_str_new(RSTRING(str)->ptr+beg, len);
+ }
+ else if (RSTRING(str)->orig) {
+ str2 = rb_str_new3(RSTRING(str)->orig);
+ RSTRING(str2)->ptr = RSTRING(str)->ptr + beg;
+ RSTRING(str2)->len = len;
+ }
+ else {
+ VALUE orig;
+ NEWOBJ(str2, struct RString);
+ OBJSETUP(str2, rb_cString, T_STRING);
+
+ orig = rb_str_new4(str);
+ RSTRING(str2)->ptr = RSTRING(orig)->ptr + beg;
+ RSTRING(str2)->len = len;
+ RSTRING(str2)->orig = orig;
+ }
if (OBJ_TAINTED(str)) OBJ_TAINT(str2);
+ FL_SET(str2, STR_SUBSTR);
return str2;
}
@@ -394,7 +423,7 @@
rb_str_dup_frozen(str)
VALUE str;
{
- if (RSTRING(str)->orig && !FL_TEST(str, STR_NO_ORIG)) {
+ if (RSTRING(str)->orig && !FL_TEST(str, STR_NO_ORIG|STR_SUBSTR)) {
OBJ_FREEZE(RSTRING(str)->orig);
return RSTRING(str)->orig;
}