// 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_OBJECT_DESERIALIZER_H_
#define V8_SNAPSHOT_OBJECT_DESERIALIZER_H_

#include "src/snapshot/deserializer.h"

namespace v8 {
namespace internal {

class SerializedCodeData;
class SharedFunctionInfo;

// Deserializes the object graph rooted at a given object.
class ObjectDeserializer final : public Deserializer {
 public:
  static MaybeHandle<SharedFunctionInfo> DeserializeSharedFunctionInfo(
      Isolate* isolate, const SerializedCodeData* data, Handle<String> source);

 private:
  explicit ObjectDeserializer(const SerializedCodeData* data);

  // Deserialize an object graph. Fail gracefully.
  MaybeHandle<HeapObject> Deserialize(Isolate* isolate);

  void FlushICache();
  void LinkAllocationSites();
  void CommitPostProcessedObjects();
};

}  // namespace internal
}  // namespace v8

#endif  // V8_SNAPSHOT_OBJECT_DESERIALIZER_H_
