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

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

Issue 343803002: Finishes removing intptr_t from raw object fields. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 5 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
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/bigint_operations.h" 8 #include "vm/bigint_operations.h"
9 #include "vm/bootstrap.h" 9 #include "vm/bootstrap.h"
10 #include "vm/class_finalizer.h" 10 #include "vm/class_finalizer.h"
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 // allows the two low bits in the header to be used for snapshotting. 123 // allows the two low bits in the header to be used for snapshotting.
124 ASSERT(kObjectId == 124 ASSERT(kObjectId ==
125 ((1 << RawObject::kWatchedBit) | (1 << RawObject::kMarkBit))); 125 ((1 << RawObject::kWatchedBit) | (1 << RawObject::kMarkBit)));
126 ASSERT((kObjectAlignmentMask & kObjectId) == kObjectId); 126 ASSERT((kObjectAlignmentMask & kObjectId) == kObjectId);
127 const Snapshot* snapshot = reinterpret_cast<const Snapshot*>(raw_memory); 127 const Snapshot* snapshot = reinterpret_cast<const Snapshot*>(raw_memory);
128 return snapshot; 128 return snapshot;
129 } 129 }
130 130
131 131
132 RawSmi* BaseReader::ReadAsSmi() { 132 RawSmi* BaseReader::ReadAsSmi() {
133 intptr_t value = ReadIntptrValue(); 133 intptr_t value = Read<int32_t>();
134 ASSERT((value & kSmiTagMask) == kSmiTag); 134 ASSERT((value & kSmiTagMask) == kSmiTag);
135 return reinterpret_cast<RawSmi*>(value); 135 return reinterpret_cast<RawSmi*>(value);
136 } 136 }
137 137
138 138
139 intptr_t BaseReader::ReadSmiValue() { 139 intptr_t BaseReader::ReadSmiValue() {
140 return Smi::Value(ReadAsSmi()); 140 return Smi::Value(ReadAsSmi());
141 } 141 }
142 142
143 143
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 const Error& err = Error::Handle(isolate()->object_store()->sticky_error()); 185 const Error& err = Error::Handle(isolate()->object_store()->sticky_error());
186 isolate()->object_store()->clear_sticky_error(); 186 isolate()->object_store()->clear_sticky_error();
187 return err.raw(); 187 return err.raw();
188 } 188 }
189 } 189 }
190 190
191 191
192 RawClass* SnapshotReader::ReadClassId(intptr_t object_id) { 192 RawClass* SnapshotReader::ReadClassId(intptr_t object_id) {
193 ASSERT(kind_ != Snapshot::kFull); 193 ASSERT(kind_ != Snapshot::kFull);
194 // Read the class header information and lookup the class. 194 // Read the class header information and lookup the class.
195 intptr_t class_header = ReadIntptrValue(); 195 intptr_t class_header = Read<int32_t>();
196 ASSERT((class_header & kSmiTagMask) != kSmiTag); 196 ASSERT((class_header & kSmiTagMask) != kSmiTag);
197 ASSERT(!IsVMIsolateObject(class_header) || 197 ASSERT(!IsVMIsolateObject(class_header) ||
198 !IsSingletonClassId(GetVMIsolateObjectId(class_header))); 198 !IsSingletonClassId(GetVMIsolateObjectId(class_header)));
199 ASSERT((SerializedHeaderTag::decode(class_header) != kObjectId) || 199 ASSERT((SerializedHeaderTag::decode(class_header) != kObjectId) ||
200 !IsObjectStoreClassId(SerializedHeaderData::decode(class_header))); 200 !IsObjectStoreClassId(SerializedHeaderData::decode(class_header)));
201 Class& cls = Class::ZoneHandle(isolate(), Class::null()); 201 Class& cls = Class::ZoneHandle(isolate(), Class::null());
202 AddBackRef(object_id, &cls, kIsDeserialized); 202 AddBackRef(object_id, &cls, kIsDeserialized);
203 // Read the library/class information and lookup the class. 203 // Read the library/class information and lookup the class.
204 str_ ^= ReadObjectImpl(class_header); 204 str_ ^= ReadObjectImpl(class_header);
205 library_ = Library::LookupLibrary(str_); 205 library_ = Library::LookupLibrary(str_);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 if (IsVMIsolateObject(header_value)) { 244 if (IsVMIsolateObject(header_value)) {
245 return ReadVMIsolateObject(header_value); 245 return ReadVMIsolateObject(header_value);
246 } else if (SerializedHeaderTag::decode(header_value) == kObjectId) { 246 } else if (SerializedHeaderTag::decode(header_value) == kObjectId) {
247 return ReadIndexedObject(SerializedHeaderData::decode(header_value)); 247 return ReadIndexedObject(SerializedHeaderData::decode(header_value));
248 } 248 }
249 ASSERT(SerializedHeaderTag::decode(header_value) == kInlined); 249 ASSERT(SerializedHeaderTag::decode(header_value) == kInlined);
250 intptr_t object_id = SerializedHeaderData::decode(header_value); 250 intptr_t object_id = SerializedHeaderData::decode(header_value);
251 ASSERT(GetBackRef(object_id) == NULL); 251 ASSERT(GetBackRef(object_id) == NULL);
252 252
253 // Read the class header information and lookup the class. 253 // Read the class header information and lookup the class.
254 intptr_t class_header = ReadIntptrValue(); 254 intptr_t class_header = Read<int32_t>();
255 255
256 // Since we are only reading an object reference, If it is an instance kind 256 // Since we are only reading an object reference, If it is an instance kind
257 // then we only need to figure out the class of the object and allocate an 257 // then we only need to figure out the class of the object and allocate an
258 // instance of it. The individual fields will be read later. 258 // instance of it. The individual fields will be read later.
259 if (SerializedHeaderData::decode(class_header) == kInstanceObjectId) { 259 if (SerializedHeaderData::decode(class_header) == kInstanceObjectId) {
260 Instance& result = Instance::ZoneHandle(isolate(), Instance::null()); 260 Instance& result = Instance::ZoneHandle(isolate(), Instance::null());
261 AddBackRef(object_id, &result, kIsNotDeserialized); 261 AddBackRef(object_id, &result, kIsNotDeserialized);
262 262
263 cls_ ^= ReadObjectImpl(); // Read class information. 263 cls_ ^= ReadObjectImpl(); // Read class information.
264 ASSERT(!cls_.IsNull()); 264 ASSERT(!cls_.IsNull());
(...skipping 541 matching lines...) Expand 10 before | Expand all | Expand 10 after
806 return GetType(object_store(), object_id); // return type obj. 806 return GetType(object_store(), object_id); // return type obj.
807 } 807 }
808 } 808 }
809 Object* object = GetBackRef(object_id); 809 Object* object = GetBackRef(object_id);
810 return object->raw(); 810 return object->raw();
811 } 811 }
812 812
813 813
814 RawObject* SnapshotReader::ReadInlinedObject(intptr_t object_id) { 814 RawObject* SnapshotReader::ReadInlinedObject(intptr_t object_id) {
815 // Read the class header information and lookup the class. 815 // Read the class header information and lookup the class.
816 intptr_t class_header = ReadIntptrValue(); 816 intptr_t class_header = Read<int32_t>();
817 intptr_t tags = ReadTags(); 817 intptr_t tags = ReadTags();
818 if (SerializedHeaderData::decode(class_header) == kInstanceObjectId) { 818 if (SerializedHeaderData::decode(class_header) == kInstanceObjectId) {
819 // Object is regular dart instance. 819 // Object is regular dart instance.
820 Instance* result = reinterpret_cast<Instance*>(GetBackRef(object_id)); 820 Instance* result = reinterpret_cast<Instance*>(GetBackRef(object_id));
821 intptr_t instance_size = 0; 821 intptr_t instance_size = 0;
822 if (result == NULL) { 822 if (result == NULL) {
823 result = &(Instance::ZoneHandle(isolate(), Instance::null())); 823 result = &(Instance::ZoneHandle(isolate(), Instance::null()));
824 AddBackRef(object_id, result, kIsDeserialized); 824 AddBackRef(object_id, result, kIsDeserialized);
825 cls_ ^= ReadObjectImpl(); 825 cls_ ^= ReadObjectImpl();
826 ASSERT(!cls_.IsNull()); 826 ASSERT(!cls_.IsNull());
(...skipping 638 matching lines...) Expand 10 before | Expand all | Expand 10 after
1465 1465
1466 // Object is regular dart instance. 1466 // Object is regular dart instance.
1467 intptr_t next_field_offset = 1467 intptr_t next_field_offset =
1468 cls->ptr()->next_field_offset_in_words_ << kWordSizeLog2; 1468 cls->ptr()->next_field_offset_in_words_ << kWordSizeLog2;
1469 ASSERT(next_field_offset > 0); 1469 ASSERT(next_field_offset > 0);
1470 1470
1471 // Write out the serialization header value for this object. 1471 // Write out the serialization header value for this object.
1472 WriteInlinedObjectHeader(object_id); 1472 WriteInlinedObjectHeader(object_id);
1473 1473
1474 // Indicate this is an instance object. 1474 // Indicate this is an instance object.
1475 WriteIntptrValue(SerializedHeaderData::encode(kInstanceObjectId)); 1475 Write<int32_t>(SerializedHeaderData::encode(kInstanceObjectId));
1476 1476
1477 // Write out the tags. 1477 // Write out the tags.
1478 WriteTags(tags); 1478 WriteTags(tags);
1479 1479
1480 // Write out the class information for this object. 1480 // Write out the class information for this object.
1481 WriteObjectImpl(cls); 1481 WriteObjectImpl(cls);
1482 1482
1483 // Write out all the fields for the object. 1483 // Write out all the fields for the object.
1484 // Instance::NextFieldOffset() returns the offset of the first field in 1484 // Instance::NextFieldOffset() returns the offset of the first field in
1485 // a Dart object. 1485 // a Dart object.
(...skipping 14 matching lines...) Expand all
1500 // Object is being referenced, add it to the forward ref list and mark 1500 // Object is being referenced, add it to the forward ref list and mark
1501 // it so that future references to this object in the snapshot will use 1501 // it so that future references to this object in the snapshot will use
1502 // this object id. Mark it as not having been serialized yet so that we 1502 // this object id. Mark it as not having been serialized yet so that we
1503 // will serialize the object when we go through the forward list. 1503 // will serialize the object when we go through the forward list.
1504 intptr_t object_id = MarkObject(raw, kIsNotSerialized); 1504 intptr_t object_id = MarkObject(raw, kIsNotSerialized);
1505 1505
1506 // Write out the serialization header value for this object. 1506 // Write out the serialization header value for this object.
1507 WriteInlinedObjectHeader(object_id); 1507 WriteInlinedObjectHeader(object_id);
1508 1508
1509 // Indicate this is an instance object. 1509 // Indicate this is an instance object.
1510 WriteIntptrValue(SerializedHeaderData::encode(kInstanceObjectId)); 1510 Write<int32_t>(SerializedHeaderData::encode(kInstanceObjectId));
1511 1511
1512 // Write out the class information for this object. 1512 // Write out the class information for this object.
1513 WriteObjectImpl(cls); 1513 WriteObjectImpl(cls);
1514 } 1514 }
1515 1515
1516 1516
1517 void SnapshotWriter::ThrowException(Exceptions::ExceptionType type, 1517 void SnapshotWriter::ThrowException(Exceptions::ExceptionType type,
1518 const char* msg) { 1518 const char* msg) {
1519 Isolate::Current()->object_store()->clear_sticky_error(); 1519 Isolate::Current()->object_store()->clear_sticky_error();
1520 UnmarkAll(); 1520 UnmarkAll();
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1576 NoGCScope no_gc; 1576 NoGCScope no_gc;
1577 WriteObject(obj.raw()); 1577 WriteObject(obj.raw());
1578 UnmarkAll(); 1578 UnmarkAll();
1579 } else { 1579 } else {
1580 ThrowException(exception_type(), exception_msg()); 1580 ThrowException(exception_type(), exception_msg());
1581 } 1581 }
1582 } 1582 }
1583 1583
1584 1584
1585 } // namespace dart 1585 } // namespace dart
OLDNEW
« runtime/vm/object.h ('K') | « runtime/vm/snapshot.h ('k') | runtime/vm/stack_frame.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698