Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(271)

Unified Diff: src/objects.cc

Issue 2395233003: [modules] Give Module an internal [hash] field (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« src/objects.h ('K') | « src/objects.h ('k') | src/objects-debug.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/objects.cc
diff --git a/src/objects.cc b/src/objects.cc
index b77093c85b63188b33bd243b3b83813c0471eedc..9724262cb9197bd1d0491f3603c9ed1c4124e739 100644
--- a/src/objects.cc
+++ b/src/objects.cc
@@ -6167,27 +6167,13 @@ Handle<SeededNumberDictionary> JSObject::NormalizeElements(
}
-static Smi* GenerateIdentityHash(Isolate* isolate) {
- int hash_value;
- int attempts = 0;
- do {
- // Generate a random 32-bit hash value but limit range to fit
- // within a smi.
- hash_value = isolate->random_number_generator()->NextInt() & Smi::kMaxValue;
- attempts++;
- } while (hash_value == 0 && attempts < 30);
- hash_value = hash_value != 0 ? hash_value : 1; // never return 0
-
- return Smi::FromInt(hash_value);
-}
-
template <typename ProxyType>
static Smi* GetOrCreateIdentityHashHelper(Isolate* isolate,
Handle<ProxyType> proxy) {
Object* maybe_hash = proxy->hash();
if (maybe_hash->IsSmi()) return Smi::cast(maybe_hash);
- Smi* hash = GenerateIdentityHash(isolate);
+ Smi* hash = Smi::FromInt(isolate->GenerateIdentityHash(Smi::kMaxValue));
proxy->set_hash(hash);
return hash;
}
@@ -6217,7 +6203,7 @@ Smi* JSObject::GetOrCreateIdentityHash(Isolate* isolate,
if (maybe_hash->IsSmi()) return Smi::cast(maybe_hash);
}
- Smi* hash = GenerateIdentityHash(isolate);
+ Smi* hash = Smi::FromInt(isolate->GenerateIdentityHash(Smi::kMaxValue));
CHECK(AddDataProperty(&it, handle(hash, isolate), NONE, THROW_ON_ERROR,
CERTAINLY_NOT_STORE_FROM_KEYED)
.IsJust());
@@ -19586,9 +19572,10 @@ bool JSReceiver::HasProxyInPrototype(Isolate* isolate) {
namespace {
-template <typename T>
-struct HandleValueHash {
- V8_INLINE size_t operator()(Handle<T> handle) const { return handle->Hash(); }
+struct ModuleHandleHash {
+ V8_INLINE size_t operator()(Handle<Module> module) const {
+ return module->hash();
+ }
};
struct ModuleHandleEqual {
@@ -19597,6 +19584,12 @@ struct ModuleHandleEqual {
}
};
+struct StringHandleHash {
+ V8_INLINE size_t operator()(Handle<String> string) const {
+ return string->Hash();
+ }
+};
+
struct StringHandleEqual {
V8_INLINE bool operator()(Handle<String> lhs, Handle<String> rhs) const {
return lhs->Equals(*rhs);
@@ -19604,32 +19597,31 @@ struct StringHandleEqual {
};
class UnorderedStringSet
- : public std::unordered_set<Handle<String>, HandleValueHash<String>,
+ : public std::unordered_set<Handle<String>, StringHandleHash,
StringHandleEqual,
zone_allocator<Handle<String>>> {
public:
explicit UnorderedStringSet(Zone* zone)
- : std::unordered_set<Handle<String>, HandleValueHash<String>,
- StringHandleEqual, zone_allocator<Handle<String>>>(
- 2 /* bucket count */, HandleValueHash<String>(),
- StringHandleEqual(), zone_allocator<Handle<String>>(zone)) {}
+ : std::unordered_set<Handle<String>, StringHandleHash, StringHandleEqual,
+ zone_allocator<Handle<String>>>(
+ 2 /* bucket count */, StringHandleHash(), StringHandleEqual(),
+ zone_allocator<Handle<String>>(zone)) {}
};
} // anonymous namespace
class Module::ResolveSet
: public std::unordered_map<
- Handle<Module>, UnorderedStringSet*, HandleValueHash<Module>,
+ Handle<Module>, UnorderedStringSet*, ModuleHandleHash,
ModuleHandleEqual, zone_allocator<std::pair<const Handle<Module>,
UnorderedStringSet*>>> {
public:
explicit ResolveSet(Zone* zone)
: std::unordered_map<Handle<Module>, UnorderedStringSet*,
- HandleValueHash<Module>, ModuleHandleEqual,
+ ModuleHandleHash, ModuleHandleEqual,
zone_allocator<std::pair<const Handle<Module>,
UnorderedStringSet*>>>(
- 2 /* bucket count */, HandleValueHash<Module>(),
- ModuleHandleEqual(),
+ 2 /* bucket count */, ModuleHandleHash(), ModuleHandleEqual(),
zone_allocator<
std::pair<const Handle<Module>, UnorderedStringSet*>>(zone)),
zone_(zone) {}
« src/objects.h ('K') | « src/objects.h ('k') | src/objects-debug.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698