diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-12-09 05:38:59 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-12-09 05:38:59 +0000 |
commit | 947cf31babc8a98c7af45ce2fe16359f90d1f8ec (patch) | |
tree | c2b417ada73e49e3385cf63650ff888dea112928 /string.c | |
parent | 8d8a105f8feb0823d429f84982f30a39ec87a0a1 (diff) |
* 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/branches/ruby_1_8@7519 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'string.c')
-rw-r--r-- | string.c | 12 |
1 files changed, 9 insertions, 3 deletions
@@ -946,6 +946,8 @@ rb_str_equal(str1, str2) return Qfalse; } +#define IS_EVSTR(p,e) ((p) < (e) && (*(p) == '$' || *(p) == '@' || *(p) == '{')) + /* * call-seq: * str.eql?(other) => true or false @@ -2568,7 +2570,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); } @@ -2640,11 +2642,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++; @@ -2669,7 +2675,7 @@ rb_str_dump(str) *q++ = c; } else if (c == '#') { - *q++ = '\\'; + if (IS_EVSTR(p, pend)) *q++ = '\\'; *q++ = '#'; } else if (ISPRINT(c)) { |