Index: src/serialize.h |
=================================================================== |
--- src/serialize.h (revision 4215) |
+++ src/serialize.h (working copy) |
@@ -120,28 +120,9 @@ |
return data_[position_++]; |
} |
- void CopyRaw(byte* to, int number_of_bytes) { |
- memcpy(to, data_ + position_, number_of_bytes); |
- position_ += number_of_bytes; |
- } |
+ inline void CopyRaw(byte* to, int number_of_bytes); |
- int GetInt() { |
- // A little unwind to catch the really small ints. |
- int snapshot_byte = Get(); |
- if ((snapshot_byte & 0x80) == 0) { |
- return snapshot_byte; |
- } |
- int accumulator = (snapshot_byte & 0x7f) << 7; |
- while (true) { |
- snapshot_byte = Get(); |
- if ((snapshot_byte & 0x80) == 0) { |
- return accumulator | snapshot_byte; |
- } |
- accumulator = (accumulator | (snapshot_byte & 0x7f)) << 7; |
- } |
- UNREACHABLE(); |
- return accumulator; |
- } |
+ inline int GetInt(); |
bool AtEOF() { |
return position_ == length_; |
@@ -235,12 +216,36 @@ |
} |
static int partial_snapshot_cache_length_; |
- static const int kPartialSnapshotCacheCapacity = 1024; |
+ static const int kPartialSnapshotCacheCapacity = 1300; |
static Object* partial_snapshot_cache_[]; |
}; |
+int SnapshotByteSource::GetInt() { |
+ // A little unwind to catch the really small ints. |
+ int snapshot_byte = Get(); |
+ if ((snapshot_byte & 0x80) == 0) { |
+ return snapshot_byte; |
+ } |
+ int accumulator = (snapshot_byte & 0x7f) << 7; |
+ while (true) { |
+ snapshot_byte = Get(); |
+ if ((snapshot_byte & 0x80) == 0) { |
+ return accumulator | snapshot_byte; |
+ } |
+ accumulator = (accumulator | (snapshot_byte & 0x7f)) << 7; |
+ } |
+ UNREACHABLE(); |
+ return accumulator; |
+} |
+ |
+void SnapshotByteSource::CopyRaw(byte* to, int number_of_bytes) { |
+ memcpy(to, data_ + position_, number_of_bytes); |
+ position_ += number_of_bytes; |
+} |
+ |
+ |
// A Deserializer reads a snapshot and reconstructs the Object graph it defines. |
class Deserializer: public SerializerDeserializer { |
public: |
@@ -364,6 +369,7 @@ |
class Serializer : public SerializerDeserializer { |
public: |
explicit Serializer(SnapshotByteSink* sink); |
+ ~Serializer(); |
void VisitPointers(Object** start, Object** end); |
// You can call this after serialization to find out how much space was used |
// in each space. |
@@ -492,7 +498,12 @@ |
virtual int RootIndex(HeapObject* o); |
virtual int PartialSnapshotCacheIndex(HeapObject* o); |
virtual bool ShouldBeInThePartialSnapshotCache(HeapObject* o) { |
- return o->IsString() || o->IsSharedFunctionInfo(); |
+ // Scripts should be referred only through shared function infos. We can't |
+ // allow them to be part of the partial snapshot because they contain a |
+ // unique ID, and deserializing several partial snapshots containing script |
+ // would cause dupes. |
+ ASSERT(!o->IsScript()); |
+ return o->IsString() || o->IsSharedFunctionInfo() || o->IsHeapNumber(); |
} |
private: |
@@ -530,6 +541,7 @@ |
} |
}; |
+ |
} } // namespace v8::internal |
#endif // V8_SERIALIZE_H_ |