Index: src/snapshot.h |
diff --git a/src/snapshot.h b/src/snapshot.h |
index 04c7ba6e7a8ea9f7ac1cab7c55d6e03eb47432f7..62e0b9bf853368f39cc6b46df2290811e3a8f3b3 100644 |
--- a/src/snapshot.h |
+++ b/src/snapshot.h |
@@ -12,6 +12,21 @@ namespace internal { |
class Snapshot : public AllStatic { |
public: |
+ class Metadata { |
+ public: |
+ explicit Metadata(uint32_t data = 0) : data_(data) {} |
+ bool embeds_script() { return EmbedsScriptBits::decode(data_); } |
+ void set_embeds_script(bool v) { |
+ data_ = EmbedsScriptBits::update(data_, v); |
+ } |
+ |
+ uint32_t& RawValue() { return data_; } |
+ |
+ private: |
+ class EmbedsScriptBits : public BitField<bool, 0, 1> {}; |
+ uint32_t data_; |
+ }; |
+ |
// Initialize the Isolate from the internal snapshot. Returns false if no |
// snapshot could be found. |
static bool Initialize(Isolate* isolate); |
@@ -21,17 +36,32 @@ class Snapshot : public AllStatic { |
static bool HaveASnapshotToStartFrom(); |
+ static bool EmbedsScript(); |
+ |
// To be implemented by the snapshot source. |
static const v8::StartupData SnapshotBlob(); |
static v8::StartupData CreateSnapshotBlob( |
const Vector<const byte> startup_data, |
- const Vector<const byte> context_data); |
+ const Vector<const byte> context_data, Metadata metadata); |
+ |
+#ifdef DEBUG |
+ static bool SnapshotIsValid(v8::StartupData* snapshot_blob); |
+#endif // DEBUG |
+ private: |
static Vector<const byte> ExtractStartupData(const v8::StartupData* data); |
static Vector<const byte> ExtractContextData(const v8::StartupData* data); |
+ static Metadata ExtractMetadata(const v8::StartupData* data); |
+ |
+ static const int kMetadataOffset = 0; |
+ static const int kStartupLengthOffset = kMetadataOffset + kInt32Size; |
+ static const int kStartupDataOffset = kStartupLengthOffset + kInt32Size; |
+ |
+ static int ContextOffset(int startup_length) { |
+ return kStartupDataOffset + startup_length; |
+ } |
- private: |
DISALLOW_IMPLICIT_CONSTRUCTORS(Snapshot); |
}; |