shithub: libmujs

Download patch

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('"');
--