Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(247)

Unified Diff: src/wasm/wasm-js.cc

Issue 2320723005: [wasm] Compilation/Instantiation pipeline works off module object (Closed)
Patch Set: rebase Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/wasm/wasm-js.h ('k') | src/wasm/wasm-module.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/wasm/wasm-js.cc
diff --git a/src/wasm/wasm-js.cc b/src/wasm/wasm-js.cc
index 3c92223f9f6c9b5174be1b06fed81c9a2e2867d1..ff974cb8cd13d5666318048bee15acf84a087667 100644
--- a/src/wasm/wasm-js.cc
+++ b/src/wasm/wasm-js.cc
@@ -133,13 +133,11 @@ i::MaybeHandle<i::JSObject> InstantiateModule(
// Decode but avoid a redundant pass over function bodies for verification.
// Verification will happen during compilation.
i::Zone zone(isolate->allocator());
- internal::wasm::ModuleResult result = internal::wasm::DecodeWasmModule(
- isolate, &zone, start, end, false, origin);
-
+ i::MaybeHandle<i::JSObject> module_object =
+ i::wasm::CreateModuleObjectFromBytes(isolate, start, end, thrower,
+ origin);
i::MaybeHandle<i::JSObject> object;
- if (result.failed()) {
- thrower->Failed("", result);
- } else {
+ if (!module_object.is_null()) {
// Success. Instantiate the module and return the object.
i::Handle<i::JSObject> ffi = i::Handle<i::JSObject>::null();
if (args.Length() > 1 && args[1]->IsObject()) {
@@ -154,19 +152,12 @@ i::MaybeHandle<i::JSObject> InstantiateModule(
memory = i::Handle<i::JSArrayBuffer>(i::JSArrayBuffer::cast(*mem_obj));
}
- i::MaybeHandle<i::FixedArray> compiled_module =
- result.val->CompileFunctions(isolate, thrower);
- if (!thrower->error()) {
- DCHECK(!compiled_module.is_null());
- object = i::wasm::WasmModule::Instantiate(
- isolate, compiled_module.ToHandleChecked(), ffi, memory);
- if (!object.is_null()) {
- args.GetReturnValue().Set(v8::Utils::ToLocal(object.ToHandleChecked()));
- }
+ object = i::wasm::WasmModule::Instantiate(
+ isolate, module_object.ToHandleChecked(), ffi, memory);
+ if (!object.is_null()) {
+ args.GetReturnValue().Set(v8::Utils::ToLocal(object.ToHandleChecked()));
}
}
-
- if (result.val) delete result.val;
return object;
}
@@ -276,9 +267,6 @@ void WebAssemblyInstance(const v8::FunctionCallbackInfo<v8::Value>& args) {
return;
}
- i::Handle<i::FixedArray> compiled_code = i::Handle<i::FixedArray>(
- i::FixedArray::cast(module_obj->GetInternalField(0)));
-
i::Handle<i::JSReceiver> ffi = i::Handle<i::JSObject>::null();
if (args.Length() > 1 && args[1]->IsObject()) {
Local<Object> obj = Local<Object>::Cast(args[1]);
@@ -292,7 +280,7 @@ void WebAssemblyInstance(const v8::FunctionCallbackInfo<v8::Value>& args) {
memory = i::Handle<i::JSArrayBuffer>(i::JSArrayBuffer::cast(*mem_obj));
}
i::MaybeHandle<i::JSObject> instance =
- i::wasm::WasmModule::Instantiate(i_isolate, compiled_code, ffi, memory);
+ i::wasm::WasmModule::Instantiate(i_isolate, module_obj, ffi, memory);
if (instance.is_null()) {
thrower.Error("Could not instantiate module");
return;
@@ -328,6 +316,47 @@ static Handle<JSFunction> InstallFunc(Isolate* isolate, Handle<JSObject> object,
return function;
}
+void WasmJs::SetupIsolateForWasm(Isolate* isolate) {
+ InstallWasmFunctionMap(isolate, isolate->native_context());
+ InstallWasmModuleSymbol(isolate, isolate->global_object(),
+ isolate->native_context());
+}
+
+void WasmJs::InstallWasmModuleSymbol(Isolate* isolate,
+ Handle<JSGlobalObject> global,
+ Handle<Context> context) {
+ Factory* factory = isolate->factory();
+ // Create private symbols.
+ Handle<Symbol> module_sym = factory->NewPrivateSymbol();
+ Handle<Symbol> instance_sym = factory->NewPrivateSymbol();
+ context->set_wasm_module_sym(*module_sym);
+ context->set_wasm_instance_sym(*instance_sym);
+
+ // Bind the WebAssembly object.
+ Handle<String> name = v8_str(isolate, "WebAssembly");
+ Handle<JSFunction> cons = factory->NewFunction(name);
+ JSFunction::SetInstancePrototype(
+ cons, Handle<Object>(context->initial_object_prototype(), isolate));
+ cons->shared()->set_instance_class_name(*name);
+ Handle<JSObject> wasm_object = factory->NewJSObject(cons, TENURED);
+ PropertyAttributes attributes = static_cast<PropertyAttributes>(DONT_ENUM);
+ JSObject::AddProperty(global, name, wasm_object, attributes);
+
+ // Install static methods on WebAssembly object.
+ InstallFunc(isolate, wasm_object, "compile", WebAssemblyCompile);
+ Handle<JSFunction> module_constructor =
+ InstallFunc(isolate, wasm_object, "Module", WebAssemblyModule);
+ Handle<JSFunction> instance_constructor =
+ InstallFunc(isolate, wasm_object, "Instance", WebAssemblyInstance);
+ i::Handle<i::Map> map = isolate->factory()->NewMap(
+ i::JS_OBJECT_TYPE, i::JSObject::kHeaderSize + i::kPointerSize);
+ module_constructor->set_prototype_or_initial_map(*map);
+ map->SetConstructor(*module_constructor);
+
+ context->set_wasm_module_constructor(*module_constructor);
+ context->set_wasm_instance_constructor(*instance_constructor);
+}
+
void WasmJs::Install(Isolate* isolate, Handle<JSGlobalObject> global) {
if (!FLAG_expose_wasm && !FLAG_validate_asm) {
return;
@@ -370,36 +399,7 @@ void WasmJs::Install(Isolate* isolate, Handle<JSGlobalObject> global) {
JSObject::AddProperty(wasm_object, name, value, attributes);
}
}
-
- // Create private symbols.
- Handle<Symbol> module_sym = isolate->factory()->NewPrivateSymbol();
- Handle<Symbol> instance_sym = isolate->factory()->NewPrivateSymbol();
- context->set_wasm_module_sym(*module_sym);
- context->set_wasm_instance_sym(*instance_sym);
-
- // Bind the WebAssembly object.
- Handle<String> name = v8_str(isolate, "WebAssembly");
- Handle<JSFunction> cons = factory->NewFunction(name);
- JSFunction::SetInstancePrototype(
- cons, Handle<Object>(context->initial_object_prototype(), isolate));
- cons->shared()->set_instance_class_name(*name);
- Handle<JSObject> wasm_object = factory->NewJSObject(cons, TENURED);
- PropertyAttributes attributes = static_cast<PropertyAttributes>(DONT_ENUM);
- JSObject::AddProperty(global, name, wasm_object, attributes);
-
- // Install static methods on WebAssembly object.
- InstallFunc(isolate, wasm_object, "compile", WebAssemblyCompile);
- Handle<JSFunction> module_constructor =
- InstallFunc(isolate, wasm_object, "Module", WebAssemblyModule);
- Handle<JSFunction> instance_constructor =
- InstallFunc(isolate, wasm_object, "Instance", WebAssemblyInstance);
- i::Handle<i::Map> map = isolate->factory()->NewMap(
- i::JS_OBJECT_TYPE, i::JSObject::kHeaderSize + i::kPointerSize);
- module_constructor->set_prototype_or_initial_map(*map);
- map->SetConstructor(*module_constructor);
-
- context->set_wasm_module_constructor(*module_constructor);
- context->set_wasm_instance_constructor(*instance_constructor);
+ InstallWasmModuleSymbol(isolate, global, context);
}
void WasmJs::InstallWasmFunctionMap(Isolate* isolate, Handle<Context> context) {
« no previous file with comments | « src/wasm/wasm-js.h ('k') | src/wasm/wasm-module.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698