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

Unified Diff: src/objects.cc

Issue 1942233002: [API] remove (deprecated) hidden properties. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 8 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
« no previous file with comments | « 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 98b3056eedf7e528247cf4624c63925aff438566..e6ddc0cdfa04d92b4e7d7a4a630d2eaa05cbc992 100644
--- a/src/objects.cc
+++ b/src/objects.cc
@@ -5824,162 +5824,6 @@ Handle<Smi> JSProxy::GetOrCreateIdentityHash(Handle<JSProxy> proxy) {
}
-Object* JSObject::GetHiddenProperty(Handle<Name> key) {
- DisallowHeapAllocation no_gc;
- DCHECK(key->IsUniqueName());
- if (IsJSGlobalProxy()) {
- // For a proxy, use the prototype as target object.
- PrototypeIterator iter(GetIsolate(), this);
- // If the proxy is detached, return undefined.
- if (iter.IsAtEnd()) return GetHeap()->the_hole_value();
- DCHECK(iter.GetCurrent()->IsJSGlobalObject());
- return iter.GetCurrent<JSObject>()->GetHiddenProperty(key);
- }
- DCHECK(!IsJSGlobalProxy());
- Object* inline_value = GetHiddenPropertiesHashTable();
-
- if (inline_value->IsUndefined()) return GetHeap()->the_hole_value();
-
- ObjectHashTable* hashtable = ObjectHashTable::cast(inline_value);
- Object* entry = hashtable->Lookup(key);
- return entry;
-}
-
-
-Handle<Object> JSObject::SetHiddenProperty(Handle<JSObject> object,
- Handle<Name> key,
- Handle<Object> value) {
- Isolate* isolate = object->GetIsolate();
-
- DCHECK(key->IsUniqueName());
- if (object->IsJSGlobalProxy()) {
- // For a proxy, use the prototype as target object.
- PrototypeIterator iter(isolate, object);
- // If the proxy is detached, return undefined.
- if (iter.IsAtEnd()) return isolate->factory()->undefined_value();
- DCHECK(PrototypeIterator::GetCurrent(iter)->IsJSGlobalObject());
- return SetHiddenProperty(PrototypeIterator::GetCurrent<JSObject>(iter), key,
- value);
- }
- DCHECK(!object->IsJSGlobalProxy());
-
- Handle<Object> inline_value(object->GetHiddenPropertiesHashTable(), isolate);
-
- Handle<ObjectHashTable> hashtable =
- GetOrCreateHiddenPropertiesHashtable(object);
-
- // If it was found, check if the key is already in the dictionary.
- Handle<ObjectHashTable> new_table = ObjectHashTable::Put(hashtable, key,
- value);
- if (*new_table != *hashtable) {
- // If adding the key expanded the dictionary (i.e., Add returned a new
- // dictionary), store it back to the object.
- SetHiddenPropertiesHashTable(object, new_table);
- }
-
- // Return this to mark success.
- return object;
-}
-
-
-void JSObject::DeleteHiddenProperty(Handle<JSObject> object, Handle<Name> key) {
- Isolate* isolate = object->GetIsolate();
- DCHECK(key->IsUniqueName());
-
- if (object->IsJSGlobalProxy()) {
- PrototypeIterator iter(isolate, object);
- if (iter.IsAtEnd()) return;
- DCHECK(PrototypeIterator::GetCurrent(iter)->IsJSGlobalObject());
- return DeleteHiddenProperty(PrototypeIterator::GetCurrent<JSObject>(iter),
- key);
- }
-
- Object* inline_value = object->GetHiddenPropertiesHashTable();
-
- if (inline_value->IsUndefined()) return;
-
- Handle<ObjectHashTable> hashtable(ObjectHashTable::cast(inline_value));
- bool was_present = false;
- ObjectHashTable::Remove(hashtable, key, &was_present);
-}
-
-
-bool JSObject::HasHiddenProperties(Handle<JSObject> object) {
- Isolate* isolate = object->GetIsolate();
- Handle<Symbol> hidden = isolate->factory()->hidden_properties_symbol();
- LookupIterator it(object, hidden, object);
- Maybe<PropertyAttributes> maybe = GetPropertyAttributes(&it);
- // Cannot get an exception since the hidden_properties_symbol isn't exposed to
- // JS.
- DCHECK(maybe.IsJust());
- return maybe.FromJust() != ABSENT;
-}
-
-
-Object* JSObject::GetHiddenPropertiesHashTable() {
- DCHECK(!IsJSGlobalProxy());
- if (HasFastProperties()) {
- // If the object has fast properties, check whether the first slot
- // in the descriptor array matches the hidden string. Since the
- // hidden strings hash code is zero (and no other name has hash
- // code zero) it will always occupy the first entry if present.
- DescriptorArray* descriptors = this->map()->instance_descriptors();
- if (descriptors->number_of_descriptors() > 0) {
- int sorted_index = descriptors->GetSortedKeyIndex(0);
- if (descriptors->GetKey(sorted_index) ==
- GetHeap()->hidden_properties_symbol() &&
- sorted_index < map()->NumberOfOwnDescriptors()) {
- DCHECK(descriptors->GetType(sorted_index) == DATA);
- DCHECK(descriptors->GetDetails(sorted_index).representation().
- IsCompatibleForLoad(Representation::Tagged()));
- FieldIndex index = FieldIndex::ForDescriptor(this->map(),
- sorted_index);
- return this->RawFastPropertyAt(index);
- } else {
- return GetHeap()->undefined_value();
- }
- } else {
- return GetHeap()->undefined_value();
- }
- } else {
- Isolate* isolate = GetIsolate();
- Handle<Symbol> hidden = isolate->factory()->hidden_properties_symbol();
- Handle<JSObject> receiver(this, isolate);
- LookupIterator it(receiver, hidden, receiver);
- // Access check is always skipped for the hidden string anyways.
- return *GetDataProperty(&it);
- }
-}
-
-Handle<ObjectHashTable> JSObject::GetOrCreateHiddenPropertiesHashtable(
- Handle<JSObject> object) {
- Isolate* isolate = object->GetIsolate();
-
- static const int kInitialCapacity = 4;
- Handle<Object> inline_value(object->GetHiddenPropertiesHashTable(), isolate);
- if (inline_value->IsHashTable()) {
- return Handle<ObjectHashTable>::cast(inline_value);
- }
-
- Handle<ObjectHashTable> hashtable = ObjectHashTable::New(
- isolate, kInitialCapacity, USE_CUSTOM_MINIMUM_CAPACITY);
-
- DCHECK(inline_value->IsUndefined());
- SetHiddenPropertiesHashTable(object, hashtable);
- return hashtable;
-}
-
-
-Handle<Object> JSObject::SetHiddenPropertiesHashTable(Handle<JSObject> object,
- Handle<Object> value) {
- DCHECK(!object->IsJSGlobalProxy());
- Isolate* isolate = object->GetIsolate();
- Handle<Symbol> name = isolate->factory()->hidden_properties_symbol();
- SetOwnPropertyIgnoreAttributes(object, name, value, DONT_ENUM).Assert();
- return object;
-}
-
-
Maybe<bool> JSObject::DeletePropertyWithInterceptor(LookupIterator* it,
ShouldThrow should_throw) {
Isolate* isolate = it->isolate();
« no previous file with comments | « src/objects.h ('k') | src/objects-debug.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698