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 #include "vm/bigint_operations.h" | 5 #include "vm/bigint_operations.h" |
6 #include "vm/object.h" | 6 #include "vm/object.h" |
7 #include "vm/object_store.h" | 7 #include "vm/object_store.h" |
8 #include "vm/snapshot.h" | 8 #include "vm/snapshot.h" |
9 #include "vm/symbols.h" | 9 #include "vm/symbols.h" |
10 #include "vm/visitor.h" | 10 #include "vm/visitor.h" |
(...skipping 2553 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2564 break; | 2564 break; |
2565 case kTypedDataFloat64ArrayCid: | 2565 case kTypedDataFloat64ArrayCid: |
2566 TYPED_DATA_WRITE(double); // NOLINT. | 2566 TYPED_DATA_WRITE(double); // NOLINT. |
2567 break; | 2567 break; |
2568 default: | 2568 default: |
2569 UNREACHABLE(); | 2569 UNREACHABLE(); |
2570 } | 2570 } |
2571 } | 2571 } |
2572 | 2572 |
2573 | 2573 |
| 2574 #define EXT_TYPED_DATA_WRITE(cid, type) \ |
| 2575 writer->WriteIndexedObject(cid); \ |
| 2576 writer->WriteIntptrValue(RawObject::ClassIdTag::update(cid, tags)); \ |
| 2577 writer->Write<RawObject*>(ptr()->length_); \ |
| 2578 TYPED_DATA_WRITE(type) \ |
| 2579 |
| 2580 |
2574 void RawExternalTypedData::WriteTo(SnapshotWriter* writer, | 2581 void RawExternalTypedData::WriteTo(SnapshotWriter* writer, |
2575 intptr_t object_id, | 2582 intptr_t object_id, |
2576 Snapshot::Kind kind) { | 2583 Snapshot::Kind kind) { |
2577 ASSERT(writer != NULL); | 2584 ASSERT(writer != NULL); |
2578 intptr_t tags = writer->GetObjectTags(this); | 2585 intptr_t tags = writer->GetObjectTags(this); |
2579 intptr_t cid = ClassIdTag::decode(tags); | 2586 intptr_t cid = ClassIdTag::decode(tags); |
2580 intptr_t len = Smi::Value(ptr()->length_); | 2587 intptr_t len = Smi::Value(ptr()->length_); |
2581 | 2588 |
2582 // Write out the serialization header value for this object. | 2589 // Write out the serialization header value for this object. |
2583 writer->WriteInlinedObjectHeader(object_id); | 2590 writer->WriteInlinedObjectHeader(object_id); |
2584 | 2591 |
2585 // Write out the class and tags information. | |
2586 writer->WriteIndexedObject(cid); | |
2587 writer->WriteIntptrValue(tags); | |
2588 | |
2589 // Write out the length field. | |
2590 writer->Write<RawObject*>(ptr()->length_); | |
2591 | |
2592 switch (cid) { | 2592 switch (cid) { |
2593 case kExternalTypedDataInt8ArrayCid: | 2593 case kExternalTypedDataInt8ArrayCid: |
2594 TYPED_DATA_WRITE(int8_t); | 2594 EXT_TYPED_DATA_WRITE(kTypedDataInt8ArrayCid, int8_t); |
2595 break; | 2595 break; |
2596 case kExternalTypedDataUint8ArrayCid: | 2596 case kExternalTypedDataUint8ArrayCid: |
2597 TYPED_DATA_WRITE(uint8_t); | 2597 EXT_TYPED_DATA_WRITE(kTypedDataUint8ArrayCid, uint8_t); |
2598 break; | 2598 break; |
2599 case kExternalTypedDataUint8ClampedArrayCid: | 2599 case kExternalTypedDataUint8ClampedArrayCid: |
2600 TYPED_DATA_WRITE(uint8_t); | 2600 EXT_TYPED_DATA_WRITE(kTypedDataUint8ClampedArrayCid, uint8_t); |
2601 break; | 2601 break; |
2602 case kExternalTypedDataInt16ArrayCid: | 2602 case kExternalTypedDataInt16ArrayCid: |
2603 TYPED_DATA_WRITE(int16_t); | 2603 EXT_TYPED_DATA_WRITE(kTypedDataInt16ArrayCid, int16_t); |
2604 break; | 2604 break; |
2605 case kExternalTypedDataUint16ArrayCid: | 2605 case kExternalTypedDataUint16ArrayCid: |
2606 TYPED_DATA_WRITE(uint16_t); | 2606 EXT_TYPED_DATA_WRITE(kTypedDataUint16ArrayCid, uint16_t); |
2607 break; | 2607 break; |
2608 case kExternalTypedDataInt32ArrayCid: | 2608 case kExternalTypedDataInt32ArrayCid: |
2609 TYPED_DATA_WRITE(int32_t); | 2609 EXT_TYPED_DATA_WRITE(kTypedDataInt32ArrayCid, int32_t); |
2610 break; | 2610 break; |
2611 case kExternalTypedDataUint32ArrayCid: | 2611 case kExternalTypedDataUint32ArrayCid: |
2612 TYPED_DATA_WRITE(uint32_t); | 2612 EXT_TYPED_DATA_WRITE(kTypedDataUint32ArrayCid, uint32_t); |
2613 break; | 2613 break; |
2614 case kExternalTypedDataInt64ArrayCid: | 2614 case kExternalTypedDataInt64ArrayCid: |
2615 TYPED_DATA_WRITE(int64_t); | 2615 EXT_TYPED_DATA_WRITE(kTypedDataInt64ArrayCid, int64_t); |
2616 break; | 2616 break; |
2617 case kExternalTypedDataUint64ArrayCid: | 2617 case kExternalTypedDataUint64ArrayCid: |
2618 TYPED_DATA_WRITE(uint64_t); | 2618 EXT_TYPED_DATA_WRITE(kTypedDataUint64ArrayCid, uint64_t); |
2619 break; | 2619 break; |
2620 case kExternalTypedDataFloat32ArrayCid: | 2620 case kExternalTypedDataFloat32ArrayCid: |
2621 TYPED_DATA_WRITE(float); // NOLINT. | 2621 EXT_TYPED_DATA_WRITE(kTypedDataFloat32ArrayCid, float); // NOLINT. |
2622 break; | 2622 break; |
2623 case kExternalTypedDataFloat64ArrayCid: | 2623 case kExternalTypedDataFloat64ArrayCid: |
2624 TYPED_DATA_WRITE(double); // NOLINT. | 2624 EXT_TYPED_DATA_WRITE(kTypedDataFloat64ArrayCid, double); // NOLINT. |
2625 break; | 2625 break; |
2626 default: | 2626 default: |
2627 UNREACHABLE(); | 2627 UNREACHABLE(); |
2628 } | 2628 } |
2629 } | 2629 } |
2630 #undef TYPED_DATA_WRITE | 2630 #undef TYPED_DATA_WRITE |
| 2631 #undef EXT_TYPED_DATA_WRITE |
2631 | 2632 |
2632 | 2633 |
2633 RawDartFunction* DartFunction::ReadFrom(SnapshotReader* reader, | 2634 RawDartFunction* DartFunction::ReadFrom(SnapshotReader* reader, |
2634 intptr_t object_id, | 2635 intptr_t object_id, |
2635 intptr_t tags, | 2636 intptr_t tags, |
2636 Snapshot::Kind kind) { | 2637 Snapshot::Kind kind) { |
2637 UNREACHABLE(); // DartFunction is an abstract class. | 2638 UNREACHABLE(); // DartFunction is an abstract class. |
2638 return DartFunction::null(); | 2639 return DartFunction::null(); |
2639 } | 2640 } |
2640 | 2641 |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2796 // Write out the class and tags information. | 2797 // Write out the class and tags information. |
2797 writer->WriteIndexedObject(kWeakPropertyCid); | 2798 writer->WriteIndexedObject(kWeakPropertyCid); |
2798 writer->WriteIntptrValue(writer->GetObjectTags(this)); | 2799 writer->WriteIntptrValue(writer->GetObjectTags(this)); |
2799 | 2800 |
2800 // Write out all the other fields. | 2801 // Write out all the other fields. |
2801 writer->Write<RawObject*>(ptr()->key_); | 2802 writer->Write<RawObject*>(ptr()->key_); |
2802 writer->Write<RawObject*>(ptr()->value_); | 2803 writer->Write<RawObject*>(ptr()->value_); |
2803 } | 2804 } |
2804 | 2805 |
2805 } // namespace dart | 2806 } // namespace dart |
OLD | NEW |