| Index: src/objects.cc
 | 
| diff --git a/src/objects.cc b/src/objects.cc
 | 
| index b77093c85b63188b33bd243b3b83813c0471eedc..5171db9056b20fce2774fd92cedf36620d62eaa8 100644
 | 
| --- a/src/objects.cc
 | 
| +++ b/src/objects.cc
 | 
| @@ -1199,7 +1199,7 @@ bool FunctionTemplateInfo::IsTemplateFor(Map* map) {
 | 
|  Handle<TemplateList> TemplateList::New(Isolate* isolate, int size) {
 | 
|    Handle<FixedArray> list =
 | 
|        isolate->factory()->NewFixedArray(kLengthIndex + size);
 | 
| -  list->set(kLengthIndex, Smi::FromInt(0));
 | 
| +  list->set(kLengthIndex, Smi::kZero);
 | 
|    return Handle<TemplateList>::cast(list);
 | 
|  }
 | 
|  
 | 
| @@ -2152,6 +2152,8 @@ std::ostream& operator<<(std::ostream& os, const Brief& v) {
 | 
|    return os;
 | 
|  }
 | 
|  
 | 
| +// Declaration of the static Smi::kZero constant.
 | 
| +Smi* const Smi::kZero(nullptr);
 | 
|  
 | 
|  void Smi::SmiPrint(std::ostream& os) const {  // NOLINT
 | 
|    os << value();
 | 
| @@ -3175,7 +3177,7 @@ void JSObject::UpdatePrototypeUserRegistration(Handle<Map> old_map,
 | 
|    DCHECK(new_map->is_prototype_map());
 | 
|    bool was_registered = JSObject::UnregisterPrototypeUser(old_map, isolate);
 | 
|    new_map->set_prototype_info(old_map->prototype_info());
 | 
| -  old_map->set_prototype_info(Smi::FromInt(0));
 | 
| +  old_map->set_prototype_info(Smi::kZero);
 | 
|    if (FLAG_trace_prototype_users) {
 | 
|      PrintF("Moving prototype_info %p from map %p to map %p.\n",
 | 
|             reinterpret_cast<void*>(new_map->prototype_info()),
 | 
| @@ -3331,7 +3333,7 @@ void MigrateFastToFast(Handle<JSObject> object, Handle<Map> new_map) {
 | 
|          value = handle(object->RawFastPropertyAt(index), isolate);
 | 
|          if (!old_representation.IsDouble() && representation.IsDouble()) {
 | 
|            if (old_representation.IsNone()) {
 | 
| -            value = handle(Smi::FromInt(0), isolate);
 | 
| +            value = handle(Smi::kZero, isolate);
 | 
|            }
 | 
|            value = Object::NewStorageFor(isolate, value, representation);
 | 
|          } else if (old_representation.IsDouble() &&
 | 
| @@ -3514,7 +3516,7 @@ void MigrateFastToSlow(Handle<JSObject> object, Handle<Map> new_map,
 | 
|    int inobject_properties = new_map->GetInObjectProperties();
 | 
|    for (int i = 0; i < inobject_properties; i++) {
 | 
|      FieldIndex index = FieldIndex::ForPropertyIndex(*new_map, i);
 | 
| -    object->RawFastPropertyAtPut(index, Smi::FromInt(0));
 | 
| +    object->RawFastPropertyAtPut(index, Smi::kZero);
 | 
|    }
 | 
|  
 | 
|    isolate->counters()->props_to_dictionary()->Increment();
 | 
| @@ -8900,7 +8902,7 @@ Handle<Map> Map::Normalize(Handle<Map> fast_map, PropertyNormalizationMode mode,
 | 
|          // For prototype maps, the PrototypeInfo is not copied.
 | 
|          DCHECK(memcmp(fresh->address(), new_map->address(),
 | 
|                        kTransitionsOrPrototypeInfoOffset) == 0);
 | 
| -        DCHECK(fresh->raw_transitions() == Smi::FromInt(0));
 | 
| +        DCHECK(fresh->raw_transitions() == Smi::kZero);
 | 
|          STATIC_ASSERT(kDescriptorsOffset ==
 | 
|                        kTransitionsOrPrototypeInfoOffset + kPointerSize);
 | 
|          DCHECK(memcmp(HeapObject::RawField(*fresh, kDescriptorsOffset),
 | 
| @@ -10257,7 +10259,7 @@ Handle<WeakFixedArray> WeakFixedArray::Allocate(
 | 
|      }
 | 
|    }
 | 
|    while (index < result->length()) {
 | 
| -    result->set(index, Smi::FromInt(0));
 | 
| +    result->set(index, Smi::kZero);
 | 
|      index++;
 | 
|    }
 | 
|    return Handle<WeakFixedArray>::cast(result);
 | 
| @@ -10380,15 +10382,11 @@ Handle<DescriptorArray> DescriptorArray::Allocate(Isolate* isolate,
 | 
|        factory->NewFixedArray(LengthFor(size), pretenure);
 | 
|  
 | 
|    result->set(kDescriptorLengthIndex, Smi::FromInt(number_of_descriptors));
 | 
| -  result->set(kEnumCacheIndex, Smi::FromInt(0));
 | 
| +  result->set(kEnumCacheIndex, Smi::kZero);
 | 
|    return Handle<DescriptorArray>::cast(result);
 | 
|  }
 | 
|  
 | 
| -
 | 
| -void DescriptorArray::ClearEnumCache() {
 | 
| -  set(kEnumCacheIndex, Smi::FromInt(0));
 | 
| -}
 | 
| -
 | 
| +void DescriptorArray::ClearEnumCache() { set(kEnumCacheIndex, Smi::kZero); }
 | 
|  
 | 
|  void DescriptorArray::Replace(int index, Descriptor* descriptor) {
 | 
|    descriptor->SetSortedKeyIndex(GetSortedKeyIndex(index));
 | 
| @@ -10411,9 +10409,9 @@ void DescriptorArray::SetEnumCache(Handle<DescriptorArray> descriptors,
 | 
|      bridge_storage = FixedArray::cast(descriptors->get(kEnumCacheIndex));
 | 
|    }
 | 
|    bridge_storage->set(kEnumCacheBridgeCacheIndex, *new_cache);
 | 
| -  bridge_storage->set(kEnumCacheBridgeIndicesCacheIndex,
 | 
| -                      new_index_cache.is_null() ? Object::cast(Smi::FromInt(0))
 | 
| -                                                : *new_index_cache);
 | 
| +  bridge_storage->set(
 | 
| +      kEnumCacheBridgeIndicesCacheIndex,
 | 
| +      new_index_cache.is_null() ? Object::cast(Smi::kZero) : *new_index_cache);
 | 
|    if (needs_new_enum_cache) {
 | 
|      descriptors->set(kEnumCacheIndex, bridge_storage);
 | 
|    }
 | 
| @@ -10715,7 +10713,7 @@ Handle<Object> String::ToNumber(Handle<String> subject) {
 | 
|    // Fast case: short integer or some sorts of junk values.
 | 
|    if (subject->IsSeqOneByteString()) {
 | 
|      int len = subject->length();
 | 
| -    if (len == 0) return handle(Smi::FromInt(0), isolate);
 | 
| +    if (len == 0) return handle(Smi::kZero, isolate);
 | 
|  
 | 
|      DisallowHeapAllocation no_gc;
 | 
|      uint8_t const* data = Handle<SeqOneByteString>::cast(subject)->GetChars();
 | 
| @@ -16533,15 +16531,14 @@ MaybeHandle<JSRegExp> JSRegExp::Initialize(Handle<JSRegExp> regexp,
 | 
|    if (constructor->IsJSFunction() &&
 | 
|        JSFunction::cast(constructor)->initial_map() == map) {
 | 
|      // If we still have the original map, set in-object properties directly.
 | 
| -    regexp->InObjectPropertyAtPut(JSRegExp::kLastIndexFieldIndex,
 | 
| -                                  Smi::FromInt(0), SKIP_WRITE_BARRIER);
 | 
| +    regexp->InObjectPropertyAtPut(JSRegExp::kLastIndexFieldIndex, Smi::kZero,
 | 
| +                                  SKIP_WRITE_BARRIER);
 | 
|    } else {
 | 
|      // Map has changed, so use generic, but slower, method.
 | 
| -    RETURN_ON_EXCEPTION(
 | 
| -        isolate,
 | 
| -        JSReceiver::SetProperty(regexp, factory->last_index_string(),
 | 
| -                                Handle<Smi>(Smi::FromInt(0), isolate), STRICT),
 | 
| -        JSRegExp);
 | 
| +    RETURN_ON_EXCEPTION(isolate, JSReceiver::SetProperty(
 | 
| +                                     regexp, factory->last_index_string(),
 | 
| +                                     Handle<Smi>(Smi::kZero, isolate), STRICT),
 | 
| +                        JSRegExp);
 | 
|    }
 | 
|  
 | 
|    return regexp;
 | 
| @@ -17257,7 +17254,7 @@ Handle<Object> JSObject::PrepareElementsForSort(Handle<JSObject> object,
 | 
|      limit = elements_length;
 | 
|    }
 | 
|    if (limit == 0) {
 | 
| -    return handle(Smi::FromInt(0), isolate);
 | 
| +    return handle(Smi::kZero, isolate);
 | 
|    }
 | 
|  
 | 
|    uint32_t result = 0;
 | 
| @@ -18680,7 +18677,7 @@ Smi* OrderedHashTableIterator<Derived, TableType>::Next(JSArray* value_array) {
 | 
|      MoveNext();
 | 
|      return Smi::cast(kind());
 | 
|    }
 | 
| -  return Smi::FromInt(0);
 | 
| +  return Smi::kZero;
 | 
|  }
 | 
|  
 | 
|  
 | 
| @@ -19286,7 +19283,7 @@ void JSArrayBuffer::Neuter() {
 | 
|    CHECK(is_neuterable());
 | 
|    CHECK(is_external());
 | 
|    set_backing_store(NULL);
 | 
| -  set_byte_length(Smi::FromInt(0));
 | 
| +  set_byte_length(Smi::kZero);
 | 
|    set_was_neutered(true);
 | 
|  }
 | 
|  
 | 
| @@ -19297,7 +19294,7 @@ void JSArrayBuffer::Setup(Handle<JSArrayBuffer> array_buffer, Isolate* isolate,
 | 
|    DCHECK(array_buffer->GetInternalFieldCount() ==
 | 
|           v8::ArrayBuffer::kInternalFieldCount);
 | 
|    for (int i = 0; i < v8::ArrayBuffer::kInternalFieldCount; i++) {
 | 
| -    array_buffer->SetInternalField(i, Smi::FromInt(0));
 | 
| +    array_buffer->SetInternalField(i, Smi::kZero);
 | 
|    }
 | 
|    array_buffer->set_bit_field(0);
 | 
|    array_buffer->set_is_external(is_external);
 | 
| 
 |