| Index: src/handles.cc
|
| diff --git a/src/handles.cc b/src/handles.cc
|
| index 6584bdbaaec3159d120e44910bf7a2d8d470b636..2958d2cc0a8cb985dcb6407a04b83b2969d1d55a 100644
|
| --- a/src/handles.cc
|
| +++ b/src/handles.cc
|
| @@ -551,6 +551,7 @@ void CustomArguments::IterateInstance(ObjectVisitor* v) {
|
|
|
|
|
| // Compute the property keys from the interceptor.
|
| +// TODO(rossberg): support symbols in API, and filter here if needed.
|
| v8::Handle<v8::Array> GetKeysForNamedInterceptor(Handle<JSReceiver> receiver,
|
| Handle<JSObject> object) {
|
| Isolate* isolate = receiver->GetIsolate();
|
| @@ -625,7 +626,7 @@ static bool ContainsOnlyValidKeys(Handle<FixedArray> array) {
|
| int len = array->length();
|
| for (int i = 0; i < len; i++) {
|
| Object* e = array->get(i);
|
| - if (!(e->IsName() || e->IsNumber())) return false;
|
| + if (!(e->IsString() || e->IsNumber())) return false;
|
| }
|
| return true;
|
| }
|
| @@ -754,10 +755,10 @@ Handle<FixedArray> GetEnumPropertyKeys(Handle<JSObject> object,
|
| // to kInvalidEnumCache, this means that the map itself has never used the
|
| // present enum cache. The first step to using the cache is to set the
|
| // enum length of the map by counting the number of own descriptors that
|
| - // are not DONT_ENUM.
|
| + // are not DONT_ENUM or SYMBOLIC.
|
| if (own_property_count == Map::kInvalidEnumCache) {
|
| own_property_count = object->map()->NumberOfDescribedProperties(
|
| - OWN_DESCRIPTORS, DONT_ENUM);
|
| + OWN_DESCRIPTORS, DONT_SHOW);
|
|
|
| if (cache_result) object->map()->SetEnumLength(own_property_count);
|
| }
|
| @@ -784,7 +785,7 @@ Handle<FixedArray> GetEnumPropertyKeys(Handle<JSObject> object,
|
| }
|
|
|
| isolate->counters()->enum_cache_misses()->Increment();
|
| - int num_enum = map->NumberOfDescribedProperties(ALL_DESCRIPTORS, DONT_ENUM);
|
| + int num_enum = map->NumberOfDescribedProperties(ALL_DESCRIPTORS, DONT_SHOW);
|
|
|
| Handle<FixedArray> storage = isolate->factory()->NewFixedArray(num_enum);
|
| Handle<FixedArray> indices = isolate->factory()->NewFixedArray(num_enum);
|
| @@ -798,9 +799,10 @@ Handle<FixedArray> GetEnumPropertyKeys(Handle<JSObject> object,
|
|
|
| for (int i = 0; i < descs->number_of_descriptors(); i++) {
|
| PropertyDetails details = descs->GetDetails(i);
|
| - if (!details.IsDontEnum()) {
|
| + Object* key = descs->GetKey(i);
|
| + if (!(details.IsDontEnum() || key->IsSymbol())) {
|
| if (i < real_size) ++enum_size;
|
| - storage->set(index, descs->GetKey(i));
|
| + storage->set(index, key);
|
| if (!indices.is_null()) {
|
| if (details.type() != FIELD) {
|
| indices = Handle<FixedArray>();
|
| @@ -860,7 +862,7 @@ Handle<FixedArray> GetEnumPropertyKeys(Handle<JSObject> object,
|
| isolate->factory()->NewFixedArray(next_enumeration);
|
|
|
| storage = Handle<FixedArray>(dictionary->CopyEnumKeysTo(*storage));
|
| - ASSERT(storage->length() == object->NumberOfLocalProperties(DONT_ENUM));
|
| + ASSERT(storage->length() == object->NumberOfLocalProperties(DONT_SHOW));
|
| return storage;
|
| }
|
| }
|
|
|