summaryrefslogtreecommitdiff
path: root/src/wasm2js.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm2js.h')
-rw-r--r--src/wasm2js.h22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/wasm2js.h b/src/wasm2js.h
index cc4d363ec..05ba2ace9 100644
--- a/src/wasm2js.h
+++ b/src/wasm2js.h
@@ -53,6 +53,8 @@ namespace wasm {
using namespace cashew;
+static IString importObject("importObject");
+
// Appends extra to block, flattening out if extra is a block as well
void flattenAppend(Ref ast, Ref extra) {
int index;
@@ -411,7 +413,21 @@ Ref Wasm2JSBuilder::processWasm(Module* wasm, Name funcName) {
Ref ret = ValueBuilder::makeToplevel();
Ref asmFunc = ValueBuilder::makeFunction(funcName);
ret[1]->push_back(asmFunc);
- ValueBuilder::appendArgumentToFunction(asmFunc, ENV);
+ ValueBuilder::appendArgumentToFunction(asmFunc, importObject);
+
+ // Retrieve `env` object from info. Older version of emscripten pass `env`
+ // *as* `info` so for now we make this conditional.
+ // TODO(sbc): Remove the makeBinary here once emscripten change has landed.
+ Ref envVar = ValueBuilder::makeVar();
+ asmFunc[3]->push_back(envVar);
+ ValueBuilder::appendToVar(
+ envVar,
+ ENV,
+ ValueBuilder::makeBinary(
+ ValueBuilder::makeDot(ValueBuilder::makeName(importObject),
+ ValueBuilder::makeName(ENV)),
+ "||",
+ ValueBuilder::makeName(importObject)));
// add memory import
if (!wasm->memories.empty()) {
@@ -2570,7 +2586,7 @@ void Wasm2JSGlue::emitPre() {
}
void Wasm2JSGlue::emitPreEmscripten() {
- out << "function instantiate(asmLibraryArg) {\n";
+ out << "function instantiate(info) {\n";
}
void Wasm2JSGlue::emitPreES6() {
@@ -2617,7 +2633,7 @@ void Wasm2JSGlue::emitPost() {
}
void Wasm2JSGlue::emitPostEmscripten() {
- out << " return asmFunc(asmLibraryArg);\n}\n";
+ out << " return asmFunc(info);\n}\n";
}
void Wasm2JSGlue::emitPostES6() {