From 87fb6fbcc9558255dc87cf22dd34e0b094ba4f35 Mon Sep 17 00:00:00 2001 From: nobu Date: Thu, 11 Feb 2010 05:43:19 +0000 Subject: * marshal.c (r_object0): replace non-1.8 escapes directly. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26640 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- marshal.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) (limited to 'marshal.c') diff --git a/marshal.c b/marshal.c index 395254094f..e5ede8c659 100644 --- a/marshal.c +++ b/marshal.c @@ -1501,13 +1501,23 @@ r_object0(struct load_arg *arg, int *ivp, VALUE extmod) *ivp = FALSE; } if (!has_encoding) { - VALUE pat; - VALUE dst; - static const char rsrc[] = - "(? 0; *dst++ = *src++) { + switch (*src) { + case '\\': bs++; break; + case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': + case 'm': case 'o': case 'p': case 'q': case 'u': case 'y': + case 'E': case 'F': case 'H': case 'I': case 'J': case 'K': + case 'L': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'X': case 'Y': + if (bs & 1) --dst; + default: bs = 0; break; + } + } + rb_str_set_len(str, dst - ptr); } v = r_entry(rb_reg_new_str(str, options), arg); v = r_leave(v, arg); -- cgit v1.2.3