From e326946b35c0e1eb022e381206c2df292d9c2761 Mon Sep 17 00:00:00 2001 From: nobu Date: Thu, 9 Dec 2004 05:38:59 +0000 Subject: * string.c (rb_str_inspect): escape # which starts an expression substitution. fixed: [ruby-core:03922] * string.c (rb_str_dump): not escape # which isn't a substitution. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7519 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 +++++++ string.c | 12 +++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index cd3b0d523f..e1e6351c8b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Thu Dec 9 14:38:35 2004 Nobuyoshi Nakada + + * string.c (rb_str_inspect): escape # which starts an expression + substitution. fixed: [ruby-core:03922] + + * string.c (rb_str_dump): not escape # which isn't a substitution. + Thu Dec 9 12:31:53 2004 WATANABE Hirofumi * io.c (pipe_open): should set prog if argc != 0. diff --git a/string.c b/string.c index 7f7778d905..b566e7159f 100644 --- a/string.c +++ b/string.c @@ -2570,6 +2570,8 @@ rb_str_to_s(str) return str; } +#define IS_EVSTR(p,e) ((p) < (e) && (*(p) == '$' || *(p) == '@' || *(p) == '{')) + /* * call-seq: * str.inspect => string @@ -2598,7 +2600,7 @@ rb_str_inspect(str) rb_str_buf_cat(result, p - 1, len); p += len - 1; } - else if (c == '"'|| c == '\\') { + else if (c == '"'|| c == '\\' || (c == '#' && IS_EVSTR(p, pend))) { s[0] = '\\'; s[1] = c; rb_str_buf_cat(result, s, 2); } @@ -2670,11 +2672,15 @@ rb_str_dump(str) switch (c) { case '"': case '\\': case '\n': case '\r': - case '\t': case '\f': case '#': + case '\t': case '\f': case '\013': case '\007': case '\033': len += 2; break; + case '#': + len += IS_EVSTR(p, pend) ? 2 : 1; + break; + default: if (ISPRINT(c)) { len++; @@ -2699,7 +2705,7 @@ rb_str_dump(str) *q++ = c; } else if (c == '#') { - *q++ = '\\'; + if (IS_EVSTR(p, pend)) *q++ = '\\'; *q++ = '#'; } else if (ISPRINT(c)) { -- cgit v1.2.3