Chromium Code Reviews| OLD | NEW | 
|---|---|
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. | 
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without | 
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are | 
| 4 // met: | 4 // met: | 
| 5 // | 5 // | 
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright | 
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. | 
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above | 
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following | 
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided | 
| (...skipping 15474 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 15485 | 15485 | 
| 15486 | 15486 | 
| 15487 | 15487 | 
| 15488 template<typename Shape, typename Key> | 15488 template<typename Shape, typename Key> | 
| 15489 int Dictionary<Shape, Key>::NumberOfElementsFilterAttributes( | 15489 int Dictionary<Shape, Key>::NumberOfElementsFilterAttributes( | 
| 15490 PropertyAttributes filter) { | 15490 PropertyAttributes filter) { | 
| 15491 int capacity = HashTable<Shape, Key>::Capacity(); | 15491 int capacity = HashTable<Shape, Key>::Capacity(); | 
| 15492 int result = 0; | 15492 int result = 0; | 
| 15493 for (int i = 0; i < capacity; i++) { | 15493 for (int i = 0; i < capacity; i++) { | 
| 15494 Object* k = HashTable<Shape, Key>::KeyAt(i); | 15494 Object* k = HashTable<Shape, Key>::KeyAt(i); | 
| 15495 if (HashTable<Shape, Key>::IsKey(k) && | 15495 if (HashTable<Shape, Key>::IsKey(k) && !FilterKey(k, filter)) { | 
| 15496 !FilterKey(k, filter)) { | |
| 15497 PropertyDetails details = DetailsAt(i); | 15496 PropertyDetails details = DetailsAt(i); | 
| 15498 if (details.IsDeleted()) continue; | 15497 if (details.IsDeleted()) continue; | 
| 15499 PropertyAttributes attr = details.attributes(); | 15498 PropertyAttributes attr = details.attributes(); | 
| 15500 if ((attr & filter) == 0) result++; | 15499 if ((attr & filter) == 0) result++; | 
| 15501 } | 15500 } | 
| 15502 } | 15501 } | 
| 15503 return result; | 15502 return result; | 
| 15504 } | 15503 } | 
| 15505 | 15504 | 
| 15506 | 15505 | 
| 15507 template<typename Shape, typename Key> | 15506 template<typename Shape, typename Key> | 
| 15508 int Dictionary<Shape, Key>::NumberOfEnumElements() { | 15507 int Dictionary<Shape, Key>::NumberOfEnumElements() { | 
| 15509 return NumberOfElementsFilterAttributes( | 15508 return NumberOfElementsFilterAttributes( | 
| 15510 static_cast<PropertyAttributes>(DONT_ENUM)); | 15509 static_cast<PropertyAttributes>(DONT_ENUM)); | 
| 15511 } | 15510 } | 
| 15512 | 15511 | 
| 15513 | 15512 | 
| 15514 template<typename Shape, typename Key> | 15513 template<typename Shape, typename Key> | 
| 15515 void Dictionary<Shape, Key>::CopyKeysTo( | 15514 void Dictionary<Shape, Key>::CopyKeysTo( | 
| 15516 FixedArray* storage, | 15515 FixedArray* storage, | 
| 15517 PropertyAttributes filter, | 15516 PropertyAttributes filter, | 
| 15518 typename Dictionary<Shape, Key>::SortMode sort_mode) { | 15517 typename Dictionary<Shape, Key>::SortMode sort_mode) { | 
| 15519 ASSERT(storage->length() >= NumberOfEnumElements()); | 15518 ASSERT(storage->length() >= NumberOfEnumElements()); | 
| 15520 int capacity = HashTable<Shape, Key>::Capacity(); | 15519 int capacity = HashTable<Shape, Key>::Capacity(); | 
| 15521 int index = 0; | 15520 int index = 0; | 
| 15522 for (int i = 0; i < capacity; i++) { | 15521 for (int i = 0; i < capacity; i++) { | 
| 15523 Object* k = HashTable<Shape, Key>::KeyAt(i); | 15522 Object* k = HashTable<Shape, Key>::KeyAt(i); | 
| 15524 if (HashTable<Shape, Key>::IsKey(k)) { | 15523 if (HashTable<Shape, Key>::IsKey(k)) { | 
| 
 
Michael Starzinger
2014/02/24 14:23:40
Shouldn't the fix also apply here?
 
rossberg
2014/02/24 14:42:29
Good catch.
 
 | |
| 15525 PropertyDetails details = DetailsAt(i); | 15524 PropertyDetails details = DetailsAt(i); | 
| 15526 if (details.IsDeleted()) continue; | 15525 if (details.IsDeleted()) continue; | 
| 15527 PropertyAttributes attr = details.attributes(); | 15526 PropertyAttributes attr = details.attributes(); | 
| 15528 if ((attr & filter) == 0) storage->set(index++, k); | 15527 if ((attr & filter) == 0) storage->set(index++, k); | 
| 15529 } | 15528 } | 
| 15530 } | 15529 } | 
| 15531 if (sort_mode == Dictionary<Shape, Key>::SORTED) { | 15530 if (sort_mode == Dictionary<Shape, Key>::SORTED) { | 
| 15532 storage->SortPairs(storage, index); | 15531 storage->SortPairs(storage, index); | 
| 15533 } | 15532 } | 
| 15534 ASSERT(storage->length() >= index); | 15533 ASSERT(storage->length() >= index); | 
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 15576 return storage; | 15575 return storage; | 
| 15577 } | 15576 } | 
| 15578 | 15577 | 
| 15579 | 15578 | 
| 15580 template<typename Shape, typename Key> | 15579 template<typename Shape, typename Key> | 
| 15581 void Dictionary<Shape, Key>::CopyKeysTo( | 15580 void Dictionary<Shape, Key>::CopyKeysTo( | 
| 15582 FixedArray* storage, | 15581 FixedArray* storage, | 
| 15583 int index, | 15582 int index, | 
| 15584 PropertyAttributes filter, | 15583 PropertyAttributes filter, | 
| 15585 typename Dictionary<Shape, Key>::SortMode sort_mode) { | 15584 typename Dictionary<Shape, Key>::SortMode sort_mode) { | 
| 15586 ASSERT(storage->length() >= NumberOfElementsFilterAttributes( | 15585 ASSERT(storage->length() >= NumberOfElementsFilterAttributes(filter)); | 
| 15587 static_cast<PropertyAttributes>(NONE))); | |
| 15588 int capacity = HashTable<Shape, Key>::Capacity(); | 15586 int capacity = HashTable<Shape, Key>::Capacity(); | 
| 15589 for (int i = 0; i < capacity; i++) { | 15587 for (int i = 0; i < capacity; i++) { | 
| 15590 Object* k = HashTable<Shape, Key>::KeyAt(i); | 15588 Object* k = HashTable<Shape, Key>::KeyAt(i); | 
| 15591 if (HashTable<Shape, Key>::IsKey(k)) { | 15589 if (HashTable<Shape, Key>::IsKey(k) && !FilterKey(k, filter)) { | 
| 15592 PropertyDetails details = DetailsAt(i); | 15590 PropertyDetails details = DetailsAt(i); | 
| 15593 if (details.IsDeleted()) continue; | 15591 if (details.IsDeleted()) continue; | 
| 15594 PropertyAttributes attr = details.attributes(); | 15592 PropertyAttributes attr = details.attributes(); | 
| 15595 if ((attr & filter) == 0) storage->set(index++, k); | 15593 if ((attr & filter) == 0) storage->set(index++, k); | 
| 15596 } | 15594 } | 
| 15597 } | 15595 } | 
| 15598 if (sort_mode == Dictionary<Shape, Key>::SORTED) { | 15596 if (sort_mode == Dictionary<Shape, Key>::SORTED) { | 
| 15599 storage->SortPairs(storage, index); | 15597 storage->SortPairs(storage, index); | 
| 15600 } | 15598 } | 
| 15601 ASSERT(storage->length() >= index); | 15599 ASSERT(storage->length() >= index); | 
| (...skipping 881 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 16483 #define ERROR_MESSAGES_TEXTS(C, T) T, | 16481 #define ERROR_MESSAGES_TEXTS(C, T) T, | 
| 16484 static const char* error_messages_[] = { | 16482 static const char* error_messages_[] = { | 
| 16485 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) | 16483 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) | 
| 16486 }; | 16484 }; | 
| 16487 #undef ERROR_MESSAGES_TEXTS | 16485 #undef ERROR_MESSAGES_TEXTS | 
| 16488 return error_messages_[reason]; | 16486 return error_messages_[reason]; | 
| 16489 } | 16487 } | 
| 16490 | 16488 | 
| 16491 | 16489 | 
| 16492 } } // namespace v8::internal | 16490 } } // namespace v8::internal | 
| OLD | NEW |