ref: 06e821df4a51a4b71d33f72b3c293894a6b67ff9
parent: 46dec712a71b4155f66b40ac92eb796d7e1fab89
author: Tor Andersson <tor@ccxvii.net>
date: Mon Feb 10 08:40:45 EST 2014
Quote strings properly in jsdump.
--- a/jsdump.c
+++ b/jsdump.c
@@ -3,6 +3,8 @@
#include "jscompile.h"
#include "jsvalue.h"
+#include "utf.h"
+
#include <assert.h>
#define nelem(a) (sizeof (a) / sizeof (a)[0])
@@ -219,14 +221,29 @@
static void pstr(const char *s)
{
- int c;
+ static const char *HEX = "0123456789ABCDEF";
+ Rune c;
pc('"');
- while ((c = *s++)) {
+ while (*s) {
+ s += chartorune(&c, s);
switch (c) {
case '"': ps("\\\""); break;
case '\\': ps("\\\\"); break;
+ case '\b': ps("\\b"); break;
+ case '\f': ps("\\f"); break;
case '\n': ps("\\n"); break;
- default: pc(c); break;
+ case '\r': ps("\\r"); break;
+ case '\t': ps("\\t"); break;
+ default:
+ if (c < ' ' || c > 127) {
+ ps("\\u");
+ pc(HEX[(c>>12)&15]);
+ pc(HEX[(c>>8)&15]);
+ pc(HEX[(c>>4)&15]);
+ pc(HEX[c&15]);
+ } else {
+ pc(c); break;
+ }
}
}
pc('"');
--
⑨