| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef VM_RAW_OBJECT_H_ | 5 #ifndef VM_RAW_OBJECT_H_ |
| 6 #define VM_RAW_OBJECT_H_ | 6 #define VM_RAW_OBJECT_H_ |
| 7 | 7 |
| 8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
| 9 #include "vm/globals.h" | 9 #include "vm/globals.h" |
| 10 #include "vm/token.h" | 10 #include "vm/token.h" |
| (...skipping 1385 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1396 | 1396 |
| 1397 | 1397 |
| 1398 class RawFloat64Array : public RawByteArray { | 1398 class RawFloat64Array : public RawByteArray { |
| 1399 RAW_HEAP_OBJECT_IMPLEMENTATION(Float64Array); | 1399 RAW_HEAP_OBJECT_IMPLEMENTATION(Float64Array); |
| 1400 | 1400 |
| 1401 // Variable length data follows here. | 1401 // Variable length data follows here. |
| 1402 double data_[0]; | 1402 double data_[0]; |
| 1403 }; | 1403 }; |
| 1404 | 1404 |
| 1405 | 1405 |
| 1406 template<typename T> | |
| 1407 class ExternalByteArrayData { | |
| 1408 public: | |
| 1409 static const int kAlignment = 16; | |
| 1410 | |
| 1411 ExternalByteArrayData(T* data, | |
| 1412 void* peer, | |
| 1413 Dart_PeerFinalizer callback) : | |
| 1414 data_(data), peer_(peer), callback_(callback) { | |
| 1415 } | |
| 1416 ~ExternalByteArrayData() { | |
| 1417 if (callback_ != NULL) (*callback_)(peer_); | |
| 1418 } | |
| 1419 | |
| 1420 T* data() { | |
| 1421 return data_; | |
| 1422 } | |
| 1423 void* peer() { | |
| 1424 return peer_; | |
| 1425 } | |
| 1426 | |
| 1427 static intptr_t data_offset() { | |
| 1428 return OFFSET_OF(ExternalByteArrayData<T>, data_); | |
| 1429 } | |
| 1430 | |
| 1431 private: | |
| 1432 T* data_; | |
| 1433 void* peer_; | |
| 1434 Dart_PeerFinalizer callback_; | |
| 1435 }; | |
| 1436 | |
| 1437 | |
| 1438 class RawExternalInt8Array : public RawByteArray { | 1406 class RawExternalInt8Array : public RawByteArray { |
| 1439 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalInt8Array); | 1407 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalInt8Array); |
| 1440 | 1408 |
| 1441 ExternalByteArrayData<int8_t>* external_data_; | 1409 int8_t* data_; |
| 1410 void* peer_; |
| 1442 }; | 1411 }; |
| 1443 | 1412 |
| 1444 | 1413 |
| 1445 class RawExternalUint8Array : public RawByteArray { | 1414 class RawExternalUint8Array : public RawByteArray { |
| 1446 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalUint8Array); | 1415 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalUint8Array); |
| 1447 | 1416 |
| 1448 protected: | 1417 uint8_t* data_; |
| 1449 ExternalByteArrayData<uint8_t>* external_data_; | 1418 void* peer_; |
| 1450 | 1419 |
| 1451 friend class TokenStream; | 1420 friend class TokenStream; |
| 1452 friend class RawTokenStream; | 1421 friend class RawTokenStream; |
| 1422 friend class RawExternalUint8ClampedArray; |
| 1453 }; | 1423 }; |
| 1454 | 1424 |
| 1455 | 1425 |
| 1456 class RawExternalUint8ClampedArray : public RawExternalUint8Array { | 1426 class RawExternalUint8ClampedArray : public RawExternalUint8Array { |
| 1457 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalUint8ClampedArray); | 1427 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalUint8ClampedArray); |
| 1458 }; | 1428 }; |
| 1459 | 1429 |
| 1460 | 1430 |
| 1461 class RawExternalInt16Array : public RawByteArray { | 1431 class RawExternalInt16Array : public RawByteArray { |
| 1462 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalInt16Array); | 1432 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalInt16Array); |
| 1463 | 1433 |
| 1464 ExternalByteArrayData<int16_t>* external_data_; | 1434 int16_t* data_; |
| 1435 void* peer_; |
| 1465 }; | 1436 }; |
| 1466 | 1437 |
| 1467 | 1438 |
| 1468 class RawExternalUint16Array : public RawByteArray { | 1439 class RawExternalUint16Array : public RawByteArray { |
| 1469 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalUint16Array); | 1440 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalUint16Array); |
| 1470 | 1441 |
| 1471 ExternalByteArrayData<uint16_t>* external_data_; | 1442 uint16_t* data_; |
| 1443 void* peer_; |
| 1472 }; | 1444 }; |
| 1473 | 1445 |
| 1474 | 1446 |
| 1475 class RawExternalInt32Array : public RawByteArray { | 1447 class RawExternalInt32Array : public RawByteArray { |
| 1476 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalInt32Array); | 1448 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalInt32Array); |
| 1477 | 1449 |
| 1478 ExternalByteArrayData<int32_t>* external_data_; | 1450 int32_t* data_; |
| 1451 void* peer_; |
| 1479 }; | 1452 }; |
| 1480 | 1453 |
| 1481 | 1454 |
| 1482 class RawExternalUint32Array : public RawByteArray { | 1455 class RawExternalUint32Array : public RawByteArray { |
| 1483 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalUint32Array); | 1456 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalUint32Array); |
| 1484 | 1457 |
| 1485 ExternalByteArrayData<uint32_t>* external_data_; | 1458 uint32_t* data_; |
| 1459 void* peer_; |
| 1486 }; | 1460 }; |
| 1487 | 1461 |
| 1488 | 1462 |
| 1489 class RawExternalInt64Array : public RawByteArray { | 1463 class RawExternalInt64Array : public RawByteArray { |
| 1490 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalInt64Array); | 1464 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalInt64Array); |
| 1491 | 1465 |
| 1492 ExternalByteArrayData<int64_t>* external_data_; | 1466 int64_t* data_; |
| 1467 void* peer_; |
| 1493 }; | 1468 }; |
| 1494 | 1469 |
| 1495 | 1470 |
| 1496 class RawExternalUint64Array : public RawByteArray { | 1471 class RawExternalUint64Array : public RawByteArray { |
| 1497 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalUint64Array); | 1472 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalUint64Array); |
| 1498 | 1473 |
| 1499 ExternalByteArrayData<uint64_t>* external_data_; | 1474 uint64_t* data_; |
| 1475 void* peer_; |
| 1500 }; | 1476 }; |
| 1501 | 1477 |
| 1502 | 1478 |
| 1503 class RawExternalFloat32Array : public RawByteArray { | 1479 class RawExternalFloat32Array : public RawByteArray { |
| 1504 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalFloat32Array); | 1480 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalFloat32Array); |
| 1505 | 1481 |
| 1506 ExternalByteArrayData<float>* external_data_; | 1482 float* data_; |
| 1483 void* peer_; |
| 1507 }; | 1484 }; |
| 1508 | 1485 |
| 1509 | 1486 |
| 1510 class RawExternalFloat64Array : public RawByteArray { | 1487 class RawExternalFloat64Array : public RawByteArray { |
| 1511 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalFloat64Array); | 1488 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalFloat64Array); |
| 1512 | 1489 |
| 1513 ExternalByteArrayData<double>* external_data_; | 1490 double* data_; |
| 1491 void* peer_; |
| 1514 }; | 1492 }; |
| 1515 | 1493 |
| 1516 | 1494 |
| 1517 class RawDartFunction : public RawInstance { | 1495 class RawDartFunction : public RawInstance { |
| 1518 RAW_HEAP_OBJECT_IMPLEMENTATION(DartFunction); | 1496 RAW_HEAP_OBJECT_IMPLEMENTATION(DartFunction); |
| 1519 }; | 1497 }; |
| 1520 | 1498 |
| 1521 | 1499 |
| 1522 // VM type for capturing stacktraces when exceptions are thrown, | 1500 // VM type for capturing stacktraces when exceptions are thrown, |
| 1523 // Currently we don't have any interface that this object is supposed | 1501 // Currently we don't have any interface that this object is supposed |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1707 kExternalUint64ArrayCid == kExternalInt8ArrayCid + 8 && | 1685 kExternalUint64ArrayCid == kExternalInt8ArrayCid + 8 && |
| 1708 kExternalFloat32ArrayCid == kExternalInt8ArrayCid + 9 && | 1686 kExternalFloat32ArrayCid == kExternalInt8ArrayCid + 9 && |
| 1709 kExternalFloat64ArrayCid == kExternalInt8ArrayCid + 10 && | 1687 kExternalFloat64ArrayCid == kExternalInt8ArrayCid + 10 && |
| 1710 kStacktraceCid == kExternalInt8ArrayCid + 11); | 1688 kStacktraceCid == kExternalInt8ArrayCid + 11); |
| 1711 return (index >= kExternalInt8ArrayCid && index <= kExternalFloat64ArrayCid); | 1689 return (index >= kExternalInt8ArrayCid && index <= kExternalFloat64ArrayCid); |
| 1712 } | 1690 } |
| 1713 | 1691 |
| 1714 } // namespace dart | 1692 } // namespace dart |
| 1715 | 1693 |
| 1716 #endif // VM_RAW_OBJECT_H_ | 1694 #endif // VM_RAW_OBJECT_H_ |
| OLD | NEW |