[前][次][番号順一覧][スレッド一覧]

ruby-changes:9283

From: yugui <ko1@a...>
Date: Wed, 17 Dec 2008 15:17:17 +0900 (JST)
Subject: [ruby-changes:9283] Ruby:r20820 (ruby_1_9_1): merges r20765 from trunk into ruby_1_9_1.

yugui	2008-12-17 15:16:47 +0900 (Wed, 17 Dec 2008)

  New Revision: 20820

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=20820

  Log:
    merges r20765 from trunk into ruby_1_9_1.
    * ruby.c (process_options): revive global sub, gsub, chop, chomp
      only when auto looping options (-p/-n) is specified.
      [ruby-core:20570]

  Modified files:
    branches/ruby_1_9_1/ChangeLog
    branches/ruby_1_9_1/ruby.c

Index: ruby_1_9_1/ChangeLog
===================================================================
--- ruby_1_9_1/ChangeLog	(revision 20819)
+++ ruby_1_9_1/ChangeLog	(revision 20820)
@@ -1,3 +1,9 @@
+Mon Dec 15 23:29:49 2008  Yukihiro Matsumoto  <matz@r...>
+
+	* 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 21:01:46 2008  Tanaka Akira  <akr@f...>
 
 	* ext/pty/pty.c (chfunc): make it static.
Index: ruby_1_9_1/ruby.c
===================================================================
--- ruby_1_9_1/ruby.c	(revision 20819)
+++ ruby_1_9_1/ruby.c	(revision 20820)
@@ -1072,6 +1072,115 @@
 VALUE rb_argv0;
 
 static VALUE
+false_value(void)
+{
+    return Qfalse;
+}
+
+static VALUE
+true_value(void)
+{
+    return Qtrue;
+}
+
+#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)
 {
     struct cmdline_arguments *argp = (struct cmdline_arguments *)arg;
@@ -1242,6 +1351,10 @@
     }
     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>"),
@@ -1634,21 +1747,6 @@
     }
 }
 
-static VALUE
-false_value(void)
-{
-    return Qfalse;
-}
-
-static VALUE
-true_value(void)
-{
-    return Qtrue;
-}
-
-#define rb_define_readonly_boolean(name, val) \
-    rb_define_virtual_variable((name), (val) ? true_value : false_value, 0)
-
 void *
 ruby_process_options(int argc, char **argv)
 {

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]