| Index: src/interpreter/constant-array-builder.cc
|
| diff --git a/src/interpreter/constant-array-builder.cc b/src/interpreter/constant-array-builder.cc
|
| index ff3823fde2d14ce96bbc135ac00ad11cd765c5d5..a6ffd45686022d4b99812836c53d08d1fa642f2f 100644
|
| --- a/src/interpreter/constant-array-builder.cc
|
| +++ b/src/interpreter/constant-array-builder.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "src/interpreter/constant-array-builder.h"
|
|
|
| +#include <functional>
|
| #include <set>
|
|
|
| #include "src/isolate.h"
|
| @@ -72,9 +73,10 @@ STATIC_CONST_MEMBER_DEFINITION const size_t
|
|
|
| ConstantArrayBuilder::ConstantArrayBuilder(Zone* zone,
|
| Handle<Object> the_hole_value)
|
| - : constants_map_(zone),
|
| + : constants_map_(std::equal_to<Address>(), 16, ZoneAllocationPolicy(zone)),
|
| smi_map_(zone),
|
| smi_pairs_(zone),
|
| + zone_(zone),
|
| the_hole_value_(the_hole_value) {
|
| idx_slice_[0] =
|
| new (zone) ConstantArraySlice(zone, 0, k8BitCapacity, OperandSize::kByte);
|
| @@ -153,16 +155,11 @@ Handle<FixedArray> ConstantArrayBuilder::ToFixedArray(Isolate* isolate) {
|
| }
|
|
|
| size_t ConstantArrayBuilder::Insert(Handle<Object> object) {
|
| - auto entry = constants_map_.find(object.address());
|
| - return (entry == constants_map_.end()) ? AllocateEntry(object)
|
| - : entry->second;
|
| -}
|
| -
|
| -ConstantArrayBuilder::index_t ConstantArrayBuilder::AllocateEntry(
|
| - Handle<Object> object) {
|
| - index_t index = AllocateIndex(object);
|
| - constants_map_[object.address()] = index;
|
| - return index;
|
| + return constants_map_
|
| + .LookupOrInsert(object.address(), ObjectHash(object.address()),
|
| + [&]() { return AllocateIndex(object); },
|
| + ZoneAllocationPolicy(zone_))
|
| + ->value;
|
| }
|
|
|
| ConstantArrayBuilder::index_t ConstantArrayBuilder::AllocateIndex(
|
|
|