summaryrefslogtreecommitdiff
path: root/re.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-07-24 04:32:31 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-07-24 04:32:31 +0000
commit0d30af8fd2bcfea8cf5dbf87b623c57960ce81bc (patch)
tree1082583fa79fddd15b1a3ed79d2d2c206d662f45 /re.c
parent3af58a0a57aaea69a6cd622ef14c76e57a06fe84 (diff)
marshal/reg_clone
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1r@277 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 're.c')
-rw-r--r--re.c32
1 files changed, 21 insertions, 11 deletions
diff --git a/re.c b/re.c
index d9d89a5476..43bc6328bc 100644
--- a/re.c
+++ b/re.c
@@ -664,11 +664,11 @@ reg_new_1(klass, s, len, options)
}
VALUE
-reg_new(s, len, flag)
+reg_new(s, len, options)
char *s;
- int len, flag;
+ int len, options;
{
- return reg_new_1(cRegexp, s, len, flag);
+ return reg_new_1(cRegexp, s, len, options);
}
static int ign_cache;
@@ -838,11 +838,11 @@ reg_get_kcode(re)
switch (RBASIC(re)->flags & KCODE_MASK) {
case KCODE_NONE:
- kcode |= 2; break;
- case KCODE_EUC:
kcode |= 4; break;
+ case KCODE_EUC:
+ kcode |= 8; break;
case KCODE_SJIS:
- kcode |= 6; break;
+ kcode |= 12; break;
default:
break;
}
@@ -850,16 +850,26 @@ reg_get_kcode(re)
return kcode;
}
-static VALUE
-reg_clone(re)
+int
+reg_options(re)
VALUE re;
{
- int flag = FL_TEST(re, REG_IGNORECASE)?1:0;
+ int options = 0;
+ if (FL_TEST(re, REG_IGNORECASE))
+ options |= RE_OPTION_IGNORECASE;
if (FL_TEST(re, KCODE_FIXED)) {
- flag |= reg_get_kcode(re);
+ options |= reg_get_kcode(re);
}
- return reg_new_1(CLASS_OF(re), RREGEXP(re)->str, RREGEXP(re)->len, flag);
+ return options;
+}
+
+static VALUE
+reg_clone(re)
+ VALUE re;
+{
+ return reg_new_1(CLASS_OF(re), RREGEXP(re)->str, RREGEXP(re)->len,
+ reg_options(re));
}
VALUE