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

Side by Side Diff: src/elements.cc

Issue 145133013: External Array renaming and boilerplate scrapping (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 11 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 30 matching lines...) Expand all
41 // - ElementsAccessorBase (abstract) 41 // - ElementsAccessorBase (abstract)
42 // - FastElementsAccessor (abstract) 42 // - FastElementsAccessor (abstract)
43 // - FastSmiOrObjectElementsAccessor 43 // - FastSmiOrObjectElementsAccessor
44 // - FastPackedSmiElementsAccessor 44 // - FastPackedSmiElementsAccessor
45 // - FastHoleySmiElementsAccessor 45 // - FastHoleySmiElementsAccessor
46 // - FastPackedObjectElementsAccessor 46 // - FastPackedObjectElementsAccessor
47 // - FastHoleyObjectElementsAccessor 47 // - FastHoleyObjectElementsAccessor
48 // - FastDoubleElementsAccessor 48 // - FastDoubleElementsAccessor
49 // - FastPackedDoubleElementsAccessor 49 // - FastPackedDoubleElementsAccessor
50 // - FastHoleyDoubleElementsAccessor 50 // - FastHoleyDoubleElementsAccessor
51 // - TypedElementsAccessor (abstract) 51 // - TypedElementsAccessor: template, with instantiations:
52 // - ExternalByteElementsAccessor 52 // - ExternalInt8ElementsAccessor
53 // - ExternalUnsignedByteElementsAccessor 53 // - ExternalUint8ElementsAccessor
54 // - ExternalShortElementsAccessor 54 // - ExternalInt16ElementsAccessor
55 // - ExternalUnsignedShortElementsAccessor 55 // - ExternalUint16ElementsAccessor
56 // - ExternalIntElementsAccessor 56 // - ExternalInt32ElementsAccessor
57 // - ExternalUnsignedIntElementsAccessor 57 // - ExternalUint32ElementsAccessor
58 // - ExternalFloatElementsAccessor 58 // - ExternalFloat32ElementsAccessor
59 // - ExternalDoubleElementsAccessor 59 // - ExternalFloat64ElementsAccessor
60 // - PixelElementsAccessor 60 // - ExternalUint8ClampedElementsAccessor
61 // - FixedUint8ArrayAccessor 61 // - FixedUint8ElementsAccessor
62 // - FixedInt8ArrayAccessor 62 // - FixedInt8ElementsAccessor
63 // - FixedUint16ArrayAccessor 63 // - FixedUint16ElementsAccessor
64 // - FixedInt16ArrayAccessor 64 // - FixedInt16ElementsAccessor
65 // - FixedUint32ArrayAccessor 65 // - FixedUint32ElementsAccessor
66 // - FixedInt32ArrayAccessor 66 // - FixedInt32ElementsAccessor
67 // - FixedFloat32ArrayAccessor 67 // - FixedFloat32ElementsAccessor
68 // - FixedFloat64ArrayAccessor 68 // - FixedFloat64ElementsAccessor
69 // - FixedUint8ClampedArrayAccessor 69 // - FixedUint8ClampedElementsAccessor
70 // - DictionaryElementsAccessor 70 // - DictionaryElementsAccessor
71 // - NonStrictArgumentsElementsAccessor 71 // - NonStrictArgumentsElementsAccessor
72 72
73 73
74 namespace v8 { 74 namespace v8 {
75 namespace internal { 75 namespace internal {
76 76
77 77
78 static const int kPackedSizeNotKnown = -1; 78 static const int kPackedSizeNotKnown = -1;
79 79
(...skipping 10 matching lines...) Expand all
90 V(FastPackedObjectElementsAccessor, FAST_ELEMENTS, FixedArray) \ 90 V(FastPackedObjectElementsAccessor, FAST_ELEMENTS, FixedArray) \
91 V(FastHoleyObjectElementsAccessor, FAST_HOLEY_ELEMENTS, FixedArray) \ 91 V(FastHoleyObjectElementsAccessor, FAST_HOLEY_ELEMENTS, FixedArray) \
92 V(FastPackedDoubleElementsAccessor, FAST_DOUBLE_ELEMENTS, \ 92 V(FastPackedDoubleElementsAccessor, FAST_DOUBLE_ELEMENTS, \
93 FixedDoubleArray) \ 93 FixedDoubleArray) \
94 V(FastHoleyDoubleElementsAccessor, FAST_HOLEY_DOUBLE_ELEMENTS, \ 94 V(FastHoleyDoubleElementsAccessor, FAST_HOLEY_DOUBLE_ELEMENTS, \
95 FixedDoubleArray) \ 95 FixedDoubleArray) \
96 V(DictionaryElementsAccessor, DICTIONARY_ELEMENTS, \ 96 V(DictionaryElementsAccessor, DICTIONARY_ELEMENTS, \
97 SeededNumberDictionary) \ 97 SeededNumberDictionary) \
98 V(NonStrictArgumentsElementsAccessor, NON_STRICT_ARGUMENTS_ELEMENTS, \ 98 V(NonStrictArgumentsElementsAccessor, NON_STRICT_ARGUMENTS_ELEMENTS, \
99 FixedArray) \ 99 FixedArray) \
100 V(ExternalByteElementsAccessor, EXTERNAL_BYTE_ELEMENTS, \ 100 V(ExternalInt8ElementsAccessor, EXTERNAL_INT8_ELEMENTS, \
101 ExternalByteArray) \ 101 ExternalInt8Array) \
102 V(ExternalUnsignedByteElementsAccessor, \ 102 V(ExternalUint8ElementsAccessor, \
103 EXTERNAL_UNSIGNED_BYTE_ELEMENTS, ExternalUnsignedByteArray) \ 103 EXTERNAL_UINT8_ELEMENTS, ExternalUint8Array) \
104 V(ExternalShortElementsAccessor, EXTERNAL_SHORT_ELEMENTS, \ 104 V(ExternalInt16ElementsAccessor, EXTERNAL_INT16_ELEMENTS, \
105 ExternalShortArray) \ 105 ExternalInt16Array) \
106 V(ExternalUnsignedShortElementsAccessor, \ 106 V(ExternalUint16ElementsAccessor, \
107 EXTERNAL_UNSIGNED_SHORT_ELEMENTS, ExternalUnsignedShortArray) \ 107 EXTERNAL_UINT16_ELEMENTS, ExternalUint16Array) \
108 V(ExternalIntElementsAccessor, EXTERNAL_INT_ELEMENTS, \ 108 V(ExternalInt32ElementsAccessor, EXTERNAL_INT32_ELEMENTS, \
109 ExternalIntArray) \ 109 ExternalInt32Array) \
110 V(ExternalUnsignedIntElementsAccessor, \ 110 V(ExternalUint32ElementsAccessor, \
111 EXTERNAL_UNSIGNED_INT_ELEMENTS, ExternalUnsignedIntArray) \ 111 EXTERNAL_UINT32_ELEMENTS, ExternalUint32Array) \
112 V(ExternalFloatElementsAccessor, \ 112 V(ExternalFloat32ElementsAccessor, \
113 EXTERNAL_FLOAT_ELEMENTS, ExternalFloatArray) \ 113 EXTERNAL_FLOAT32_ELEMENTS, ExternalFloat32Array) \
114 V(ExternalDoubleElementsAccessor, \ 114 V(ExternalFloat64ElementsAccessor, \
115 EXTERNAL_DOUBLE_ELEMENTS, ExternalDoubleArray) \ 115 EXTERNAL_FLOAT64_ELEMENTS, ExternalFloat64Array) \
116 V(PixelElementsAccessor, EXTERNAL_PIXEL_ELEMENTS, ExternalPixelArray) \ 116 V(ExternalUint8ClampedElementsAccessor, \
117 V(FixedUint8ArrayAccessor, UINT8_ELEMENTS, FixedUint8Array) \ 117 EXTERNAL_UINT8_CLAMPED_ELEMENTS, \
118 V(FixedInt8ArrayAccessor, INT8_ELEMENTS, FixedInt8Array) \ 118 ExternalUint8ClampedArray) \
119 V(FixedUint16ArrayAccessor, UINT16_ELEMENTS, FixedUint16Array) \ 119 V(FixedUint8ElementsAccessor, UINT8_ELEMENTS, FixedUint8Array) \
120 V(FixedInt16ArrayAccessor, INT16_ELEMENTS, FixedInt16Array) \ 120 V(FixedInt8ElementsAccessor, INT8_ELEMENTS, FixedInt8Array) \
121 V(FixedUint32ArrayAccessor, UINT32_ELEMENTS, FixedUint32Array) \ 121 V(FixedUint16ElementsAccessor, UINT16_ELEMENTS, FixedUint16Array) \
122 V(FixedInt32ArrayAccessor, INT32_ELEMENTS, FixedInt32Array) \ 122 V(FixedInt16ElementsAccessor, INT16_ELEMENTS, FixedInt16Array) \
123 V(FixedFloat32ArrayAccessor, FLOAT32_ELEMENTS, FixedFloat32Array) \ 123 V(FixedUint32ElementsAccessor, UINT32_ELEMENTS, FixedUint32Array) \
124 V(FixedFloat64ArrayAccessor, FLOAT64_ELEMENTS, FixedFloat64Array) \ 124 V(FixedInt32ElementsAccessor, INT32_ELEMENTS, FixedInt32Array) \
125 V(FixedUint8ClampedArrayAccessor, UINT8_CLAMPED_ELEMENTS, \ 125 V(FixedFloat32ElementsAccessor, FLOAT32_ELEMENTS, FixedFloat32Array) \
126 V(FixedFloat64ElementsAccessor, FLOAT64_ELEMENTS, FixedFloat64Array) \
127 V(FixedUint8ClampedElementsAccessor, UINT8_CLAMPED_ELEMENTS, \
126 FixedUint8ClampedArray) 128 FixedUint8ClampedArray)
127 129
128 130
129 template<ElementsKind Kind> class ElementsKindTraits { 131 template<ElementsKind Kind> class ElementsKindTraits {
130 public: 132 public:
131 typedef FixedArrayBase BackingStore; 133 typedef FixedArrayBase BackingStore;
132 }; 134 };
133 135
134 #define ELEMENTS_TRAITS(Class, KindParam, Store) \ 136 #define ELEMENTS_TRAITS(Class, KindParam, Store) \
135 template<> class ElementsKindTraits<KindParam> { \ 137 template<> class ElementsKindTraits<KindParam> { \
(...skipping 954 matching lines...) Expand 10 before | Expand all | Expand 10 after
1090 static inline ElementsKind ElementsKindForArray(FixedArrayBase* array) { 1092 static inline ElementsKind ElementsKindForArray(FixedArrayBase* array) {
1091 switch (array->map()->instance_type()) { 1093 switch (array->map()->instance_type()) {
1092 case FIXED_ARRAY_TYPE: 1094 case FIXED_ARRAY_TYPE:
1093 if (array->IsDictionary()) { 1095 if (array->IsDictionary()) {
1094 return DICTIONARY_ELEMENTS; 1096 return DICTIONARY_ELEMENTS;
1095 } else { 1097 } else {
1096 return FAST_HOLEY_ELEMENTS; 1098 return FAST_HOLEY_ELEMENTS;
1097 } 1099 }
1098 case FIXED_DOUBLE_ARRAY_TYPE: 1100 case FIXED_DOUBLE_ARRAY_TYPE:
1099 return FAST_HOLEY_DOUBLE_ELEMENTS; 1101 return FAST_HOLEY_DOUBLE_ELEMENTS;
1100 case EXTERNAL_BYTE_ARRAY_TYPE:
1101 return EXTERNAL_BYTE_ELEMENTS;
1102 case EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE:
1103 return EXTERNAL_UNSIGNED_BYTE_ELEMENTS;
1104 case EXTERNAL_SHORT_ARRAY_TYPE:
1105 return EXTERNAL_SHORT_ELEMENTS;
1106 case EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE:
1107 return EXTERNAL_UNSIGNED_SHORT_ELEMENTS;
1108 case EXTERNAL_INT_ARRAY_TYPE:
1109 return EXTERNAL_INT_ELEMENTS;
1110 case EXTERNAL_UNSIGNED_INT_ARRAY_TYPE:
1111 return EXTERNAL_UNSIGNED_INT_ELEMENTS;
1112 case EXTERNAL_FLOAT_ARRAY_TYPE:
1113 return EXTERNAL_FLOAT_ELEMENTS;
1114 case EXTERNAL_DOUBLE_ARRAY_TYPE:
1115 return EXTERNAL_DOUBLE_ELEMENTS;
1116 case EXTERNAL_PIXEL_ARRAY_TYPE:
1117 return EXTERNAL_PIXEL_ELEMENTS;
1118 1102
1119 case FIXED_UINT8_ARRAY_TYPE: 1103 #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \
1120 return UINT8_ELEMENTS; 1104 case EXTERNAL_##TYPE##_ARRAY_TYPE: \
1121 case FIXED_INT8_ARRAY_TYPE: 1105 return EXTERNAL_##TYPE##_ELEMENTS; \
1122 return INT8_ELEMENTS; 1106 case FIXED_##TYPE##_ARRAY_TYPE: \
1123 case FIXED_UINT16_ARRAY_TYPE: 1107 return TYPE##_ELEMENTS;
1124 return UINT16_ELEMENTS; 1108
1125 case FIXED_INT16_ARRAY_TYPE: 1109 TYPED_ARRAYS(TYPED_ARRAY_CASE)
1126 return INT16_ELEMENTS; 1110 #undef TYPED_ARRAY_CASE
1127 case FIXED_UINT32_ARRAY_TYPE:
1128 return UINT32_ELEMENTS;
1129 case FIXED_INT32_ARRAY_TYPE:
1130 return INT32_ELEMENTS;
1131 case FIXED_FLOAT32_ARRAY_TYPE:
1132 return FLOAT32_ELEMENTS;
1133 case FIXED_FLOAT64_ARRAY_TYPE:
1134 return FLOAT64_ELEMENTS;
1135 case FIXED_UINT8_CLAMPED_ARRAY_TYPE:
1136 return UINT8_CLAMPED_ELEMENTS;
1137 1111
1138 default: 1112 default:
1139 UNREACHABLE(); 1113 UNREACHABLE();
1140 } 1114 }
1141 return FAST_HOLEY_ELEMENTS; 1115 return FAST_HOLEY_ELEMENTS;
1142 } 1116 }
1143 1117
1144 1118
1145 template<typename FastElementsAccessorSubclass, 1119 template<typename FastElementsAccessorSubclass,
1146 typename KindTraits> 1120 typename KindTraits>
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1181 case NON_STRICT_ARGUMENTS_ELEMENTS: { 1155 case NON_STRICT_ARGUMENTS_ELEMENTS: {
1182 // TODO(verwaest): This is a temporary hack to support extending 1156 // TODO(verwaest): This is a temporary hack to support extending
1183 // NON_STRICT_ARGUMENTS_ELEMENTS in SetFastElementsCapacityAndLength. 1157 // NON_STRICT_ARGUMENTS_ELEMENTS in SetFastElementsCapacityAndLength.
1184 // This case should be UNREACHABLE(). 1158 // This case should be UNREACHABLE().
1185 FixedArray* parameter_map = FixedArray::cast(from); 1159 FixedArray* parameter_map = FixedArray::cast(from);
1186 FixedArrayBase* arguments = FixedArrayBase::cast(parameter_map->get(1)); 1160 FixedArrayBase* arguments = FixedArrayBase::cast(parameter_map->get(1));
1187 ElementsKind from_kind = ElementsKindForArray(arguments); 1161 ElementsKind from_kind = ElementsKindForArray(arguments);
1188 return CopyElementsImpl(arguments, from_start, to, from_kind, 1162 return CopyElementsImpl(arguments, from_start, to, from_kind,
1189 to_start, packed_size, copy_size); 1163 to_start, packed_size, copy_size);
1190 } 1164 }
1191 case EXTERNAL_BYTE_ELEMENTS: 1165 #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \
1192 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS: 1166 case EXTERNAL_##TYPE##_ELEMENTS: \
1193 case EXTERNAL_SHORT_ELEMENTS: 1167 case TYPE##_ELEMENTS: \
1194 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
1195 case EXTERNAL_INT_ELEMENTS:
1196 case EXTERNAL_UNSIGNED_INT_ELEMENTS:
1197 case EXTERNAL_FLOAT_ELEMENTS:
1198 case EXTERNAL_DOUBLE_ELEMENTS:
1199 case EXTERNAL_PIXEL_ELEMENTS:
1200 case UINT8_ELEMENTS:
1201 case INT8_ELEMENTS:
1202 case UINT16_ELEMENTS:
1203 case INT16_ELEMENTS:
1204 case UINT32_ELEMENTS:
1205 case INT32_ELEMENTS:
1206 case FLOAT32_ELEMENTS:
1207 case FLOAT64_ELEMENTS:
1208 case UINT8_CLAMPED_ELEMENTS:
1209 UNREACHABLE(); 1168 UNREACHABLE();
1169 TYPED_ARRAYS(TYPED_ARRAY_CASE)
1170 #undef TYPED_ARRAY_CASE
1210 } 1171 }
1211 return NULL; 1172 return NULL;
1212 } 1173 }
1213 1174
1214 1175
1215 static MaybeObject* SetFastElementsCapacityAndLength(JSObject* obj, 1176 static MaybeObject* SetFastElementsCapacityAndLength(JSObject* obj,
1216 uint32_t capacity, 1177 uint32_t capacity,
1217 uint32_t length) { 1178 uint32_t length) {
1218 JSObject::SetFastElementsCapacitySmiMode set_capacity_mode = 1179 JSObject::SetFastElementsCapacitySmiMode set_capacity_mode =
1219 obj->HasFastSmiElements() 1180 obj->HasFastSmiElements()
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
1315 break; 1276 break;
1316 case FAST_ELEMENTS: 1277 case FAST_ELEMENTS:
1317 case FAST_HOLEY_ELEMENTS: 1278 case FAST_HOLEY_ELEMENTS:
1318 CopyObjectToDoubleElements(from, from_start, to, to_start, copy_size); 1279 CopyObjectToDoubleElements(from, from_start, to, to_start, copy_size);
1319 break; 1280 break;
1320 case DICTIONARY_ELEMENTS: 1281 case DICTIONARY_ELEMENTS:
1321 CopyDictionaryToDoubleElements( 1282 CopyDictionaryToDoubleElements(
1322 from, from_start, to, to_start, copy_size); 1283 from, from_start, to, to_start, copy_size);
1323 break; 1284 break;
1324 case NON_STRICT_ARGUMENTS_ELEMENTS: 1285 case NON_STRICT_ARGUMENTS_ELEMENTS:
1325 case EXTERNAL_BYTE_ELEMENTS:
1326 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
1327 case EXTERNAL_SHORT_ELEMENTS:
1328 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
1329 case EXTERNAL_INT_ELEMENTS:
1330 case EXTERNAL_UNSIGNED_INT_ELEMENTS:
1331 case EXTERNAL_FLOAT_ELEMENTS:
1332 case EXTERNAL_DOUBLE_ELEMENTS:
1333 case EXTERNAL_PIXEL_ELEMENTS:
1334 case UINT8_ELEMENTS:
1335 case INT8_ELEMENTS:
1336 case UINT16_ELEMENTS:
1337 case INT16_ELEMENTS:
1338 case UINT32_ELEMENTS:
1339 case INT32_ELEMENTS:
1340 case FLOAT32_ELEMENTS:
1341 case FLOAT64_ELEMENTS:
1342 case UINT8_CLAMPED_ELEMENTS:
1343 UNREACHABLE(); 1286 UNREACHABLE();
1287
1288 #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \
1289 case EXTERNAL_##TYPE##_ELEMENTS: \
1290 case TYPE##_ELEMENTS: \
1291 UNREACHABLE();
1292 TYPED_ARRAYS(TYPED_ARRAY_CASE)
1293 #undef TYPED_ARRAY_CASE
1344 } 1294 }
1345 return to->GetHeap()->undefined_value(); 1295 return to->GetHeap()->undefined_value();
1346 } 1296 }
1347 }; 1297 };
1348 1298
1349 1299
1350 class FastPackedDoubleElementsAccessor 1300 class FastPackedDoubleElementsAccessor
1351 : public FastDoubleElementsAccessor< 1301 : public FastDoubleElementsAccessor<
1352 FastPackedDoubleElementsAccessor, 1302 FastPackedDoubleElementsAccessor,
1353 ElementsKindTraits<FAST_DOUBLE_ELEMENTS> > { 1303 ElementsKindTraits<FAST_DOUBLE_ELEMENTS> > {
(...skipping 16 matching lines...) Expand all
1370 FastHoleyDoubleElementsAccessor, 1320 FastHoleyDoubleElementsAccessor,
1371 ElementsKindTraits<FAST_HOLEY_DOUBLE_ELEMENTS> >; 1321 ElementsKindTraits<FAST_HOLEY_DOUBLE_ELEMENTS> >;
1372 explicit FastHoleyDoubleElementsAccessor(const char* name) 1322 explicit FastHoleyDoubleElementsAccessor(const char* name)
1373 : FastDoubleElementsAccessor< 1323 : FastDoubleElementsAccessor<
1374 FastHoleyDoubleElementsAccessor, 1324 FastHoleyDoubleElementsAccessor,
1375 ElementsKindTraits<FAST_HOLEY_DOUBLE_ELEMENTS> >(name) {} 1325 ElementsKindTraits<FAST_HOLEY_DOUBLE_ELEMENTS> >(name) {}
1376 }; 1326 };
1377 1327
1378 1328
1379 // Super class for all external element arrays. 1329 // Super class for all external element arrays.
1380 template<typename AccessorSubclass, 1330 template<ElementsKind Kind>
1381 ElementsKind Kind>
1382 class TypedElementsAccessor 1331 class TypedElementsAccessor
1383 : public ElementsAccessorBase<AccessorSubclass, 1332 : public ElementsAccessorBase<TypedElementsAccessor<Kind>,
1384 ElementsKindTraits<Kind> > { 1333 ElementsKindTraits<Kind> > {
1385 public: 1334 public:
1386 explicit TypedElementsAccessor(const char* name) 1335 explicit TypedElementsAccessor(const char* name)
1387 : ElementsAccessorBase<AccessorSubclass, 1336 : ElementsAccessorBase<AccessorClass,
1388 ElementsKindTraits<Kind> >(name) {} 1337 ElementsKindTraits<Kind> >(name) {}
1389 1338
1390 protected: 1339 protected:
1391 typedef typename ElementsKindTraits<Kind>::BackingStore BackingStore; 1340 typedef typename ElementsKindTraits<Kind>::BackingStore BackingStore;
1341 typedef TypedElementsAccessor<Kind> AccessorClass;
1392 1342
1393 friend class ElementsAccessorBase<AccessorSubclass, 1343 friend class ElementsAccessorBase<AccessorClass,
1394 ElementsKindTraits<Kind> >; 1344 ElementsKindTraits<Kind> >;
1395 1345
1396 MUST_USE_RESULT static MaybeObject* GetImpl(Object* receiver, 1346 MUST_USE_RESULT static MaybeObject* GetImpl(Object* receiver,
1397 JSObject* obj, 1347 JSObject* obj,
1398 uint32_t key, 1348 uint32_t key,
1399 FixedArrayBase* backing_store) { 1349 FixedArrayBase* backing_store) {
1400 return 1350 return
1401 key < AccessorSubclass::GetCapacityImpl(backing_store) 1351 key < AccessorClass::GetCapacityImpl(backing_store)
1402 ? BackingStore::cast(backing_store)->get(key) 1352 ? BackingStore::cast(backing_store)->get(key)
1403 : backing_store->GetHeap()->undefined_value(); 1353 : backing_store->GetHeap()->undefined_value();
1404 } 1354 }
1405 1355
1406 MUST_USE_RESULT static PropertyAttributes GetAttributesImpl( 1356 MUST_USE_RESULT static PropertyAttributes GetAttributesImpl(
1407 Object* receiver, 1357 Object* receiver,
1408 JSObject* obj, 1358 JSObject* obj,
1409 uint32_t key, 1359 uint32_t key,
1410 FixedArrayBase* backing_store) { 1360 FixedArrayBase* backing_store) {
1411 return 1361 return
1412 key < AccessorSubclass::GetCapacityImpl(backing_store) 1362 key < AccessorClass::GetCapacityImpl(backing_store)
1413 ? NONE : ABSENT; 1363 ? NONE : ABSENT;
1414 } 1364 }
1415 1365
1416 MUST_USE_RESULT static PropertyType GetTypeImpl( 1366 MUST_USE_RESULT static PropertyType GetTypeImpl(
1417 Object* receiver, 1367 Object* receiver,
1418 JSObject* obj, 1368 JSObject* obj,
1419 uint32_t key, 1369 uint32_t key,
1420 FixedArrayBase* backing_store) { 1370 FixedArrayBase* backing_store) {
1421 return 1371 return
1422 key < AccessorSubclass::GetCapacityImpl(backing_store) 1372 key < AccessorClass::GetCapacityImpl(backing_store)
1423 ? FIELD : NONEXISTENT; 1373 ? FIELD : NONEXISTENT;
1424 } 1374 }
1425 1375
1426 MUST_USE_RESULT static MaybeObject* SetLengthImpl( 1376 MUST_USE_RESULT static MaybeObject* SetLengthImpl(
1427 JSObject* obj, 1377 JSObject* obj,
1428 Object* length, 1378 Object* length,
1429 FixedArrayBase* backing_store) { 1379 FixedArrayBase* backing_store) {
1430 // External arrays do not support changing their length. 1380 // External arrays do not support changing their length.
1431 UNREACHABLE(); 1381 UNREACHABLE();
1432 return obj; 1382 return obj;
1433 } 1383 }
1434 1384
1435 MUST_USE_RESULT virtual MaybeObject* Delete(JSObject* obj, 1385 MUST_USE_RESULT virtual MaybeObject* Delete(JSObject* obj,
1436 uint32_t key, 1386 uint32_t key,
1437 JSReceiver::DeleteMode mode) { 1387 JSReceiver::DeleteMode mode) {
1438 // External arrays always ignore deletes. 1388 // External arrays always ignore deletes.
1439 return obj->GetHeap()->true_value(); 1389 return obj->GetHeap()->true_value();
1440 } 1390 }
1441 1391
1442 static bool HasElementImpl(Object* receiver, 1392 static bool HasElementImpl(Object* receiver,
1443 JSObject* holder, 1393 JSObject* holder,
1444 uint32_t key, 1394 uint32_t key,
1445 FixedArrayBase* backing_store) { 1395 FixedArrayBase* backing_store) {
1446 uint32_t capacity = 1396 uint32_t capacity =
1447 AccessorSubclass::GetCapacityImpl(backing_store); 1397 AccessorClass::GetCapacityImpl(backing_store);
1448 return key < capacity; 1398 return key < capacity;
1449 } 1399 }
1450 }; 1400 };
1451 1401
1452 1402
1453 class ExternalByteElementsAccessor 1403
1454 : public TypedElementsAccessor<ExternalByteElementsAccessor, 1404 #define EXTERNAL_ELEMENTS_ACCESSOR(Type, type, TYPE, ctype, size) \
1455 EXTERNAL_BYTE_ELEMENTS> { 1405 typedef TypedElementsAccessor<EXTERNAL_##TYPE##_ELEMENTS> \
1456 public: 1406 External##Type##ElementsAccessor;
1457 explicit ExternalByteElementsAccessor(const char* name) 1407
1458 : TypedElementsAccessor<ExternalByteElementsAccessor, 1408 TYPED_ARRAYS(EXTERNAL_ELEMENTS_ACCESSOR)
1459 EXTERNAL_BYTE_ELEMENTS>(name) {} 1409 #undef EXTERNAL_ELEMENTS_ACCESSOR
1460 }; 1410
1411 #define FIXED_ELEMENTS_ACCESSOR(Type, type, TYPE, ctype, size) \
1412 typedef TypedElementsAccessor<TYPE##_ELEMENTS > \
1413 Fixed##Type##ElementsAccessor;
1414
1415 TYPED_ARRAYS(FIXED_ELEMENTS_ACCESSOR)
1416 #undef FIXED_ELEMENTS_ACCESSOR
1461 1417
1462 1418
1463 class ExternalUnsignedByteElementsAccessor
1464 : public TypedElementsAccessor<ExternalUnsignedByteElementsAccessor,
1465 EXTERNAL_UNSIGNED_BYTE_ELEMENTS> {
1466 public:
1467 explicit ExternalUnsignedByteElementsAccessor(const char* name)
1468 : TypedElementsAccessor<ExternalUnsignedByteElementsAccessor,
1469 EXTERNAL_UNSIGNED_BYTE_ELEMENTS>(name) {}
1470 };
1471
1472
1473 class ExternalShortElementsAccessor
1474 : public TypedElementsAccessor<ExternalShortElementsAccessor,
1475 EXTERNAL_SHORT_ELEMENTS> {
1476 public:
1477 explicit ExternalShortElementsAccessor(const char* name)
1478 : TypedElementsAccessor<ExternalShortElementsAccessor,
1479 EXTERNAL_SHORT_ELEMENTS>(name) {}
1480 };
1481
1482
1483 class ExternalUnsignedShortElementsAccessor
1484 : public TypedElementsAccessor<ExternalUnsignedShortElementsAccessor,
1485 EXTERNAL_UNSIGNED_SHORT_ELEMENTS> {
1486 public:
1487 explicit ExternalUnsignedShortElementsAccessor(const char* name)
1488 : TypedElementsAccessor<ExternalUnsignedShortElementsAccessor,
1489 EXTERNAL_UNSIGNED_SHORT_ELEMENTS>(name) {}
1490 };
1491
1492
1493 class ExternalIntElementsAccessor
1494 : public TypedElementsAccessor<ExternalIntElementsAccessor,
1495 EXTERNAL_INT_ELEMENTS> {
1496 public:
1497 explicit ExternalIntElementsAccessor(const char* name)
1498 : TypedElementsAccessor<ExternalIntElementsAccessor,
1499 EXTERNAL_INT_ELEMENTS>(name) {}
1500 };
1501
1502
1503 class ExternalUnsignedIntElementsAccessor
1504 : public TypedElementsAccessor<ExternalUnsignedIntElementsAccessor,
1505 EXTERNAL_UNSIGNED_INT_ELEMENTS> {
1506 public:
1507 explicit ExternalUnsignedIntElementsAccessor(const char* name)
1508 : TypedElementsAccessor<ExternalUnsignedIntElementsAccessor,
1509 EXTERNAL_UNSIGNED_INT_ELEMENTS>(name) {}
1510 };
1511
1512
1513 class ExternalFloatElementsAccessor
1514 : public TypedElementsAccessor<ExternalFloatElementsAccessor,
1515 EXTERNAL_FLOAT_ELEMENTS> {
1516 public:
1517 explicit ExternalFloatElementsAccessor(const char* name)
1518 : TypedElementsAccessor<ExternalFloatElementsAccessor,
1519 EXTERNAL_FLOAT_ELEMENTS>(name) {}
1520 };
1521
1522
1523 class ExternalDoubleElementsAccessor
1524 : public TypedElementsAccessor<ExternalDoubleElementsAccessor,
1525 EXTERNAL_DOUBLE_ELEMENTS> {
1526 public:
1527 explicit ExternalDoubleElementsAccessor(const char* name)
1528 : TypedElementsAccessor<ExternalDoubleElementsAccessor,
1529 EXTERNAL_DOUBLE_ELEMENTS>(name) {}
1530 };
1531
1532
1533 class PixelElementsAccessor
1534 : public TypedElementsAccessor<PixelElementsAccessor,
1535 EXTERNAL_PIXEL_ELEMENTS> {
1536 public:
1537 explicit PixelElementsAccessor(const char* name)
1538 : TypedElementsAccessor<PixelElementsAccessor,
1539 EXTERNAL_PIXEL_ELEMENTS>(name) {}
1540 };
1541
1542
1543 class FixedUint8ArrayAccessor
1544 : public TypedElementsAccessor<FixedUint8ArrayAccessor,
1545 UINT8_ELEMENTS> {
1546 public:
1547 explicit FixedUint8ArrayAccessor(const char* name)
1548 : TypedElementsAccessor<FixedUint8ArrayAccessor,
1549 UINT8_ELEMENTS>(name) {}
1550 };
1551 class FixedUint8ClampedArrayAccessor
1552 : public TypedElementsAccessor<FixedUint8ClampedArrayAccessor,
1553 UINT8_CLAMPED_ELEMENTS> {
1554 public:
1555 explicit FixedUint8ClampedArrayAccessor(const char* name)
1556 : TypedElementsAccessor<FixedUint8ClampedArrayAccessor,
1557 UINT8_CLAMPED_ELEMENTS>(name) {}
1558 };
1559 class FixedInt8ArrayAccessor
1560 : public TypedElementsAccessor<FixedInt8ArrayAccessor,
1561 INT8_ELEMENTS> {
1562 public:
1563 explicit FixedInt8ArrayAccessor(const char* name)
1564 : TypedElementsAccessor<FixedInt8ArrayAccessor,
1565 INT8_ELEMENTS>(name) {}
1566 };
1567 class FixedUint16ArrayAccessor
1568 : public TypedElementsAccessor<FixedUint16ArrayAccessor,
1569 UINT16_ELEMENTS> {
1570 public:
1571 explicit FixedUint16ArrayAccessor(const char* name)
1572 : TypedElementsAccessor<FixedUint16ArrayAccessor,
1573 UINT16_ELEMENTS>(name) {}
1574 };
1575 class FixedInt16ArrayAccessor
1576 : public TypedElementsAccessor<FixedInt16ArrayAccessor,
1577 INT16_ELEMENTS> {
1578 public:
1579 explicit FixedInt16ArrayAccessor(const char* name)
1580 : TypedElementsAccessor<FixedInt16ArrayAccessor,
1581 INT16_ELEMENTS>(name) {}
1582 };
1583 class FixedUint32ArrayAccessor
1584 : public TypedElementsAccessor<FixedUint32ArrayAccessor,
1585 UINT32_ELEMENTS> {
1586 public:
1587 explicit FixedUint32ArrayAccessor(const char* name)
1588 : TypedElementsAccessor<FixedUint32ArrayAccessor,
1589 UINT32_ELEMENTS>(name) {}
1590 };
1591 class FixedInt32ArrayAccessor
1592 : public TypedElementsAccessor<FixedInt32ArrayAccessor,
1593 INT32_ELEMENTS> {
1594 public:
1595 explicit FixedInt32ArrayAccessor(const char* name)
1596 : TypedElementsAccessor<FixedInt32ArrayAccessor,
1597 INT32_ELEMENTS>(name) {}
1598 };
1599
1600 class FixedFloat32ArrayAccessor
1601 : public TypedElementsAccessor<FixedFloat32ArrayAccessor,
1602 FLOAT32_ELEMENTS> {
1603 public:
1604 explicit FixedFloat32ArrayAccessor(const char* name)
1605 : TypedElementsAccessor<FixedFloat32ArrayAccessor,
1606 FLOAT32_ELEMENTS>(name) {}
1607 };
1608 class FixedFloat64ArrayAccessor
1609 : public TypedElementsAccessor<FixedFloat64ArrayAccessor,
1610 FLOAT64_ELEMENTS> {
1611 public:
1612 explicit FixedFloat64ArrayAccessor(const char* name)
1613 : TypedElementsAccessor<FixedFloat64ArrayAccessor,
1614 FLOAT64_ELEMENTS>(name) {}
1615 };
1616 1419
1617 class DictionaryElementsAccessor 1420 class DictionaryElementsAccessor
1618 : public ElementsAccessorBase<DictionaryElementsAccessor, 1421 : public ElementsAccessorBase<DictionaryElementsAccessor,
1619 ElementsKindTraits<DICTIONARY_ELEMENTS> > { 1422 ElementsKindTraits<DICTIONARY_ELEMENTS> > {
1620 public: 1423 public:
1621 explicit DictionaryElementsAccessor(const char* name) 1424 explicit DictionaryElementsAccessor(const char* name)
1622 : ElementsAccessorBase<DictionaryElementsAccessor, 1425 : ElementsAccessorBase<DictionaryElementsAccessor,
1623 ElementsKindTraits<DICTIONARY_ELEMENTS> >(name) {} 1426 ElementsKindTraits<DICTIONARY_ELEMENTS> >(name) {}
1624 1427
1625 // Adjusts the length of the dictionary backing store and returns the new 1428 // Adjusts the length of the dictionary backing store and returns the new
(...skipping 563 matching lines...) Expand 10 before | Expand all | Expand 10 after
2189 UNREACHABLE(); 1992 UNREACHABLE();
2190 break; 1993 break;
2191 } 1994 }
2192 1995
2193 array->set_elements(elms); 1996 array->set_elements(elms);
2194 array->set_length(Smi::FromInt(number_of_elements)); 1997 array->set_length(Smi::FromInt(number_of_elements));
2195 return array; 1998 return array;
2196 } 1999 }
2197 2000
2198 } } // namespace v8::internal 2001 } } // namespace v8::internal
OLDNEW
« src/api.cc ('K') | « src/contexts.h ('k') | src/elements-kind.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698