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/snapshot.h" | 5 #include "vm/snapshot.h" |
6 | 6 |
7 #include "platform/assert.h" | 7 #include "platform/assert.h" |
8 #include "vm/bootstrap.h" | 8 #include "vm/bootstrap.h" |
9 #include "vm/exceptions.h" | 9 #include "vm/exceptions.h" |
10 #include "vm/heap.h" | 10 #include "vm/heap.h" |
(...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
495 UnmarkCObject(object); | 495 UnmarkCObject(object); |
496 if (object->type == Dart_CObject::kArray) { | 496 if (object->type == Dart_CObject::kArray) { |
497 for (int i = 0; i < object->value.as_array.length; i++) { | 497 for (int i = 0; i < object->value.as_array.length; i++) { |
498 Dart_CObject* element = object->value.as_array.values[i]; | 498 Dart_CObject* element = object->value.as_array.values[i]; |
499 UnmarkAllCObjects(element); | 499 UnmarkAllCObjects(element); |
500 } | 500 } |
501 } | 501 } |
502 } | 502 } |
503 | 503 |
504 | 504 |
505 void MessageWriter::WriteSmi(int32_t value) { | 505 void MessageWriter::WriteSmi(int64_t value) { |
506 Write<RawObject*>(Smi::New(value)); | 506 Write<RawObject*>(Smi::New(value)); |
507 } | 507 } |
508 | 508 |
509 | 509 |
510 void MessageWriter::WriteInteger(Dart_CObject* object) { | |
511 ASSERT(object->type == Dart_CObject::kInt32 || | |
512 object->type == Dart_CObject::kInt64); | |
513 int64_t value = | |
514 object->type == Dart_CObject::kInt32 | |
515 ? object->value.as_int32 | |
516 : object->value.as_int64; | |
517 if (Smi::IsValid64(value)) { | |
518 WriteSmi(value); | |
519 } else { | |
520 // Write out the serialization header value for mint object. | |
521 WriteInlinedHeader(object); | |
522 // Write out the class and tags information. | |
523 WriteObjectHeader(ObjectStore::kMintClass, 0); | |
524 // Write the 64-bit value. | |
525 Write<int64_t>(value); | |
526 } | |
527 } | |
528 | |
529 | |
510 void MessageWriter::WriteInlinedHeader(Dart_CObject* object) { | 530 void MessageWriter::WriteInlinedHeader(Dart_CObject* object) { |
511 // Write out the serialization header value for this object. | 531 // Write out the serialization header value for this object. |
512 WriteSerializationMarker(kInlined, kMaxPredefinedObjectIds + object_id_); | 532 WriteSerializationMarker(kInlined, kMaxPredefinedObjectIds + object_id_); |
513 // Mark object with its object id. | 533 // Mark object with its object id. |
514 MarkCObject(object, object_id_); | 534 MarkCObject(object, object_id_); |
515 // Advance object id. | 535 // Advance object id. |
516 object_id_++; | 536 object_id_++; |
517 } | 537 } |
518 | 538 |
519 | 539 |
520 void MessageWriter::WriteCObject(Dart_CObject* object) { | 540 void MessageWriter::WriteCObject(Dart_CObject* object) { |
521 if (IsCObjectMarked(object)) { | 541 if (IsCObjectMarked(object)) { |
522 intptr_t object_id = GetMarkedCObjectMark(object); | 542 intptr_t object_id = GetMarkedCObjectMark(object); |
523 WriteIndexedObject(kMaxPredefinedObjectIds + object_id); | 543 WriteIndexedObject(kMaxPredefinedObjectIds + object_id); |
524 return; | 544 return; |
525 } | 545 } |
526 | 546 |
527 switch (object->type) { | 547 switch (object->type) { |
528 case Dart_CObject::kNull: | 548 case Dart_CObject::kNull: |
529 WriteIndexedObject(Object::kNullObject); | 549 WriteIndexedObject(Object::kNullObject); |
530 break; | 550 break; |
531 case Dart_CObject::kBool: | 551 case Dart_CObject::kBool: |
532 if (object->value.as_bool) { | 552 if (object->value.as_bool) { |
533 WriteIndexedObject(ObjectStore::kTrueValue); | 553 WriteIndexedObject(ObjectStore::kTrueValue); |
534 } else { | 554 } else { |
535 WriteIndexedObject(ObjectStore::kFalseValue); | 555 WriteIndexedObject(ObjectStore::kFalseValue); |
536 } | 556 } |
537 break; | 557 break; |
538 case Dart_CObject::kInt32: { | 558 case Dart_CObject::kInt32: |
siva
2012/02/09 01:07:21
Why not leave this as WriteSmi(..) here and instea
Søren Gjesse
2012/02/09 10:29:06
Added WriteInt32, WriteInt64 and WriteMint togethe
| |
539 WriteSmi(object->value.as_int32); | 559 case Dart_CObject::kInt64: |
560 WriteInteger(object); | |
540 break; | 561 break; |
541 } | |
542 case Dart_CObject::kDouble: | 562 case Dart_CObject::kDouble: |
543 // Write out the serialization header value for this object. | 563 // Write out the serialization header value for this object. |
544 WriteInlinedHeader(object); | 564 WriteInlinedHeader(object); |
545 // Write out the class and tags information. | 565 // Write out the class and tags information. |
546 WriteObjectHeader(ObjectStore::kDoubleClass, 0); | 566 WriteObjectHeader(ObjectStore::kDoubleClass, 0); |
547 // Write double value. | 567 // Write double value. |
548 Write<double>(object->value.as_double); | 568 Write<double>(object->value.as_double); |
549 break; | 569 break; |
550 case Dart_CObject::kString: { | 570 case Dart_CObject::kString: { |
551 // Write out the serialization header value for this object. | 571 // Write out the serialization header value for this object. |
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
792 | 812 |
793 | 813 |
794 void SnapshotWriterVisitor::VisitPointers(RawObject** first, RawObject** last) { | 814 void SnapshotWriterVisitor::VisitPointers(RawObject** first, RawObject** last) { |
795 for (RawObject** current = first; current <= last; current++) { | 815 for (RawObject** current = first; current <= last; current++) { |
796 RawObject* raw_obj = *current; | 816 RawObject* raw_obj = *current; |
797 writer_->WriteObject(raw_obj); | 817 writer_->WriteObject(raw_obj); |
798 } | 818 } |
799 } | 819 } |
800 | 820 |
801 } // namespace dart | 821 } // namespace dart |
OLD | NEW |