Index: src/wasm/wasm-module.cc |
diff --git a/src/wasm/wasm-module.cc b/src/wasm/wasm-module.cc |
index e4188da72a3bf1b0545c5a712c18c218ff5da8ba..0577f7e759924735c39733a9f39955cc5c0e92d4 100644 |
--- a/src/wasm/wasm-module.cc |
+++ b/src/wasm/wasm-module.cc |
@@ -1142,13 +1142,15 @@ class WasmInstanceBuilder { |
public: |
WasmInstanceBuilder(Isolate* isolate, ErrorThrower* thrower, |
Handle<WasmModuleObject> module_object, |
- Handle<JSReceiver> ffi, Handle<JSArrayBuffer> memory) |
+ Handle<JSReceiver> ffi, Handle<JSArrayBuffer> memory, |
+ Handle<JSObject> export_to) |
: isolate_(isolate), |
module_(module_object->compiled_module()->module()), |
thrower_(thrower), |
module_object_(module_object), |
ffi_(ffi), |
- memory_(memory) {} |
+ memory_(memory), |
+ export_to_(export_to) {} |
// Build an instance, in all of its glory. |
MaybeHandle<WasmInstanceObject> Build() { |
@@ -1382,7 +1384,7 @@ class WasmInstanceBuilder { |
//-------------------------------------------------------------------------- |
// Set up the exports object for the new instance. |
//-------------------------------------------------------------------------- |
- ProcessExports(code_table, instance, compiled_module_); |
+ ProcessExports(code_table, instance, export_to_, compiled_module_); |
//-------------------------------------------------------------------------- |
// Add instance to Memory object |
@@ -1531,6 +1533,7 @@ class WasmInstanceBuilder { |
Handle<WasmModuleObject> module_object_; |
Handle<JSReceiver> ffi_; |
Handle<JSArrayBuffer> memory_; |
+ Handle<JSObject> export_to_; |
Handle<JSArrayBuffer> globals_; |
Handle<WasmCompiledModule> compiled_module_; |
std::vector<TableInstance> table_instances_; |
@@ -1911,6 +1914,7 @@ class WasmInstanceBuilder { |
// and globals. |
void ProcessExports(Handle<FixedArray> code_table, |
Handle<WasmInstanceObject> instance, |
+ Handle<JSObject> exports, |
Handle<WasmCompiledModule> compiled_module) { |
if (NeedsWrappers()) { |
// Fill the table to cache the exported JSFunction wrappers. |
@@ -1918,7 +1922,7 @@ class WasmInstanceBuilder { |
Handle<JSFunction>::null()); |
} |
- Handle<JSObject> exports_object = instance; |
+ Handle<JSObject> exports_object = exports; |
if (module_->origin == kWasmOrigin) { |
// Create the "exports" object. |
exports_object = isolate_->factory()->NewJSObjectWithNullProto(); |
@@ -1928,7 +1932,7 @@ class WasmInstanceBuilder { |
} |
PropertyDescriptor desc; |
- desc.set_writable(false); |
+ desc.set_writable(module_->origin == kAsmJsOrigin); |
desc.set_enumerable(true); |
// Count up export indexes. |
@@ -2223,8 +2227,9 @@ class WasmInstanceBuilder { |
MaybeHandle<WasmInstanceObject> WasmModule::Instantiate( |
Isolate* isolate, ErrorThrower* thrower, |
Handle<WasmModuleObject> wasm_module, Handle<JSReceiver> ffi, |
- Handle<JSArrayBuffer> memory) { |
- WasmInstanceBuilder builder(isolate, thrower, wasm_module, ffi, memory); |
+ Handle<JSArrayBuffer> memory, Handle<JSObject> export_to) { |
+ WasmInstanceBuilder builder(isolate, thrower, wasm_module, ffi, memory, |
+ export_to); |
return builder.Build(); |
} |