Chromium Code Reviews| Index: src/elements.cc | 
| diff --git a/src/elements.cc b/src/elements.cc | 
| index 1d50099bca833af1c01e10a771d9a4ce02945cb4..e1652b09837ced71168cb1622ab02cbd2c62b86c 100644 | 
| --- a/src/elements.cc | 
| +++ b/src/elements.cc | 
| @@ -801,42 +801,44 @@ ElementsAccessor* ElementsAccessor::ForArray(FixedArrayBase* array) { | 
| void ElementsAccessor::InitializeOncePerProcess() { | 
| + // First argument in list is the accessor class, the second argument is can | 
| 
 
Jakob Kummerow
2011/11/17 14:38:16
Please add a comment that the order must match tha
 
 | 
| + // be any arbitrary unique identifier, in this case chosen to be the | 
| + // corresponding enum. Use the fast element handler for smi-only arrays. | 
| + // The implementation is currently identical. | 
| +#define ELEMENTS_LIST(V) \ | 
| + V(FastObjectElementsAccessor, FAST_SMI_ONLY_ELEMENTS) \ | 
| + V(FastObjectElementsAccessor, FAST_ELEMENTS) \ | 
| + V(FastDoubleElementsAccessor, FAST_DOUBLE_ELEMENTS) \ | 
| + V(DictionaryElementsAccessor, DICTIONARY_ELEMENTS) \ | 
| + V(NonStrictArgumentsElementsAccessor, NON_STRICT_ARGUMENTS_ELEMENTS) \ | 
| + V(ExternalByteElementsAccessor, EXTERNAL_BYTE_ELEMENTS) \ | 
| + V(ExternalUnsignedByteElementsAccessor, EXTERNAL_UNSIGNED_BYTE_ELEMENTS) \ | 
| + V(ExternalShortElementsAccessor, EXTERNAL_SHORT_ELEMENTS) \ | 
| + V(ExternalUnsignedShortElementsAccessor, EXTERNAL_UNSIGNED_SHORT_ELEMENTS) \ | 
| + V(ExternalIntElementsAccessor, EXTERNAL_INT_ELEMENTS) \ | 
| + V(ExternalUnsignedIntElementsAccessor, EXTERNAL_UNSIGNED_INT_ELEMENTS) \ | 
| + V(ExternalFloatElementsAccessor, EXTERNAL_FLOAT_ELEMENTS) \ | 
| + V(ExternalDoubleElementsAccessor, EXTERNAL_DOUBLE_ELEMENTS) \ | 
| + V(PixelElementsAccessor, EXTERNAL_PIXEL_ELEMENTS) | 
| + | 
| static struct ConcreteElementsAccessors { | 
| - // Use the fast element handler for smi-only arrays. The implementation is | 
| - // currently identical. | 
| - FastObjectElementsAccessor fast_smi_elements_handler; | 
| - FastObjectElementsAccessor fast_elements_handler; | 
| - FastDoubleElementsAccessor fast_double_elements_handler; | 
| - DictionaryElementsAccessor dictionary_elements_handler; | 
| - NonStrictArgumentsElementsAccessor non_strict_arguments_elements_handler; | 
| - ExternalByteElementsAccessor byte_elements_handler; | 
| - ExternalUnsignedByteElementsAccessor unsigned_byte_elements_handler; | 
| - ExternalShortElementsAccessor short_elements_handler; | 
| - ExternalUnsignedShortElementsAccessor unsigned_short_elements_handler; | 
| - ExternalIntElementsAccessor int_elements_handler; | 
| - ExternalUnsignedIntElementsAccessor unsigned_int_elements_handler; | 
| - ExternalFloatElementsAccessor float_elements_handler; | 
| - ExternalDoubleElementsAccessor double_elements_handler; | 
| - PixelElementsAccessor pixel_elements_handler; | 
| - } element_accessors; | 
| +#define ACCESSOR_STRUCT(Class, Name) Class* Name##_handler; | 
| + ELEMENTS_LIST(ACCESSOR_STRUCT) | 
| +#undef ACCESSOR_STRUCT | 
| + } element_accessors = { | 
| +#define ACCESSOR_INIT(Class, Name) ::new Class(), | 
| + ELEMENTS_LIST(ACCESSOR_INIT) | 
| +#undef ACCESSOR_INIT | 
| + }; | 
| static ElementsAccessor* accessor_array[] = { | 
| - &element_accessors.fast_smi_elements_handler, | 
| - &element_accessors.fast_elements_handler, | 
| - &element_accessors.fast_double_elements_handler, | 
| - &element_accessors.dictionary_elements_handler, | 
| - &element_accessors.non_strict_arguments_elements_handler, | 
| - &element_accessors.byte_elements_handler, | 
| - &element_accessors.unsigned_byte_elements_handler, | 
| - &element_accessors.short_elements_handler, | 
| - &element_accessors.unsigned_short_elements_handler, | 
| - &element_accessors.int_elements_handler, | 
| - &element_accessors.unsigned_int_elements_handler, | 
| - &element_accessors.float_elements_handler, | 
| - &element_accessors.double_elements_handler, | 
| - &element_accessors.pixel_elements_handler | 
| +#define ACCESSOR_ARRAY(Class, Name) element_accessors.Name##_handler, | 
| + ELEMENTS_LIST(ACCESSOR_ARRAY) | 
| +#undef ACCESSOR_ARRAY | 
| }; | 
| +#undef ELEMENTS_LIST | 
| + | 
| STATIC_ASSERT((sizeof(accessor_array) / sizeof(*accessor_array)) == | 
| kElementsKindCount); |