diff options
author | Florian Frank <flori@ping.de> | 2009-11-07 15:30:52 +0100 |
---|---|---|
committer | Florian Frank <flori@ping.de> | 2009-11-07 15:30:52 +0100 |
commit | 4ff03a70824f8e4050ec8990b0648c0ea039b384 (patch) | |
tree | 1026a8591062356c0a6ae476a0cb2c66411f16ee /ext | |
parent | 67602c351b6c1655f853f0ca69341035e9b2c04b (diff) | |
download | json-4ff03a70824f8e4050ec8990b0648c0ea039b384.tar.gz |
optimise code path for ascii mode, too
Diffstat (limited to 'ext')
-rw-r--r-- | ext/json/ext/generator/generator.c | 58 |
1 files changed, 31 insertions, 27 deletions
diff --git a/ext/json/ext/generator/generator.c b/ext/json/ext/generator/generator.c index fabb0ea..079ca90 100644 --- a/ext/json/ext/generator/generator.c +++ b/ext/json/ext/generator/generator.c @@ -158,35 +158,39 @@ static void convert_UTF8_to_JSON_ASCII(FBuffer *buffer, VALUE string) #endif } else { /* normal case */ - switch (ch) { - case '\n': - fbuffer_append(buffer, "\\n", 2); - break; - case '\r': - fbuffer_append(buffer, "\\r", 2); - break; - case '\\': - fbuffer_append(buffer, "\\\\", 2); - break; - case '"': - fbuffer_append(buffer, "\\\"", 2); - break; - case '\t': - fbuffer_append(buffer, "\\t", 2); - break; - case '\f': - fbuffer_append(buffer, "\\f", 2); - break; - case '\b': - fbuffer_append(buffer, "\\b", 2); - break; - default: - if (ch >= 0x20 && ch <= 0x7f) { + if (ch >= 0x20 && ch <= 0x7f) { + switch (ch) { + case '\\': + fbuffer_append(buffer, "\\\\", 2); + break; + case '"': + fbuffer_append(buffer, "\\\"", 2); + break; + default: fbuffer_append_char(buffer, ch); - } else { + break; + } + } else { + switch (ch) { + case '\n': + fbuffer_append(buffer, "\\n", 2); + break; + case '\r': + fbuffer_append(buffer, "\\r", 2); + break; + case '\t': + fbuffer_append(buffer, "\\t", 2); + break; + case '\f': + fbuffer_append(buffer, "\\f", 2); + break; + case '\b': + fbuffer_append(buffer, "\\b", 2); + break; + default: unicode_escape_to_buffer(buffer, buf, (UTF16) ch); - } - break; + break; + } } } } else if (ch > UNI_MAX_UTF16) { |