diff options
author | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-07-12 14:44:21 +0000 |
---|---|---|
committer | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-07-12 14:44:21 +0000 |
commit | 8bab26ece6c7191766812f8846fa221c82fd6b70 (patch) | |
tree | 5fafedd3011ab4865164fab1e8a6ebd3a0684075 /io.c | |
parent | 05c5b8212d29299fe0f461baade1f915183dfe25 (diff) |
merges r23862 from trunk into ruby_1_9_1.
--
* io.c (argf_rewind): need to rewind $. and ARGF.lineno.
[ruby-core:24046]
* io.c (struct argf): refactoring on $. and ARGF.lineno behavior.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@24044 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'io.c')
-rw-r--r-- | io.c | 37 |
1 files changed, 18 insertions, 19 deletions
@@ -130,9 +130,9 @@ struct timeval rb_time_interval(VALUE); 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; @@ -1134,7 +1134,7 @@ 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; + ARGF.lineno -= fptr->lineno; } fptr->lineno = 0; if (fptr->readconv) { @@ -2156,7 +2156,8 @@ rb_io_getline_fast(rb_io_t *fptr, rb_encoding *enc) 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; } @@ -2293,7 +2294,7 @@ rb_io_getline_1(VALUE rs, long limit, VALUE io) if (!NIL_P(str)) { if (!nolimit) { fptr->lineno++; - ARGF.lineno = INT2FIX(fptr->lineno); + ARGF.last_lineno = fptr->lineno; } } @@ -6041,7 +6042,6 @@ argf_mark(void *ptr) 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); } @@ -6058,7 +6058,7 @@ argf_init(struct argf *p, VALUE v) { p->filename = Qnil; p->current_file = Qnil; - p->lineno = INT2FIX(0); + p->lineno = 0; p->argv = v; } @@ -6099,15 +6099,15 @@ argf_initialize_copy(VALUE argf, VALUE orig) 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 @@ -6155,7 +6155,6 @@ argf_next_argv(VALUE argf) ARGF.next_p = -1; } ARGF.init_p = 1; - ARGF.gets_lineno = 0; } if (ARGF.next_p == 1) { @@ -6285,8 +6284,8 @@ argf_getline(int argc, VALUE *argv, VALUE argf) } } if (!NIL_P(line)) { - ARGF.gets_lineno++; - ARGF.lineno = INT2FIX(ARGF.gets_lineno); + ARGF.lineno++; + ARGF.last_lineno = ARGF.lineno; } return line; } @@ -6295,7 +6294,7 @@ static VALUE argf_lineno_getter(ID id, VALUE *var) { VALUE argf = *var; - return ARGF.lineno; + return INT2FIX(ARGF.last_lineno); } static void @@ -6303,8 +6302,7 @@ argf_lineno_setter(VALUE val, ID id, VALUE *var) { 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); @@ -6358,6 +6356,7 @@ argf_gets(int argc, VALUE *argv, VALUE argf) line = argf_getline(argc, argv, argf); rb_lastline_set(line); + return line; } @@ -6380,8 +6379,8 @@ rb_gets(void) } 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; @@ -8308,7 +8307,7 @@ argf_close_m(VALUE argf) if (ARGF.next_p != -1) { ARGF.next_p = 1; } - ARGF.gets_lineno = 0; + ARGF.lineno = 0; return argf; } |