Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1127)

Unified Diff: vm/snapshot.h

Issue 10632009: Make the parser agnostic to the TokenStream implementation. This is the first step towards compacti… (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/runtime/
Patch Set: Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « vm/scopes.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: vm/snapshot.h
===================================================================
--- vm/snapshot.h (revision 9042)
+++ vm/snapshot.h (working copy)
@@ -8,6 +8,7 @@
#include "platform/assert.h"
#include "vm/allocation.h"
#include "vm/bitfield.h"
+#include "vm/datastream.h"
#include "vm/globals.h"
#include "vm/growable_array.h"
#include "vm/isolate.h"
@@ -51,13 +52,6 @@
class RawUnresolvedClass;
class String;
-static const int8_t kSerializedBitsPerByte = 7;
-static const int8_t kMaxSerializedUnsignedValuePerByte = 127;
-static const int8_t kMaxSerializedValuePerByte = 63;
-static const int8_t kMinSerializedValuePerByte = -64;
-static const uint8_t kEndByteMarker = (255 - kMaxSerializedValuePerByte);
-static const int8_t kSerializedByteMask = (1 << kSerializedBitsPerByte) - 1;
-
// Serialized object header encoding is as follows:
// - Smi: the Smi value is written as is (last bit is not tagged).
// - VM internal type (from VM isolate): (index of type in vm isolate | 0x3)
@@ -72,8 +66,6 @@
static const int8_t kObjectIdTagBits = (kBitsPerWord - kHeaderTagBits);
static const intptr_t kMaxObjectId = (kIntptrMax >> kHeaderTagBits);
-typedef uint8_t* (*ReAlloc)(uint8_t* ptr, intptr_t old_size, intptr_t new_size);
-
class SerializedHeaderTag : public BitField<enum SerializedHeaderType,
0,
kHeaderTagBits> {
@@ -140,189 +132,6 @@
};
-// Stream for reading various types from a buffer.
-class ReadStream : public ValueObject {
- public:
- ReadStream(const uint8_t* buffer, intptr_t size) : buffer_(buffer),
- current_(buffer),
- end_(buffer + size) {}
-
- private:
- template<typename T>
- T Read() {
- uint8_t b = ReadByte();
- if (b > kMaxSerializedUnsignedValuePerByte) {
- return static_cast<T>(b) - kEndByteMarker;
- }
- T r = 0;
- uint8_t s = 0;
- do {
- r |= static_cast<T>(b) << s;
- s += kSerializedBitsPerByte;
- b = ReadByte();
- } while (b <= kMaxSerializedUnsignedValuePerByte);
- return r | ((static_cast<T>(b) - kEndByteMarker) << s);
- }
-
- template<int N, typename T>
- class Raw { };
-
- template<typename T>
- class Raw<1, T> {
- public:
- static T Read(ReadStream* st) {
- return bit_cast<T>(st->ReadByte());
- }
- };
-
- template<typename T>
- class Raw<2, T> {
- public:
- static T Read(ReadStream* st) {
- return bit_cast<T>(st->Read<int16_t>());
- }
- };
-
- template<typename T>
- class Raw<4, T> {
- public:
- static T Read(ReadStream* st) {
- return bit_cast<T>(st->Read<int32_t>());
- }
- };
-
- template<typename T>
- class Raw<8, T> {
- public:
- static T Read(ReadStream* st) {
- return bit_cast<T>(st->Read<int64_t>());
- }
- };
-
- uint8_t ReadByte() {
- ASSERT(current_ < end_);
- return *current_++;
- }
-
- void ReadBytes(uint8_t* addr, intptr_t len) {
- ASSERT((current_ + len) < end_);
- memmove(addr, current_, len);
- current_ += len;
- }
-
- private:
- const uint8_t* buffer_;
- const uint8_t* current_;
- const uint8_t* end_;
-
- // SnapshotReader needs access to the private Raw classes.
- friend class SnapshotReader;
- friend class BaseReader;
- DISALLOW_COPY_AND_ASSIGN(ReadStream);
-};
-
-
-// Stream for writing various types into a buffer.
-class WriteStream : public ValueObject {
- public:
- static const int kBufferIncrementSize = 64 * KB;
-
- WriteStream(uint8_t** buffer, ReAlloc alloc) :
- buffer_(buffer),
- end_(NULL),
- current_(NULL),
- current_size_(0),
- alloc_(alloc) {
- ASSERT(buffer != NULL);
- ASSERT(alloc != NULL);
- *buffer_ = reinterpret_cast<uint8_t*>(alloc_(NULL,
- 0,
- kBufferIncrementSize));
- ASSERT(*buffer_ != NULL);
- current_ = *buffer_ + Snapshot::kHeaderSize;
- current_size_ = kBufferIncrementSize;
- end_ = *buffer_ + kBufferIncrementSize;
- }
-
- uint8_t* buffer() const { return *buffer_; }
- int bytes_written() const { return current_ - *buffer_; }
-
- private:
- template<typename T>
- void Write(T value) {
- T v = value;
- while (v < kMinSerializedValuePerByte ||
- v > kMaxSerializedValuePerByte) {
- WriteByte(static_cast<uint8_t>(v & kSerializedByteMask));
- v = v >> kSerializedBitsPerByte;
- }
- WriteByte(static_cast<uint8_t>(v + kEndByteMarker));
- }
-
- template<int N, typename T>
- class Raw { };
-
- template<typename T>
- class Raw<1, T> {
- public:
- static void Write(WriteStream* st, T value) {
- st->WriteByte(bit_cast<int8_t>(value));
- }
- };
-
- template<typename T>
- class Raw<2, T> {
- public:
- static void Write(WriteStream* st, T value) {
- st->Write<int16_t>(bit_cast<int16_t>(value));
- }
- };
-
- template<typename T>
- class Raw<4, T> {
- public:
- static void Write(WriteStream* st, T value) {
- st->Write<int32_t>(bit_cast<int32_t>(value));
- }
- };
-
- template<typename T>
- class Raw<8, T> {
- public:
- static void Write(WriteStream* st, T value) {
- st->Write<int64_t>(bit_cast<int64_t>(value));
- }
- };
-
- void WriteByte(uint8_t value) {
- if (current_ >= end_) {
- intptr_t new_size = (current_size_ + kBufferIncrementSize);
- *buffer_ = reinterpret_cast<uint8_t*>(alloc_(*buffer_,
- current_size_,
- new_size));
- ASSERT(*buffer_ != NULL);
- current_ = *buffer_ + current_size_;
- current_size_ = new_size;
- end_ = *buffer_ + new_size;
- }
- ASSERT(current_ < end_);
- *current_++ = value;
- }
-
- private:
- uint8_t** const buffer_;
- uint8_t* end_;
- uint8_t* current_;
- intptr_t current_size_;
- ReAlloc alloc_;
-
- // MessageWriter and SnapshotWriter needs access to the private Raw
- // classes.
- friend class BaseWriter;
- DISALLOW_COPY_AND_ASSIGN(WriteStream);
-};
-
-
class BaseReader {
public:
BaseReader(const uint8_t* buffer, intptr_t size) : stream_(buffer, size) {}
@@ -526,6 +335,8 @@
BaseWriter(uint8_t** buffer, ReAlloc alloc) : stream_(buffer, alloc) {
ASSERT(buffer != NULL);
ASSERT(alloc != NULL);
+ // Make room for recording snapshot buffer size.
+ stream_.set_current(*buffer + Snapshot::kHeaderSize);
}
~BaseWriter() { }
« no previous file with comments | « vm/scopes.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698