summaryrefslogtreecommitdiff
path: root/chromium/v8/src/ic/ic.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/v8/src/ic/ic.cc')
-rw-r--r--chromium/v8/src/ic/ic.cc19
1 files changed, 8 insertions, 11 deletions
diff --git a/chromium/v8/src/ic/ic.cc b/chromium/v8/src/ic/ic.cc
index fe7e372c6bb..09920241eec 100644
--- a/chromium/v8/src/ic/ic.cc
+++ b/chromium/v8/src/ic/ic.cc
@@ -1366,23 +1366,19 @@ void StoreIC::UpdateCaches(LookupIterator* lookup, Handle<Object> value,
TRACE_IC("StoreIC", lookup->name());
}
-namespace {
-
-Handle<Object> StoreGlobal(Isolate* isolate, Handle<PropertyCell> cell) {
- return isolate->factory()->NewWeakCell(cell);
-}
-
-} // namespace
-
Handle<Object> StoreIC::GetMapIndependentHandler(LookupIterator* lookup) {
switch (lookup->state()) {
case LookupIterator::TRANSITION: {
Handle<JSObject> holder = lookup->GetHolder<JSObject>();
- auto store_target = lookup->GetStoreTarget();
+ Handle<JSObject> store_target = lookup->GetStoreTarget();
if (store_target->IsJSGlobalObject()) {
TRACE_HANDLER_STATS(isolate(), StoreIC_StoreGlobalTransitionDH);
- return StoreGlobal(isolate(), lookup->transition_cell());
+
+ Handle<Object> handler = StoreHandler::StoreTransition(
+ isolate(), receiver_map(), store_target, lookup->transition_cell(),
+ lookup->name());
+ return handler;
}
// Currently not handled by CompileStoreTransition.
if (!holder->HasFastProperties()) {
@@ -1477,7 +1473,8 @@ Handle<Object> StoreIC::GetMapIndependentHandler(LookupIterator* lookup) {
if (lookup->is_dictionary_holder()) {
if (holder->IsJSGlobalObject()) {
TRACE_HANDLER_STATS(isolate(), StoreIC_StoreGlobalDH);
- return StoreGlobal(isolate(), lookup->GetPropertyCell());
+ return StoreHandler::StoreGlobal(isolate(),
+ lookup->GetPropertyCell());
}
TRACE_HANDLER_STATS(isolate(), StoreIC_StoreNormalDH);
DCHECK(holder.is_identical_to(receiver));