Index: src/value-serializer.h |
diff --git a/src/value-serializer.h b/src/value-serializer.h |
index 433a6f72b0ebd8542f37a517e9a256070297c54a..83e93f5054fde71f87ba20e61dbef9bb2d45d028 100644 |
--- a/src/value-serializer.h |
+++ b/src/value-serializer.h |
@@ -11,7 +11,9 @@ |
#include "include/v8.h" |
#include "src/base/compiler-specific.h" |
#include "src/base/macros.h" |
+#include "src/identity-map.h" |
#include "src/vector.h" |
+#include "src/zone.h" |
namespace v8 { |
namespace internal { |
@@ -32,7 +34,7 @@ enum class SerializationTag : uint8_t; |
*/ |
class ValueSerializer { |
public: |
- ValueSerializer(); |
+ explicit ValueSerializer(Isolate* isolate); |
~ValueSerializer(); |
/* |
@@ -68,8 +70,26 @@ class ValueSerializer { |
void WriteSmi(Smi* smi); |
void WriteHeapNumber(HeapNumber* number); |
void WriteString(Handle<String> string); |
+ Maybe<bool> WriteJSReceiver(Handle<JSReceiver> receiver) WARN_UNUSED_RESULT; |
+ Maybe<bool> WriteJSObject(Handle<JSObject> object) WARN_UNUSED_RESULT; |
+ /* |
+ * Reads the specified keys from the object and writes key-value pairs to the |
+ * buffer. Returns the number of keys actually written, which may be smaller |
+ * if some keys are not own properties when accessed. |
+ */ |
+ Maybe<uint32_t> WriteJSObjectProperties( |
+ Handle<JSObject> object, Handle<FixedArray> keys) WARN_UNUSED_RESULT; |
+ |
+ Isolate* const isolate_; |
std::vector<uint8_t> buffer_; |
+ Zone zone_; |
+ |
+ // To avoid extra lookups in the identity map, ID+1 is actually stored in the |
+ // map (checking if the used identity is zero is the fast way of checking if |
+ // the entry is new). |
+ IdentityMap<uint32_t> id_map_; |
+ uint32_t next_id_ = 0; |
DISALLOW_COPY_AND_ASSIGN(ValueSerializer); |
}; |
@@ -95,6 +115,7 @@ class ValueDeserializer { |
private: |
// Reading the wire format. |
+ Maybe<SerializationTag> PeekTag() const WARN_UNUSED_RESULT; |
Maybe<SerializationTag> ReadTag() WARN_UNUSED_RESULT; |
template <typename T> |
Maybe<T> ReadVarint() WARN_UNUSED_RESULT; |
@@ -107,11 +128,26 @@ class ValueDeserializer { |
// The tag is assumed to have already been read. |
MaybeHandle<String> ReadUtf8String() WARN_UNUSED_RESULT; |
MaybeHandle<String> ReadTwoByteString() WARN_UNUSED_RESULT; |
+ MaybeHandle<JSObject> ReadJSObject() WARN_UNUSED_RESULT; |
+ |
+ /* |
+ * Reads key-value pairs into the object until the specified end tag is |
+ * encountered. If successful, returns the number of properties read. |
+ */ |
+ Maybe<uint32_t> ReadJSObjectProperties(Handle<JSObject> object, |
+ SerializationTag end_tag); |
+ |
+ // Manipulating the map from IDs to reified objects. |
+ bool HasObjectWithID(uint32_t id); |
+ MaybeHandle<JSReceiver> GetObjectWithID(uint32_t id); |
+ void AddObjectWithID(uint32_t id, Handle<JSReceiver> object); |
Isolate* const isolate_; |
const uint8_t* position_; |
const uint8_t* const end_; |
uint32_t version_ = 0; |
+ Handle<SeededNumberDictionary> id_map_; // Always a global handle. |
+ uint32_t next_id_ = 0; |
DISALLOW_COPY_AND_ASSIGN(ValueDeserializer); |
}; |