Chromium Code Reviews| Index: src/wasm/wasm-module.cc |
| diff --git a/src/wasm/wasm-module.cc b/src/wasm/wasm-module.cc |
| index fdec11b33fb572aac5fbc42a3145cef376484fd3..0a2cf51a9fa28b3ab9c77ace6039a44cc635dc4e 100644 |
| --- a/src/wasm/wasm-module.cc |
| +++ b/src/wasm/wasm-module.cc |
| @@ -5,12 +5,14 @@ |
| #include <memory> |
| #include "src/base/atomic-utils.h" |
| +#include "src/code-stubs.h" |
| + |
| #include "src/macro-assembler.h" |
| #include "src/objects.h" |
| #include "src/property-descriptor.h" |
| -#include "src/v8.h" |
| - |
| #include "src/simulator.h" |
| +#include "src/snapshot/snapshot.h" |
| +#include "src/v8.h" |
| #include "src/wasm/ast-decoder.h" |
| #include "src/wasm/module-decoder.h" |
| @@ -21,6 +23,11 @@ |
| #include "src/compiler/wasm-compiler.h" |
| +// DELETE THESE 2: |
| +#include "src/snapshot/code-serializer.h" |
| +#include "src/snapshot/deserializer.h" |
|
Yang
2016/08/05 15:39:28
Should this be removed?
Mircea Trofin
2016/08/06 00:31:39
Done.
|
| +// |
| + |
| namespace v8 { |
| namespace internal { |
| namespace wasm { |
| @@ -1517,6 +1524,50 @@ int GetNumberOfFunctions(JSObject* wasm) { |
| return ByteArray::cast(func_names_obj)->get_int(0); |
| } |
| +ScriptData* SerializeWasmCompiledModule(Isolate* isolate, |
| + Handle<FixedArray> compiled_module) { |
| + CodeSerializer cs(isolate, 0); |
| + cs.reference_map()->AddAttachedReference(*isolate->native_context()); |
|
Yang
2016/08/05 12:04:17
Can we put all this into src/snapshot in a new sub
Mircea Trofin
2016/08/05 15:01:29
Knowing we need to attach the native context is sp
Yang
2016/08/05 15:39:28
Same thing can be said for CodeSerializer::Seriali
Mircea Trofin
2016/08/06 00:31:39
Done.
I was a bit concerned that the serializer w
|
| + ScriptData* data = cs.Serialize(compiled_module); |
| + return data; |
| +} |
| + |
| +MaybeHandle<FixedArray> DeserializeWasmCompiledModule(Isolate* isolate, |
| + ScriptData* data) { |
| + SanityCheckResult sanity_check_result = CHECK_SUCCESS; |
| + MaybeHandle<FixedArray> nothing; |
| + const SerializedCodeData scd = SerializedCodeData::FromCachedData( |
| + isolate, data, 0, &sanity_check_result); |
| + |
| + if (sanity_check_result != SanityCheckResult::CHECK_SUCCESS) { |
| + return nothing; |
| + } |
| + |
| + Deserializer deserializer(&scd, true); |
| + deserializer.AddAttachedObject(isolate->native_context()); |
| + |
| + Vector<const uint32_t> stub_keys = scd.CodeStubKeys(); |
| + for (int i = 0; i < stub_keys.length(); ++i) { |
| + deserializer.AddAttachedObject( |
| + CodeStub::GetCode(isolate, stub_keys[i]).ToHandleChecked()); |
| + } |
| + |
| + MaybeHandle<HeapObject> obj = deserializer.DeserializeObject(isolate); |
| + if (obj.is_null() || !obj.ToHandleChecked()->IsFixedArray()) return nothing; |
| + return Handle<FixedArray>::cast(obj.ToHandleChecked()); |
| +} |
| + |
| +Handle<JSObject> CreateCompiledModuleObject( |
| + Isolate* isolate, Handle<FixedArray> compiled_module) { |
| + Handle<JSFunction> module_cons( |
| + isolate->native_context()->wasm_module_constructor()); |
| + Handle<JSObject> module_obj = isolate->factory()->NewJSObject(module_cons); |
| + module_obj->SetInternalField(0, *compiled_module); |
| + Handle<Symbol> module_sym(isolate->native_context()->wasm_module_sym()); |
| + Object::SetProperty(module_obj, module_sym, module_obj, STRICT).Check(); |
| + return module_obj; |
| +} |
| + |
| namespace testing { |
| int32_t CompileAndRunWasmModule(Isolate* isolate, const byte* module_start, |