Index: src/ic/ic.cc |
diff --git a/src/ic/ic.cc b/src/ic/ic.cc |
index a6ae92a892c06ac9dcc88ecf093a0201e9f0eb12..ce3a862da1d7ecf09c3d8adc86fb1293a3c04b47 100644 |
--- a/src/ic/ic.cc |
+++ b/src/ic/ic.cc |
@@ -1714,7 +1714,11 @@ void StoreIC::UpdateCaches(LookupIterator* lookup, Handle<Object> value, |
static Handle<Code> PropertyCellStoreHandler( |
Isolate* isolate, Handle<JSObject> receiver, Handle<GlobalObject> holder, |
Handle<Name> name, Handle<PropertyCell> cell, PropertyCellType type) { |
- StoreGlobalStub stub(isolate, type == PropertyCellType::kConstant, |
+ auto constant_type = Nothing<PropertyCellConstantType>(); |
+ if (type == PropertyCellType::kConstantType) { |
+ constant_type = Just(cell->GetConstantType()); |
+ } |
+ StoreGlobalStub stub(isolate, type, constant_type, |
receiver->IsJSGlobalProxy()); |
auto code = stub.GetCodeCopyFromTemplate(holder, cell); |
// TODO(verwaest): Move caching of these NORMAL stubs outside as well. |
@@ -1815,11 +1819,12 @@ Handle<Code> StoreIC::CompileHandler(LookupIterator* lookup, |
DCHECK(holder.is_identical_to(receiver) || |
receiver->map()->prototype() == *holder); |
auto cell = lookup->GetPropertyCell(); |
- auto union_type = PropertyCell::UpdatedType( |
+ auto updated_type = PropertyCell::UpdatedType( |
cell, value, lookup->property_details()); |
- return PropertyCellStoreHandler(isolate(), receiver, |
- Handle<GlobalObject>::cast(holder), |
- lookup->name(), cell, union_type); |
+ auto code = PropertyCellStoreHandler( |
+ isolate(), receiver, Handle<GlobalObject>::cast(holder), |
+ lookup->name(), cell, updated_type); |
+ return code; |
} |
DCHECK(holder.is_identical_to(receiver)); |
return isolate()->builtins()->StoreIC_Normal(); |