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:
parent
bfaef6a336
commit
0e20782339
2 changed files with 104 additions and 0 deletions
|
@ -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
98
ruby.c
|
@ -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>"),
|
||||
|
|
Loading…
Reference in a new issue