diff options
author | Alon Zakai <alonzakai@gmail.com> | 2019-04-23 17:13:47 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-23 17:13:47 -0700 |
commit | 5d3fcffdd9f9d9de10a0ce60d1e0163693c007c3 (patch) | |
tree | eccb11418795a0f508da2e785340e34bb82a1fc6 /src | |
parent | 7c5a789c6ccf09bfaec9c449aa606d8a6276b855 (diff) | |
download | binaryen-5d3fcffdd9f9d9de10a0ce60d1e0163693c007c3.tar.gz binaryen-5d3fcffdd9f9d9de10a0ce60d1e0163693c007c3.tar.bz2 binaryen-5d3fcffdd9f9d9de10a0ce60d1e0163693c007c3.zip |
wasm2js: emit quoted properties for the exports, to support closure compiler (#2043)
Diffstat (limited to 'src')
-rw-r--r-- | src/emscripten-optimizer/simple_ast.h | 19 | ||||
-rw-r--r-- | src/wasm2js.h | 12 |
2 files changed, 23 insertions, 8 deletions
diff --git a/src/emscripten-optimizer/simple_ast.h b/src/emscripten-optimizer/simple_ast.h index ded8af5f4..e5e8c4e80 100644 --- a/src/emscripten-optimizer/simple_ast.h +++ b/src/emscripten-optimizer/simple_ast.h @@ -1318,9 +1318,18 @@ struct JSPrinter { pretty ? emit(", ") : emit(','); newline(); } - const char *str = args[i][0]->getCString(); - const char *check = str; bool needQuote = false; + const char *str; + if (args[i][0]->isArray()) { + assert(args[i][0][0] == STRING); + // A quoted string. + needQuote = true; + str = args[i][0][1]->getCString(); + } else { + // Just a raw string, no quotes. + str = args[i][0]->getCString(); + } + const char *check = str; while (*check) { if (!isalnum(*check) && *check != '_' && *check != '$') { needQuote = true; @@ -1644,6 +1653,12 @@ public: .push_back(value)); } + static void appendToObjectWithQuotes(Ref array, IString key, Ref value) { + assert(array[0] == OBJECT); + array[1]->push_back(&makeRawArray(2)->push_back(makeString(key)) + .push_back(value)); + } + static Ref makeSub(Ref obj, Ref index) { return &makeRawArray(2)->push_back(makeRawString(SUB)) .push_back(obj) diff --git a/src/wasm2js.h b/src/wasm2js.h index 0bccf7dee..7bc356bea 100644 --- a/src/wasm2js.h +++ b/src/wasm2js.h @@ -531,7 +531,7 @@ void Wasm2JSBuilder::addExports(Ref ast, Module* wasm) { Ref exports = ValueBuilder::makeObject(); for (auto& export_ : wasm->exports) { if (export_->kind == ExternalKind::Function) { - ValueBuilder::appendToObject( + ValueBuilder::appendToObjectWithQuotes( exports, fromName(export_->name, NameScope::Top), ValueBuilder::makeName(fromName(export_->value, NameScope::Top)) @@ -540,11 +540,11 @@ void Wasm2JSBuilder::addExports(Ref ast, Module* wasm) { if (export_->kind == ExternalKind::Memory) { Ref descs = ValueBuilder::makeObject(); Ref growDesc = ValueBuilder::makeObject(); - ValueBuilder::appendToObject( + ValueBuilder::appendToObjectWithQuotes( descs, IString("grow"), growDesc); - ValueBuilder::appendToObject( + ValueBuilder::appendToObjectWithQuotes( growDesc, IString("value"), ValueBuilder::makeName(WASM_GROW_MEMORY)); @@ -553,11 +553,11 @@ void Wasm2JSBuilder::addExports(Ref ast, Module* wasm) { bufferGetter[3]->push_back(ValueBuilder::makeReturn( ValueBuilder::makeName(BUFFER) )); - ValueBuilder::appendToObject( + ValueBuilder::appendToObjectWithQuotes( bufferDesc, IString("get"), bufferGetter); - ValueBuilder::appendToObject( + ValueBuilder::appendToObjectWithQuotes( descs, IString("buffer"), bufferDesc); @@ -567,7 +567,7 @@ void Wasm2JSBuilder::addExports(Ref ast, Module* wasm) { ValueBuilder::appendToCall( memory, descs); - ValueBuilder::appendToObject( + ValueBuilder::appendToObjectWithQuotes( exports, fromName(export_->name, NameScope::Top), memory); |