* io.c: expanded ARGF members macros.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19117 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2008-09-04 03:33:27 +00:00
Родитель 783541e0a4
Коммит 8f0f91e155
2 изменённых файлов: 127 добавлений и 136 удалений

Просмотреть файл

@ -1,3 +1,7 @@
Thu Sep 4 12:33:23 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
* io.c: expanded ARGF members macros.
Thu Sep 4 10:43:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
* tool/transcode-tblgen.rb (citrus_decode_mapsrc): support older 1.8.

259
io.c
Просмотреть файл

@ -5702,19 +5702,6 @@ argf_alloc(VALUE klass)
}
#undef rb_argv
#define filename ARGF.filename
#define current_file ARGF.current_file
#define gets_lineno ARGF.gets_lineno
#define init_p ARGF.init_p
#define next_p ARGF.next_p
#define lineno ARGF.lineno
#define ruby_inplace_mode ARGF.inplace
#define argf_binmode ARGF.binmode
#define argf_enc ARGF.encs.enc
#define argf_enc2 ARGF.encs.enc2
#define argf_ecflags ARGF.encs.flags
#define argf_ecopts ARGF.encs.ecopts
#define rb_argv ARGF.argv
static VALUE
argf_initialize(VALUE argf, VALUE argv)
@ -5729,7 +5716,7 @@ static VALUE
argf_initialize_copy(VALUE argf, VALUE orig)
{
ARGF = argf_of(orig);
rb_argv = rb_obj_dup(rb_argv);
ARGF.argv = rb_obj_dup(ARGF.argv);
if (ARGF.inplace) {
const char *inplace = ARGF.inplace;
ARGF.inplace = 0;
@ -5741,26 +5728,26 @@ argf_initialize_copy(VALUE argf, VALUE orig)
static VALUE
argf_set_lineno(VALUE argf, VALUE val)
{
gets_lineno = NUM2INT(val);
lineno = INT2FIX(gets_lineno);
ARGF.gets_lineno = NUM2INT(val);
ARGF.lineno = INT2FIX(ARGF.gets_lineno);
return Qnil;
}
static VALUE
argf_lineno(VALUE argf)
{
return lineno;
return ARGF.lineno;
}
static VALUE
argf_forward(int argc, VALUE *argv, VALUE argf)
{
return rb_funcall3(current_file, rb_frame_this_func(), argc, argv);
return rb_funcall3(ARGF.current_file, rb_frame_this_func(), argc, argv);
}
#define next_argv() argf_next_argv(argf)
#define ARGF_GENERIC_INPUT_P() \
(current_file == rb_stdin && TYPE(current_file) != T_FILE)
(ARGF.current_file == rb_stdin && TYPE(ARGF.current_file) != T_FILE)
#define ARGF_FORWARD(argc, argv) do {\
if (ARGF_GENERIC_INPUT_P())\
return argf_forward(argc, argv, argf);\
@ -5789,26 +5776,26 @@ argf_next_argv(VALUE argf)
stdout_binmode = 1;
}
if (init_p == 0) {
if (!NIL_P(rb_argv) && RARRAY_LEN(rb_argv) > 0) {
next_p = 1;
if (ARGF.init_p == 0) {
if (!NIL_P(ARGF.argv) && RARRAY_LEN(ARGF.argv) > 0) {
ARGF.next_p = 1;
}
else {
next_p = -1;
ARGF.next_p = -1;
}
init_p = 1;
gets_lineno = 0;
ARGF.init_p = 1;
ARGF.gets_lineno = 0;
}
if (next_p == 1) {
next_p = 0;
if (ARGF.next_p == 1) {
ARGF.next_p = 0;
retry:
if (RARRAY_LEN(rb_argv) > 0) {
filename = rb_ary_shift(rb_argv);
fn = StringValueCStr(filename);
if (RARRAY_LEN(ARGF.argv) > 0) {
ARGF.filename = rb_ary_shift(ARGF.argv);
fn = StringValueCStr(ARGF.filename);
if (strlen(fn) == 1 && fn[0] == '-') {
current_file = rb_stdin;
if (ruby_inplace_mode) {
ARGF.current_file = rb_stdin;
if (ARGF.inplace) {
rb_warn("Can't do inplace edit for stdio; skipping");
goto retry;
}
@ -5816,7 +5803,7 @@ argf_next_argv(VALUE argf)
else {
int fr = rb_sysopen(fn, O_RDONLY, 0);
if (ruby_inplace_mode) {
if (ARGF.inplace) {
struct stat st;
#ifndef NO_SAFE_RENAME
struct stat st2;
@ -5828,12 +5815,12 @@ argf_next_argv(VALUE argf)
rb_io_close(rb_stdout);
}
fstat(fr, &st);
if (*ruby_inplace_mode) {
if (*ARGF.inplace) {
str = rb_str_new2(fn);
#ifdef NO_LONG_FNAME
ruby_add_suffix(str, ruby_inplace_mode);
ruby_add_suffix(str, ARGF.inplace);
#else
rb_str_cat2(str, ruby_inplace_mode);
rb_str_cat2(str, ARGF.inplace);
#endif
#ifdef NO_SAFE_RENAME
(void)close(fr);
@ -5876,26 +5863,26 @@ argf_next_argv(VALUE argf)
rb_stdout = prep_io(fw, FMODE_WRITABLE, rb_cFile, fn);
if (stdout_binmode) rb_io_binmode(rb_stdout);
}
current_file = prep_io(fr, FMODE_READABLE, rb_cFile, fn);
ARGF.current_file = prep_io(fr, FMODE_READABLE, rb_cFile, fn);
}
if (argf_binmode) rb_io_binmode(current_file);
if (argf_enc) {
if (ARGF.binmode) rb_io_binmode(ARGF.current_file);
if (ARGF.encs.enc) {
rb_io_t *fptr;
GetOpenFile(current_file, fptr);
GetOpenFile(ARGF.current_file, fptr);
fptr->encs = ARGF.encs;
clear_codeconv(fptr);
}
}
else {
next_p = 1;
ARGF.next_p = 1;
return Qfalse;
}
}
else if (next_p == -1) {
current_file = rb_stdin;
filename = rb_str_new2("-");
if (ruby_inplace_mode) {
else if (ARGF.next_p == -1) {
ARGF.current_file = rb_stdin;
ARGF.filename = rb_str_new2("-");
if (ARGF.inplace) {
rb_warn("Can't do inplace edit for stdio");
rb_stdout = orig_stdout;
}
@ -5911,24 +5898,24 @@ argf_getline(int argc, VALUE *argv, VALUE argf)
retry:
if (!next_argv()) return Qnil;
if (ARGF_GENERIC_INPUT_P()) {
line = rb_funcall3(current_file, rb_intern("gets"), argc, argv);
line = rb_funcall3(ARGF.current_file, rb_intern("gets"), argc, argv);
}
else {
if (argc == 0 && rb_rs == rb_default_rs) {
line = rb_io_gets(current_file);
line = rb_io_gets(ARGF.current_file);
}
else {
line = rb_io_getline(argc, argv, current_file);
line = rb_io_getline(argc, argv, ARGF.current_file);
}
if (NIL_P(line) && next_p != -1) {
argf_close(current_file);
next_p = 1;
if (NIL_P(line) && ARGF.next_p != -1) {
argf_close(ARGF.current_file);
ARGF.next_p = 1;
goto retry;
}
}
if (!NIL_P(line)) {
gets_lineno++;
lineno = INT2FIX(gets_lineno);
ARGF.gets_lineno++;
ARGF.lineno = INT2FIX(ARGF.gets_lineno);
}
return line;
}
@ -5937,7 +5924,7 @@ static VALUE
argf_lineno_getter(ID id, VALUE *var)
{
VALUE argf = *var;
return lineno;
return ARGF.lineno;
}
static void
@ -5945,8 +5932,8 @@ argf_lineno_setter(VALUE val, ID id, VALUE *var)
{
VALUE argf = *var;
int n = NUM2INT(val);
gets_lineno = n;
lineno = INT2FIX(n);
ARGF.gets_lineno = n;
ARGF.lineno = INT2FIX(n);
}
static VALUE argf_gets(int, VALUE *, VALUE);
@ -6014,16 +6001,16 @@ rb_gets(void)
retry:
if (!next_argv()) return Qnil;
line = rb_io_gets(current_file);
if (NIL_P(line) && next_p != -1) {
rb_io_close(current_file);
next_p = 1;
line = rb_io_gets(ARGF.current_file);
if (NIL_P(line) && ARGF.next_p != -1) {
rb_io_close(ARGF.current_file);
ARGF.next_p = 1;
goto retry;
}
rb_lastline_set(line);
if (!NIL_P(line)) {
gets_lineno++;
lineno = INT2FIX(gets_lineno);
ARGF.gets_lineno++;
ARGF.lineno = INT2FIX(ARGF.gets_lineno);
}
return line;
@ -7535,19 +7522,19 @@ rb_io_set_encoding(int argc, VALUE *argv, VALUE io)
static VALUE
argf_external_encoding(VALUE argf)
{
if (!RTEST(current_file)) {
if (!RTEST(ARGF.current_file)) {
return rb_enc_from_encoding(rb_default_external_encoding());
}
return rb_io_external_encoding(rb_io_check_io(current_file));
return rb_io_external_encoding(rb_io_check_io(ARGF.current_file));
}
static VALUE
argf_internal_encoding(VALUE argf)
{
if (!RTEST(current_file)) {
if (!RTEST(ARGF.current_file)) {
return rb_enc_from_encoding(rb_default_external_encoding());
}
return rb_io_internal_encoding(rb_io_check_io(current_file));
return rb_io_internal_encoding(rb_io_check_io(ARGF.current_file));
}
static VALUE
@ -7558,8 +7545,8 @@ argf_set_encoding(int argc, VALUE *argv, VALUE argf)
if (!next_argv()) {
rb_raise(rb_eArgError, "no stream to set encoding");
}
rb_io_set_encoding(argc, argv, current_file);
GetOpenFile(current_file, fptr);
rb_io_set_encoding(argc, argv, ARGF.current_file);
GetOpenFile(ARGF.current_file, fptr);
ARGF.encs = fptr->encs;
return argf;
}
@ -7571,7 +7558,7 @@ argf_tell(VALUE argf)
rb_raise(rb_eArgError, "no stream to tell");
}
ARGF_FORWARD(0, 0);
return rb_io_tell(current_file);
return rb_io_tell(ARGF.current_file);
}
static VALUE
@ -7581,7 +7568,7 @@ argf_seek_m(int argc, VALUE *argv, VALUE argf)
rb_raise(rb_eArgError, "no stream to seek");
}
ARGF_FORWARD(argc, argv);
return rb_io_seek_m(argc, argv, current_file);
return rb_io_seek_m(argc, argv, ARGF.current_file);
}
static VALUE
@ -7591,7 +7578,7 @@ argf_set_pos(VALUE argf, VALUE offset)
rb_raise(rb_eArgError, "no stream to set position");
}
ARGF_FORWARD(1, &offset);
return rb_io_set_pos(current_file, offset);
return rb_io_set_pos(ARGF.current_file, offset);
}
static VALUE
@ -7601,7 +7588,7 @@ argf_rewind(VALUE argf)
rb_raise(rb_eArgError, "no stream to rewind");
}
ARGF_FORWARD(0, 0);
return rb_io_rewind(current_file);
return rb_io_rewind(ARGF.current_file);
}
static VALUE
@ -7611,7 +7598,7 @@ argf_fileno(VALUE argf)
rb_raise(rb_eArgError, "no stream");
}
ARGF_FORWARD(0, 0);
return rb_io_fileno(current_file);
return rb_io_fileno(ARGF.current_file);
}
static VALUE
@ -7619,16 +7606,16 @@ argf_to_io(VALUE argf)
{
next_argv();
ARGF_FORWARD(0, 0);
return current_file;
return ARGF.current_file;
}
static VALUE
argf_eof(VALUE argf)
{
if (current_file) {
if (init_p == 0) return Qtrue;
if (ARGF.current_file) {
if (ARGF.init_p == 0) return Qtrue;
ARGF_FORWARD(0, 0);
if (rb_io_eof(current_file)) {
if (rb_io_eof(ARGF.current_file)) {
return Qtrue;
}
}
@ -7659,14 +7646,14 @@ argf_read(int argc, VALUE *argv, VALUE argf)
tmp = argf_forward(argc, argv, argf);
}
else {
tmp = io_read(argc, argv, current_file);
tmp = io_read(argc, argv, ARGF.current_file);
}
if (NIL_P(str)) str = tmp;
else if (!NIL_P(tmp)) rb_str_append(str, tmp);
if (NIL_P(tmp) || NIL_P(length)) {
if (next_p != -1) {
argf_close(current_file);
next_p = 1;
if (ARGF.next_p != -1) {
argf_close(ARGF.current_file);
ARGF.next_p = 1;
goto retry;
}
}
@ -7718,15 +7705,15 @@ argf_readpartial(int argc, VALUE *argv, VALUE argf)
RUBY_METHOD_FUNC(0), Qnil, rb_eEOFError, (VALUE)0);
}
else {
tmp = io_getpartial(argc, argv, current_file, 0);
tmp = io_getpartial(argc, argv, ARGF.current_file, 0);
}
if (NIL_P(tmp)) {
if (next_p == -1) {
if (ARGF.next_p == -1) {
rb_eof_error();
}
argf_close(current_file);
next_p = 1;
if (RARRAY_LEN(rb_argv) == 0)
argf_close(ARGF.current_file);
ARGF.next_p = 1;
if (RARRAY_LEN(ARGF.argv) == 0)
rb_eof_error();
if (NIL_P(str))
str = rb_str_new(NULL, 0);
@ -7743,14 +7730,14 @@ argf_getc(VALUE argf)
retry:
if (!next_argv()) return Qnil;
if (ARGF_GENERIC_INPUT_P()) {
ch = rb_funcall3(current_file, rb_intern("getc"), 0, 0);
ch = rb_funcall3(ARGF.current_file, rb_intern("getc"), 0, 0);
}
else {
ch = rb_io_getc(current_file);
ch = rb_io_getc(ARGF.current_file);
}
if (NIL_P(ch) && next_p != -1) {
argf_close(current_file);
next_p = 1;
if (NIL_P(ch) && ARGF.next_p != -1) {
argf_close(ARGF.current_file);
ARGF.next_p = 1;
goto retry;
}
@ -7764,15 +7751,15 @@ argf_getbyte(VALUE argf)
retry:
if (!next_argv()) return Qnil;
if (TYPE(current_file) != T_FILE) {
ch = rb_funcall3(current_file, rb_intern("getbyte"), 0, 0);
if (TYPE(ARGF.current_file) != T_FILE) {
ch = rb_funcall3(ARGF.current_file, rb_intern("getbyte"), 0, 0);
}
else {
ch = rb_io_getbyte(current_file);
ch = rb_io_getbyte(ARGF.current_file);
}
if (NIL_P(ch) && next_p != -1) {
argf_close(current_file);
next_p = 1;
if (NIL_P(ch) && ARGF.next_p != -1) {
argf_close(ARGF.current_file);
ARGF.next_p = 1;
goto retry;
}
@ -7786,15 +7773,15 @@ argf_readchar(VALUE argf)
retry:
if (!next_argv()) rb_eof_error();
if (TYPE(current_file) != T_FILE) {
ch = rb_funcall3(current_file, rb_intern("getc"), 0, 0);
if (TYPE(ARGF.current_file) != T_FILE) {
ch = rb_funcall3(ARGF.current_file, rb_intern("getc"), 0, 0);
}
else {
ch = rb_io_getc(current_file);
ch = rb_io_getc(ARGF.current_file);
}
if (NIL_P(ch) && next_p != -1) {
argf_close(current_file);
next_p = 1;
if (NIL_P(ch) && ARGF.next_p != -1) {
argf_close(ARGF.current_file);
ARGF.next_p = 1;
goto retry;
}
@ -7820,8 +7807,8 @@ argf_each_line(int argc, VALUE *argv, VALUE argf)
RETURN_ENUMERATOR(argf, argc, argv);
for (;;) {
if (!next_argv()) return Qnil;
rb_block_call(current_file, rb_intern("each_line"), argc, argv, rb_yield, 0);
next_p = 1;
rb_block_call(ARGF.current_file, rb_intern("each_line"), argc, argv, rb_yield, 0);
ARGF.next_p = 1;
}
return argf;
}
@ -7832,8 +7819,8 @@ argf_each_byte(VALUE argf)
RETURN_ENUMERATOR(argf, 0, 0);
for (;;) {
if (!next_argv()) return Qnil;
rb_block_call(current_file, rb_intern("each_byte"), 0, 0, rb_yield, 0);
next_p = 1;
rb_block_call(ARGF.current_file, rb_intern("each_byte"), 0, 0, rb_yield, 0);
ARGF.next_p = 1;
}
}
@ -7843,8 +7830,8 @@ argf_each_char(VALUE argf)
RETURN_ENUMERATOR(argf, 0, 0);
for (;;) {
if (!next_argv()) return Qnil;
rb_block_call(current_file, rb_intern("each_char"), 0, 0, rb_yield, 0);
next_p = 1;
rb_block_call(ARGF.current_file, rb_intern("each_char"), 0, 0, rb_yield, 0);
ARGF.next_p = 1;
}
}
@ -7852,7 +7839,7 @@ static VALUE
argf_filename(VALUE argf)
{
next_argv();
return filename;
return ARGF.filename;
}
static VALUE
@ -7865,31 +7852,31 @@ static VALUE
argf_file(VALUE argf)
{
next_argv();
return current_file;
return ARGF.current_file;
}
static VALUE
argf_binmode_m(VALUE argf)
{
argf_binmode = 1;
ARGF.binmode = 1;
next_argv();
ARGF_FORWARD(0, 0);
rb_io_binmode(current_file);
rb_io_binmode(ARGF.current_file);
return argf;
}
static VALUE
argf_binmode_p(VALUE argf)
{
return argf_binmode ? Qtrue : Qfalse;
return ARGF.binmode ? Qtrue : Qfalse;
}
static VALUE
argf_skip(VALUE argf)
{
if (next_p != -1) {
argf_close(current_file);
next_p = 1;
if (ARGF.next_p != -1) {
argf_close(ARGF.current_file);
ARGF.next_p = 1;
}
return argf;
}
@ -7898,11 +7885,11 @@ static VALUE
argf_close_m(VALUE argf)
{
next_argv();
argf_close(current_file);
if (next_p != -1) {
next_p = 1;
argf_close(ARGF.current_file);
if (ARGF.next_p != -1) {
ARGF.next_p = 1;
}
gets_lineno = 0;
ARGF.gets_lineno = 0;
return argf;
}
@ -7911,7 +7898,7 @@ argf_closed(VALUE argf)
{
next_argv();
ARGF_FORWARD(0, 0);
return rb_io_closed(current_file);
return rb_io_closed(ARGF.current_file);
}
static VALUE
@ -7923,8 +7910,8 @@ argf_to_s(VALUE argf)
static VALUE
argf_inplace_mode_get(VALUE argf)
{
if (!ruby_inplace_mode) return Qnil;
return rb_str_new2(ruby_inplace_mode);
if (!ARGF.inplace) return Qnil;
return rb_str_new2(ARGF.inplace);
}
static VALUE
@ -7937,14 +7924,14 @@ static VALUE
argf_inplace_mode_set(VALUE argf, VALUE val)
{
if (!RTEST(val)) {
if (ruby_inplace_mode) free(ruby_inplace_mode);
ruby_inplace_mode = 0;
if (ARGF.inplace) free(ARGF.inplace);
ARGF.inplace = 0;
}
else {
StringValue(val);
if (ruby_inplace_mode) free(ruby_inplace_mode);
ruby_inplace_mode = 0;
ruby_inplace_mode = strdup(RSTRING_PTR(val));
if (ARGF.inplace) free(ARGF.inplace);
ARGF.inplace = 0;
ARGF.inplace = strdup(RSTRING_PTR(val));
}
return argf;
}
@ -7958,21 +7945,21 @@ opt_i_set(VALUE val, ID id, VALUE *var)
const char *
ruby_get_inplace_mode(void)
{
return ruby_inplace_mode;
return ARGF.inplace;
}
void
ruby_set_inplace_mode(const char *suffix)
{
if (ruby_inplace_mode) free(ruby_inplace_mode);
ruby_inplace_mode = 0;
if (suffix) ruby_inplace_mode = strdup(suffix);
if (ARGF.inplace) free(ARGF.inplace);
ARGF.inplace = 0;
if (suffix) ARGF.inplace = strdup(suffix);
}
static VALUE
argf_argv(VALUE argf)
{
return rb_argv;
return ARGF.argv;
}
static VALUE
@ -7984,7 +7971,7 @@ argf_argv_getter(ID id, VALUE *var)
VALUE
rb_get_argv(void)
{
return rb_argv;
return ARGF.argv;
}
/*
@ -8307,7 +8294,7 @@ Init_IO(void)
rb_define_hooked_variable("$.", &argf, argf_lineno_getter, argf_lineno_setter);
rb_define_hooked_variable("$FILENAME", &argf, argf_filename_getter, 0);
filename = rb_str_new2("-");
ARGF.filename = rb_str_new2("-");
rb_define_hooked_variable("$-i", &argf, opt_i_get, opt_i_set);
rb_define_hooked_variable("$*", &argf, argf_argv_getter, 0);