Index: src/snapshot/code-serializer.h |
diff --git a/src/snapshot/code-serializer.h b/src/snapshot/code-serializer.h |
index 19489396b4641434541cfb715ecb6f6479acdc65..e1bc90b2665daa3bd8f8f540773aa390c73ef5e6 100644 |
--- a/src/snapshot/code-serializer.h |
+++ b/src/snapshot/code-serializer.h |
@@ -13,28 +13,24 @@ namespace internal { |
class CodeSerializer : public Serializer { |
public: |
+ explicit CodeSerializer(Isolate* isolate, uint32_t source_hash) |
+ : Serializer(isolate), source_hash_(source_hash) {} |
+ ~CodeSerializer() override { OutputStatistics("CodeSerializer"); } |
+ |
static ScriptData* Serialize(Isolate* isolate, |
Handle<SharedFunctionInfo> info, |
Handle<String> source); |
+ ScriptData* Serialize(Handle<HeapObject> obj); |
+ |
MUST_USE_RESULT static MaybeHandle<SharedFunctionInfo> Deserialize( |
Isolate* isolate, ScriptData* cached_data, Handle<String> source); |
- String* source() const { |
- DCHECK(!AllowHeapAllocation::IsAllowed()); |
- return source_; |
- } |
- |
const List<uint32_t>* stub_keys() const { return &stub_keys_; } |
- private: |
- CodeSerializer(Isolate* isolate, String* source) |
- : Serializer(isolate), source_(source) { |
- reference_map_.AddAttachedReference(source); |
- } |
- |
- ~CodeSerializer() override { OutputStatistics("CodeSerializer"); } |
+ uint32_t source_hash() const { return source_hash_; } |
+ private: |
void SerializeObject(HeapObject* o, HowToCode how_to_code, |
WhereToPoint where_to_point, int skip) override; |
@@ -46,18 +42,28 @@ class CodeSerializer : public Serializer { |
WhereToPoint where_to_point); |
DisallowHeapAllocation no_gc_; |
- String* source_; |
+ uint32_t source_hash_; |
List<uint32_t> stub_keys_; |
DISALLOW_COPY_AND_ASSIGN(CodeSerializer); |
}; |
+enum SanityCheckResult { |
Yang
2016/08/05 12:04:17
Can we keep this in SerializedCodeData? We can mak
Mircea Trofin
2016/08/05 15:01:29
Acknowledged.
Mircea Trofin
2016/08/06 00:31:39
Done.
|
+ CHECK_SUCCESS = 0, |
+ MAGIC_NUMBER_MISMATCH = 1, |
+ VERSION_MISMATCH = 2, |
+ SOURCE_MISMATCH = 3, |
+ CPU_FEATURES_MISMATCH = 4, |
+ FLAGS_MISMATCH = 5, |
+ CHECKSUM_MISMATCH = 6 |
+}; |
+ |
// Wrapper around ScriptData to provide code-serializer-specific functionality. |
class SerializedCodeData : public SerializedData { |
public: |
// Used when consuming. |
- static SerializedCodeData* FromCachedData(Isolate* isolate, |
- ScriptData* cached_data, |
- String* source); |
+ static const SerializedCodeData FromCachedData( |
+ Isolate* isolate, ScriptData* cached_data, uint32_t expected_source_hash, |
+ SanityCheckResult* rejection_result); |
// Used when producing. |
SerializedCodeData(const List<byte>* payload, const CodeSerializer* cs); |
@@ -70,23 +76,15 @@ class SerializedCodeData : public SerializedData { |
Vector<const uint32_t> CodeStubKeys() const; |
+ static uint32_t SourceHash(Handle<String> source); |
+ |
private: |
explicit SerializedCodeData(ScriptData* data); |
+ SerializedCodeData(const byte* data, int size) |
+ : SerializedData(const_cast<byte*>(data), size) {} |
- enum SanityCheckResult { |
- CHECK_SUCCESS = 0, |
- MAGIC_NUMBER_MISMATCH = 1, |
- VERSION_MISMATCH = 2, |
- SOURCE_MISMATCH = 3, |
- CPU_FEATURES_MISMATCH = 4, |
- FLAGS_MISMATCH = 5, |
- CHECKSUM_MISMATCH = 6 |
- }; |
- |
- SanityCheckResult SanityCheck(Isolate* isolate, String* source) const; |
- |
- uint32_t SourceHash(String* source) const; |
- |
+ SanityCheckResult SanityCheck(Isolate* isolate, |
+ uint32_t expected_source_hash) const; |
// The data header consists of uint32_t-sized entries: |
// [0] magic number and external reference count |
// [1] version hash |