diff options
Diffstat (limited to 'deps/v8/src/transitions-inl.h')
-rw-r--r-- | deps/v8/src/transitions-inl.h | 57 |
1 files changed, 31 insertions, 26 deletions
diff --git a/deps/v8/src/transitions-inl.h b/deps/v8/src/transitions-inl.h index ac564ad9c2..59aac025ee 100644 --- a/deps/v8/src/transitions-inl.h +++ b/deps/v8/src/transitions-inl.h @@ -15,23 +15,18 @@ namespace v8 { namespace internal { -template <TransitionsAccessor::Encoding enc> WeakCell* TransitionsAccessor::GetTargetCell() { DCHECK(!needs_reload_); - if (target_cell_ != nullptr) return target_cell_; - if (enc == kWeakCell) { - target_cell_ = WeakCell::cast(raw_transitions_); - } else if (enc == kHandler) { - target_cell_ = StoreHandler::GetTransitionCell(raw_transitions_); - } else { - UNREACHABLE(); + if (target_cell_ == nullptr) { + target_cell_ = + StoreHandler::GetTransitionCell(raw_transitions_->ToStrongHeapObject()); } return target_cell_; } TransitionArray* TransitionsAccessor::transitions() { DCHECK_EQ(kFullTransitionArray, encoding()); - return TransitionArray::cast(raw_transitions_); + return TransitionArray::cast(raw_transitions_->ToStrongHeapObject()); } CAST_ACCESSOR(TransitionArray) @@ -71,23 +66,25 @@ Name* TransitionArray::GetKey(int transition_number) { } Name* TransitionsAccessor::GetKey(int transition_number) { - WeakCell* cell = nullptr; + Map* map = nullptr; switch (encoding()) { case kPrototypeInfo: case kUninitialized: UNREACHABLE(); return nullptr; - case kWeakCell: - cell = GetTargetCell<kWeakCell>(); + case kWeakRef: + map = Map::cast(raw_transitions_->ToWeakHeapObject()); break; - case kHandler: - cell = GetTargetCell<kHandler>(); + case kHandler: { + WeakCell* cell = GetTargetCell(); + DCHECK(!cell->cleared()); + map = Map::cast(cell->value()); break; + } case kFullTransitionArray: return transitions()->GetKey(transition_number); } - DCHECK(!cell->cleared()); - return GetSimpleTransitionKey(Map::cast(cell->value())); + return GetSimpleTransitionKey(map); } void TransitionArray::SetKey(int transition_number, Name* key) { @@ -127,23 +124,22 @@ Map* TransitionArray::GetTarget(int transition_number) { } Map* TransitionsAccessor::GetTarget(int transition_number) { - WeakCell* cell = nullptr; switch (encoding()) { case kPrototypeInfo: case kUninitialized: UNREACHABLE(); return nullptr; - case kWeakCell: - cell = GetTargetCell<kWeakCell>(); - break; - case kHandler: - cell = GetTargetCell<kHandler>(); - break; + case kWeakRef: + return Map::cast(raw_transitions_->ToWeakHeapObject()); + case kHandler: { + WeakCell* cell = GetTargetCell(); + DCHECK(!cell->cleared()); + return Map::cast(cell->value()); + } case kFullTransitionArray: return transitions()->GetTarget(transition_number); } - DCHECK(!cell->cleared()); - return Map::cast(cell->value()); + UNREACHABLE(); } void TransitionArray::SetTarget(int transition_number, Object* value) { @@ -152,6 +148,15 @@ void TransitionArray::SetTarget(int transition_number, Object* value) { set(ToTargetIndex(transition_number), value); } +bool TransitionArray::GetTargetIfExists(int transition_number, Isolate* isolate, + Map** target) { + Object* raw = GetRawTarget(transition_number); + if (raw->IsUndefined(isolate)) { + return false; + } + *target = TransitionsAccessor::GetTargetFromRaw(raw); + return true; +} int TransitionArray::SearchName(Name* name, int* out_insertion_index) { DCHECK(name->IsUniqueName()); @@ -202,7 +207,7 @@ void TransitionArray::Set(int transition_number, Name* key, Object* target) { int TransitionArray::Capacity() { if (length() <= kFirstIndex) return 0; - return (length() - kFirstIndex) / kTransitionSize; + return (length() - kFirstIndex) / kEntrySize; } void TransitionArray::SetNumberOfTransitions(int number_of_transitions) { |