Index: src/mksnapshot.cc |
diff --git a/src/mksnapshot.cc b/src/mksnapshot.cc |
index dd491166bd470b65eee30c8c8d562dffd9f8642f..73a2082d242a7d948725af419770009680e9f225 100644 |
--- a/src/mksnapshot.cc |
+++ b/src/mksnapshot.cc |
@@ -136,6 +136,7 @@ class PartialSnapshotSink : public i::SnapshotByteSink { |
return true; |
} |
int raw_size() { return raw_size_; } |
+ |
private: |
i::List<char> data_; |
int raw_size_; |
@@ -265,6 +266,43 @@ class BZip2Compressor : public Compressor { |
private: |
i::ScopedVector<char>* output_; |
}; |
+ |
+class BZip2Decompressor { |
+ public: |
+ BZip2Decompressor() |
+ : libraries(i::NewArray<char*>(i::Natives::GetBuiltinsCount())) { |
+ } |
+ ~BZip2Decompressor() { |
+ for (int i = 0; i < i::Natives::GetBuiltinsCount(); ++i) { |
+ i::DeleteArray(libraries[i]); |
+ } |
+ i::DeleteArray(libraries); |
+ } |
+ void DecompressNatives() { |
+ for (int i = 0; i < i::Natives::GetBuiltinsCount(); ++i) { |
Vitaly Repeshko
2011/06/06 10:08:23
Hmm, it seems annoying to repeat this code with th
mnaganov (inactive)
2011/06/06 13:40:18
Converted to API usage (as Soeren suggested), and
|
+ unsigned int decompressed_size = i::Natives::GetRawScriptSize(i); |
+ libraries[i] = i::NewArray<char>(decompressed_size); |
+ i::Vector<const i::byte> compressed = i::Natives::GetScriptSource(i); |
+ int result = |
+ BZ2_bzBuffToBuffDecompress(libraries[i], |
+ &decompressed_size, |
+ reinterpret_cast<char*>( |
+ const_cast<i::byte*>( |
+ compressed.start())), |
+ compressed.length(), |
+ 0, 1); |
+ if (result != BZ_OK) { |
+ fprintf(stderr, "libraries: bzip error code: %d\n", result); |
+ exit(1); |
+ } |
+ i::Natives::SetRawScriptSource( |
+ i, i::Vector<const char>(libraries[i], decompressed_size)); |
+ } |
+ } |
+ |
+ private: |
+ char** libraries; |
+}; |
#endif |
@@ -281,6 +319,10 @@ int main(int argc, char** argv) { |
i::FlagList::PrintHelp(); |
return !i::FLAG_help; |
} |
+#ifdef COMPRESS_STARTUP_DATA_BZ2 |
Søren Thygesen Gjesse
2011/06/06 09:22:01
Can't we use the normal V8 API here?
mnaganov (inactive)
2011/06/06 13:40:18
Done.
|
+ BZip2Decompressor natives_decompressor; |
+ natives_decompressor.DecompressNatives(); |
+#endif |
i::Serializer::Enable(); |
Persistent<Context> context = v8::Context::New(); |
ASSERT(!context.IsEmpty()); |