Index: runtime/vm/snapshot.cc |
diff --git a/runtime/vm/snapshot.cc b/runtime/vm/snapshot.cc |
index 016465ab74358eeb10683528c0766a82c18607a7..50ac35a89e905dbf195cc62c3a85fa284dc63686 100644 |
--- a/runtime/vm/snapshot.cc |
+++ b/runtime/vm/snapshot.cc |
@@ -502,11 +502,31 @@ void MessageWriter::UnmarkAllCObjects(Dart_CObject* object) { |
} |
-void MessageWriter::WriteSmi(int32_t value) { |
+void MessageWriter::WriteSmi(int64_t value) { |
Write<RawObject*>(Smi::New(value)); |
} |
+void MessageWriter::WriteInteger(Dart_CObject* object) { |
+ ASSERT(object->type == Dart_CObject::kInt32 || |
+ object->type == Dart_CObject::kInt64); |
+ int64_t value = |
+ object->type == Dart_CObject::kInt32 |
+ ? object->value.as_int32 |
+ : object->value.as_int64; |
+ if (Smi::IsValid64(value)) { |
+ WriteSmi(value); |
+ } else { |
+ // Write out the serialization header value for mint object. |
+ WriteInlinedHeader(object); |
+ // Write out the class and tags information. |
+ WriteObjectHeader(ObjectStore::kMintClass, 0); |
+ // Write the 64-bit value. |
+ Write<int64_t>(value); |
+ } |
+} |
+ |
+ |
void MessageWriter::WriteInlinedHeader(Dart_CObject* object) { |
// Write out the serialization header value for this object. |
WriteSerializationMarker(kInlined, kMaxPredefinedObjectIds + object_id_); |
@@ -535,10 +555,10 @@ void MessageWriter::WriteCObject(Dart_CObject* object) { |
WriteIndexedObject(ObjectStore::kFalseValue); |
} |
break; |
- case Dart_CObject::kInt32: { |
- WriteSmi(object->value.as_int32); |
+ 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
|
+ case Dart_CObject::kInt64: |
+ WriteInteger(object); |
break; |
- } |
case Dart_CObject::kDouble: |
// Write out the serialization header value for this object. |
WriteInlinedHeader(object); |