summaryrefslogtreecommitdiff
path: root/deps/v8/src/transitions-inl.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/transitions-inl.h')
-rw-r--r--deps/v8/src/transitions-inl.h57
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) {