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

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

Issue 2490663002: [wasm] Move all heap-allocated WASM structures into wasm-objects.h. (Closed)
Patch Set: Created 4 years, 1 month 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
Index: src/wasm/wasm-module.cc
diff --git a/src/wasm/wasm-module.cc b/src/wasm/wasm-module.cc
index 5b4b8e0f2895bab32b4e6402663e9b1bf7ae7157..33113c39669eb68506c2e739bdd9e8356cead246 100644
--- a/src/wasm/wasm-module.cc
+++ b/src/wasm/wasm-module.cc
@@ -19,6 +19,7 @@
#include "src/wasm/wasm-debug.h"
#include "src/wasm/wasm-js.h"
#include "src/wasm/wasm-module.h"
+#include "src/wasm/wasm-objects.h"
#include "src/wasm/wasm-result.h"
#include "src/compiler/wasm-compiler.h"
@@ -1101,7 +1102,7 @@ class WasmInstanceBuilder {
static_cast<int>(module_->function_tables.size());
table_instances_.reserve(module_->function_tables.size());
for (int index = 0; index < function_table_count; ++index) {
- table_instances_.push_back({Handle<JSObject>::null(),
+ table_instances_.push_back({Handle<WasmTableObject>::null(),
Handle<FixedArray>::null(),
Handle<FixedArray>::null()});
}
@@ -1272,7 +1273,7 @@ class WasmInstanceBuilder {
private:
// Represents the initialized state of a table.
struct TableInstance {
- Handle<JSObject> table_object; // WebAssembly.Table instance
+ Handle<WasmTableObject> table_object; // WebAssembly.Table instance
Handle<FixedArray> js_wrappers; // JSFunctions exported
Handle<FixedArray> dispatch_table; // internal (code, sig) pairs
};
@@ -1460,7 +1461,7 @@ class WasmInstanceBuilder {
WasmIndirectFunctionTable& table =
module_->function_tables[num_imported_tables];
TableInstance& table_instance = table_instances_[num_imported_tables];
- table_instance.table_object = Handle<JSObject>::cast(value);
+ table_instance.table_object = Handle<WasmTableObject>::cast(value);
table_instance.js_wrappers = WasmJs::GetWasmTableFunctions(
isolate_, table_instance.table_object);
@@ -1508,8 +1509,9 @@ class WasmInstanceBuilder {
index, module_name, function_name);
return -1;
}
+ auto memory = Handle<WasmMemoryObject>::cast(object);
ahaas 2016/11/10 09:51:13 Can you not just use the type here instead of auto
titzer 2016/11/10 10:33:24 I think that's redundant, since a Handle<X>::cast(
instance->SetInternalField(kWasmMemObject, *object);
- memory_ = WasmJs::GetWasmMemoryArrayBuffer(isolate_, object);
+ memory_ = Handle<JSArrayBuffer>(memory->get_buffer(), isolate_);
break;
}
case kExternalGlobal: {
@@ -1665,7 +1667,7 @@ class WasmInstanceBuilder {
WasmIndirectFunctionTable& table =
module_->function_tables[exp.index];
if (table_instance.table_object.is_null()) {
- table_instance.table_object = WasmJs::CreateWasmTableObject(
+ table_instance.table_object = WasmTableObject::New(
isolate_, table.min_size, table.has_max, table.max_size,
&table_instance.js_wrappers);
}
@@ -1682,9 +1684,9 @@ class WasmInstanceBuilder {
JSArrayBuffer::cast(
instance->GetInternalField(kWasmMemArrayBuffer)),
isolate_);
- memory_object = WasmJs::CreateWasmMemoryObject(
- isolate_, buffer, (module_->max_mem_pages != 0),
- module_->max_mem_pages);
+ memory_object = WasmMemoryObject::New(
+ isolate_, buffer,
+ (module_->max_mem_pages != 0) ? module_->max_mem_pages : -1);
ahaas 2016/11/10 09:51:13 Could you do this check also in {WasmMemoryObject:
titzer 2016/11/10 10:33:24 WasmMemoryObject::New() is just a constructor, so
instance->SetInternalField(kWasmMemObject, *memory_object);
}
@@ -1756,9 +1758,10 @@ class WasmInstanceBuilder {
Handle<FixedArray> all_dispatch_tables;
if (!table_instance.table_object.is_null()) {
// Get the existing dispatch table(s) with the WebAssembly.Table object.
- all_dispatch_tables = WasmJs::AddWasmTableDispatchTable(
- isolate_, table_instance.table_object, Handle<JSObject>::null(),
- index, Handle<FixedArray>::null());
+ all_dispatch_tables = WasmTableObject::AddDispatchTable(
+ isolate_, table_instance.table_object,
+ Handle<WasmInstanceObject>::null(), index,
+ Handle<FixedArray>::null());
}
// TODO(titzer): this does redundant work if there are multiple tables,
@@ -1822,8 +1825,11 @@ class WasmInstanceBuilder {
// initialized.
if (!table_instance.table_object.is_null()) {
// Add the new dispatch table to the WebAssembly.Table object.
- all_dispatch_tables = WasmJs::AddWasmTableDispatchTable(
- isolate_, table_instance.table_object, instance, index,
+ // TODO: remove the cast of WasmInstanceObject
+ Handle<WasmInstanceObject> handle(
+ reinterpret_cast<WasmInstanceObject*>(*instance), isolate_);
+ all_dispatch_tables = WasmTableObject::AddDispatchTable(
+ isolate_, table_instance.table_object, handle, index,
table_instance.dispatch_table);
}
}
@@ -1852,61 +1858,6 @@ MaybeHandle<JSObject> WasmModule::Instantiate(Isolate* isolate,
return builder.Build();
}
-Handle<WasmCompiledModule> WasmCompiledModule::New(
- Isolate* isolate, Handle<WasmModuleWrapper> module_wrapper) {
- Handle<FixedArray> ret =
- isolate->factory()->NewFixedArray(PropertyIndices::Count, TENURED);
- // WasmCompiledModule::cast would fail since module bytes are not set yet.
- Handle<WasmCompiledModule> compiled_module(
- reinterpret_cast<WasmCompiledModule*>(*ret), isolate);
- compiled_module->InitId();
- compiled_module->set_module_wrapper(module_wrapper);
- return compiled_module;
-}
-
-void WasmCompiledModule::InitId() {
-#if DEBUG
- static uint32_t instance_id_counter = 0;
- set(kID_instance_id, Smi::FromInt(instance_id_counter++));
- TRACE("New compiled module id: %d\n", instance_id());
-#endif
-}
-
-bool WasmCompiledModule::IsWasmCompiledModule(Object* obj) {
- if (!obj->IsFixedArray()) return false;
- FixedArray* arr = FixedArray::cast(obj);
- if (arr->length() != PropertyIndices::Count) return false;
- Isolate* isolate = arr->GetIsolate();
-#define WCM_CHECK_SMALL_NUMBER(TYPE, NAME) \
- if (!arr->get(kID_##NAME)->IsSmi()) return false;
-#define WCM_CHECK_OBJECT_OR_WEAK(TYPE, NAME) \
- if (!arr->get(kID_##NAME)->IsUndefined(isolate) && \
- !arr->get(kID_##NAME)->Is##TYPE()) \
- return false;
-#define WCM_CHECK_OBJECT(TYPE, NAME) WCM_CHECK_OBJECT_OR_WEAK(TYPE, NAME)
-#define WCM_CHECK_WEAK_LINK(TYPE, NAME) WCM_CHECK_OBJECT_OR_WEAK(WeakCell, NAME)
-#define WCM_CHECK(KIND, TYPE, NAME) WCM_CHECK_##KIND(TYPE, NAME)
- WCM_PROPERTY_TABLE(WCM_CHECK)
-#undef WCM_CHECK
-
- // All checks passed.
- return true;
-}
-
-void WasmCompiledModule::PrintInstancesChain() {
-#if DEBUG
- if (!FLAG_trace_wasm_instances) return;
- for (WasmCompiledModule* current = this; current != nullptr;) {
- PrintF("->%d", current->instance_id());
- if (current->ptr_to_weak_next_instance() == nullptr) break;
- CHECK(!current->ptr_to_weak_next_instance()->cleared());
- current =
- WasmCompiledModule::cast(current->ptr_to_weak_next_instance()->value());
- }
- PrintF("\n");
-#endif
-}
-
Handle<Object> wasm::GetWasmFunctionNameOrNull(Isolate* isolate,
Handle<Object> instance,
uint32_t func_index) {
@@ -2023,12 +1974,12 @@ Handle<JSObject> wasm::CreateWasmModuleObject(
}
// TODO(clemensh): origin can be inferred from asm_js_script; remove it.
-MaybeHandle<JSObject> wasm::CreateModuleObjectFromBytes(
+MaybeHandle<WasmModuleObject> wasm::CreateModuleObjectFromBytes(
Isolate* isolate, const byte* start, const byte* end, ErrorThrower* thrower,
ModuleOrigin origin, Handle<Script> asm_js_script,
const byte* asm_js_offset_tables_start,
const byte* asm_js_offset_tables_end) {
- MaybeHandle<JSObject> nothing;
+ MaybeHandle<WasmModuleObject> nothing;
ModuleResult result = DecodeWasmModule(isolate, start, end, false, origin);
if (result.failed()) {
if (result.val) delete result.val;
@@ -2064,7 +2015,7 @@ MaybeHandle<JSObject> wasm::CreateModuleObjectFromBytes(
compiled_module->set_asm_js_offset_tables(offset_tables);
}
- return CreateWasmModuleObject(isolate, compiled_module, origin);
+ return WasmModuleObject::New(isolate, compiled_module);
}
bool wasm::ValidateModuleBytes(Isolate* isolate, const byte* start,
@@ -2111,9 +2062,9 @@ uint32_t GetMaxInstanceMemorySize(Isolate* isolate, Handle<JSObject> instance) {
Handle<Object> memory_object(instance->GetInternalField(kWasmMemObject),
isolate);
if (!memory_object->IsUndefined(isolate)) {
- uint32_t mem_obj_max =
- WasmJs::GetWasmMemoryMaximumSize(isolate, memory_object);
- if (mem_obj_max != 0) return mem_obj_max;
+ int maximum =
+ Handle<WasmMemoryObject>::cast(memory_object)->maximum_pages();
+ if (maximum > 0) return static_cast<uint32_t>(maximum);
}
uint32_t compiled_max_pages = GetCompiledModule(*instance)->max_mem_pages();
isolate->counters()->wasm_max_mem_pages_count()->AddSample(
@@ -2168,7 +2119,7 @@ int32_t wasm::GrowInstanceMemory(Isolate* isolate, Handle<JSObject> instance,
Handle<Object> memory_object(instance->GetInternalField(kWasmMemObject),
isolate);
if (!memory_object->IsUndefined(isolate)) {
- WasmJs::SetWasmMemoryArrayBuffer(isolate, memory_object, buffer);
+ Handle<WasmMemoryObject>::cast(memory_object)->set_buffer(*buffer);
}
DCHECK(old_size % WasmModule::kPageSize == 0);
« no previous file with comments | « src/wasm/wasm-module.h ('k') | src/wasm/wasm-objects.h » ('j') | src/wasm/wasm-objects.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698