Project

General

Profile

Bug #2020 ยป argf-lineno.diff

fix ARGF.lineno - znz (Kazuhiro NISHIYAMA), 01/22/2010 03:03 PM

View differences:

io.c
}
static VALUE
rb_io_getline_fast(rb_io_t *fptr, rb_encoding *enc)
rb_io_getline_fast(rb_io_t *fptr, rb_encoding *enc, VALUE io)
{
VALUE str = Qnil;
int len = 0;
......
str = io_enc_str(str, fptr);
ENC_CODERANGE_SET(str, cr);
fptr->lineno++;
ARGF.last_lineno = fptr->lineno;
if (io == ARGF.current_file) {
ARGF.lineno++;
ARGF.last_lineno = ARGF.lineno;
}
else {
ARGF.last_lineno = fptr->lineno;
}
return str;
}
......
}
else if (rs == rb_default_rs && limit < 0 && !NEED_READCONV(fptr) &&
rb_enc_asciicompat(enc = io_read_encoding(fptr))) {
return rb_io_getline_fast(fptr, enc);
return rb_io_getline_fast(fptr, enc, io);
}
else {
int c, newline = -1;
......
if (!NIL_P(str)) {
if (!nolimit) {
fptr->lineno++;
ARGF.last_lineno = fptr->lineno;
if (io == ARGF.current_file) {
ARGF.lineno++;
ARGF.last_lineno = ARGF.lineno;
}
else {
ARGF.last_lineno = fptr->lineno;
}
}
}
test/ruby/test_argf.rb
SRC
end
def test_lineno3
assert_in_out_err(["-", @t1.path, @t2.path], <<-INPUT, %w"1 1 1 2 2 2 3 3 1 4 4 2", [], "[ruby-core:25205]")
ARGF.each do |line|
puts [$., ARGF.lineno, ARGF.file.lineno]
end
INPUT
end
def test_inplace
assert_in_out_err(["-", @t1.path, @t2.path, @t3.path], <<-INPUT, [], [])
ARGF.inplace_mode = '.bak'
    (1-1/1)