#ifndef V8_OBJECTS_PROPERTY_CELL_INL_H_
#define V8_OBJECTS_PROPERTY_CELL_INL_H_
#include "src/objects/property-cell.h"
#include "src/heap/heap-write-barrier-inl.h"
#include "src/objects/dependent-code-inl.h"
#include "src/objects/objects-inl.h"
#include "src/objects/object-macros.h"
namespace v8 {
namespace internal {
#include "torque-generated/src/objects/property-cell-tq-inl.inc"
TQ_OBJECT_CONSTRUCTORS_IMPL(PropertyCell)
ACCESSORS(PropertyCell, dependent_code, Tagged<DependentCode>,
kDependentCodeOffset)
ACCESSORS(PropertyCell, name, Tagged<Name>, kNameOffset)
ACCESSORS(PropertyCell, property_details_raw, Tagged<Smi>,
kPropertyDetailsRawOffset)
RELEASE_ACQUIRE_ACCESSORS(PropertyCell, property_details_raw, Tagged<Smi>,
kPropertyDetailsRawOffset)
ACCESSORS(PropertyCell, value, Tagged<Object>, kValueOffset)
RELEASE_ACQUIRE_ACCESSORS(PropertyCell, value, Tagged<Object>, kValueOffset)
PropertyDetails PropertyCell::property_details() const {
return PropertyDetails(Cast<Smi>(property_details_raw()));
}
PropertyDetails PropertyCell::property_details(AcquireLoadTag tag) const {
return PropertyDetails(Cast<Smi>(property_details_raw(tag)));
}
void PropertyCell::UpdatePropertyDetailsExceptCellType(
PropertyDetails details) {
DCHECK(CheckDataIsCompatible(details, value()));
PropertyDetails old_details = property_details();
CHECK_EQ(old_details.cell_type(), details.cell_type());
set_property_details_raw(details.AsSmi(), kReleaseStore);
if (!old_details.IsReadOnly() && details.IsReadOnly()) {
Isolate* isolate = Isolate::Current();
DependentCode::DeoptimizeDependencyGroups(
isolate, *this, DependentCode::kPropertyCellChangedGroup);
}
}
void PropertyCell::Transition(PropertyDetails new_details,
DirectHandle<Object> new_value) {
DCHECK(CanTransitionTo(new_details, *new_value));
PropertyDetails transition_marker = new_details;
transition_marker.set_cell_type(PropertyCellType::kInTransition);
set_property_details_raw(transition_marker.AsSmi(), kReleaseStore);
set_value(*new_value, kReleaseStore);
set_property_details_raw(new_details.AsSmi(), kReleaseStore);
}
}
}
#include "src/objects/object-macros-undef.h"
#endif