// Copyright 2019 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_EXECUTION_PROTECTORS_INL_H_
#define V8_EXECUTION_PROTECTORS_INL_H_

#include "src/execution/protectors.h"
#include "src/objects/contexts-inl.h"
#include "src/objects/property-cell-inl.h"
#include "src/objects/smi.h"

namespace v8 {
namespace internal {

#define DEFINE_PROTECTOR_ON_ISOLATE_CHECK(name, root_index, unused_cell) \
  bool Protectors::Is##name##Intact(Isolate* isolate) {                  \
    PropertyCell cell =                                                  \
        PropertyCell::cast(isolate->root(RootIndex::k##root_index));     \
    return cell.value().IsSmi() &&                                       \
           Smi::ToInt(cell.value()) == kProtectorValid;                  \
  }
DECLARED_PROTECTORS_ON_ISOLATE(DEFINE_PROTECTOR_ON_ISOLATE_CHECK)
#undef DEFINE_PROTECTORS_ON_ISOLATE_CHECK

}  // namespace internal
}  // namespace v8

#endif  // V8_EXECUTION_PROTECTORS_INL_H_
