[constant-tracking] Fix compilation dependencies to account for constness.
Bug: v8:5495, v8:8361 Change-Id: I7a03c7a4897b15112b978d232754076ad8753c4e Reviewed-on: https://chromium-review.googlesource.com/c/1297311 Reviewed-by: Georg Neis <neis@chromium.org> Commit-Queue: Jaroslav Sevcik <jarin@chromium.org> Cr-Commit-Position: refs/heads/master@{#56950}
This commit is contained in:
parent
961125b7d0
commit
ccb48e95d5
@ -149,17 +149,24 @@ class FieldTypeDependency final : public CompilationDependencies::Dependency {
|
||||
// TODO(neis): Once the concurrent compiler frontend is always-on, we no
|
||||
// longer need to explicitly store the type.
|
||||
FieldTypeDependency(const MapRef& owner, int descriptor,
|
||||
const ObjectRef& type)
|
||||
: owner_(owner), descriptor_(descriptor), type_(type) {
|
||||
const ObjectRef& type, PropertyConstness constness)
|
||||
: owner_(owner),
|
||||
descriptor_(descriptor),
|
||||
type_(type),
|
||||
constness_(constness) {
|
||||
DCHECK(owner_.equals(owner_.FindFieldOwner(descriptor_)));
|
||||
DCHECK(type_.equals(owner_.GetFieldType(descriptor_)));
|
||||
DCHECK_EQ(constness_, owner_.GetPropertyDetails(descriptor_).constness());
|
||||
}
|
||||
|
||||
bool IsValid() const override {
|
||||
DisallowHeapAllocation no_heap_allocation;
|
||||
Handle<Map> owner = owner_.object();
|
||||
Handle<Object> type = type_.object();
|
||||
return *type == owner->instance_descriptors()->GetFieldType(descriptor_);
|
||||
return *type == owner->instance_descriptors()->GetFieldType(descriptor_) &&
|
||||
constness_ == owner->instance_descriptors()
|
||||
->GetDetails(descriptor_)
|
||||
.constness();
|
||||
}
|
||||
|
||||
void Install(const MaybeObjectHandle& code) override {
|
||||
@ -172,6 +179,7 @@ class FieldTypeDependency final : public CompilationDependencies::Dependency {
|
||||
MapRef owner_;
|
||||
int descriptor_;
|
||||
ObjectRef type_;
|
||||
PropertyConstness constness_;
|
||||
};
|
||||
|
||||
class GlobalPropertyDependency final
|
||||
@ -327,9 +335,11 @@ void CompilationDependencies::DependOnFieldType(const MapRef& map,
|
||||
int descriptor) {
|
||||
MapRef owner = map.FindFieldOwner(descriptor);
|
||||
ObjectRef type = owner.GetFieldType(descriptor);
|
||||
PropertyConstness constness =
|
||||
owner.GetPropertyDetails(descriptor).constness();
|
||||
DCHECK(type.equals(map.GetFieldType(descriptor)));
|
||||
dependencies_.push_front(new (zone_)
|
||||
FieldTypeDependency(owner, descriptor, type));
|
||||
dependencies_.push_front(
|
||||
new (zone_) FieldTypeDependency(owner, descriptor, type, constness));
|
||||
}
|
||||
|
||||
void CompilationDependencies::DependOnGlobalProperty(
|
||||
|
Loading…
Reference in New Issue
Block a user