[wasm] external serialization APIs
V8 APIs for wasm serialization/deserialization. BUG=v8:5072 Review-Url: https://codereview.chromium.org/2226753002 Cr-Commit-Position: refs/heads/master@{#38455}
This commit is contained in:
parent
9b6c57045d
commit
5de4722278
@ -1952,6 +1952,7 @@ class V8_EXPORT Value : public Data {
|
|||||||
*/
|
*/
|
||||||
bool IsProxy() const;
|
bool IsProxy() const;
|
||||||
|
|
||||||
|
bool IsWebAssemblyCompiledModule() const;
|
||||||
|
|
||||||
V8_WARN_UNUSED_RESULT MaybeLocal<Boolean> ToBoolean(
|
V8_WARN_UNUSED_RESULT MaybeLocal<Boolean> ToBoolean(
|
||||||
Local<Context> context) const;
|
Local<Context> context) const;
|
||||||
|
@ -2958,6 +2958,9 @@ bool Value::IsNumber() const {
|
|||||||
|
|
||||||
bool Value::IsProxy() const { return Utils::OpenHandle(this)->IsJSProxy(); }
|
bool Value::IsProxy() const { return Utils::OpenHandle(this)->IsJSProxy(); }
|
||||||
|
|
||||||
|
bool Value::IsWebAssemblyCompiledModule() const {
|
||||||
|
return Utils::OpenHandle(this)->IsWebAssemblyCompiledModule();
|
||||||
|
}
|
||||||
|
|
||||||
#define VALUE_IS_SPECIFIC_TYPE(Type, Class) \
|
#define VALUE_IS_SPECIFIC_TYPE(Type, Class) \
|
||||||
bool Value::Is##Type() const { \
|
bool Value::Is##Type() const { \
|
||||||
|
@ -143,6 +143,12 @@ bool HeapObject::IsFixedArrayBase() const {
|
|||||||
return IsFixedArray() || IsFixedDoubleArray() || IsFixedTypedArrayBase();
|
return IsFixedArray() || IsFixedDoubleArray() || IsFixedTypedArrayBase();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool HeapObject::IsWebAssemblyCompiledModule() const {
|
||||||
|
if (!IsJSObject()) return false;
|
||||||
|
return GetIsolate()->native_context()->wasm_module_constructor() ==
|
||||||
|
this->map()->GetConstructor();
|
||||||
|
}
|
||||||
|
|
||||||
bool HeapObject::IsFixedArray() const {
|
bool HeapObject::IsFixedArray() const {
|
||||||
InstanceType instance_type = map()->instance_type();
|
InstanceType instance_type = map()->instance_type();
|
||||||
return instance_type == FIXED_ARRAY_TYPE ||
|
return instance_type == FIXED_ARRAY_TYPE ||
|
||||||
|
@ -58,6 +58,7 @@
|
|||||||
#include "src/string-search.h"
|
#include "src/string-search.h"
|
||||||
#include "src/string-stream.h"
|
#include "src/string-stream.h"
|
||||||
#include "src/utils.h"
|
#include "src/utils.h"
|
||||||
|
#include "src/wasm/wasm-module.h"
|
||||||
#include "src/zone.h"
|
#include "src/zone.h"
|
||||||
|
|
||||||
#ifdef ENABLE_DISASSEMBLER
|
#ifdef ENABLE_DISASSEMBLER
|
||||||
@ -19006,6 +19007,17 @@ Handle<JSArrayBuffer> JSTypedArray::GetBuffer() {
|
|||||||
return MaterializeArrayBuffer(self);
|
return MaterializeArrayBuffer(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::pair<std::unique_ptr<const byte>, size_t>
|
||||||
|
WebAssemblyCompiledModule::Serialize() {
|
||||||
|
// TODO(mtrofin): tie to the internal serialization API
|
||||||
|
return {std::unique_ptr<const byte>(), 0};
|
||||||
|
}
|
||||||
|
|
||||||
|
MaybeHandle<WebAssemblyCompiledModule> WebAssemblyCompiledModule::Deserialize(
|
||||||
|
Isolate* isolate, const byte* data, size_t size) {
|
||||||
|
// TODO(mtrofin): tie to the internal serialization API
|
||||||
|
return MaybeHandle<WebAssemblyCompiledModule>();
|
||||||
|
}
|
||||||
|
|
||||||
Handle<PropertyCell> PropertyCell::InvalidateEntry(
|
Handle<PropertyCell> PropertyCell::InvalidateEntry(
|
||||||
Handle<GlobalDictionary> dictionary, int entry) {
|
Handle<GlobalDictionary> dictionary, int entry) {
|
||||||
|
@ -1002,6 +1002,7 @@ template <class C> inline bool Is(Object* obj);
|
|||||||
V(JSWeakMap) \
|
V(JSWeakMap) \
|
||||||
V(JSWeakSet) \
|
V(JSWeakSet) \
|
||||||
V(JSRegExp) \
|
V(JSRegExp) \
|
||||||
|
V(WebAssemblyCompiledModule) \
|
||||||
V(HashTable) \
|
V(HashTable) \
|
||||||
V(Dictionary) \
|
V(Dictionary) \
|
||||||
V(UnseededNumberDictionary) \
|
V(UnseededNumberDictionary) \
|
||||||
@ -8149,6 +8150,25 @@ class JSMessageObject: public JSObject {
|
|||||||
kSize> BodyDescriptor;
|
kSize> BodyDescriptor;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// A compiled web assembly module.
|
||||||
|
class WebAssemblyCompiledModule : public JSObject {
|
||||||
|
public:
|
||||||
|
// Serialize the compiled module. The returned buffer is owned by
|
||||||
|
// the caller, who may simply leave the return value drop out of
|
||||||
|
// scope, once done processing the bytes.
|
||||||
|
// TODO(mtrofin): to avoid increased memory pressure, we should
|
||||||
|
// explore a caller-provided segmented memory design.
|
||||||
|
std::pair<std::unique_ptr<const byte>, size_t> Serialize();
|
||||||
|
|
||||||
|
// Deserialize a compiled module. The buffer is owned by the caller and may
|
||||||
|
// be released after deserialization returns.
|
||||||
|
static MaybeHandle<WebAssemblyCompiledModule> Deserialize(Isolate* isolate,
|
||||||
|
const byte* data,
|
||||||
|
size_t size);
|
||||||
|
|
||||||
|
private:
|
||||||
|
DISALLOW_IMPLICIT_CONSTRUCTORS(WebAssemblyCompiledModule);
|
||||||
|
};
|
||||||
|
|
||||||
// Regular expressions
|
// Regular expressions
|
||||||
// The regular expression holds a single reference to a FixedArray in
|
// The regular expression holds a single reference to a FixedArray in
|
||||||
|
Loading…
Reference in New Issue
Block a user