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

Side by Side Diff: runtime/vm/snapshot.cc

Issue 9348048: Add support for medium integers to the native message format (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 10 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 | « runtime/vm/snapshot.h ('k') | runtime/vm/snapshot_test.cc » ('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 (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
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
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
OLDNEW
« no previous file with comments | « runtime/vm/snapshot.h ('k') | runtime/vm/snapshot_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698