Index: src/serialize.h |
diff --git a/src/serialize.h b/src/serialize.h |
index 6cc90eaafc2bb01c65da5b951634a8360e0f89c3..72bcfe52f80054407baaaefa96a4fabbb227b9fa 100644 |
--- a/src/serialize.h |
+++ b/src/serialize.h |
@@ -5,10 +5,10 @@ |
#ifndef V8_SERIALIZE_H_ |
#define V8_SERIALIZE_H_ |
+#include "src/compiler.h" |
#include "src/hashmap.h" |
#include "src/heap-profiler.h" |
#include "src/isolate.h" |
-#include "src/parser.h" |
#include "src/snapshot-source-sink.h" |
namespace v8 { |
@@ -470,7 +470,6 @@ class Serializer : public SerializerDeserializer { |
SerializationAddressMapper address_mapper_; |
intptr_t root_index_wave_front_; |
void Pad(); |
- void PadByte(); |
friend class ObjectSerializer; |
friend class Deserializer; |
@@ -576,6 +575,67 @@ class CodeSerializer : public Serializer { |
static const int kPayloadLengthOffset = 1; |
static const int kReservationsOffset = 2; |
}; |
+ |
+ |
+// Wrapper around ScriptData to provide code-serializer-specific functionality. |
+class SerializedCodeData { |
+ public: |
+ // Used by when consuming. |
+ explicit SerializedCodeData(ScriptData* data) |
+ : script_data_(data), owns_script_data_(false) { |
+ CHECK(IsSane()); |
+ } |
+ |
+ // Used when producing. |
+ SerializedCodeData(List<byte>* payload, CodeSerializer* cs); |
+ |
+ ~SerializedCodeData() { |
+ if (owns_script_data_) delete script_data_; |
+ } |
+ |
+ // Return ScriptData object and relinquish ownership over it to the caller. |
+ ScriptData* GetScriptData() { |
+ ScriptData* result = script_data_; |
+ script_data_ = NULL; |
+ ASSERT(owns_script_data_); |
+ owns_script_data_ = false; |
+ return result; |
+ } |
+ |
+ const byte* Payload() const { |
+ return script_data_->data() + kHeaderEntries * kIntSize; |
+ } |
+ |
+ int PayloadLength() const { |
+ return script_data_->length() - kHeaderEntries * kIntSize; |
+ } |
+ |
+ int GetReservation(int space) const { |
+ return GetHeaderValue(kReservationsOffset + space); |
+ } |
+ |
+ private: |
+ void SetHeaderValue(int offset, int value) { |
+ reinterpret_cast<int*>(const_cast<byte*>(script_data_->data()))[offset] = |
+ value; |
+ } |
+ |
+ int GetHeaderValue(int offset) const { |
+ return reinterpret_cast<const int*>(script_data_->data())[offset]; |
+ } |
+ |
+ bool IsSane(); |
+ |
+ // The data header consists of int-sized entries: |
+ // [0] version hash |
+ // [1..7] reservation sizes for spaces from NEW_SPACE to PROPERTY_CELL_SPACE. |
+ static const int kVersionHashOffset = 0; |
+ static const int kReservationsOffset = 1; |
+ static const int kHeaderEntries = 8; |
+ |
+ ScriptData* script_data_; |
+ bool owns_script_data_; |
+}; |
} } // namespace v8::internal |
#endif // V8_SERIALIZE_H_ |