ruby-changes:2947
From: ko1@a...
Date: 22 Dec 2007 01:40:00 +0900
Subject: [ruby-changes:2947] akr - Ruby:r14438 (trunk): * re.c (ARG_ENCODING_NONE): defined for /.../n option.
akr 2007-12-22 01:39:36 +0900 (Sat, 22 Dec 2007)
New Revision: 14438
Modified files:
trunk/.gdbinit
trunk/ChangeLog
trunk/re.c
Log:
* re.c (ARG_ENCODING_NONE): defined for /.../n option.
(REG_ENCODING_NONE): ditto.
(rb_char_to_option_kcode): return ARG_ENCODING_NONE for n.
(rb_reg_prepare_re): warn /ascii/n =~ "non-ascii".
(rb_reg_initialize): set REG_ENCODING_NONE from ARG_ENCODING_NONE.
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/.gdbinit?r1=14438&r2=14437
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=14438&r2=14437
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/re.c?r1=14438&r2=14437
Index: .gdbinit
===================================================================
--- .gdbinit (revision 14437)
+++ .gdbinit (revision 14438)
@@ -91,6 +91,9 @@
output ((struct RRegexp*)$arg0)->str
set print address on
printf " len:%d ", ((struct RRegexp*)$arg0)->len
+ if $flags & RUBY_FL_USER6
+ printf "(none) "
+ end
if $flags & RUBY_FL_USER5
printf "(literal) "
end
Index: re.c
===================================================================
--- re.c (revision 14437)
+++ re.c (revision 14438)
@@ -133,12 +133,14 @@
}
#define REG_LITERAL FL_USER5
+#define REG_ENCODING_NONE FL_USER6
#define KCODE_FIXED FL_USER4
#define ARG_REG_OPTION_MASK \
(ONIG_OPTION_IGNORECASE|ONIG_OPTION_MULTILINE|ONIG_OPTION_EXTEND)
#define ARG_ENCODING_FIXED 16
+#define ARG_ENCODING_NONE 32
#define ARG_KCODE_NONE 0
#define ARG_KCODE_EUC 1
@@ -186,8 +188,8 @@
switch (c) {
case 'n':
- *kcode = ARG_KCODE_NONE;
- break;
+ *kcode = -1;
+ return (*option = ARG_ENCODING_NONE);
case 'e':
*kcode = ARG_KCODE_EUC;
break;
@@ -946,9 +948,16 @@
rb_raise(rb_eArgError, "fixed character encoding regexp with incompatible string (encoding: %s)", rb_enc_name(rb_enc_get(str)));
}
}
- else if ((enc = rb_enc_get(str)) != 0 &&
+ else {
+ if ((enc = rb_enc_get(str)) != 0 &&
RREGEXP(re)->ptr->enc != enc) {
- need_recompile = 1;
+ need_recompile = 1;
+ }
+ if ((RBASIC(re)->flags & REG_ENCODING_NONE) &&
+ rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
+ rb_warn("none encoding regexp with non ASCII string (string encoding: %s)",
+ rb_enc_name(rb_enc_get(str)));
+ }
}
if (need_recompile) {
@@ -1971,7 +1980,8 @@
return -1;
if (fixed_enc) {
- if (fixed_enc != enc && (options & ARG_ENCODING_FIXED)) {
+ if ((fixed_enc != enc && (options & ARG_ENCODING_FIXED)) ||
+ (fixed_enc != d_enc && (options & ARG_ENCODING_NONE))) {
strcpy(err, "incompatible character encoding");
return -1;
}
@@ -1983,11 +1993,15 @@
else if (!(options & ARG_ENCODING_FIXED)) {
enc = d_enc;
}
-
+
rb_enc_associate((VALUE)re, enc);
if ((options & ARG_ENCODING_FIXED) || fixed_enc) {
re->basic.flags |= KCODE_FIXED;
}
+ if (options & ARG_ENCODING_NONE) {
+ re->basic.flags |= REG_ENCODING_NONE;
+ }
+
re->ptr = make_regexp(RSTRING_PTR(unescaped), RSTRING_LEN(unescaped), enc,
options & ARG_REG_OPTION_MASK, err);
if (!re->ptr) return -1;
@@ -2536,6 +2550,7 @@
rb_reg_check(re);
options = RREGEXP(re)->ptr->options & ARG_REG_OPTION_MASK;
if (RBASIC(re)->flags & KCODE_FIXED) options |= ARG_ENCODING_FIXED;
+ if (RBASIC(re)->flags & REG_ENCODING_NONE) options |= ARG_ENCODING_NONE;
return options;
}
Index: ChangeLog
===================================================================
--- ChangeLog (revision 14437)
+++ ChangeLog (revision 14438)
@@ -1,3 +1,11 @@
+Sat Dec 22 01:35:41 2007 Tanaka Akira <akr@f...>
+
+ * re.c (ARG_ENCODING_NONE): defined for /.../n option.
+ (REG_ENCODING_NONE): ditto.
+ (rb_char_to_option_kcode): return ARG_ENCODING_NONE for n.
+ (rb_reg_prepare_re): warn /ascii/n =~ "non-ascii".
+ (rb_reg_initialize): set REG_ENCODING_NONE from ARG_ENCODING_NONE.
+
Sat Dec 22 01:23:10 2007 Shugo Maeda <shugo@r...>
* test/json/test_json_addition.rb (test_core): do not use Time.now
--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml