summaryrefslogtreecommitdiff
path: root/io.c
diff options
context:
space:
mode:
authoryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-07-12 14:44:21 +0000
committeryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-07-12 14:44:21 +0000
commit8bab26ece6c7191766812f8846fa221c82fd6b70 (patch)
tree5fafedd3011ab4865164fab1e8a6ebd3a0684075 /io.c
parent05c5b8212d29299fe0f461baade1f915183dfe25 (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.c37
1 files changed, 18 insertions, 19 deletions
diff --git a/io.c b/io.c
index 76e9e949d2..bb3daf0f04 100644
--- a/io.c
+++ b/io.c
@@ -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;
}