// Copyright 2017 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef V8_SNAPSHOT_STARTUP_DESERIALIZER_H_
#define V8_SNAPSHOT_STARTUP_DESERIALIZER_H_

#include "src/snapshot/deserializer.h"
#include "src/snapshot/snapshot.h"

namespace v8 {
namespace internal {

// Initializes an isolate with context-independent data from a given snapshot.
class StartupDeserializer final : public Deserializer<> {
 public:
  StartupDeserializer(const SnapshotData* startup_data,
                      const BuiltinSnapshotData* builtin_data)
      : Deserializer(startup_data, false), builtin_data_(builtin_data) {}

  // Deserialize the snapshot into an empty heap.
  void DeserializeInto(Isolate* isolate);

 private:
  void FlushICacheForNewIsolate();
  void PrintDisassembledCodeObjects();

  // Rehash after deserializing an isolate.
  void RehashHeap();

  const BuiltinSnapshotData* builtin_data_;
};

}  // namespace internal
}  // namespace v8

#endif  // V8_SNAPSHOT_STARTUP_DESERIALIZER_H_
