| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/wasm/wasm-objects.h" | 5 #include "src/wasm/wasm-objects.h" |
| 6 #include "src/utils.h" | 6 #include "src/utils.h" |
| 7 | 7 |
| 8 #include "src/base/iterator.h" | 8 #include "src/base/iterator.h" |
| 9 #include "src/debug/debug-interface.h" | 9 #include "src/debug/debug-interface.h" |
| 10 #include "src/wasm/module-decoder.h" | 10 #include "src/wasm/module-decoder.h" |
| (...skipping 545 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 556 return Handle<WasmSharedModuleData>::cast(arr); | 556 return Handle<WasmSharedModuleData>::cast(arr); |
| 557 } | 557 } |
| 558 | 558 |
| 559 bool WasmSharedModuleData::is_asm_js() { | 559 bool WasmSharedModuleData::is_asm_js() { |
| 560 bool asm_js = module()->origin == wasm::ModuleOrigin::kAsmJsOrigin; | 560 bool asm_js = module()->origin == wasm::ModuleOrigin::kAsmJsOrigin; |
| 561 DCHECK_EQ(asm_js, script()->type() == Script::TYPE_NORMAL); | 561 DCHECK_EQ(asm_js, script()->type() == Script::TYPE_NORMAL); |
| 562 DCHECK_EQ(asm_js, has_asm_js_offset_table()); | 562 DCHECK_EQ(asm_js, has_asm_js_offset_table()); |
| 563 return asm_js; | 563 return asm_js; |
| 564 } | 564 } |
| 565 | 565 |
| 566 void WasmSharedModuleData::RecreateModuleWrapper( | 566 void WasmSharedModuleData::ReinitializeAfterDeserialization( |
| 567 Isolate* isolate, Handle<WasmSharedModuleData> shared) { | 567 Isolate* isolate, Handle<WasmSharedModuleData> shared) { |
| 568 DCHECK(shared->get(kModuleWrapper)->IsUndefined(isolate)); | 568 DCHECK(shared->get(kModuleWrapper)->IsUndefined(isolate)); |
| 569 #ifdef DEBUG |
| 570 // No BreakpointInfo objects should survive deserialization. |
| 571 if (shared->has_breakpoint_infos()) { |
| 572 for (int i = 0, e = shared->breakpoint_infos()->length(); i < e; ++i) { |
| 573 DCHECK(shared->breakpoint_infos()->get(i)->IsUndefined(isolate)); |
| 574 } |
| 575 } |
| 576 #endif |
| 577 |
| 578 shared->set(kBreakPointInfos, isolate->heap()->undefined_value()); |
| 569 | 579 |
| 570 WasmModule* module = nullptr; | 580 WasmModule* module = nullptr; |
| 571 { | 581 { |
| 572 // We parse the module again directly from the module bytes, so | 582 // We parse the module again directly from the module bytes, so |
| 573 // the underlying storage must not be moved meanwhile. | 583 // the underlying storage must not be moved meanwhile. |
| 574 DisallowHeapAllocation no_allocation; | 584 DisallowHeapAllocation no_allocation; |
| 575 SeqOneByteString* module_bytes = shared->module_bytes(); | 585 SeqOneByteString* module_bytes = shared->module_bytes(); |
| 576 const byte* start = | 586 const byte* start = |
| 577 reinterpret_cast<const byte*>(module_bytes->GetCharsAddress()); | 587 reinterpret_cast<const byte*>(module_bytes->GetCharsAddress()); |
| 578 const byte* end = start + module_bytes->length(); | 588 const byte* end = start + module_bytes->length(); |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 781 PrintF("->%d", current->instance_id()); | 791 PrintF("->%d", current->instance_id()); |
| 782 if (!current->has_weak_next_instance()) break; | 792 if (!current->has_weak_next_instance()) break; |
| 783 CHECK(!current->ptr_to_weak_next_instance()->cleared()); | 793 CHECK(!current->ptr_to_weak_next_instance()->cleared()); |
| 784 current = | 794 current = |
| 785 WasmCompiledModule::cast(current->ptr_to_weak_next_instance()->value()); | 795 WasmCompiledModule::cast(current->ptr_to_weak_next_instance()->value()); |
| 786 } | 796 } |
| 787 PrintF("\n"); | 797 PrintF("\n"); |
| 788 #endif | 798 #endif |
| 789 } | 799 } |
| 790 | 800 |
| 791 void WasmCompiledModule::RecreateModuleWrapper( | 801 void WasmCompiledModule::ReinitializeAfterDeserialization( |
| 792 Isolate* isolate, Handle<WasmCompiledModule> compiled_module) { | 802 Isolate* isolate, Handle<WasmCompiledModule> compiled_module) { |
| 793 // This method must only be called immediately after deserialization. | 803 // This method must only be called immediately after deserialization. |
| 794 // At this point, no module wrapper exists, so the shared module data is | 804 // At this point, no module wrapper exists, so the shared module data is |
| 795 // incomplete. | 805 // incomplete. |
| 796 Handle<WasmSharedModuleData> shared( | 806 Handle<WasmSharedModuleData> shared( |
| 797 static_cast<WasmSharedModuleData*>(compiled_module->get(kID_shared)), | 807 static_cast<WasmSharedModuleData*>(compiled_module->get(kID_shared)), |
| 798 isolate); | 808 isolate); |
| 799 DCHECK(!WasmSharedModuleData::IsWasmSharedModuleData(*shared)); | 809 DCHECK(!WasmSharedModuleData::IsWasmSharedModuleData(*shared)); |
| 800 WasmSharedModuleData::RecreateModuleWrapper(isolate, shared); | 810 WasmSharedModuleData::ReinitializeAfterDeserialization(isolate, shared); |
| 801 DCHECK(WasmSharedModuleData::IsWasmSharedModuleData(*shared)); | 811 DCHECK(WasmSharedModuleData::IsWasmSharedModuleData(*shared)); |
| 802 } | 812 } |
| 803 | 813 |
| 804 uint32_t WasmCompiledModule::mem_size() const { | 814 uint32_t WasmCompiledModule::mem_size() const { |
| 805 return has_memory() ? memory()->byte_length()->Number() : default_mem_size(); | 815 return has_memory() ? memory()->byte_length()->Number() : default_mem_size(); |
| 806 } | 816 } |
| 807 | 817 |
| 808 uint32_t WasmCompiledModule::default_mem_size() const { | 818 uint32_t WasmCompiledModule::default_mem_size() const { |
| 809 return min_mem_pages() * WasmModule::kPageSize; | 819 return min_mem_pages() * WasmModule::kPageSize; |
| 810 } | 820 } |
| (...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1161 !array->get(kPreviousInstanceWrapper)->IsFixedArray()) | 1171 !array->get(kPreviousInstanceWrapper)->IsFixedArray()) |
| 1162 return false; | 1172 return false; |
| 1163 return true; | 1173 return true; |
| 1164 } | 1174 } |
| 1165 | 1175 |
| 1166 void WasmInstanceWrapper::set_instance_object(Handle<JSObject> instance, | 1176 void WasmInstanceWrapper::set_instance_object(Handle<JSObject> instance, |
| 1167 Isolate* isolate) { | 1177 Isolate* isolate) { |
| 1168 Handle<WeakCell> cell = isolate->factory()->NewWeakCell(instance); | 1178 Handle<WeakCell> cell = isolate->factory()->NewWeakCell(instance); |
| 1169 set(kWrapperInstanceObject, *cell); | 1179 set(kWrapperInstanceObject, *cell); |
| 1170 } | 1180 } |
| OLD | NEW |