blob: ef89a5ef7020fa21e35b935b873f51771cfc2762 [file] [log] [blame]
ager@chromium.org9258b6b2008-09-11 09:11:10 +00001// Copyright 2006-2008 the V8 project authors. All rights reserved.
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +00002// 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"
ager@chromium.org3811b432009-10-28 14:53:37 +000035#include "platform.h"
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +000036
kasperl@chromium.org71affb52009-05-26 05:44:31 +000037namespace v8 {
38namespace internal {
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +000039
ager@chromium.orgddb913d2009-01-27 10:01:48 +000040bool Snapshot::Deserialize(const byte* content, int len) {
ager@chromium.org3811b432009-10-28 14:53:37 +000041 SnapshotByteSource source(content, len);
ager@chromium.orgc4c92722009-11-18 14:12:51 +000042 Deserializer deserializer(&source);
ager@chromium.org3811b432009-10-28 14:53:37 +000043 return V8::Initialize(&deserializer);
44}
45
46
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +000047bool Snapshot::Initialize(const char* snapshot_file) {
48 if (snapshot_file) {
49 int len;
ager@chromium.orgddb913d2009-01-27 10:01:48 +000050 byte* str = ReadBytes(snapshot_file, &len);
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +000051 if (!str) return false;
ager@chromium.orgc4c92722009-11-18 14:12:51 +000052 Deserialize(str, len);
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +000053 DeleteArray(str);
ager@chromium.orgc4c92722009-11-18 14:12:51 +000054 return true;
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +000055 } else if (size_ > 0) {
sgjesse@chromium.org8e8294a2011-05-02 14:30:53 +000056 Deserialize(raw_data_, raw_size_);
ager@chromium.orgc4c92722009-11-18 14:12:51 +000057 return true;
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +000058 }
59 return false;
60}
61
kmillikin@chromium.org5d8f0e62010-03-24 08:21:20 +000062
63Handle<Context> Snapshot::NewContextFromSnapshot() {
64 if (context_size_ == 0) {
65 return Handle<Context>();
66 }
sgjesse@chromium.orgea88ce92011-03-23 11:19:56 +000067 HEAP->ReserveSpace(new_space_used_,
kmillikin@chromium.org5d8f0e62010-03-24 08:21:20 +000068 pointer_space_used_,
69 data_space_used_,
70 code_space_used_,
71 map_space_used_,
72 cell_space_used_,
73 large_space_used_);
sgjesse@chromium.org8e8294a2011-05-02 14:30:53 +000074 SnapshotByteSource source(context_raw_data_,
75 context_raw_size_);
kmillikin@chromium.org5d8f0e62010-03-24 08:21:20 +000076 Deserializer deserializer(&source);
77 Object* root;
78 deserializer.DeserializePartial(&root);
79 CHECK(root->IsContext());
80 return Handle<Context>(Context::cast(root));
81}
82
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +000083} } // namespace v8::internal