[macruby-changes] [3821] MacRuby/trunk/re.cpp

source_changes at macosforge.org source_changes at macosforge.org
Thu Mar 18 20:24:13 PDT 2010


Revision: 3821
          http://trac.macosforge.org/projects/ruby/changeset/3821
Author:   lsansonetti at apple.com
Date:     2010-03-18 20:24:13 -0700 (Thu, 18 Mar 2010)
Log Message:
-----------
fixed #inspect to escape slashes

Modified Paths:
--------------
    MacRuby/trunk/re.cpp

Modified: MacRuby/trunk/re.cpp
===================================================================
--- MacRuby/trunk/re.cpp	2010-03-19 03:23:56 UTC (rev 3820)
+++ MacRuby/trunk/re.cpp	2010-03-19 03:24:13 UTC (rev 3821)
@@ -846,10 +846,22 @@
 static VALUE
 regexp_inspect(VALUE rcv, SEL sel)
 {
-    VALUE str = rb_str_new2("/");
-    rb_str_concat(str, regexp_source(rcv, 0));
-    rb_str_cat2(str, "/");
+    VALUE str = rb_unicode_str_new(NULL, 0);
+    rb_str_append_uchar(str, '/');
 
+    assert(RREGEXP(rcv)->unistr != NULL);
+    const UChar *chars = RREGEXP(rcv)->unistr->getBuffer();
+    const int32_t chars_len = RREGEXP(rcv)->unistr->length();
+    for (int i = 0; i < chars_len; i++) {
+	UChar c = chars[i];
+	if (c == '/') {
+	    rb_str_append_uchar(str, '\\');
+	}
+	rb_str_append_uchar(str, c);
+    }
+
+    rb_str_append_uchar(str, '/');
+
     const uint32_t options = rb_reg_options(rcv);
     const bool mode_m = options & REGEXP_OPT_MULTILINE;
     const bool mode_i = options & REGEXP_OPT_IGNORECASE;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100318/7b8db30f/attachment.html>


More information about the macruby-changes mailing list