1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* ruby.c (process_options): revive global sub, gsub, chop, chomp

only when auto looping options (-p/-n) is specified.
  [ruby-core:20570]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20765 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
matz 2008-12-15 14:46:50 +00:00
parent bfaef6a336
commit 0e20782339
2 changed files with 104 additions and 0 deletions

View file

@ -2,6 +2,12 @@ Mon Dec 15 23:34:04 2008 Tanaka Akira <akr@fsij.org>
* ext/pty/pty.c (pty_open): set FMODE_SYNC and FMODE_DUPLEX.
Mon Dec 15 23:29:49 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
* ruby.c (process_options): revive global sub, gsub, chop, chomp
only when auto looping options (-p/-n) is specified.
[ruby-core:20570]
Mon Dec 15 22:48:11 2008 Tanaka Akira <akr@fsij.org>
* ext/pty/pty.c (pty_open): new method PTY.open.

98
ruby.c
View file

@ -1103,6 +1103,100 @@ true_value(void)
#define rb_define_readonly_boolean(name, val) \
rb_define_virtual_variable((name), (val) ? true_value : false_value, 0)
static VALUE
uscore_get()
{
VALUE line;
line = rb_lastline_get();
if (TYPE(line) != T_STRING) {
rb_raise(rb_eTypeError, "$_ value need to be String (%s given)",
NIL_P(line) ? "nil" : rb_obj_classname(line));
}
return line;
}
/*
* call-seq:
* sub(pattern, replacement) => $_
* sub(pattern) { block } => $_
*
* Equivalent to <code>$_.sub(<i>args</i>)</code>, except that
* <code>$_</code> will be updated if substitution occurs.
* Available only when -p/-n command line option specified.
*/
static VALUE
rb_f_sub(argc, argv)
int argc;
VALUE *argv;
{
VALUE str = rb_funcall3(uscore_get(), rb_intern("sub"), argc, argv);
rb_lastline_set(str);
return str;
}
/*
* call-seq:
* gsub(pattern, replacement) => string
* gsub(pattern) {|...| block } => string
*
* Equivalent to <code>$_.gsub...</code>, except that <code>$_</code>
* receives the modified result.
* Available only when -p/-n command line option specified.
*
*/
static VALUE
rb_f_gsub(argc, argv)
int argc;
VALUE *argv;
{
VALUE str = rb_funcall3(uscore_get(), rb_intern("gsub"), argc, argv);
rb_lastline_set(str);
return str;
}
/*
* call-seq:
* chop => string
*
* Equivalent to <code>($_.dup).chop!</code>, except <code>nil</code>
* is never returned. See <code>String#chop!</code>.
* Available only when -p/-n command line option specified.
*
*/
static VALUE
rb_f_chop()
{
VALUE str = rb_funcall3(uscore_get(), rb_intern("chop"), 0, 0);
rb_lastline_set(str);
return str;
}
/*
* call-seq:
* chomp => $_
* chomp(string) => $_
*
* Equivalent to <code>$_ = $_.chomp(<em>string</em>)</code>. See
* <code>String#chomp</code>.
* Available only when -p/-n command line option specified.
*
*/
static VALUE
rb_f_chomp(argc, argv)
int argc;
VALUE *argv;
{
VALUE str = rb_funcall3(uscore_get(), rb_intern("chomp"), argc, argv);
rb_lastline_set(str);
return str;
}
static VALUE
process_options(VALUE arg)
{
@ -1282,6 +1376,10 @@ process_options(VALUE arg)
}
if (opt->do_loop) {
tree = rb_parser_while_loop(parser, tree, opt->do_line, opt->do_split);
rb_define_global_function("sub", rb_f_sub, -1);
rb_define_global_function("gsub", rb_f_gsub, -1);
rb_define_global_function("chop", rb_f_chop, 0);
rb_define_global_function("chomp", rb_f_chomp, -1);
}
iseq = rb_iseq_new_top(tree, rb_str_new2("<main>"),