Commit a0aa753a authored by Yukihiro "Matz" Matsumoto's avatar Yukihiro "Matz" Matsumoto

Merge pull request #1167 from h2so5/refactor-mrb-strdump

Refactor mrb_str_dump
parents 887339dc a4d59b4c
...@@ -2293,47 +2293,60 @@ mrb_str_dump(mrb_state *mrb, mrb_value str) ...@@ -2293,47 +2293,60 @@ mrb_str_dump(mrb_state *mrb, mrb_value str)
while (p < pend) { while (p < pend) {
unsigned char c = *p++; unsigned char c = *p++;
if (c == '"' || c == '\\') { switch (c) {
case '"':
case '\\':
*q++ = '\\'; *q++ = '\\';
*q++ = c; *q++ = c;
} break;
else if (c == '#') {
if (IS_EVSTR(p, pend)) *q++ = '\\'; case '\n':
*q++ = '#';
}
else if (c == '\n') {
*q++ = '\\'; *q++ = '\\';
*q++ = 'n'; *q++ = 'n';
} break;
else if (c == '\r') {
case '\r':
*q++ = '\\'; *q++ = '\\';
*q++ = 'r'; *q++ = 'r';
} break;
else if (c == '\t') {
case '\t':
*q++ = '\\'; *q++ = '\\';
*q++ = 't'; *q++ = 't';
} break;
else if (c == '\f') {
case '\f':
*q++ = '\\'; *q++ = '\\';
*q++ = 'f'; *q++ = 'f';
} break;
else if (c == '\013') {
case '\013':
*q++ = '\\'; *q++ = '\\';
*q++ = 'v'; *q++ = 'v';
} break;
else if (c == '\010') {
case '\010':
*q++ = '\\'; *q++ = '\\';
*q++ = 'b'; *q++ = 'b';
} break;
else if (c == '\007') {
case '\007':
*q++ = '\\'; *q++ = '\\';
*q++ = 'a'; *q++ = 'a';
} break;
else if (c == '\033') {
case '\033':
*q++ = '\\'; *q++ = '\\';
*q++ = 'e'; *q++ = 'e';
} break;
else if (ISPRINT(c)) {
case '#':
if (IS_EVSTR(p, pend)) *q++ = '\\';
*q++ = '#';
break;
default:
if (ISPRINT(c)) {
*q++ = c; *q++ = c;
} }
else { else {
...@@ -2349,6 +2362,7 @@ mrb_str_dump(mrb_state *mrb, mrb_value str) ...@@ -2349,6 +2362,7 @@ mrb_str_dump(mrb_state *mrb, mrb_value str)
q += 4; q += 4;
} }
} }
}
*q++ = '"'; *q++ = '"';
return mrb_obj_value(result); return mrb_obj_value(result);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment