| Index: src/wasm/wasm-objects.cc
|
| diff --git a/src/wasm/wasm-objects.cc b/src/wasm/wasm-objects.cc
|
| index c6ed93dedfa23f2df156731ee550a8978cf4cb7e..77d37dadfad622635471c2656d9cadb7cbe290eb 100644
|
| --- a/src/wasm/wasm-objects.cc
|
| +++ b/src/wasm/wasm-objects.cc
|
| @@ -29,46 +29,6 @@
|
| using namespace v8::internal;
|
| using namespace v8::internal::wasm;
|
|
|
| -#define DEFINE_GETTER0(getter, Container, name, field, type) \
|
| - type* Container::name() { return type::cast(getter(field)); }
|
| -
|
| -#define DEFINE_ACCESSORS0(getter, setter, Container, name, field, type) \
|
| - DEFINE_GETTER0(getter, Container, name, field, type) \
|
| - void Container::set_##name(type* value) { return setter(field, value); }
|
| -
|
| -#define DEFINE_OPTIONAL_ACCESSORS0(getter, setter, Container, name, field, \
|
| - type) \
|
| - DEFINE_ACCESSORS0(getter, setter, Container, name, field, type) \
|
| - bool Container::has_##name() { \
|
| - return !getter(field)->IsUndefined(GetIsolate()); \
|
| - }
|
| -
|
| -#define DEFINE_OPTIONAL_GETTER0(getter, Container, name, field, type) \
|
| - DEFINE_GETTER0(getter, Container, name, field, type) \
|
| - bool Container::has_##name() { \
|
| - return !getter(field)->IsUndefined(GetIsolate()); \
|
| - }
|
| -
|
| -#define DEFINE_GETTER0(getter, Container, name, field, type) \
|
| - type* Container::name() { return type::cast(getter(field)); }
|
| -
|
| -#define DEFINE_OBJ_GETTER(Container, name, field, type) \
|
| - DEFINE_GETTER0(GetEmbedderField, Container, name, field, type)
|
| -#define DEFINE_OBJ_ACCESSORS(Container, name, field, type) \
|
| - DEFINE_ACCESSORS0(GetEmbedderField, SetEmbedderField, Container, name, \
|
| - field, type)
|
| -#define DEFINE_OPTIONAL_OBJ_ACCESSORS(Container, name, field, type) \
|
| - DEFINE_OPTIONAL_ACCESSORS0(GetEmbedderField, SetEmbedderField, Container, \
|
| - name, field, type)
|
| -#define DEFINE_ARR_GETTER(Container, name, field, type) \
|
| - DEFINE_GETTER0(get, Container, name, field, type)
|
| -#define DEFINE_ARR_ACCESSORS(Container, name, field, type) \
|
| - DEFINE_ACCESSORS0(get, set, Container, name, field, type)
|
| -#define DEFINE_OPTIONAL_ARR_ACCESSORS(Container, name, field, type) \
|
| - DEFINE_OPTIONAL_ACCESSORS0(get, set, Container, name, field, type)
|
| -#define DEFINE_OPTIONAL_ARR_GETTER(Container, name, field, type) \
|
| - DEFINE_OPTIONAL_GETTER0(get, Container, name, field, type)
|
| -
|
| namespace {
|
|
|
| // An iterator that returns first the module itself, then all modules linked via
|
| @@ -198,63 +158,38 @@ bool IsBreakablePosition(Handle<WasmCompiledModule> compiled_module,
|
|
|
| Handle<WasmModuleObject> WasmModuleObject::New(
|
| Isolate* isolate, Handle<WasmCompiledModule> compiled_module) {
|
| - WasmModule* module = compiled_module->module();
|
| - Handle<JSObject> module_object;
|
| - if (module->is_wasm()) {
|
| - Handle<JSFunction> module_cons(
|
| - isolate->native_context()->wasm_module_constructor());
|
| - module_object = isolate->factory()->NewJSObject(module_cons);
|
| - Handle<Symbol> module_sym(isolate->native_context()->wasm_module_sym());
|
| - Object::SetProperty(module_object, module_sym, module_object, STRICT)
|
| - .Check();
|
| - } else {
|
| - DCHECK(module->is_asm_js());
|
| - Handle<Map> map = isolate->factory()->NewMap(
|
| - JS_OBJECT_TYPE,
|
| - JSObject::kHeaderSize + WasmModuleObject::kFieldCount * kPointerSize);
|
| - module_object = isolate->factory()->NewJSObjectFromMap(map, TENURED);
|
| - }
|
| - module_object->SetEmbedderField(WasmModuleObject::kCompiledModule,
|
| - *compiled_module);
|
| + Handle<JSFunction> module_cons(
|
| + isolate->native_context()->wasm_module_constructor());
|
| + auto module_object = Handle<WasmModuleObject>::cast(
|
| + isolate->factory()->NewJSObject(module_cons));
|
| + Handle<Symbol> module_sym(isolate->native_context()->wasm_module_sym());
|
| + Object::SetProperty(module_object, module_sym, module_object, STRICT).Check();
|
| + module_object->set_compiled_module(*compiled_module);
|
| Handle<WeakCell> link_to_module =
|
| isolate->factory()->NewWeakCell(module_object);
|
| compiled_module->set_weak_wasm_module(link_to_module);
|
| - return Handle<WasmModuleObject>::cast(module_object);
|
| -}
|
| -
|
| -WasmModuleObject* WasmModuleObject::cast(Object* object) {
|
| - DCHECK(object->IsJSObject());
|
| - // TODO(titzer): brand check for WasmModuleObject.
|
| - return reinterpret_cast<WasmModuleObject*>(object);
|
| + return module_object;
|
| }
|
|
|
| -bool WasmModuleObject::IsWasmModuleObject(Object* object) {
|
| - return object->IsJSObject() &&
|
| - JSObject::cast(object)->GetEmbedderFieldCount() == kFieldCount;
|
| -}
|
| -
|
| -DEFINE_OBJ_GETTER(WasmModuleObject, compiled_module, kCompiledModule,
|
| - WasmCompiledModule)
|
| -
|
| Handle<WasmTableObject> WasmTableObject::New(Isolate* isolate, uint32_t initial,
|
| int64_t maximum,
|
| Handle<FixedArray>* js_functions) {
|
| Handle<JSFunction> table_ctor(
|
| isolate->native_context()->wasm_table_constructor());
|
| - Handle<JSObject> table_obj = isolate->factory()->NewJSObject(table_ctor);
|
| - table_obj->SetEmbedderField(kWrapperTracerHeader, Smi::kZero);
|
| + auto table_obj = Handle<WasmTableObject>::cast(
|
| + isolate->factory()->NewJSObject(table_ctor));
|
|
|
| *js_functions = isolate->factory()->NewFixedArray(initial);
|
| Object* null = isolate->heap()->null_value();
|
| for (int i = 0; i < static_cast<int>(initial); ++i) {
|
| (*js_functions)->set(i, null);
|
| }
|
| - table_obj->SetEmbedderField(kFunctions, *(*js_functions));
|
| - Handle<Object> max = isolate->factory()->NewNumber(maximum);
|
| - table_obj->SetEmbedderField(kMaximum, *max);
|
| + table_obj->set_functions(**js_functions);
|
| + DCHECK_EQ(maximum, static_cast<int>(maximum));
|
| + table_obj->set_maximum_length(static_cast<int>(maximum));
|
|
|
| Handle<FixedArray> dispatch_tables = isolate->factory()->NewFixedArray(0);
|
| - table_obj->SetEmbedderField(kDispatchTables, *dispatch_tables);
|
| + table_obj->set_dispatch_tables(*dispatch_tables);
|
| Handle<Symbol> table_sym(isolate->native_context()->wasm_table_sym());
|
| Object::SetProperty(table_obj, table_sym, table_obj, STRICT).Check();
|
| return Handle<WasmTableObject>::cast(table_obj);
|
| @@ -264,8 +199,7 @@ Handle<FixedArray> WasmTableObject::AddDispatchTable(
|
| Isolate* isolate, Handle<WasmTableObject> table_obj,
|
| Handle<WasmInstanceObject> instance, int table_index,
|
| Handle<FixedArray> function_table, Handle<FixedArray> signature_table) {
|
| - Handle<FixedArray> dispatch_tables(
|
| - FixedArray::cast(table_obj->GetEmbedderField(kDispatchTables)), isolate);
|
| + Handle<FixedArray> dispatch_tables(table_obj->dispatch_tables());
|
| DCHECK_EQ(0, dispatch_tables->length() % 4);
|
|
|
| if (instance.is_null()) return dispatch_tables;
|
| @@ -281,35 +215,13 @@ Handle<FixedArray> WasmTableObject::AddDispatchTable(
|
| new_dispatch_tables->set(dispatch_tables->length() + 2, *function_table);
|
| new_dispatch_tables->set(dispatch_tables->length() + 3, *signature_table);
|
|
|
| - table_obj->SetEmbedderField(WasmTableObject::kDispatchTables,
|
| - *new_dispatch_tables);
|
| + table_obj->set_dispatch_tables(*new_dispatch_tables);
|
|
|
| return new_dispatch_tables;
|
| }
|
|
|
| -DEFINE_OBJ_ACCESSORS(WasmTableObject, functions, kFunctions, FixedArray)
|
| -
|
| -DEFINE_OBJ_GETTER(WasmTableObject, dispatch_tables, kDispatchTables, FixedArray)
|
| -
|
| -uint32_t WasmTableObject::current_length() { return functions()->length(); }
|
| -
|
| -bool WasmTableObject::has_maximum_length() {
|
| - return GetEmbedderField(kMaximum)->Number() >= 0;
|
| -}
|
| -
|
| -int64_t WasmTableObject::maximum_length() {
|
| - return static_cast<int64_t>(GetEmbedderField(kMaximum)->Number());
|
| -}
|
| -
|
| -WasmTableObject* WasmTableObject::cast(Object* object) {
|
| - DCHECK(object && object->IsJSObject());
|
| - // TODO(titzer): brand check for WasmTableObject.
|
| - return reinterpret_cast<WasmTableObject*>(object);
|
| -}
|
| -
|
| void WasmTableObject::grow(Isolate* isolate, uint32_t count) {
|
| - Handle<FixedArray> dispatch_tables(
|
| - FixedArray::cast(GetEmbedderField(kDispatchTables)));
|
| + Handle<FixedArray> dispatch_tables(this->dispatch_tables());
|
| DCHECK_EQ(0, dispatch_tables->length() % 4);
|
| uint32_t old_size = functions()->length();
|
|
|
| @@ -406,46 +318,26 @@ Handle<WasmMemoryObject> WasmMemoryObject::New(Isolate* isolate,
|
| int32_t maximum) {
|
| Handle<JSFunction> memory_ctor(
|
| isolate->native_context()->wasm_memory_constructor());
|
| - Handle<JSObject> memory_obj =
|
| - isolate->factory()->NewJSObject(memory_ctor, TENURED);
|
| - memory_obj->SetEmbedderField(kWrapperTracerHeader, Smi::kZero);
|
| + auto memory_obj = Handle<WasmMemoryObject>::cast(
|
| + isolate->factory()->NewJSObject(memory_ctor, TENURED));
|
| if (buffer.is_null()) {
|
| const bool enable_guard_regions = EnableGuardRegions();
|
| buffer = SetupArrayBuffer(isolate, nullptr, 0, nullptr, 0, false,
|
| enable_guard_regions);
|
| }
|
| - memory_obj->SetEmbedderField(kArrayBuffer, *buffer);
|
| - Handle<Object> max = isolate->factory()->NewNumber(maximum);
|
| - memory_obj->SetEmbedderField(kMaximum, *max);
|
| + memory_obj->set_array_buffer(*buffer);
|
| + memory_obj->set_maximum_pages(maximum);
|
| Handle<Symbol> memory_sym(isolate->native_context()->wasm_memory_sym());
|
| Object::SetProperty(memory_obj, memory_sym, memory_obj, STRICT).Check();
|
| return Handle<WasmMemoryObject>::cast(memory_obj);
|
| }
|
|
|
| -DEFINE_OBJ_ACCESSORS(WasmMemoryObject, buffer, kArrayBuffer, JSArrayBuffer)
|
| -DEFINE_OPTIONAL_OBJ_ACCESSORS(WasmMemoryObject, instances_link, kInstancesLink,
|
| - WasmInstanceWrapper)
|
| -
|
| uint32_t WasmMemoryObject::current_pages() {
|
| uint32_t byte_length;
|
| - CHECK(buffer()->byte_length()->ToUint32(&byte_length));
|
| + CHECK(array_buffer()->byte_length()->ToUint32(&byte_length));
|
| return byte_length / wasm::WasmModule::kPageSize;
|
| }
|
|
|
| -bool WasmMemoryObject::has_maximum_pages() {
|
| - return GetEmbedderField(kMaximum)->Number() >= 0;
|
| -}
|
| -
|
| -int32_t WasmMemoryObject::maximum_pages() {
|
| - return static_cast<int32_t>(GetEmbedderField(kMaximum)->Number());
|
| -}
|
| -
|
| -WasmMemoryObject* WasmMemoryObject::cast(Object* object) {
|
| - DCHECK(object && object->IsJSObject());
|
| - // TODO(titzer): brand check for WasmMemoryObject.
|
| - return reinterpret_cast<WasmMemoryObject*>(object);
|
| -}
|
| -
|
| void WasmMemoryObject::AddInstance(Isolate* isolate,
|
| Handle<WasmInstanceObject> instance) {
|
| Handle<WasmInstanceWrapper> instance_wrapper =
|
| @@ -460,16 +352,11 @@ void WasmMemoryObject::AddInstance(Isolate* isolate,
|
| set_instances_link(*instance_wrapper);
|
| }
|
|
|
| -void WasmMemoryObject::ResetInstancesLink(Isolate* isolate) {
|
| - Handle<Object> undefined = isolate->factory()->undefined_value();
|
| - SetEmbedderField(kInstancesLink, *undefined);
|
| -}
|
| -
|
| // static
|
| int32_t WasmMemoryObject::Grow(Isolate* isolate,
|
| Handle<WasmMemoryObject> memory_object,
|
| uint32_t pages) {
|
| - Handle<JSArrayBuffer> old_buffer(memory_object->buffer());
|
| + Handle<JSArrayBuffer> old_buffer(memory_object->array_buffer());
|
| uint32_t old_size = 0;
|
| CHECK(old_buffer->byte_length()->ToUint32(&old_size));
|
| Handle<JSArrayBuffer> new_buffer;
|
| @@ -482,7 +369,7 @@ int32_t WasmMemoryObject::Grow(Isolate* isolate,
|
| isolate, old_buffer->allocation_base(),
|
| old_buffer->allocation_length(), old_buffer->backing_store(),
|
| old_size, old_buffer->is_external(), old_buffer->has_guard_region());
|
| - memory_object->set_buffer(*new_buffer);
|
| + memory_object->set_array_buffer(*new_buffer);
|
| }
|
| DCHECK_EQ(0, old_size % WasmModule::kPageSize);
|
| return old_size / WasmModule::kPageSize;
|
| @@ -504,7 +391,7 @@ int32_t WasmMemoryObject::Grow(Isolate* isolate,
|
| DCHECK(WasmInstanceWrapper::IsWasmInstanceWrapper(*instance_wrapper));
|
| DCHECK(instance_wrapper->has_instance());
|
| Handle<WasmInstanceObject> instance = instance_wrapper->instance_object();
|
| - DCHECK(IsWasmInstance(*instance));
|
| + DCHECK(instance->IsWasmInstanceObject());
|
| uint32_t max_pages = instance->GetMaxMemoryPages();
|
|
|
| // Grow memory object buffer and update instances associated with it.
|
| @@ -518,31 +405,16 @@ int32_t WasmMemoryObject::Grow(Isolate* isolate,
|
| instance_wrapper = instance_wrapper->next_wrapper();
|
| DCHECK(WasmInstanceWrapper::IsWasmInstanceWrapper(*instance_wrapper));
|
| Handle<WasmInstanceObject> instance = instance_wrapper->instance_object();
|
| - DCHECK(IsWasmInstance(*instance));
|
| + DCHECK(instance->IsWasmInstanceObject());
|
| SetInstanceMemory(isolate, instance, new_buffer);
|
| UncheckedUpdateInstanceMemory(isolate, instance, old_mem_start, old_size);
|
| }
|
| }
|
| - memory_object->set_buffer(*new_buffer);
|
| + memory_object->set_array_buffer(*new_buffer);
|
| DCHECK_EQ(0, old_size % WasmModule::kPageSize);
|
| return old_size / WasmModule::kPageSize;
|
| }
|
|
|
| -DEFINE_OBJ_ACCESSORS(WasmInstanceObject, compiled_module, kCompiledModule,
|
| - WasmCompiledModule)
|
| -DEFINE_OPTIONAL_OBJ_ACCESSORS(WasmInstanceObject, globals_buffer,
|
| - kGlobalsArrayBuffer, JSArrayBuffer)
|
| -DEFINE_OPTIONAL_OBJ_ACCESSORS(WasmInstanceObject, memory_buffer,
|
| - kMemoryArrayBuffer, JSArrayBuffer)
|
| -DEFINE_OPTIONAL_OBJ_ACCESSORS(WasmInstanceObject, memory_object, kMemoryObject,
|
| - WasmMemoryObject)
|
| -DEFINE_OPTIONAL_OBJ_ACCESSORS(WasmInstanceObject, debug_info, kDebugInfo,
|
| - WasmDebugInfo)
|
| -DEFINE_OPTIONAL_OBJ_ACCESSORS(WasmInstanceObject, instance_wrapper,
|
| - kWasmMemInstanceWrapper, WasmInstanceWrapper)
|
| -DEFINE_OPTIONAL_OBJ_ACCESSORS(WasmInstanceObject, directly_called_instances,
|
| - kDirectlyCalledInstances, FixedArray)
|
| -
|
| WasmModuleObject* WasmInstanceObject::module_object() {
|
| return *compiled_module()->wasm_module();
|
| }
|
| @@ -557,38 +429,12 @@ Handle<WasmDebugInfo> WasmInstanceObject::GetOrCreateDebugInfo(
|
| return new_info;
|
| }
|
|
|
| -WasmInstanceObject* WasmInstanceObject::cast(Object* object) {
|
| - DCHECK(IsWasmInstanceObject(object));
|
| - return reinterpret_cast<WasmInstanceObject*>(object);
|
| -}
|
| -
|
| -bool WasmInstanceObject::IsWasmInstanceObject(Object* object) {
|
| - if (!object->IsJSObject()) return false;
|
| -
|
| - JSObject* obj = JSObject::cast(object);
|
| - Isolate* isolate = obj->GetIsolate();
|
| - if (obj->GetEmbedderFieldCount() != kFieldCount) {
|
| - return false;
|
| - }
|
| -
|
| - Object* mem = obj->GetEmbedderField(kMemoryArrayBuffer);
|
| - if (!(mem->IsUndefined(isolate) || mem->IsJSArrayBuffer()) ||
|
| - !WasmCompiledModule::IsWasmCompiledModule(
|
| - obj->GetEmbedderField(kCompiledModule))) {
|
| - return false;
|
| - }
|
| -
|
| - // All checks passed.
|
| - return true;
|
| -}
|
| -
|
| Handle<WasmInstanceObject> WasmInstanceObject::New(
|
| Isolate* isolate, Handle<WasmCompiledModule> compiled_module) {
|
| Handle<JSFunction> instance_cons(
|
| isolate->native_context()->wasm_instance_constructor());
|
| Handle<JSObject> instance_object =
|
| isolate->factory()->NewJSObject(instance_cons, TENURED);
|
| - instance_object->SetEmbedderField(kWrapperTracerHeader, Smi::kZero);
|
|
|
| Handle<Symbol> instance_sym(isolate->native_context()->wasm_instance_sym());
|
| Object::SetProperty(instance_object, instance_sym, instance_object, STRICT)
|
| @@ -596,11 +442,10 @@ Handle<WasmInstanceObject> WasmInstanceObject::New(
|
| Handle<WasmInstanceObject> instance(
|
| reinterpret_cast<WasmInstanceObject*>(*instance_object), isolate);
|
|
|
| - instance->SetEmbedderField(kCompiledModule, *compiled_module);
|
| - instance->SetEmbedderField(kMemoryObject, isolate->heap()->undefined_value());
|
| + instance->set_compiled_module(*compiled_module);
|
| Handle<WasmInstanceWrapper> instance_wrapper =
|
| WasmInstanceWrapper::New(isolate, instance);
|
| - instance->SetEmbedderField(kWasmMemInstanceWrapper, *instance_wrapper);
|
| + instance->set_instance_wrapper(*instance_wrapper);
|
| return instance;
|
| }
|
|
|
| @@ -656,16 +501,6 @@ uint32_t WasmInstanceObject::GetMaxMemoryPages() {
|
| return FLAG_wasm_max_mem_pages;
|
| }
|
|
|
| -WasmInstanceObject* WasmExportedFunction::instance() {
|
| - return WasmInstanceObject::cast(GetEmbedderField(kInstance));
|
| -}
|
| -
|
| -int WasmExportedFunction::function_index() {
|
| - int32_t func_index;
|
| - CHECK(GetEmbedderField(kIndex)->ToInt32(&func_index));
|
| - return func_index;
|
| -}
|
| -
|
| WasmExportedFunction* WasmExportedFunction::cast(Object* object) {
|
| DCHECK(object && object->IsJSFunction());
|
| DCHECK_EQ(Code::JS_TO_WASM_FUNCTION,
|
| @@ -694,14 +529,16 @@ Handle<WasmExportedFunction> WasmExportedFunction::New(
|
| isolate->factory()->NewSharedFunctionInfo(name, export_wrapper, false);
|
| shared->set_length(arity);
|
| shared->set_internal_formal_parameter_count(arity);
|
| - Handle<JSFunction> function = isolate->factory()->NewFunction(
|
| + Handle<JSFunction> js_function = isolate->factory()->NewFunction(
|
| isolate->wasm_function_map(), name, export_wrapper);
|
| - function->SetEmbedderField(kWrapperTracerHeader, Smi::kZero);
|
| +
|
| + Handle<WasmExportedFunction> function(
|
| + reinterpret_cast<WasmExportedFunction*>(*js_function), isolate);
|
|
|
| function->set_shared(*shared);
|
| + function->set_instance(*instance);
|
| + function->set_function_index(func_index);
|
|
|
| - function->SetEmbedderField(kInstance, *instance);
|
| - function->SetEmbedderField(kIndex, Smi::FromInt(func_index));
|
| return Handle<WasmExportedFunction>::cast(function);
|
| }
|
|
|
| @@ -710,16 +547,16 @@ bool WasmSharedModuleData::IsWasmSharedModuleData(Object* object) {
|
| FixedArray* arr = FixedArray::cast(object);
|
| if (arr->length() != kFieldCount) return false;
|
| Isolate* isolate = arr->GetIsolate();
|
| - if (!arr->get(kModuleWrapper)->IsForeign()) return false;
|
| - if (!arr->get(kModuleBytes)->IsUndefined(isolate) &&
|
| - !arr->get(kModuleBytes)->IsSeqOneByteString())
|
| + if (!arr->get(kModuleWrapperIndex)->IsForeign()) return false;
|
| + if (!arr->get(kModuleBytesIndex)->IsUndefined(isolate) &&
|
| + !arr->get(kModuleBytesIndex)->IsSeqOneByteString())
|
| return false;
|
| - if (!arr->get(kScript)->IsScript()) return false;
|
| - if (!arr->get(kAsmJsOffsetTable)->IsUndefined(isolate) &&
|
| - !arr->get(kAsmJsOffsetTable)->IsByteArray())
|
| + if (!arr->get(kScriptIndex)->IsScript()) return false;
|
| + if (!arr->get(kAsmJsOffsetTableIndex)->IsUndefined(isolate) &&
|
| + !arr->get(kAsmJsOffsetTableIndex)->IsByteArray())
|
| return false;
|
| - if (!arr->get(kBreakPointInfos)->IsUndefined(isolate) &&
|
| - !arr->get(kBreakPointInfos)->IsFixedArray())
|
| + if (!arr->get(kBreakPointInfosIndex)->IsUndefined(isolate) &&
|
| + !arr->get(kBreakPointInfosIndex)->IsFixedArray())
|
| return false;
|
| return true;
|
| }
|
| @@ -736,41 +573,34 @@ wasm::WasmModule* WasmSharedModuleData::module() {
|
| // a Managed<WasmModule> object, as well as cases when it's managed
|
| // by the embedder. CcTests fall into the latter case.
|
| return *(reinterpret_cast<wasm::WasmModule**>(
|
| - Foreign::cast(get(kModuleWrapper))->foreign_address()));
|
| + Foreign::cast(get(kModuleWrapperIndex))->foreign_address()));
|
| }
|
|
|
| -DEFINE_OPTIONAL_ARR_ACCESSORS(WasmSharedModuleData, module_bytes, kModuleBytes,
|
| - SeqOneByteString);
|
| -DEFINE_ARR_GETTER(WasmSharedModuleData, script, kScript, Script);
|
| -DEFINE_OPTIONAL_ARR_ACCESSORS(WasmSharedModuleData, asm_js_offset_table,
|
| - kAsmJsOffsetTable, ByteArray);
|
| -DEFINE_OPTIONAL_ARR_GETTER(WasmSharedModuleData, breakpoint_infos,
|
| - kBreakPointInfos, FixedArray);
|
| -DEFINE_OPTIONAL_ARR_GETTER(WasmSharedModuleData, lazy_compilation_orchestrator,
|
| - kLazyCompilationOrchestrator, Foreign);
|
| -
|
| Handle<WasmSharedModuleData> WasmSharedModuleData::New(
|
| Isolate* isolate, Handle<Foreign> module_wrapper,
|
| Handle<SeqOneByteString> module_bytes, Handle<Script> script,
|
| Handle<ByteArray> asm_js_offset_table) {
|
| Handle<FixedArray> arr =
|
| isolate->factory()->NewFixedArray(kFieldCount, TENURED);
|
| - arr->set(kWrapperTracerHeader, Smi::kZero);
|
| - arr->set(kModuleWrapper, *module_wrapper);
|
| + arr->set(kModuleWrapperIndex, *module_wrapper);
|
| if (!module_bytes.is_null()) {
|
| - arr->set(kModuleBytes, *module_bytes);
|
| + arr->set(kModuleBytesIndex, *module_bytes);
|
| }
|
| if (!script.is_null()) {
|
| - arr->set(kScript, *script);
|
| + arr->set(kScriptIndex, *script);
|
| }
|
| if (!asm_js_offset_table.is_null()) {
|
| - arr->set(kAsmJsOffsetTable, *asm_js_offset_table);
|
| + arr->set(kAsmJsOffsetTableIndex, *asm_js_offset_table);
|
| }
|
|
|
| DCHECK(WasmSharedModuleData::IsWasmSharedModuleData(*arr));
|
| return Handle<WasmSharedModuleData>::cast(arr);
|
| }
|
|
|
| +Foreign* WasmSharedModuleData::lazy_compilation_orchestrator() {
|
| + return Foreign::cast(get(kLazyCompilationOrchestratorIndex));
|
| +}
|
| +
|
| bool WasmSharedModuleData::is_asm_js() {
|
| bool asm_js = module()->is_asm_js();
|
| DCHECK_EQ(asm_js, script()->IsUserJavaScript());
|
| @@ -780,7 +610,7 @@ bool WasmSharedModuleData::is_asm_js() {
|
|
|
| void WasmSharedModuleData::ReinitializeAfterDeserialization(
|
| Isolate* isolate, Handle<WasmSharedModuleData> shared) {
|
| - DCHECK(shared->get(kModuleWrapper)->IsUndefined(isolate));
|
| + DCHECK(shared->get(kModuleWrapperIndex)->IsUndefined(isolate));
|
| #ifdef DEBUG
|
| // No BreakpointInfo objects should survive deserialization.
|
| if (shared->has_breakpoint_infos()) {
|
| @@ -790,7 +620,7 @@ void WasmSharedModuleData::ReinitializeAfterDeserialization(
|
| }
|
| #endif
|
|
|
| - shared->set(kBreakPointInfos, isolate->heap()->undefined_value());
|
| + shared->set(kBreakPointInfosIndex, isolate->heap()->undefined_value());
|
|
|
| WasmModule* module = nullptr;
|
| {
|
| @@ -815,7 +645,7 @@ void WasmSharedModuleData::ReinitializeAfterDeserialization(
|
| Handle<WasmModuleWrapper> module_wrapper =
|
| WasmModuleWrapper::New(isolate, module);
|
|
|
| - shared->set(kModuleWrapper, *module_wrapper);
|
| + shared->set(kModuleWrapperIndex, *module_wrapper);
|
| DCHECK(WasmSharedModuleData::IsWasmSharedModuleData(*shared));
|
| }
|
|
|
| @@ -860,7 +690,7 @@ void WasmSharedModuleData::AddBreakpoint(Handle<WasmSharedModuleData> shared,
|
| breakpoint_infos = handle(shared->breakpoint_infos(), isolate);
|
| } else {
|
| breakpoint_infos = isolate->factory()->NewFixedArray(4, TENURED);
|
| - shared->set(kBreakPointInfos, *breakpoint_infos);
|
| + shared->set(kBreakPointInfosIndex, *breakpoint_infos);
|
| }
|
|
|
| int insert_pos =
|
| @@ -884,7 +714,7 @@ void WasmSharedModuleData::AddBreakpoint(Handle<WasmSharedModuleData> shared,
|
| if (need_realloc) {
|
| new_breakpoint_infos = isolate->factory()->NewFixedArray(
|
| 2 * breakpoint_infos->length(), TENURED);
|
| - shared->set(kBreakPointInfos, *new_breakpoint_infos);
|
| + shared->set(kBreakPointInfosIndex, *new_breakpoint_infos);
|
| // Copy over the entries [0, insert_pos).
|
| for (int i = 0; i < insert_pos; ++i)
|
| new_breakpoint_infos->set(i, breakpoint_infos->get(i));
|
| @@ -946,7 +776,7 @@ void WasmSharedModuleData::PrepareForLazyCompilation(
|
| LazyCompilationOrchestrator* orch = new LazyCompilationOrchestrator();
|
| Handle<Managed<LazyCompilationOrchestrator>> orch_handle =
|
| Managed<LazyCompilationOrchestrator>::New(isolate, orch);
|
| - shared->set(WasmSharedModuleData::kLazyCompilationOrchestrator, *orch_handle);
|
| + shared->set(kLazyCompilationOrchestratorIndex, *orch_handle);
|
| }
|
|
|
| Handle<WasmCompiledModule> WasmCompiledModule::New(
|
| @@ -1575,28 +1405,25 @@ Handle<Code> WasmCompiledModule::CompileLazy(
|
| Handle<WasmInstanceWrapper> WasmInstanceWrapper::New(
|
| Isolate* isolate, Handle<WasmInstanceObject> instance) {
|
| Handle<FixedArray> array =
|
| - isolate->factory()->NewFixedArray(kWrapperPropertyCount, TENURED);
|
| + isolate->factory()->NewFixedArray(kFieldCount, TENURED);
|
| Handle<WasmInstanceWrapper> instance_wrapper(
|
| reinterpret_cast<WasmInstanceWrapper*>(*array), isolate);
|
| Handle<WeakCell> cell = isolate->factory()->NewWeakCell(instance);
|
| - instance_wrapper->set(kWrapperInstanceObject, *cell);
|
| + instance_wrapper->set(kWrapperInstanceObjectIndex, *cell);
|
| return instance_wrapper;
|
| }
|
|
|
| bool WasmInstanceWrapper::IsWasmInstanceWrapper(Object* obj) {
|
| if (!obj->IsFixedArray()) return false;
|
| Handle<FixedArray> array = handle(FixedArray::cast(obj));
|
| - if (array->length() != kWrapperPropertyCount) return false;
|
| - if (!array->get(kWrapperInstanceObject)->IsWeakCell()) return false;
|
| + if (array->length() != kFieldCount) return false;
|
| + if (!array->get(kWrapperInstanceObjectIndex)->IsWeakCell()) return false;
|
| Isolate* isolate = array->GetIsolate();
|
| - if (!array->get(kNextInstanceWrapper)->IsUndefined(isolate) &&
|
| - !array->get(kNextInstanceWrapper)->IsFixedArray())
|
| + if (!array->get(kNextInstanceWrapperIndex)->IsUndefined(isolate) &&
|
| + !array->get(kNextInstanceWrapperIndex)->IsFixedArray())
|
| return false;
|
| - if (!array->get(kPreviousInstanceWrapper)->IsUndefined(isolate) &&
|
| - !array->get(kPreviousInstanceWrapper)->IsFixedArray())
|
| + if (!array->get(kPreviousInstanceWrapperIndex)->IsUndefined(isolate) &&
|
| + !array->get(kPreviousInstanceWrapperIndex)->IsFixedArray())
|
| return false;
|
| return true;
|
| }
|
| -
|
| -DEFINE_OPTIONAL_ARR_ACCESSORS(WasmDebugInfo, locals_names, kLocalsNames,
|
| - FixedArray)
|
|
|