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

Side by Side Diff: src/elements.cc

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

Powered by Google App Engine
This is Rietveld 408576698