Revision
3686
Author
lsansonetti@apple.com
Date
2010-03-03 14:37:48 -0800 (Wed, 03 Mar 2010)

Log Message

fixed #to_s and #inspect to now display regexp flags

Modified Paths

Diff

Modified: MacRuby/branches/icu/re.cpp (3685 => 3686)


--- MacRuby/branches/icu/re.cpp	2010-03-03 22:16:51 UTC (rev 3685)
+++ MacRuby/branches/icu/re.cpp	2010-03-03 22:37:48 UTC (rev 3686)
@@ -269,8 +269,6 @@
     return rb_reg_quote(reg_operand(pat, true));
 }
 
-
-
 /*
  *  call-seq:
  *     Regexp.union(pat1, pat2, ...)            => new_regexp
@@ -808,7 +806,22 @@
     VALUE str = rb_str_new2("/");
     rb_str_concat(str, regexp_source(rcv, 0));
     rb_str_cat2(str, "/");
-    // TODO: add options there.
+
+    const uint32_t options = rb_reg_options(rcv);
+    const bool mode_m = options & REGEXP_OPT_MULTILINE;
+    const bool mode_i = options & REGEXP_OPT_IGNORECASE;
+    const bool mode_x = options & REGEXP_OPT_EXTENDED;
+
+    if (mode_m) {
+	rb_str_cat2(str, "m");
+    }
+    if (mode_i) {
+	rb_str_cat2(str, "i");
+    }
+    if (mode_x) {
+	rb_str_cat2(str, "x");
+    }
+    
     return str;
 }
 
@@ -835,10 +848,40 @@
 static VALUE
 regexp_to_s(VALUE rcv, SEL sel)
 {
-    VALUE str = rb_str_new2("(?:");
-    // TODO: add options there.
+    VALUE str = rb_str_new2("(?");
+
+    const uint32_t options = rb_reg_options(rcv);
+    const bool mode_m = options & REGEXP_OPT_MULTILINE;
+    const bool mode_i = options & REGEXP_OPT_IGNORECASE;
+    const bool mode_x = options & REGEXP_OPT_EXTENDED;
+
+    if (mode_m) {
+	rb_str_cat2(str, "m");
+    }
+    if (mode_i) {
+	rb_str_cat2(str, "i");
+    }
+    if (mode_x) {
+	rb_str_cat2(str, "x");
+    }
+
+    if (!mode_m || !mode_i || !mode_x) {
+	rb_str_cat2(str, "-");
+	if (!mode_m) {
+	    rb_str_cat2(str, "m");
+	}
+	if (!mode_i) {
+	    rb_str_cat2(str, "i");
+	}
+	if (!mode_x) {
+	    rb_str_cat2(str, "x");
+	}
+    }
+
+    rb_str_cat2(str, ":");
     rb_str_concat(str, regexp_source(rcv, 0));
     rb_str_cat2(str, ")");
+
     return str;
 }