| 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/native_entry.h" | 5 #include "vm/native_entry.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/stub_code.h" | 9 #include "vm/stub_code.h" |
| 10 #include "vm/symbols.h" | 10 #include "vm/symbols.h" |
| (...skipping 2275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2286 obj = reader->NewInstance(); | 2286 obj = reader->NewInstance(); |
| 2287 // Set the canonical bit. | 2287 // Set the canonical bit. |
| 2288 if (RawObject::IsCanonical(tags)) { | 2288 if (RawObject::IsCanonical(tags)) { |
| 2289 obj.SetCanonical(); | 2289 obj.SetCanonical(); |
| 2290 } | 2290 } |
| 2291 } else { | 2291 } else { |
| 2292 obj ^= Object::Allocate(kInstanceCid, | 2292 obj ^= Object::Allocate(kInstanceCid, |
| 2293 Instance::InstanceSize(), | 2293 Instance::InstanceSize(), |
| 2294 HEAP_SPACE(kind)); | 2294 HEAP_SPACE(kind)); |
| 2295 if (RawObject::IsCanonical(tags)) { | 2295 if (RawObject::IsCanonical(tags)) { |
| 2296 obj = obj.CheckAndCanonicalize(reader->thread(), NULL); | 2296 obj = obj.CheckAndCanonicalize(NULL); |
| 2297 } | 2297 } |
| 2298 } | 2298 } |
| 2299 reader->AddBackRef(object_id, &obj, kIsDeserialized); | 2299 reader->AddBackRef(object_id, &obj, kIsDeserialized); |
| 2300 | 2300 |
| 2301 return obj.raw(); | 2301 return obj.raw(); |
| 2302 } | 2302 } |
| 2303 | 2303 |
| 2304 | 2304 |
| 2305 void RawInstance::WriteTo(SnapshotWriter* writer, | 2305 void RawInstance::WriteTo(SnapshotWriter* writer, |
| 2306 intptr_t object_id, | 2306 intptr_t object_id, |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2397 // If it is a canonical constant make it one. | 2397 // If it is a canonical constant make it one. |
| 2398 // When reading a full snapshot we don't need to canonicalize the object | 2398 // When reading a full snapshot we don't need to canonicalize the object |
| 2399 // as it would already be a canonical object. | 2399 // as it would already be a canonical object. |
| 2400 // When reading a script snapshot or a message snapshot we always have | 2400 // When reading a script snapshot or a message snapshot we always have |
| 2401 // to canonicalize the object. | 2401 // to canonicalize the object. |
| 2402 if (RawObject::IsCanonical(tags)) { | 2402 if (RawObject::IsCanonical(tags)) { |
| 2403 if (kind == Snapshot::kFull) { | 2403 if (kind == Snapshot::kFull) { |
| 2404 // Set the canonical bit. | 2404 // Set the canonical bit. |
| 2405 obj.SetCanonical(); | 2405 obj.SetCanonical(); |
| 2406 } else { | 2406 } else { |
| 2407 obj ^= obj.CheckAndCanonicalize(reader->thread(), NULL); | 2407 obj ^= obj.CheckAndCanonicalize(NULL); |
| 2408 ASSERT(!obj.IsNull()); | 2408 ASSERT(!obj.IsNull()); |
| 2409 ASSERT(obj.IsCanonical()); | 2409 ASSERT(obj.IsCanonical()); |
| 2410 } | 2410 } |
| 2411 } | 2411 } |
| 2412 return obj.raw(); | 2412 return obj.raw(); |
| 2413 } | 2413 } |
| 2414 | 2414 |
| 2415 | 2415 |
| 2416 void RawBigint::WriteTo(SnapshotWriter* writer, | 2416 void RawBigint::WriteTo(SnapshotWriter* writer, |
| 2417 intptr_t object_id, | 2417 intptr_t object_id, |
| (...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2824 NEW_OBJECT_WITH_LEN_SPACE(ImmutableArray, len, kind))); | 2824 NEW_OBJECT_WITH_LEN_SPACE(ImmutableArray, len, kind))); |
| 2825 reader->AddBackRef(object_id, array, state); | 2825 reader->AddBackRef(object_id, array, state); |
| 2826 } | 2826 } |
| 2827 if (!as_reference) { | 2827 if (!as_reference) { |
| 2828 // Read all the individual elements for inlined objects. | 2828 // Read all the individual elements for inlined objects. |
| 2829 reader->ArrayReadFrom(object_id, *array, len, tags); | 2829 reader->ArrayReadFrom(object_id, *array, len, tags); |
| 2830 if (RawObject::IsCanonical(tags)) { | 2830 if (RawObject::IsCanonical(tags)) { |
| 2831 if (kind == Snapshot::kFull) { | 2831 if (kind == Snapshot::kFull) { |
| 2832 array->SetCanonical(); | 2832 array->SetCanonical(); |
| 2833 } else { | 2833 } else { |
| 2834 *array ^= array->CheckAndCanonicalize(reader->thread(), NULL); | 2834 *array ^= array->CheckAndCanonicalize(NULL); |
| 2835 } | 2835 } |
| 2836 } | 2836 } |
| 2837 } | 2837 } |
| 2838 return raw(*array); | 2838 return raw(*array); |
| 2839 } | 2839 } |
| 2840 | 2840 |
| 2841 | 2841 |
| 2842 void RawArray::WriteTo(SnapshotWriter* writer, | 2842 void RawArray::WriteTo(SnapshotWriter* writer, |
| 2843 intptr_t object_id, | 2843 intptr_t object_id, |
| 2844 Snapshot::Kind kind, | 2844 Snapshot::Kind kind, |
| (...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3240 // If it is a canonical constant make it one. | 3240 // If it is a canonical constant make it one. |
| 3241 // When reading a full snapshot we don't need to canonicalize the object | 3241 // When reading a full snapshot we don't need to canonicalize the object |
| 3242 // as it would already be a canonical object. | 3242 // as it would already be a canonical object. |
| 3243 // When reading a script snapshot or a message snapshot we always have | 3243 // When reading a script snapshot or a message snapshot we always have |
| 3244 // to canonicalize the object. | 3244 // to canonicalize the object. |
| 3245 if (RawObject::IsCanonical(tags)) { | 3245 if (RawObject::IsCanonical(tags)) { |
| 3246 if (kind == Snapshot::kFull) { | 3246 if (kind == Snapshot::kFull) { |
| 3247 // Set the canonical bit. | 3247 // Set the canonical bit. |
| 3248 result.SetCanonical(); | 3248 result.SetCanonical(); |
| 3249 } else { | 3249 } else { |
| 3250 result ^= result.CheckAndCanonicalize(reader->thread(), NULL); | 3250 result ^= result.CheckAndCanonicalize(NULL); |
| 3251 ASSERT(!result.IsNull()); | 3251 ASSERT(!result.IsNull()); |
| 3252 ASSERT(result.IsCanonical()); | 3252 ASSERT(result.IsCanonical()); |
| 3253 } | 3253 } |
| 3254 } | 3254 } |
| 3255 return result.raw(); | 3255 return result.raw(); |
| 3256 } | 3256 } |
| 3257 #undef TYPED_DATA_READ | 3257 #undef TYPED_DATA_READ |
| 3258 | 3258 |
| 3259 | 3259 |
| 3260 RawExternalTypedData* ExternalTypedData::ReadFrom(SnapshotReader* reader, | 3260 RawExternalTypedData* ExternalTypedData::ReadFrom(SnapshotReader* reader, |
| (...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3700 // We do not allow objects with native fields in an isolate message. | 3700 // We do not allow objects with native fields in an isolate message. |
| 3701 writer->SetWriteException(Exceptions::kArgument, | 3701 writer->SetWriteException(Exceptions::kArgument, |
| 3702 "Illegal argument in isolate message" | 3702 "Illegal argument in isolate message" |
| 3703 " : (object is a UserTag)"); | 3703 " : (object is a UserTag)"); |
| 3704 } else { | 3704 } else { |
| 3705 UNREACHABLE(); | 3705 UNREACHABLE(); |
| 3706 } | 3706 } |
| 3707 } | 3707 } |
| 3708 | 3708 |
| 3709 } // namespace dart | 3709 } // namespace dart |
| OLD | NEW |