diff options
author | Sam Clegg <sbc@chromium.org> | 2022-01-10 12:40:35 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-10 12:40:35 -0800 |
commit | c12de34c7d33b3ccf80f117edf78b5346bd00897 (patch) | |
tree | 741ea30521a130d463776a7cc7cce3bfede238bb | |
parent | 4952437ddc3d0ea07725493b14504868702f8967 (diff) | |
download | binaryen-c12de34c7d33b3ccf80f117edf78b5346bd00897.tar.gz binaryen-c12de34c7d33b3ccf80f117edf78b5346bd00897.tar.bz2 binaryen-c12de34c7d33b3ccf80f117edf78b5346bd00897.zip |
Escape \t as well as \n when writing JSON output. (#4437)
As it happens, this doesn't (normally) break the resulting EM_ASM or
EM_JS strings because (IIUC) JS supports the tab literal inside of
strings as well as "\t".
However, it's better to preserve the original text so that it looks
the same in the JS file as it did in the original source.
-rw-r--r-- | src/wasm/wasm-emscripten.cpp | 5 | ||||
-rw-r--r-- | test/lld/em_asm.cpp | 2 | ||||
-rw-r--r-- | test/lld/em_asm.wat | 8 | ||||
-rw-r--r-- | test/lld/em_asm.wat.mem.out | 12 | ||||
-rw-r--r-- | test/lld/em_asm.wat.out | 12 |
5 files changed, 22 insertions, 17 deletions
diff --git a/src/wasm/wasm-emscripten.cpp b/src/wasm/wasm-emscripten.cpp index 68c095111..33a92a6c4 100644 --- a/src/wasm/wasm-emscripten.cpp +++ b/src/wasm/wasm-emscripten.cpp @@ -79,6 +79,11 @@ std::string escape(std::string code) { code = code.replace(curr, 2, "\\\\n"); curr += 3; // skip this one } + curr = 0; + while ((curr = code.find("\\t", curr)) != std::string::npos) { + code = code.replace(curr, 2, "\\\\t"); + curr += 3; // skip this one + } // replace double quotes with escaped single quotes curr = 0; while ((curr = code.find('"', curr)) != std::string::npos) { diff --git a/test/lld/em_asm.cpp b/test/lld/em_asm.cpp index ed89783f8..b8c3db365 100644 --- a/test/lld/em_asm.cpp +++ b/test/lld/em_asm.cpp @@ -1,7 +1,7 @@ #include <emscripten/em_asm.h> int main() { - EM_ASM({ Module.print("Hello world"); }); + EM_ASM({ Module.print("Hello \\ world\t\n"); }); int x = EM_ASM_INT({ return $0 + $1; }, 13, 27); EM_ASM_({ Module.print("Got " + $0); }, x); return 0; diff --git a/test/lld/em_asm.wat b/test/lld/em_asm.wat index 0d035496a..035030802 100644 --- a/test/lld/em_asm.wat +++ b/test/lld/em_asm.wat @@ -6,11 +6,11 @@ (import "env" "emscripten_asm_const_int" (func $emscripten_asm_const_int (param i32 i32 i32) (result i32))) (memory $0 2) (data $.rodata (i32.const 568) "\00ii\00i\00") - (data $em_asm (i32.const 574) "{ Module.print(\"Hello world\"); }\00{ return $0 + $1; }\00{ Module.print(\"Got \" + $0); }\00") + (data $em_asm (i32.const 574) "{ Module.print(\"Hello \\\\ world\\t\\n\"); }\00{ return $0 + $1; }\00{ Module.print(\"Got \" + $0); }\00") (table $0 1 1 funcref) (global $__stack_pointer (mut i32) (i32.const 66208)) (global $global$1 i32 (i32.const 574)) - (global $global$2 i32 (i32.const 658)) + (global $global$2 i32 (i32.const 665)) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) @@ -42,7 +42,7 @@ (i32.store (local.get $0) (call $emscripten_asm_const_int - (i32.const 607) + (i32.const 614) (i32.const 569) (i32.add (local.get $0) @@ -52,7 +52,7 @@ ) (drop (call $emscripten_asm_const_int - (i32.const 627) + (i32.const 634) (i32.const 572) (local.get $0) ) diff --git a/test/lld/em_asm.wat.mem.out b/test/lld/em_asm.wat.mem.out index 8ace4ede4..07c9aa3e8 100644 --- a/test/lld/em_asm.wat.mem.out +++ b/test/lld/em_asm.wat.mem.out @@ -6,7 +6,7 @@ (import "env" "emscripten_asm_const_int" (func $emscripten_asm_const_int (param i32 i32 i32) (result i32))) (global $__stack_pointer (mut i32) (i32.const 66208)) (global $global$1 i32 (i32.const 574)) - (global $global$2 i32 (i32.const 658)) + (global $global$2 i32 (i32.const 665)) (memory $0 2) (table $0 1 1 funcref) (export "memory" (memory $0)) @@ -39,7 +39,7 @@ (i32.store (local.get $0) (call $emscripten_asm_const_int - (i32.const 607) + (i32.const 614) (i32.const 569) (i32.add (local.get $0) @@ -49,7 +49,7 @@ ) (drop (call $emscripten_asm_const_int - (i32.const 627) + (i32.const 634) (i32.const 572) (local.get $0) ) @@ -70,9 +70,9 @@ --BEGIN METADATA -- { "asmConsts": { - "574": "{ Module.print(\"Hello world\"); }", - "607": "{ return $0 + $1; }", - "627": "{ Module.print(\"Got \" + $0); }" + "574": "{ Module.print(\"Hello \\ world\\t\\n\"); }", + "614": "{ return $0 + $1; }", + "634": "{ Module.print(\"Got \" + $0); }" }, "declares": [ "emscripten_asm_const_int" diff --git a/test/lld/em_asm.wat.out b/test/lld/em_asm.wat.out index c0cfbe303..5a32e4bad 100644 --- a/test/lld/em_asm.wat.out +++ b/test/lld/em_asm.wat.out @@ -6,7 +6,7 @@ (import "env" "emscripten_asm_const_int" (func $emscripten_asm_const_int (param i32 i32 i32) (result i32))) (global $__stack_pointer (mut i32) (i32.const 66208)) (global $global$1 i32 (i32.const 574)) - (global $global$2 i32 (i32.const 658)) + (global $global$2 i32 (i32.const 665)) (memory $0 2) (data $.rodata (i32.const 568) "\00ii\00i\00") (data $em_asm (i32.const 574) "") @@ -41,7 +41,7 @@ (i32.store (local.get $0) (call $emscripten_asm_const_int - (i32.const 607) + (i32.const 614) (i32.const 569) (i32.add (local.get $0) @@ -51,7 +51,7 @@ ) (drop (call $emscripten_asm_const_int - (i32.const 627) + (i32.const 634) (i32.const 572) (local.get $0) ) @@ -72,9 +72,9 @@ --BEGIN METADATA -- { "asmConsts": { - "574": "{ Module.print(\"Hello world\"); }", - "607": "{ return $0 + $1; }", - "627": "{ Module.print(\"Got \" + $0); }" + "574": "{ Module.print(\"Hello \\ world\\t\\n\"); }", + "614": "{ return $0 + $1; }", + "634": "{ Module.print(\"Got \" + $0); }" }, "declares": [ "emscripten_asm_const_int" |