OLD | NEW |
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 Loading... |
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 // - ExternalElementsAccessor (abstract) |
52 // - ExternalByteElementsAccessor | 52 // - ExternalByteElementsAccessor |
53 // - ExternalUnsignedByteElementsAccessor | 53 // - ExternalUnsignedByteElementsAccessor |
54 // - ExternalShortElementsAccessor | 54 // - ExternalShortElementsAccessor |
55 // - ExternalUnsignedShortElementsAccessor | 55 // - ExternalUnsignedShortElementsAccessor |
56 // - ExternalIntElementsAccessor | 56 // - ExternalIntElementsAccessor |
57 // - ExternalUnsignedIntElementsAccessor | 57 // - ExternalUnsignedIntElementsAccessor |
58 // - ExternalFloatElementsAccessor | 58 // - ExternalFloatElementsAccessor |
59 // - ExternalDoubleElementsAccessor | 59 // - ExternalDoubleElementsAccessor |
60 // - PixelElementsAccessor | 60 // - PixelElementsAccessor |
61 // - FixedUint8ArrayAccessor | |
62 // - FixedInt8ArrayAccessor | |
63 // - FixedUint16ArrayAccessor | |
64 // - FixedInt16ArrayAccessor | |
65 // - FixedUint32ArrayAccessor | |
66 // - FixedInt32ArrayAccessor | |
67 // - FixedFloat32ArrayAccessor | |
68 // - FixedFloat64ArrayAccessor | |
69 // - FixedUint8ClampedArrayAccessor | |
70 // - DictionaryElementsAccessor | 61 // - DictionaryElementsAccessor |
71 // - NonStrictArgumentsElementsAccessor | 62 // - NonStrictArgumentsElementsAccessor |
72 | 63 |
73 | 64 |
74 namespace v8 { | 65 namespace v8 { |
75 namespace internal { | 66 namespace internal { |
76 | 67 |
77 | 68 |
78 static const int kPackedSizeNotKnown = -1; | 69 static const int kPackedSizeNotKnown = -1; |
79 | 70 |
(...skipping 26 matching lines...) Expand all Loading... |
106 V(ExternalUnsignedShortElementsAccessor, \ | 97 V(ExternalUnsignedShortElementsAccessor, \ |
107 EXTERNAL_UNSIGNED_SHORT_ELEMENTS, ExternalUnsignedShortArray) \ | 98 EXTERNAL_UNSIGNED_SHORT_ELEMENTS, ExternalUnsignedShortArray) \ |
108 V(ExternalIntElementsAccessor, EXTERNAL_INT_ELEMENTS, \ | 99 V(ExternalIntElementsAccessor, EXTERNAL_INT_ELEMENTS, \ |
109 ExternalIntArray) \ | 100 ExternalIntArray) \ |
110 V(ExternalUnsignedIntElementsAccessor, \ | 101 V(ExternalUnsignedIntElementsAccessor, \ |
111 EXTERNAL_UNSIGNED_INT_ELEMENTS, ExternalUnsignedIntArray) \ | 102 EXTERNAL_UNSIGNED_INT_ELEMENTS, ExternalUnsignedIntArray) \ |
112 V(ExternalFloatElementsAccessor, \ | 103 V(ExternalFloatElementsAccessor, \ |
113 EXTERNAL_FLOAT_ELEMENTS, ExternalFloatArray) \ | 104 EXTERNAL_FLOAT_ELEMENTS, ExternalFloatArray) \ |
114 V(ExternalDoubleElementsAccessor, \ | 105 V(ExternalDoubleElementsAccessor, \ |
115 EXTERNAL_DOUBLE_ELEMENTS, ExternalDoubleArray) \ | 106 EXTERNAL_DOUBLE_ELEMENTS, ExternalDoubleArray) \ |
116 V(PixelElementsAccessor, EXTERNAL_PIXEL_ELEMENTS, ExternalPixelArray) \ | 107 V(PixelElementsAccessor, EXTERNAL_PIXEL_ELEMENTS, ExternalPixelArray) |
117 V(FixedUint8ArrayAccessor, UINT8_ELEMENTS, FixedUint8Array) \ | |
118 V(FixedInt8ArrayAccessor, INT8_ELEMENTS, FixedInt8Array) \ | |
119 V(FixedUint16ArrayAccessor, UINT16_ELEMENTS, FixedUint16Array) \ | |
120 V(FixedInt16ArrayAccessor, INT16_ELEMENTS, FixedInt16Array) \ | |
121 V(FixedUint32ArrayAccessor, UINT32_ELEMENTS, FixedUint32Array) \ | |
122 V(FixedInt32ArrayAccessor, INT32_ELEMENTS, FixedInt32Array) \ | |
123 V(FixedFloat32ArrayAccessor, FLOAT32_ELEMENTS, FixedFloat32Array) \ | |
124 V(FixedFloat64ArrayAccessor, FLOAT64_ELEMENTS, FixedFloat64Array) \ | |
125 V(FixedUint8ClampedArrayAccessor, UINT8_CLAMPED_ELEMENTS, \ | |
126 FixedUint8ClampedArray) | |
127 | 108 |
128 | 109 |
129 template<ElementsKind Kind> class ElementsKindTraits { | 110 template<ElementsKind Kind> class ElementsKindTraits { |
130 public: | 111 public: |
131 typedef FixedArrayBase BackingStore; | 112 typedef FixedArrayBase BackingStore; |
132 }; | 113 }; |
133 | 114 |
134 #define ELEMENTS_TRAITS(Class, KindParam, Store) \ | 115 #define ELEMENTS_TRAITS(Class, KindParam, Store) \ |
135 template<> class ElementsKindTraits<KindParam> { \ | 116 template<> class ElementsKindTraits<KindParam> { \ |
136 public: \ | 117 public: \ |
(...skipping 971 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1108 case EXTERNAL_INT_ARRAY_TYPE: | 1089 case EXTERNAL_INT_ARRAY_TYPE: |
1109 return EXTERNAL_INT_ELEMENTS; | 1090 return EXTERNAL_INT_ELEMENTS; |
1110 case EXTERNAL_UNSIGNED_INT_ARRAY_TYPE: | 1091 case EXTERNAL_UNSIGNED_INT_ARRAY_TYPE: |
1111 return EXTERNAL_UNSIGNED_INT_ELEMENTS; | 1092 return EXTERNAL_UNSIGNED_INT_ELEMENTS; |
1112 case EXTERNAL_FLOAT_ARRAY_TYPE: | 1093 case EXTERNAL_FLOAT_ARRAY_TYPE: |
1113 return EXTERNAL_FLOAT_ELEMENTS; | 1094 return EXTERNAL_FLOAT_ELEMENTS; |
1114 case EXTERNAL_DOUBLE_ARRAY_TYPE: | 1095 case EXTERNAL_DOUBLE_ARRAY_TYPE: |
1115 return EXTERNAL_DOUBLE_ELEMENTS; | 1096 return EXTERNAL_DOUBLE_ELEMENTS; |
1116 case EXTERNAL_PIXEL_ARRAY_TYPE: | 1097 case EXTERNAL_PIXEL_ARRAY_TYPE: |
1117 return EXTERNAL_PIXEL_ELEMENTS; | 1098 return EXTERNAL_PIXEL_ELEMENTS; |
1118 | |
1119 case FIXED_UINT8_ARRAY_TYPE: | |
1120 return UINT8_ELEMENTS; | |
1121 case FIXED_INT8_ARRAY_TYPE: | |
1122 return INT8_ELEMENTS; | |
1123 case FIXED_UINT16_ARRAY_TYPE: | |
1124 return UINT16_ELEMENTS; | |
1125 case FIXED_INT16_ARRAY_TYPE: | |
1126 return INT16_ELEMENTS; | |
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 | |
1138 default: | 1099 default: |
1139 UNREACHABLE(); | 1100 UNREACHABLE(); |
1140 } | 1101 } |
1141 return FAST_HOLEY_ELEMENTS; | 1102 return FAST_HOLEY_ELEMENTS; |
1142 } | 1103 } |
1143 | 1104 |
1144 | 1105 |
1145 template<typename FastElementsAccessorSubclass, | 1106 template<typename FastElementsAccessorSubclass, |
1146 typename KindTraits> | 1107 typename KindTraits> |
1147 class FastSmiOrObjectElementsAccessor | 1108 class FastSmiOrObjectElementsAccessor |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1190 } | 1151 } |
1191 case EXTERNAL_BYTE_ELEMENTS: | 1152 case EXTERNAL_BYTE_ELEMENTS: |
1192 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS: | 1153 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS: |
1193 case EXTERNAL_SHORT_ELEMENTS: | 1154 case EXTERNAL_SHORT_ELEMENTS: |
1194 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS: | 1155 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS: |
1195 case EXTERNAL_INT_ELEMENTS: | 1156 case EXTERNAL_INT_ELEMENTS: |
1196 case EXTERNAL_UNSIGNED_INT_ELEMENTS: | 1157 case EXTERNAL_UNSIGNED_INT_ELEMENTS: |
1197 case EXTERNAL_FLOAT_ELEMENTS: | 1158 case EXTERNAL_FLOAT_ELEMENTS: |
1198 case EXTERNAL_DOUBLE_ELEMENTS: | 1159 case EXTERNAL_DOUBLE_ELEMENTS: |
1199 case EXTERNAL_PIXEL_ELEMENTS: | 1160 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(); | 1161 UNREACHABLE(); |
1210 } | 1162 } |
1211 return NULL; | 1163 return NULL; |
1212 } | 1164 } |
1213 | 1165 |
1214 | 1166 |
1215 static MaybeObject* SetFastElementsCapacityAndLength(JSObject* obj, | 1167 static MaybeObject* SetFastElementsCapacityAndLength(JSObject* obj, |
1216 uint32_t capacity, | 1168 uint32_t capacity, |
1217 uint32_t length) { | 1169 uint32_t length) { |
1218 JSObject::SetFastElementsCapacitySmiMode set_capacity_mode = | 1170 JSObject::SetFastElementsCapacitySmiMode set_capacity_mode = |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1324 case NON_STRICT_ARGUMENTS_ELEMENTS: | 1276 case NON_STRICT_ARGUMENTS_ELEMENTS: |
1325 case EXTERNAL_BYTE_ELEMENTS: | 1277 case EXTERNAL_BYTE_ELEMENTS: |
1326 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS: | 1278 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS: |
1327 case EXTERNAL_SHORT_ELEMENTS: | 1279 case EXTERNAL_SHORT_ELEMENTS: |
1328 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS: | 1280 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS: |
1329 case EXTERNAL_INT_ELEMENTS: | 1281 case EXTERNAL_INT_ELEMENTS: |
1330 case EXTERNAL_UNSIGNED_INT_ELEMENTS: | 1282 case EXTERNAL_UNSIGNED_INT_ELEMENTS: |
1331 case EXTERNAL_FLOAT_ELEMENTS: | 1283 case EXTERNAL_FLOAT_ELEMENTS: |
1332 case EXTERNAL_DOUBLE_ELEMENTS: | 1284 case EXTERNAL_DOUBLE_ELEMENTS: |
1333 case EXTERNAL_PIXEL_ELEMENTS: | 1285 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(); |
1344 } | 1287 } |
1345 return to->GetHeap()->undefined_value(); | 1288 return to->GetHeap()->undefined_value(); |
1346 } | 1289 } |
1347 }; | 1290 }; |
1348 | 1291 |
1349 | 1292 |
1350 class FastPackedDoubleElementsAccessor | 1293 class FastPackedDoubleElementsAccessor |
1351 : public FastDoubleElementsAccessor< | 1294 : public FastDoubleElementsAccessor< |
1352 FastPackedDoubleElementsAccessor, | 1295 FastPackedDoubleElementsAccessor, |
(...skipping 17 matching lines...) Expand all Loading... |
1370 FastHoleyDoubleElementsAccessor, | 1313 FastHoleyDoubleElementsAccessor, |
1371 ElementsKindTraits<FAST_HOLEY_DOUBLE_ELEMENTS> >; | 1314 ElementsKindTraits<FAST_HOLEY_DOUBLE_ELEMENTS> >; |
1372 explicit FastHoleyDoubleElementsAccessor(const char* name) | 1315 explicit FastHoleyDoubleElementsAccessor(const char* name) |
1373 : FastDoubleElementsAccessor< | 1316 : FastDoubleElementsAccessor< |
1374 FastHoleyDoubleElementsAccessor, | 1317 FastHoleyDoubleElementsAccessor, |
1375 ElementsKindTraits<FAST_HOLEY_DOUBLE_ELEMENTS> >(name) {} | 1318 ElementsKindTraits<FAST_HOLEY_DOUBLE_ELEMENTS> >(name) {} |
1376 }; | 1319 }; |
1377 | 1320 |
1378 | 1321 |
1379 // Super class for all external element arrays. | 1322 // Super class for all external element arrays. |
1380 template<typename AccessorSubclass, | 1323 template<typename ExternalElementsAccessorSubclass, |
1381 ElementsKind Kind> | 1324 ElementsKind Kind> |
1382 class TypedElementsAccessor | 1325 class ExternalElementsAccessor |
1383 : public ElementsAccessorBase<AccessorSubclass, | 1326 : public ElementsAccessorBase<ExternalElementsAccessorSubclass, |
1384 ElementsKindTraits<Kind> > { | 1327 ElementsKindTraits<Kind> > { |
1385 public: | 1328 public: |
1386 explicit TypedElementsAccessor(const char* name) | 1329 explicit ExternalElementsAccessor(const char* name) |
1387 : ElementsAccessorBase<AccessorSubclass, | 1330 : ElementsAccessorBase<ExternalElementsAccessorSubclass, |
1388 ElementsKindTraits<Kind> >(name) {} | 1331 ElementsKindTraits<Kind> >(name) {} |
1389 | 1332 |
1390 protected: | 1333 protected: |
1391 typedef typename ElementsKindTraits<Kind>::BackingStore BackingStore; | 1334 typedef typename ElementsKindTraits<Kind>::BackingStore BackingStore; |
1392 | 1335 |
1393 friend class ElementsAccessorBase<AccessorSubclass, | 1336 friend class ElementsAccessorBase<ExternalElementsAccessorSubclass, |
1394 ElementsKindTraits<Kind> >; | 1337 ElementsKindTraits<Kind> >; |
1395 | 1338 |
1396 MUST_USE_RESULT static MaybeObject* GetImpl(Object* receiver, | 1339 MUST_USE_RESULT static MaybeObject* GetImpl(Object* receiver, |
1397 JSObject* obj, | 1340 JSObject* obj, |
1398 uint32_t key, | 1341 uint32_t key, |
1399 FixedArrayBase* backing_store) { | 1342 FixedArrayBase* backing_store) { |
1400 return | 1343 return |
1401 key < AccessorSubclass::GetCapacityImpl(backing_store) | 1344 key < ExternalElementsAccessorSubclass::GetCapacityImpl(backing_store) |
1402 ? BackingStore::cast(backing_store)->get(key) | 1345 ? BackingStore::cast(backing_store)->get(key) |
1403 : backing_store->GetHeap()->undefined_value(); | 1346 : backing_store->GetHeap()->undefined_value(); |
1404 } | 1347 } |
1405 | 1348 |
1406 MUST_USE_RESULT static PropertyAttributes GetAttributesImpl( | 1349 MUST_USE_RESULT static PropertyAttributes GetAttributesImpl( |
1407 Object* receiver, | 1350 Object* receiver, |
1408 JSObject* obj, | 1351 JSObject* obj, |
1409 uint32_t key, | 1352 uint32_t key, |
1410 FixedArrayBase* backing_store) { | 1353 FixedArrayBase* backing_store) { |
1411 return | 1354 return |
1412 key < AccessorSubclass::GetCapacityImpl(backing_store) | 1355 key < ExternalElementsAccessorSubclass::GetCapacityImpl(backing_store) |
1413 ? NONE : ABSENT; | 1356 ? NONE : ABSENT; |
1414 } | 1357 } |
1415 | 1358 |
1416 MUST_USE_RESULT static PropertyType GetTypeImpl( | 1359 MUST_USE_RESULT static PropertyType GetTypeImpl( |
1417 Object* receiver, | 1360 Object* receiver, |
1418 JSObject* obj, | 1361 JSObject* obj, |
1419 uint32_t key, | 1362 uint32_t key, |
1420 FixedArrayBase* backing_store) { | 1363 FixedArrayBase* backing_store) { |
1421 return | 1364 return |
1422 key < AccessorSubclass::GetCapacityImpl(backing_store) | 1365 key < ExternalElementsAccessorSubclass::GetCapacityImpl(backing_store) |
1423 ? FIELD : NONEXISTENT; | 1366 ? FIELD : NONEXISTENT; |
1424 } | 1367 } |
1425 | 1368 |
1426 MUST_USE_RESULT static MaybeObject* SetLengthImpl( | 1369 MUST_USE_RESULT static MaybeObject* SetLengthImpl( |
1427 JSObject* obj, | 1370 JSObject* obj, |
1428 Object* length, | 1371 Object* length, |
1429 FixedArrayBase* backing_store) { | 1372 FixedArrayBase* backing_store) { |
1430 // External arrays do not support changing their length. | 1373 // External arrays do not support changing their length. |
1431 UNREACHABLE(); | 1374 UNREACHABLE(); |
1432 return obj; | 1375 return obj; |
1433 } | 1376 } |
1434 | 1377 |
1435 MUST_USE_RESULT virtual MaybeObject* Delete(JSObject* obj, | 1378 MUST_USE_RESULT virtual MaybeObject* Delete(JSObject* obj, |
1436 uint32_t key, | 1379 uint32_t key, |
1437 JSReceiver::DeleteMode mode) { | 1380 JSReceiver::DeleteMode mode) { |
1438 // External arrays always ignore deletes. | 1381 // External arrays always ignore deletes. |
1439 return obj->GetHeap()->true_value(); | 1382 return obj->GetHeap()->true_value(); |
1440 } | 1383 } |
1441 | 1384 |
1442 static bool HasElementImpl(Object* receiver, | 1385 static bool HasElementImpl(Object* receiver, |
1443 JSObject* holder, | 1386 JSObject* holder, |
1444 uint32_t key, | 1387 uint32_t key, |
1445 FixedArrayBase* backing_store) { | 1388 FixedArrayBase* backing_store) { |
1446 uint32_t capacity = | 1389 uint32_t capacity = |
1447 AccessorSubclass::GetCapacityImpl(backing_store); | 1390 ExternalElementsAccessorSubclass::GetCapacityImpl(backing_store); |
1448 return key < capacity; | 1391 return key < capacity; |
1449 } | 1392 } |
1450 }; | 1393 }; |
1451 | 1394 |
1452 | 1395 |
1453 class ExternalByteElementsAccessor | 1396 class ExternalByteElementsAccessor |
1454 : public TypedElementsAccessor<ExternalByteElementsAccessor, | 1397 : public ExternalElementsAccessor<ExternalByteElementsAccessor, |
1455 EXTERNAL_BYTE_ELEMENTS> { | 1398 EXTERNAL_BYTE_ELEMENTS> { |
1456 public: | 1399 public: |
1457 explicit ExternalByteElementsAccessor(const char* name) | 1400 explicit ExternalByteElementsAccessor(const char* name) |
1458 : TypedElementsAccessor<ExternalByteElementsAccessor, | 1401 : ExternalElementsAccessor<ExternalByteElementsAccessor, |
1459 EXTERNAL_BYTE_ELEMENTS>(name) {} | 1402 EXTERNAL_BYTE_ELEMENTS>(name) {} |
1460 }; | 1403 }; |
1461 | 1404 |
1462 | 1405 |
1463 class ExternalUnsignedByteElementsAccessor | 1406 class ExternalUnsignedByteElementsAccessor |
1464 : public TypedElementsAccessor<ExternalUnsignedByteElementsAccessor, | 1407 : public ExternalElementsAccessor<ExternalUnsignedByteElementsAccessor, |
1465 EXTERNAL_UNSIGNED_BYTE_ELEMENTS> { | 1408 EXTERNAL_UNSIGNED_BYTE_ELEMENTS> { |
1466 public: | 1409 public: |
1467 explicit ExternalUnsignedByteElementsAccessor(const char* name) | 1410 explicit ExternalUnsignedByteElementsAccessor(const char* name) |
1468 : TypedElementsAccessor<ExternalUnsignedByteElementsAccessor, | 1411 : ExternalElementsAccessor<ExternalUnsignedByteElementsAccessor, |
1469 EXTERNAL_UNSIGNED_BYTE_ELEMENTS>(name) {} | 1412 EXTERNAL_UNSIGNED_BYTE_ELEMENTS>(name) {} |
1470 }; | 1413 }; |
1471 | 1414 |
1472 | 1415 |
1473 class ExternalShortElementsAccessor | 1416 class ExternalShortElementsAccessor |
1474 : public TypedElementsAccessor<ExternalShortElementsAccessor, | 1417 : public ExternalElementsAccessor<ExternalShortElementsAccessor, |
1475 EXTERNAL_SHORT_ELEMENTS> { | 1418 EXTERNAL_SHORT_ELEMENTS> { |
1476 public: | 1419 public: |
1477 explicit ExternalShortElementsAccessor(const char* name) | 1420 explicit ExternalShortElementsAccessor(const char* name) |
1478 : TypedElementsAccessor<ExternalShortElementsAccessor, | 1421 : ExternalElementsAccessor<ExternalShortElementsAccessor, |
1479 EXTERNAL_SHORT_ELEMENTS>(name) {} | 1422 EXTERNAL_SHORT_ELEMENTS>(name) {} |
1480 }; | 1423 }; |
1481 | 1424 |
1482 | 1425 |
1483 class ExternalUnsignedShortElementsAccessor | 1426 class ExternalUnsignedShortElementsAccessor |
1484 : public TypedElementsAccessor<ExternalUnsignedShortElementsAccessor, | 1427 : public ExternalElementsAccessor<ExternalUnsignedShortElementsAccessor, |
1485 EXTERNAL_UNSIGNED_SHORT_ELEMENTS> { | 1428 EXTERNAL_UNSIGNED_SHORT_ELEMENTS> { |
1486 public: | 1429 public: |
1487 explicit ExternalUnsignedShortElementsAccessor(const char* name) | 1430 explicit ExternalUnsignedShortElementsAccessor(const char* name) |
1488 : TypedElementsAccessor<ExternalUnsignedShortElementsAccessor, | 1431 : ExternalElementsAccessor<ExternalUnsignedShortElementsAccessor, |
1489 EXTERNAL_UNSIGNED_SHORT_ELEMENTS>(name) {} | 1432 EXTERNAL_UNSIGNED_SHORT_ELEMENTS>(name) {} |
1490 }; | 1433 }; |
1491 | 1434 |
1492 | 1435 |
1493 class ExternalIntElementsAccessor | 1436 class ExternalIntElementsAccessor |
1494 : public TypedElementsAccessor<ExternalIntElementsAccessor, | 1437 : public ExternalElementsAccessor<ExternalIntElementsAccessor, |
1495 EXTERNAL_INT_ELEMENTS> { | 1438 EXTERNAL_INT_ELEMENTS> { |
1496 public: | 1439 public: |
1497 explicit ExternalIntElementsAccessor(const char* name) | 1440 explicit ExternalIntElementsAccessor(const char* name) |
1498 : TypedElementsAccessor<ExternalIntElementsAccessor, | 1441 : ExternalElementsAccessor<ExternalIntElementsAccessor, |
1499 EXTERNAL_INT_ELEMENTS>(name) {} | 1442 EXTERNAL_INT_ELEMENTS>(name) {} |
1500 }; | 1443 }; |
1501 | 1444 |
1502 | 1445 |
1503 class ExternalUnsignedIntElementsAccessor | 1446 class ExternalUnsignedIntElementsAccessor |
1504 : public TypedElementsAccessor<ExternalUnsignedIntElementsAccessor, | 1447 : public ExternalElementsAccessor<ExternalUnsignedIntElementsAccessor, |
1505 EXTERNAL_UNSIGNED_INT_ELEMENTS> { | 1448 EXTERNAL_UNSIGNED_INT_ELEMENTS> { |
1506 public: | 1449 public: |
1507 explicit ExternalUnsignedIntElementsAccessor(const char* name) | 1450 explicit ExternalUnsignedIntElementsAccessor(const char* name) |
1508 : TypedElementsAccessor<ExternalUnsignedIntElementsAccessor, | 1451 : ExternalElementsAccessor<ExternalUnsignedIntElementsAccessor, |
1509 EXTERNAL_UNSIGNED_INT_ELEMENTS>(name) {} | 1452 EXTERNAL_UNSIGNED_INT_ELEMENTS>(name) {} |
1510 }; | 1453 }; |
1511 | 1454 |
1512 | 1455 |
1513 class ExternalFloatElementsAccessor | 1456 class ExternalFloatElementsAccessor |
1514 : public TypedElementsAccessor<ExternalFloatElementsAccessor, | 1457 : public ExternalElementsAccessor<ExternalFloatElementsAccessor, |
1515 EXTERNAL_FLOAT_ELEMENTS> { | 1458 EXTERNAL_FLOAT_ELEMENTS> { |
1516 public: | 1459 public: |
1517 explicit ExternalFloatElementsAccessor(const char* name) | 1460 explicit ExternalFloatElementsAccessor(const char* name) |
1518 : TypedElementsAccessor<ExternalFloatElementsAccessor, | 1461 : ExternalElementsAccessor<ExternalFloatElementsAccessor, |
1519 EXTERNAL_FLOAT_ELEMENTS>(name) {} | 1462 EXTERNAL_FLOAT_ELEMENTS>(name) {} |
1520 }; | 1463 }; |
1521 | 1464 |
1522 | 1465 |
1523 class ExternalDoubleElementsAccessor | 1466 class ExternalDoubleElementsAccessor |
1524 : public TypedElementsAccessor<ExternalDoubleElementsAccessor, | 1467 : public ExternalElementsAccessor<ExternalDoubleElementsAccessor, |
1525 EXTERNAL_DOUBLE_ELEMENTS> { | 1468 EXTERNAL_DOUBLE_ELEMENTS> { |
1526 public: | 1469 public: |
1527 explicit ExternalDoubleElementsAccessor(const char* name) | 1470 explicit ExternalDoubleElementsAccessor(const char* name) |
1528 : TypedElementsAccessor<ExternalDoubleElementsAccessor, | 1471 : ExternalElementsAccessor<ExternalDoubleElementsAccessor, |
1529 EXTERNAL_DOUBLE_ELEMENTS>(name) {} | 1472 EXTERNAL_DOUBLE_ELEMENTS>(name) {} |
1530 }; | 1473 }; |
1531 | 1474 |
1532 | 1475 |
1533 class PixelElementsAccessor | 1476 class PixelElementsAccessor |
1534 : public TypedElementsAccessor<PixelElementsAccessor, | 1477 : public ExternalElementsAccessor<PixelElementsAccessor, |
1535 EXTERNAL_PIXEL_ELEMENTS> { | 1478 EXTERNAL_PIXEL_ELEMENTS> { |
1536 public: | 1479 public: |
1537 explicit PixelElementsAccessor(const char* name) | 1480 explicit PixelElementsAccessor(const char* name) |
1538 : TypedElementsAccessor<PixelElementsAccessor, | 1481 : ExternalElementsAccessor<PixelElementsAccessor, |
1539 EXTERNAL_PIXEL_ELEMENTS>(name) {} | 1482 EXTERNAL_PIXEL_ELEMENTS>(name) {} |
1540 }; | 1483 }; |
1541 | 1484 |
1542 | 1485 |
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 | |
1617 class DictionaryElementsAccessor | 1486 class DictionaryElementsAccessor |
1618 : public ElementsAccessorBase<DictionaryElementsAccessor, | 1487 : public ElementsAccessorBase<DictionaryElementsAccessor, |
1619 ElementsKindTraits<DICTIONARY_ELEMENTS> > { | 1488 ElementsKindTraits<DICTIONARY_ELEMENTS> > { |
1620 public: | 1489 public: |
1621 explicit DictionaryElementsAccessor(const char* name) | 1490 explicit DictionaryElementsAccessor(const char* name) |
1622 : ElementsAccessorBase<DictionaryElementsAccessor, | 1491 : ElementsAccessorBase<DictionaryElementsAccessor, |
1623 ElementsKindTraits<DICTIONARY_ELEMENTS> >(name) {} | 1492 ElementsKindTraits<DICTIONARY_ELEMENTS> >(name) {} |
1624 | 1493 |
1625 // Adjusts the length of the dictionary backing store and returns the new | 1494 // Adjusts the length of the dictionary backing store and returns the new |
1626 // length according to ES5 section 15.4.5.2 behavior. | 1495 // length according to ES5 section 15.4.5.2 behavior. |
(...skipping 562 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2189 UNREACHABLE(); | 2058 UNREACHABLE(); |
2190 break; | 2059 break; |
2191 } | 2060 } |
2192 | 2061 |
2193 array->set_elements(elms); | 2062 array->set_elements(elms); |
2194 array->set_length(Smi::FromInt(number_of_elements)); | 2063 array->set_length(Smi::FromInt(number_of_elements)); |
2195 return array; | 2064 return array; |
2196 } | 2065 } |
2197 | 2066 |
2198 } } // namespace v8::internal | 2067 } } // namespace v8::internal |
OLD | NEW |