[#36672] [Bug #616] instance_eval and Module#to_s — Shyouhei Urabe <redmine@...>

Bug #616: instance_eval and Module#to_s

12 messages 2008/10/06

[#36750] [Bug #650] Marshal.load raises RegexpError — Shyouhei Urabe <redmine@...>

Bug #650: Marshal.load raises RegexpError

30 messages 2008/10/15
[#36769] Re: [Bug #650] Marshal.load raises RegexpError — Yukihiro Matsumoto <matz@...> 2008/10/17

まつもと ゆきひろです

[#36771] Re: [Bug #650] Marshal.load raises RegexpError — Urabe Shyouhei <shyouhei@...> 2008/10/17

卜部です。

[#36772] Re: [Bug #650] Marshal.load raises RegexpError — Yukihiro Matsumoto <matz@...> 2008/10/17

まつもと ゆきひろです

[#36773] Re: [Bug #650] Marshal.load raises RegexpError — Urabe Shyouhei <shyouhei@...> 2008/10/17

卜部です。

[#36784] Re: [Bug #650] Marshal.load raises RegexpError — Yukihiro Matsumoto <matz@...> 2008/10/18

まつもと ゆきひろです

[#36785] Re: [Bug #650] Marshal.load raises RegexpError — Urabe Shyouhei <shyouhei@...> 2008/10/18

卜部です。

[#36793] Re: [Bug #650] Marshal.load raises RegexpError — Yukihiro Matsumoto <matz@...> 2008/10/19

まつもと ゆきひろです

[#36794] Re: [Bug #650] Marshal.load raises RegexpError — Urabe Shyouhei <shyouhei@...> 2008/10/19

Yukihiro Matsumoto さんは書きました:

[#36823] Re: [Bug #650] Marshal.load raises RegexpError — Yukihiro Matsumoto <matz@...> 2008/10/21

まつもと ゆきひろです

[#36830] Re: [Bug #650] Marshal.load raises RegexpError — Urabe Shyouhei <shyouhei@...> 2008/10/21

もとの正規表現にバグがあるのは認めますが、それに巻き込まれてでかいPStore

[#36833] Re: [Bug #650] Marshal.load raises RegexpError — Yukihiro Matsumoto <matz@...> 2008/10/21

まつもと ゆきひろです

[#36764] Re: [ruby-cvs:27036] Ruby:r19818 (trunk): * transcode.c (str_transcode0): String#encode without argument now — Martin Duerst <duerst@...>

まつもとさん、こんばんは。

11 messages 2008/10/17
[#36767] Re: [ruby-cvs:27036] Ruby:r19818 (trunk): * transcode.c (str_transcode0): String#encode without argument now — Yukihiro Matsumoto <matz@...> 2008/10/17

まつもと ゆきひろです

[#36799] Re: [ruby-cvs:27036] Ruby:r19818 (trunk): * transcode.c (str_transcode0): String#encode without argument now — Martin Duerst <duerst@...> 2008/10/20

まつもとさん、こんにちは。

[#36774] ConverterNotFoundError while making Ruby in Windows(trunk) — Masaki Suketa <masaki.suketa@...>

助田です。

13 messages 2008/10/17
[#36797] Re: ConverterNotFoundError while making Ruby in Windows(trunk) — "U.Nakamura" <usa@...> 2008/10/20

こんにちは、なかむら(う)です。

[#36800] Re: ConverterNotFoundError while making Ruby in Windows(trunk) — "U.Nakamura" <usa@...> 2008/10/20

こんにちは、なかむら(う)です。

[#36789] [Bug #660] 数字を3桁ずつコンマで区切るsprintf書式指定 — "rubikitch ." <redmine@...>

Bug #660: 数字を3桁ずつコンマで区切るsprintf書式指定

13 messages 2008/10/19

[#37007] [Bug:1.9] 1+1+1+...+1 dumps core — "Yusuke ENDOH" <mame@...>

遠藤です。

13 messages 2008/10/31

[ruby-dev:36955] Re: initial value of $.

From: Nobuyoshi Nakada <nobu@...>
Date: 2008-10-27 09:25:01 UTC
List: ruby-dev #36955
なかだです。

At Mon, 27 Oct 2008 16:30:19 +0900,
Yukihiro Matsumoto wrote in [ruby-dev:36954]:
> |いや、直接的な原因はio.cのrb_io_getline_fast()などで増加させ
> |てるからなんですが、ARGFでないかもしれないioからのgetsで増加
> |するのは明らかにおかしい気がします。1.8ではそのようになってい
> |ません。r15663で中田さんが追加したみたいですが。
> 
> すみません、過去ログを再確認したらこの挙動は中田さんが追加し
> たわけではないですし、1.8でも$.は増加しますね。あらら。
> 
> でも、これがバグであると言う意見は変わりません。

であれば、r19965はrevertしてこんなところでしょうか。

IO#getsやIO#each、IO.foreachなどで$.が更新されることを期待してい
るプログラムは、動かなくなる可能性が高いですが。


Index: io.c
===================================================================
--- io.c	(revision 19966)
+++ io.c	(working copy)
@@ -132,5 +132,4 @@ struct argf {
     int gets_lineno;
     int init_p, next_p;
-    VALUE lineno;
     VALUE argv;
     char *inplace;
@@ -1079,7 +1078,4 @@ rb_io_rewind(VALUE io)
     GetOpenFile(io, fptr);
     if (io_seek(fptr, 0L, 0) < 0) rb_sys_fail_path(fptr->pathv);
-    if (io == ARGF.current_file) {
-	ARGF.gets_lineno -= fptr->lineno;
-    }
     fptr->lineno = 0;
 
@@ -2085,5 +2081,4 @@ rb_io_getline_fast(rb_io_t *fptr, rb_enc
     ENC_CODERANGE_SET(str, cr);
     fptr->lineno++;
-    ARGF.lineno = INT2FIX(fptr->lineno);
     return str;
 }
@@ -2220,5 +2215,4 @@ rb_io_getline_1(VALUE rs, long limit, VA
 	if (!nolimit) {
 	    fptr->lineno++;
-	    ARGF.lineno = INT2FIX(fptr->lineno);
 	}
     }
@@ -5805,5 +5799,4 @@ argf_mark(void *ptr)
     rb_gc_mark(p->filename);
     rb_gc_mark(p->current_file);
-    rb_gc_mark(p->lineno);
     rb_gc_mark(p->argv);
     rb_gc_mark(p->encs.ecopts);
@@ -5822,5 +5815,5 @@ argf_init(struct argf *p, VALUE v)
     p->filename = Qnil;
     p->current_file = Qnil;
-    p->lineno = INT2FIX(0);
+    p->gets_lineno = 0;
     p->argv = v;
 }
@@ -5864,5 +5857,4 @@ argf_set_lineno(VALUE argf, VALUE val)
 {
     ARGF.gets_lineno = NUM2INT(val);
-    ARGF.lineno = INT2FIX(ARGF.gets_lineno);
     return Qnil;
 }
@@ -5871,5 +5863,5 @@ static VALUE
 argf_lineno(VALUE argf)
 {
-    return ARGF.lineno;
+    return INT2FIX(ARGF.gets_lineno);
 }
 
@@ -6050,5 +6042,4 @@ argf_getline(int argc, VALUE *argv, VALU
     if (!NIL_P(line)) {
 	ARGF.gets_lineno++;
-	ARGF.lineno = INT2FIX(ARGF.gets_lineno);
     }
     return line;
@@ -6059,5 +6050,5 @@ argf_lineno_getter(ID id, VALUE *var)
 {
     VALUE argf = *var;
-    return ARGF.lineno;
+    return INT2FIX(ARGF.gets_lineno);
 }
 
@@ -6066,7 +6057,5 @@ argf_lineno_setter(VALUE val, ID id, VAL
 {
     VALUE argf = *var;
-    int n = NUM2INT(val);
-    ARGF.gets_lineno = n;
-    ARGF.lineno = INT2FIX(n);
+    ARGF.gets_lineno = NUM2INT(val);
 }
 
@@ -6145,5 +6134,4 @@ rb_gets(void)
     if (!NIL_P(line)) {
 	ARGF.gets_lineno++;
-	ARGF.lineno = INT2FIX(ARGF.gets_lineno);
     }
 
@@ -7756,9 +7744,18 @@ static VALUE
 argf_rewind(VALUE argf)
 {
+    rb_io_t *fptr;
+    VALUE io, ret;
+    int lineno = 0;
+
     if (!next_argv()) {
 	rb_raise(rb_eArgError, "no stream to rewind");
     }
     ARGF_FORWARD(0, 0);
-    return rb_io_rewind(ARGF.current_file);
+    io = ARGF.current_file;
+    GetOpenFile(io, fptr);
+    lineno = fptr->lineno;
+    ret = rb_io_rewind(io);
+    ARGF.gets_lineno -= lineno;
+    return ret;
 }
 
Index: test/ruby/test_io.rb
===================================================================
--- test/ruby/test_io.rb	(revision 19966)
+++ test/ruby/test_io.rb	(working copy)
@@ -800,18 +800,18 @@ class TestIO < Test::Unit::TestCase
     ruby("-e", <<-SRC, t.path) do |f|
       open(ARGV[0]) do |f|
-        p $.
-        f.gets; p $.
-        f.gets; p $.
-        f.lineno = 1000; p $.
-        f.gets; p $.
-        f.gets; p $.
-        f.rewind; p $.
-        f.gets; p $.
-        f.gets; p $.
-        f.gets; p $.
-        f.gets; p $.
+        p f.lineno
+        f.gets; p f.lineno
+        f.gets; p f.lineno
+        f.lineno = 1000; p f.lineno
+        f.gets; p f.lineno
+        f.gets; p f.lineno
+        f.rewind; p f.lineno
+        f.gets; p f.lineno
+        f.gets; p f.lineno
+        f.gets; p f.lineno
+        f.gets; p f.lineno
       end
     SRC
-      assert_equal("0,1,2,2,1001,1001,1001,1,2,3,3", f.read.chomp.gsub("\n", ","))
+      assert_equal("0,1,2,1000,1001,1001,0,1,2,3,3", f.read.chomp.gsub("\n", ","))
     end
 
@@ -822,9 +822,9 @@ class TestIO < Test::Unit::TestCase
       w.close
     end, proc do |r|
-      r.gets; assert_equal(1, $.)
-      r.gets; assert_equal(2, $.)
-      r.lineno = 1000; assert_equal(2, $.)
-      r.gets; assert_equal(1001, $.)
-      r.gets; assert_equal(1001, $.)
+      r.gets; assert_equal(1, r.lineno)
+      r.gets; assert_equal(2, r.lineno)
+      r.lineno = 1000; assert_equal(1000, r.lineno)
+      r.gets; assert_equal(1001, r.lineno)
+      r.gets; assert_equal(1001, r.lineno)
     end)
   end
@@ -837,8 +837,8 @@ class TestIO < Test::Unit::TestCase
       w.close
     end, proc do |r|
-      r.readline; assert_equal(1, $.)
-      r.readline; assert_equal(2, $.)
-      r.lineno = 1000; assert_equal(2, $.)
-      r.readline; assert_equal(1001, $.)
+      r.readline; assert_equal(1, r.lineno)
+      r.readline; assert_equal(2, r.lineno)
+      r.lineno = 1000; assert_equal(1000, r.lineno)
+      r.readline; assert_equal(1001, r.lineno)
       assert_raise(EOFError) { r.readline }
     end)
Index: test/ruby/test_argf.rb
===================================================================
--- test/ruby/test_argf.rb	(revision 19966)
+++ test/ruby/test_argf.rb	(working copy)
@@ -63,13 +63,13 @@ class TestArgf < Test::Unit::TestCase
       a.rewind
       b.rewind
-      p [a.gets.chomp, a.lineno, b.gets.chomp, b.lineno] #=> ["1", 1, "1", 3]
-      p [a.gets.chomp, a.lineno, b.gets.chomp, b.lineno] #=> ["2", 2, "2", 4]
-      p [a.gets.chomp, a.lineno, b.gets.chomp, b.lineno] #=> ["3", 3, "3", 5]
-      p [a.gets.chomp, a.lineno, b.gets.chomp, b.lineno] #=> ["4", 4, "4", 6]
-      p [a.gets.chomp, a.lineno, b.gets.chomp, b.lineno] #=> ["5", 5, "5", 7]
+      p [a.gets.chomp, a.lineno, b.gets.chomp, b.lineno] #=> ["1", 1, "1", 1]
+      p [a.gets.chomp, a.lineno, b.gets.chomp, b.lineno] #=> ["2", 2, "2", 2]
+      p [a.gets.chomp, a.lineno, b.gets.chomp, b.lineno] #=> ["3", 3, "3", 3]
+      p [a.gets.chomp, a.lineno, b.gets.chomp, b.lineno] #=> ["4", 4, "4", 4]
+      p [a.gets.chomp, a.lineno, b.gets.chomp, b.lineno] #=> ["5", 5, "5", 5]
       a.rewind
       b.rewind
-      p [a.gets.chomp, a.lineno, b.gets.chomp, b.lineno] #=> ["5", 5, "5", 8]
-      p [a.gets.chomp, a.lineno, b.gets.chomp, b.lineno] #=> ["6", 6, "6", 9]
+      p [a.gets.chomp, a.lineno, b.gets.chomp, b.lineno] #=> ["5", 5, "5", 5]
+      p [a.gets.chomp, a.lineno, b.gets.chomp, b.lineno] #=> ["6", 6, "6", 6]
     SRC
     expected = src.scan(/\#=> *(.*+)/).flatten
@@ -91,8 +91,8 @@ class TestArgf < Test::Unit::TestCase
       a.gets; p $.  #=> 2
       a.gets; p $.  #=> 3
-      a.rewind; p $.  #=> 3
+      a.rewind; p $.  #=> 2
       a.gets; p $.  #=> 3
       a.gets; p $.  #=> 4
-      a.rewind; p $.  #=> 4
+      a.rewind; p $.  #=> 2
       a.gets; p $.  #=> 3
       a.lineno = 1000; p $.  #=> 1000
@@ -112,14 +112,14 @@ class TestArgf < Test::Unit::TestCase
     src = <<-SRC
       a = ARGF.dup
-      a.gets; p $.  #=> 1
-      a.gets; p $.  #=> 2
-      a.gets; p $.  #=> 1
-      a.rewind; p $.  #=> 1
-      a.gets; p $.  #=> 1
-      a.gets; p $.  #=> 2
-      a.gets; p $.  #=> 1
-      a.lineno = 1000; p $.  #=> 1
-      a.gets; p $.  #=> 2
-      a.gets; p $.  #=> 2
+      a.gets; p $.  #=> 0
+      a.gets; p $.  #=> 0
+      a.gets; p $.  #=> 0
+      a.rewind; p $.  #=> 0
+      a.gets; p $.  #=> 0
+      a.gets; p $.  #=> 0
+      a.gets; p $.  #=> 0
+      a.lineno = 1000; p $.  #=> 0
+      a.gets; p $.  #=> 0
+      a.gets; p $.  #=> 0
       $. = 2000
       a.gets; p $.  #=> 2000


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread