summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-10-16 22:21:42 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-10-16 22:21:42 +0000
commit2ba22d68519872b18a3b61490b6b78e2a7aca013 (patch)
tree38ce2dd344237fb7ae4959a825f742a0aba87201
parent19620465b77e41286695a1f2d7d9edc39c4bb4c2 (diff)
downloadruby-2ba22d68519872b18a3b61490b6b78e2a7aca013.tar.gz
ruby-2ba22d68519872b18a3b61490b6b78e2a7aca013.tar.xz
ruby-2ba22d68519872b18a3b61490b6b78e2a7aca013.zip
* .gdbinit (rp): REGEXP handling fixed.
* string.c (rb_str_rindex_m): need not to call rb_enc_check on regexp. * re.c (unescape_escaped_nonascii): try ASCII-8BIT encoding for broken strings. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@19812 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--.gdbinit10
-rw-r--r--ChangeLog10
-rw-r--r--re.c8
-rw-r--r--string.c2
4 files changed, 25 insertions, 5 deletions
diff --git a/.gdbinit b/.gdbinit
index 96e033fa8..c2a8b28d0 100644
--- a/.gdbinit
+++ b/.gdbinit
@@ -86,11 +86,17 @@ define rp
print (struct RString *)$arg0
else
if ($flags & RUBY_T_MASK) == RUBY_T_REGEXP
+ set $regsrc = ((struct RRegexp*)$arg0)->src
+ set $rsflags = ((struct RBasic*)$regsrc)->flags
printf "T_REGEXP: "
set print address off
- output ((struct RRegexp*)$arg0)->str
+ output (char *)(($rsflags & RUBY_FL_USER1) ? \
+ ((struct RString*)$regsrc)->as.heap.ptr : \
+ ((struct RString*)$regsrc)->as.ary)
set print address on
- printf " len:%ld ", ((struct RRegexp*)$arg0)->len
+ printf " len:%ld ", ($rsflags & RUBY_FL_USER1) ? \
+ ((struct RString*)$regsrc)->as.heap.len : \
+ (($rsflags & (RUBY_FL_USER2|RUBY_FL_USER3|RUBY_FL_USER4|RUBY_FL_USER5|RUBY_FL_USER6)) >> RUBY_FL_USHIFT+2)
if $flags & RUBY_FL_USER6
printf "(none) "
end
diff --git a/ChangeLog b/ChangeLog
index a96058206..ca156bb39 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -64,6 +64,16 @@ Thu Oct 16 06:20:36 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
* test/ruby/test_transcode.rb (TestTranscode#test_errors):
String#encode now works without any argument. [ruby-dev:36740]
+Wed Oct 15 23:48:22 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * .gdbinit (rp): REGEXP handling fixed.
+
+ * string.c (rb_str_rindex_m): need not to call rb_enc_check on
+ regexp.
+
+ * re.c (unescape_escaped_nonascii): try ASCII-8BIT encoding for
+ broken strings.
+
Wed Oct 15 23:11:10 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
* lib/delegate.rb (DelegateClass): restored 1.8 behavior for
diff --git a/re.c b/re.c
index fa00e8cea..03d9dc352 100644
--- a/re.c
+++ b/re.c
@@ -1967,8 +1967,12 @@ unescape_escaped_nonascii(const char **pp, const char *end, rb_encoding *enc,
l = rb_enc_precise_mbclen(chbuf, chbuf+chlen, enc);
if (MBCLEN_INVALID_P(l)) {
- strcpy(err, "invalid multibyte escape");
- return -1;
+ if (*encp == 0)
+ enc = *encp = rb_ascii8bit_encoding();
+ else if (*encp != rb_ascii8bit_encoding()) {
+ strcpy(err, "invalid multibyte escape");
+ return -1;
+ }
}
if (1 < chlen || (chbuf[0] & 0x80)) {
rb_str_buf_cat(buf, chbuf, chlen);
diff --git a/string.c b/string.c
index 859363363..601845c44 100644
--- a/string.c
+++ b/string.c
@@ -2355,7 +2355,7 @@ rb_str_rindex_m(int argc, VALUE *argv, VALUE str)
case T_REGEXP:
/* enc = rb_get_check(str, sub); */
pos = str_offset(RSTRING_PTR(str), RSTRING_END(str), pos,
- rb_enc_check(str, sub), single_byte_optimizable(str));
+ STR_ENC_GET(str), single_byte_optimizable(str));
if (!RREGEXP(sub)->ptr || RREGEXP_SRC_LEN(sub)) {
pos = rb_reg_adjust_startpos(sub, str, pos, 1);