Home | History | Annotate | Download | only in src
      1 // Copyright 2006-2008 the V8 project authors. All rights reserved.
      2 // Redistribution and use in source and binary forms, with or without
      3 // modification, are permitted provided that the following conditions are
      4 // met:
      5 //
      6 //     * Redistributions of source code must retain the above copyright
      7 //       notice, this list of conditions and the following disclaimer.
      8 //     * Redistributions in binary form must reproduce the above
      9 //       copyright notice, this list of conditions and the following
     10 //       disclaimer in the documentation and/or other materials provided
     11 //       with the distribution.
     12 //     * Neither the name of Google Inc. nor the names of its
     13 //       contributors may be used to endorse or promote products derived
     14 //       from this software without specific prior written permission.
     15 //
     16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27 
     28 // The common functionality when building with or without snapshots.
     29 
     30 #include "v8.h"
     31 
     32 #include "api.h"
     33 #include "serialize.h"
     34 #include "snapshot.h"
     35 #include "platform.h"
     36 
     37 namespace v8 {
     38 namespace internal {
     39 
     40 bool Snapshot::Deserialize(const byte* content, int len) {
     41   SnapshotByteSource source(content, len);
     42   Deserializer deserializer(&source);
     43   return V8::Initialize(&deserializer);
     44 }
     45 
     46 
     47 bool Snapshot::Initialize(const char* snapshot_file) {
     48   if (snapshot_file) {
     49     int len;
     50     byte* str = ReadBytes(snapshot_file, &len);
     51     if (!str) return false;
     52     Deserialize(str, len);
     53     DeleteArray(str);
     54     return true;
     55   } else if (size_ > 0) {
     56     Deserialize(raw_data_, raw_size_);
     57     return true;
     58   }
     59   return false;
     60 }
     61 
     62 
     63 Handle<Context> Snapshot::NewContextFromSnapshot() {
     64   if (context_size_ == 0) {
     65     return Handle<Context>();
     66   }
     67   HEAP->ReserveSpace(new_space_used_,
     68                      pointer_space_used_,
     69                      data_space_used_,
     70                      code_space_used_,
     71                      map_space_used_,
     72                      cell_space_used_,
     73                      large_space_used_);
     74   SnapshotByteSource source(context_raw_data_,
     75                             context_raw_size_);
     76   Deserializer deserializer(&source);
     77   Object* root;
     78   deserializer.DeserializePartial(&root);
     79   CHECK(root->IsContext());
     80   return Handle<Context>(Context::cast(root));
     81 }
     82 
     83 } }  // namespace v8::internal
     84