[前][次][番号順一覧][スレッド一覧]

ruby-changes:12184

From: matz <ko1@a...>
Date: Sat, 27 Jun 2009 03:10:31 +0900 (JST)
Subject: [ruby-changes:12184] Ruby:r23862 (trunk): * io.c (argf_rewind): need to rewind $. and ARGF.lineno.

matz	2009-06-27 03:10:12 +0900 (Sat, 27 Jun 2009)

  New Revision: 23862

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=23862

  Log:
    * io.c (argf_rewind): need to rewind $. and ARGF.lineno.
      [ruby-core:24046]
    * io.c (struct argf): refactoring on $. and ARGF.lineno behavior.

  Modified files:
    trunk/ChangeLog
    trunk/io.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 23861)
+++ ChangeLog	(revision 23862)
@@ -1,3 +1,10 @@
+Sat Jun 27 03:09:04 2009  Yukihiro Matsumoto  <matz@r...>
+
+	* io.c (argf_rewind): need to rewind $. and ARGF.lineno.
+	  [ruby-core:24046]
+
+	* io.c (struct argf): refactoring on $. and ARGF.lineno behavior.
+
 Fri Jun 26 21:48:30 2009  Tanaka Akira  <akr@f...>
 
 	* ext/pty/pty.c (pty_getpty): check dup failure.
Index: io.c
===================================================================
--- io.c	(revision 23861)
+++ io.c	(revision 23862)
@@ -134,9 +134,9 @@
 
 struct argf {
     VALUE filename, current_file;
-    int gets_lineno;
+    int last_lineno;		/* $. */
+    int lineno;
     int init_p, next_p;
-    VALUE lineno;
     VALUE argv;
     char *inplace;
     int binmode;
@@ -1142,7 +1142,7 @@
     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;
+	ARGF.lineno -= fptr->lineno;
     }
     fptr->lineno = 0;
     if (fptr->readconv) {
@@ -2273,7 +2273,8 @@
     str = io_enc_str(str, fptr);
     ENC_CODERANGE_SET(str, cr);
     fptr->lineno++;
-    ARGF.lineno = INT2FIX(fptr->lineno);
+    ARGF.last_lineno = fptr->lineno;
+    
     return str;
 }
 
@@ -2410,7 +2411,7 @@
     if (!NIL_P(str)) {
 	if (!nolimit) {
 	    fptr->lineno++;
-	    ARGF.lineno = INT2FIX(fptr->lineno);
+	    ARGF.last_lineno = fptr->lineno;
 	}
     }
 
@@ -6334,7 +6335,6 @@
     struct argf *p = 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);
 }
@@ -6351,7 +6351,7 @@
 {
     p->filename = Qnil;
     p->current_file = Qnil;
-    p->lineno = INT2FIX(0);
+    p->lineno = 0;
     p->argv = v;
 }
 
@@ -6392,15 +6392,15 @@
 static VALUE
 argf_set_lineno(VALUE argf, VALUE val)
 {
-    ARGF.gets_lineno = NUM2INT(val);
-    ARGF.lineno = INT2FIX(ARGF.gets_lineno);
+    ARGF.lineno = NUM2INT(val);
+    ARGF.last_lineno = ARGF.lineno;
     return Qnil;
 }
 
 static VALUE
 argf_lineno(VALUE argf)
 {
-    return ARGF.lineno;
+    return INT2FIX(ARGF.lineno);
 }
 
 static VALUE
@@ -6448,7 +6448,6 @@
 	    ARGF.next_p = -1;
 	}
 	ARGF.init_p = 1;
-	ARGF.gets_lineno = 0;
     }
 
     if (ARGF.next_p == 1) {
@@ -6582,8 +6581,8 @@
 	}
     }
     if (!NIL_P(line)) {
-	ARGF.gets_lineno++;
-	ARGF.lineno = INT2FIX(ARGF.gets_lineno);
+	ARGF.lineno++;
+	ARGF.last_lineno = ARGF.lineno;
     }
     return line;
 }
@@ -6592,7 +6591,7 @@
 argf_lineno_getter(ID id, VALUE *var)
 {
     VALUE argf = *var;
-    return ARGF.lineno;
+    return INT2FIX(ARGF.last_lineno);
 }
 
 static void
@@ -6600,8 +6599,7 @@
 {
     VALUE argf = *var;
     int n = NUM2INT(val);
-    ARGF.gets_lineno = n;
-    ARGF.lineno = INT2FIX(n);
+    ARGF.last_lineno = ARGF.lineno = n;
 }
 
 static VALUE argf_gets(int, VALUE *, VALUE);
@@ -6655,6 +6653,7 @@
 
     line = argf_getline(argc, argv, argf);
     rb_lastline_set(line);
+
     return line;
 }
 
@@ -6677,8 +6676,8 @@
     }
     rb_lastline_set(line);
     if (!NIL_P(line)) {
-	ARGF.gets_lineno++;
-	ARGF.lineno = INT2FIX(ARGF.gets_lineno);
+	ARGF.lineno++;
+	ARGF.last_lineno = ARGF.lineno;
     }
 
     return line;
@@ -8633,7 +8632,7 @@
     if (ARGF.next_p != -1) {
 	ARGF.next_p = 1;
     }
-    ARGF.gets_lineno = 0;
+    ARGF.lineno = 0;
     return argf;
 }
 

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]