Commit dd5cda5d authored by olehougaard's avatar olehougaard

Change type of snapshot from char array to byte array to avoid portability...

Change type of snapshot from char array to byte array to avoid portability problems between different compilers.
Review URL: http://codereview.chromium.org/18583

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1145 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 8faf0da7
...@@ -114,7 +114,7 @@ static int* counter_callback(const char* name) { ...@@ -114,7 +114,7 @@ static int* counter_callback(const char* name) {
// Write C++ code that defines Snapshot::snapshot_ to contain the snapshot // Write C++ code that defines Snapshot::snapshot_ to contain the snapshot
// to the file given by filename. Only the first size chars are written. // to the file given by filename. Only the first size chars are written.
static int WriteInternalSnapshotToFile(const char* filename, static int WriteInternalSnapshotToFile(const char* filename,
const char* str, const v8::internal::byte* bytes,
int size) { int size) {
FILE* f = i::OS::FOpen(filename, "wb"); FILE* f = i::OS::FOpen(filename, "wb");
if (f == NULL) { if (f == NULL) {
...@@ -126,11 +126,11 @@ static int WriteInternalSnapshotToFile(const char* filename, ...@@ -126,11 +126,11 @@ static int WriteInternalSnapshotToFile(const char* filename,
fprintf(f, "#include \"platform.h\"\n\n"); fprintf(f, "#include \"platform.h\"\n\n");
fprintf(f, "#include \"snapshot.h\"\n\n"); fprintf(f, "#include \"snapshot.h\"\n\n");
fprintf(f, "namespace v8 {\nnamespace internal {\n\n"); fprintf(f, "namespace v8 {\nnamespace internal {\n\n");
fprintf(f, "const char Snapshot::data_[] = {"); fprintf(f, "const byte Snapshot::data_[] = {");
int written = 0; int written = 0;
written += fprintf(f, "%i", str[0]); written += fprintf(f, "0x%x", bytes[0]);
for (int i = 1; i < size; ++i) { for (int i = 1; i < size; ++i) {
written += fprintf(f, ",%i", str[i]); written += fprintf(f, ",0x%x", bytes[i]);
// The following is needed to keep the line length low on Visual C++: // The following is needed to keep the line length low on Visual C++:
if (i % 512 == 0) fprintf(f, "\n"); if (i % 512 == 0) fprintf(f, "\n");
} }
...@@ -174,13 +174,13 @@ int main(int argc, char** argv) { ...@@ -174,13 +174,13 @@ int main(int argc, char** argv) {
i::Heap::CollectAllGarbage(); i::Heap::CollectAllGarbage();
i::Serializer ser; i::Serializer ser;
ser.Serialize(); ser.Serialize();
char* str; v8::internal::byte* bytes;
int len; int len;
ser.Finalize(&str, &len); ser.Finalize(&bytes, &len);
WriteInternalSnapshotToFile(argv[1], str, len); WriteInternalSnapshotToFile(argv[1], bytes, len);
i::DeleteArray(str); i::DeleteArray(bytes);
return 0; return 0;
} }
...@@ -686,15 +686,15 @@ class SnapshotWriter { ...@@ -686,15 +686,15 @@ class SnapshotWriter {
SnapshotWriter() { SnapshotWriter() {
len_ = 0; len_ = 0;
max_ = 8 << 10; // 8K initial size max_ = 8 << 10; // 8K initial size
str_ = NewArray<char>(max_); str_ = NewArray<byte>(max_);
} }
~SnapshotWriter() { ~SnapshotWriter() {
DeleteArray(str_); DeleteArray(str_);
} }
void GetString(char** str, int* len) { void GetBytes(byte** str, int* len) {
*str = NewArray<char>(len_); *str = NewArray<byte>(len_);
memcpy(*str, str_, len_); memcpy(*str, str_, len_);
*len = len_; *len = len_;
} }
...@@ -742,7 +742,7 @@ class SnapshotWriter { ...@@ -742,7 +742,7 @@ class SnapshotWriter {
Address position() { return reinterpret_cast<Address>(&str_[len_]); } Address position() { return reinterpret_cast<Address>(&str_[len_]); }
private: private:
char* str_; // the snapshot byte* str_; // the snapshot
int len_; // the current length of str_ int len_; // the current length of str_
int max_; // the allocated size of str_ int max_; // the allocated size of str_
}; };
...@@ -752,14 +752,14 @@ void SnapshotWriter::Reserve(int bytes, int pos) { ...@@ -752,14 +752,14 @@ void SnapshotWriter::Reserve(int bytes, int pos) {
CHECK(0 <= pos && pos <= len_); CHECK(0 <= pos && pos <= len_);
while (len_ + bytes >= max_) { while (len_ + bytes >= max_) {
max_ *= 2; max_ *= 2;
char* old = str_; byte* old = str_;
str_ = NewArray<char>(max_); str_ = NewArray<byte>(max_);
memcpy(str_, old, len_); memcpy(str_, old, len_);
DeleteArray(old); DeleteArray(old);
} }
if (pos < len_) { if (pos < len_) {
char* old = str_; byte* old = str_;
str_ = NewArray<char>(max_); str_ = NewArray<byte>(max_);
memcpy(str_, old, pos); memcpy(str_, old, pos);
memcpy(str_ + pos + bytes, old + pos, len_ - pos); memcpy(str_ + pos + bytes, old + pos, len_ - pos);
DeleteArray(old); DeleteArray(old);
...@@ -929,8 +929,8 @@ void Serializer::Serialize() { ...@@ -929,8 +929,8 @@ void Serializer::Serialize() {
} }
void Serializer::Finalize(char** str, int* len) { void Serializer::Finalize(byte** str, int* len) {
writer_->GetString(str, len); writer_->GetBytes(str, len);
} }
...@@ -1180,7 +1180,7 @@ RelativeAddress Serializer::Allocate(HeapObject* obj) { ...@@ -1180,7 +1180,7 @@ RelativeAddress Serializer::Allocate(HeapObject* obj) {
static const int kInitArraySize = 32; static const int kInitArraySize = 32;
Deserializer::Deserializer(const char* str, int len) Deserializer::Deserializer(const byte* str, int len)
: reader_(str, len), : reader_(str, len),
map_pages_(kInitArraySize), map_pages_(kInitArraySize),
old_pointer_pages_(kInitArraySize), old_pointer_pages_(kInitArraySize),
......
...@@ -135,7 +135,7 @@ class Serializer: public ObjectVisitor { ...@@ -135,7 +135,7 @@ class Serializer: public ObjectVisitor {
// Returns the serialized buffer. Ownership is transferred to the // Returns the serialized buffer. Ownership is transferred to the
// caller. Only the destructor and getters may be called after this call. // caller. Only the destructor and getters may be called after this call.
void Finalize(char** str, int* len); void Finalize(byte** str, int* len);
int roots() { return roots_; } int roots() { return roots_; }
int objects() { return objects_; } int objects() { return objects_; }
...@@ -211,7 +211,7 @@ class Serializer: public ObjectVisitor { ...@@ -211,7 +211,7 @@ class Serializer: public ObjectVisitor {
class SnapshotReader { class SnapshotReader {
public: public:
SnapshotReader(const char* str, int len): str_(str), end_(str + len) {} SnapshotReader(const byte* str, int len): str_(str), end_(str + len) {}
void ExpectC(char expected) { void ExpectC(char expected) {
int c = GetC(); int c = GetC();
...@@ -247,8 +247,8 @@ class SnapshotReader { ...@@ -247,8 +247,8 @@ class SnapshotReader {
} }
private: private:
const char* str_; const byte* str_;
const char* end_; const byte* end_;
}; };
...@@ -257,7 +257,7 @@ class SnapshotReader { ...@@ -257,7 +257,7 @@ class SnapshotReader {
class Deserializer: public ObjectVisitor { class Deserializer: public ObjectVisitor {
public: public:
// Create a deserializer. The snapshot is held in str and has size len. // Create a deserializer. The snapshot is held in str and has size len.
Deserializer(const char* str, int len); Deserializer(const byte* str, int len);
virtual ~Deserializer(); virtual ~Deserializer();
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
namespace v8 { namespace internal { namespace v8 { namespace internal {
bool Snapshot::Deserialize(const char* content, int len) { bool Snapshot::Deserialize(const byte* content, int len) {
Deserializer des(content, len); Deserializer des(content, len);
des.GetFlags(); des.GetFlags();
return V8::Initialize(&des); return V8::Initialize(&des);
...@@ -45,7 +45,7 @@ bool Snapshot::Deserialize(const char* content, int len) { ...@@ -45,7 +45,7 @@ bool Snapshot::Deserialize(const char* content, int len) {
bool Snapshot::Initialize(const char* snapshot_file) { bool Snapshot::Initialize(const char* snapshot_file) {
if (snapshot_file) { if (snapshot_file) {
int len; int len;
char* str = ReadChars(snapshot_file, &len); byte* str = ReadBytes(snapshot_file, &len);
if (!str) return false; if (!str) return false;
bool result = Deserialize(str, len); bool result = Deserialize(str, len);
DeleteArray(str); DeleteArray(str);
...@@ -60,11 +60,11 @@ bool Snapshot::Initialize(const char* snapshot_file) { ...@@ -60,11 +60,11 @@ bool Snapshot::Initialize(const char* snapshot_file) {
bool Snapshot::WriteToFile(const char* snapshot_file) { bool Snapshot::WriteToFile(const char* snapshot_file) {
Serializer ser; Serializer ser;
ser.Serialize(); ser.Serialize();
char* str; byte* str;
int len; int len;
ser.Finalize(&str, &len); ser.Finalize(&str, &len);
int written = WriteChars(snapshot_file, str, len); int written = WriteBytes(snapshot_file, str, len);
DeleteArray(str); DeleteArray(str);
return written == len; return written == len;
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
namespace v8 { namespace internal { namespace v8 { namespace internal {
const char Snapshot::data_[] = { 0 }; const byte Snapshot::data_[] = { 0 };
int Snapshot::size_ = 0; int Snapshot::size_ = 0;
} } // namespace v8::internal } } // namespace v8::internal
...@@ -45,10 +45,10 @@ class Snapshot { ...@@ -45,10 +45,10 @@ class Snapshot {
static bool WriteToFile(const char* snapshot_file); static bool WriteToFile(const char* snapshot_file);
private: private:
static const char data_[]; static const byte data_[];
static int size_; static int size_;
static bool Deserialize(const char* content, int len); static bool Deserialize(const byte* content, int len);
DISALLOW_IMPLICIT_CONSTRUCTORS(Snapshot); DISALLOW_IMPLICIT_CONSTRUCTORS(Snapshot);
}; };
......
...@@ -182,8 +182,9 @@ char* ReadCharsFromFile(const char* filename, ...@@ -182,8 +182,9 @@ char* ReadCharsFromFile(const char* filename,
} }
char* ReadChars(const char* filename, int* size, bool verbose) { byte* ReadBytes(const char* filename, int* size, bool verbose) {
return ReadCharsFromFile(filename, size, 0, verbose); char* chars = ReadCharsFromFile(filename, size, 0, verbose);
return reinterpret_cast<byte*>(chars);
} }
...@@ -233,6 +234,15 @@ int WriteChars(const char* filename, ...@@ -233,6 +234,15 @@ int WriteChars(const char* filename,
} }
int WriteBytes(const char* filename,
const byte* bytes,
int size,
bool verbose) {
const char* str = reinterpret_cast<const char*>(bytes);
return WriteChars(filename, str, size, verbose);
}
StringBuilder::StringBuilder(int size) { StringBuilder::StringBuilder(int size) {
buffer_ = Vector<char>::New(size); buffer_ = Vector<char>::New(size);
position_ = 0; position_ = 0;
......
...@@ -224,10 +224,10 @@ void Flush(); ...@@ -224,10 +224,10 @@ void Flush();
char* ReadLine(const char* prompt); char* ReadLine(const char* prompt);
// Read and return the raw chars in a file. the size of the buffer is returned // Read and return the raw bytes in a file. the size of the buffer is returned
// in size. // in size.
// The returned buffer is not 0-terminated. It must be freed by the caller. // The returned buffer must be freed by the caller.
char* ReadChars(const char* filename, int* size, bool verbose = true); byte* ReadBytes(const char* filename, int* size, bool verbose = true);
// Write size chars from str to the file given by filename. // Write size chars from str to the file given by filename.
...@@ -238,6 +238,14 @@ int WriteChars(const char* filename, ...@@ -238,6 +238,14 @@ int WriteChars(const char* filename,
bool verbose = true); bool verbose = true);
// Write size bytes to the file given by filename.
// The file is overwritten. Returns the number of bytes written.
int WriteBytes(const char* filename,
const byte* bytes,
int size,
bool verbose = true);
// Write the C code // Write the C code
// const char* <varname> = "<str>"; // const char* <varname> = "<str>";
// const int <varname>_len = <len>; // const int <varname>_len = <len>;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment