| 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/bigint_operations.h" | 5 #include "vm/bigint_operations.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/visitor.h" | 9 #include "vm/visitor.h" |
| 10 | 10 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 reader->AddBackwardReference(object_id, &cls); | 44 reader->AddBackwardReference(object_id, &cls); |
| 45 | 45 |
| 46 // Set the object tags. | 46 // Set the object tags. |
| 47 cls.set_tags(tags); | 47 cls.set_tags(tags); |
| 48 | 48 |
| 49 // Set all non object fields. | 49 // Set all non object fields. |
| 50 cls.set_instance_size(reader->ReadIntptrValue()); | 50 cls.set_instance_size(reader->ReadIntptrValue()); |
| 51 cls.set_type_arguments_instance_field_offset(reader->ReadIntptrValue()); | 51 cls.set_type_arguments_instance_field_offset(reader->ReadIntptrValue()); |
| 52 cls.set_next_field_offset(reader->ReadIntptrValue()); | 52 cls.set_next_field_offset(reader->ReadIntptrValue()); |
| 53 cls.set_num_native_fields(reader->ReadIntptrValue()); | 53 cls.set_num_native_fields(reader->ReadIntptrValue()); |
| 54 cls.set_token_index(reader->ReadIntptrValue()); |
| 54 cls.set_class_state(reader->Read<int8_t>()); | 55 cls.set_class_state(reader->Read<int8_t>()); |
| 55 if (reader->Read<bool>()) { | 56 if (reader->Read<bool>()) { |
| 56 cls.set_is_const(); | 57 cls.set_is_const(); |
| 57 } | 58 } |
| 58 if (reader->Read<bool>()) { | 59 if (reader->Read<bool>()) { |
| 59 cls.set_is_interface(); | 60 cls.set_is_interface(); |
| 60 } | 61 } |
| 61 | 62 |
| 62 // Set all the object fields. | 63 // Set all the object fields. |
| 63 // TODO(5411462): Need to assert No GC can happen here, even though | 64 // TODO(5411462): Need to assert No GC can happen here, even though |
| (...skipping 22 matching lines...) Expand all Loading... |
| 86 // Write out the class and tags information. | 87 // Write out the class and tags information. |
| 87 writer->WriteObjectHeader(Object::kClassClass, ptr()->tags_); | 88 writer->WriteObjectHeader(Object::kClassClass, ptr()->tags_); |
| 88 | 89 |
| 89 // Write out all the non object pointer fields. | 90 // Write out all the non object pointer fields. |
| 90 // NOTE: cpp_vtable_ is not written. | 91 // NOTE: cpp_vtable_ is not written. |
| 91 writer->Write<ObjectKind>(ptr()->instance_kind_); | 92 writer->Write<ObjectKind>(ptr()->instance_kind_); |
| 92 writer->WriteIntptrValue(ptr()->instance_size_); | 93 writer->WriteIntptrValue(ptr()->instance_size_); |
| 93 writer->WriteIntptrValue(ptr()->type_arguments_instance_field_offset_); | 94 writer->WriteIntptrValue(ptr()->type_arguments_instance_field_offset_); |
| 94 writer->WriteIntptrValue(ptr()->next_field_offset_); | 95 writer->WriteIntptrValue(ptr()->next_field_offset_); |
| 95 writer->WriteIntptrValue(ptr()->num_native_fields_); | 96 writer->WriteIntptrValue(ptr()->num_native_fields_); |
| 97 writer->WriteIntptrValue(ptr()->token_index_); |
| 96 writer->Write<int8_t>(ptr()->class_state_); | 98 writer->Write<int8_t>(ptr()->class_state_); |
| 97 writer->Write<bool>(ptr()->is_const_); | 99 writer->Write<bool>(ptr()->is_const_); |
| 98 writer->Write<bool>(ptr()->is_interface_); | 100 writer->Write<bool>(ptr()->is_interface_); |
| 99 | 101 |
| 100 // Write out all the object pointer fields. | 102 // Write out all the object pointer fields. |
| 101 SnapshotWriterVisitor visitor(writer); | 103 SnapshotWriterVisitor visitor(writer); |
| 102 visitor.VisitPointers(from(), to()); | 104 visitor.VisitPointers(from(), to()); |
| 103 } else { | 105 } else { |
| 104 writer->WriteClassId(this); | 106 writer->WriteClassId(this); |
| 105 } | 107 } |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 | 181 |
| 180 // Allocate parameterized type object. | 182 // Allocate parameterized type object. |
| 181 Type& parameterized_type = Type::ZoneHandle( | 183 Type& parameterized_type = Type::ZoneHandle( |
| 182 reader->isolate(), NEW_OBJECT(Type)); | 184 reader->isolate(), NEW_OBJECT(Type)); |
| 183 reader->AddBackwardReference(object_id, ¶meterized_type); | 185 reader->AddBackwardReference(object_id, ¶meterized_type); |
| 184 | 186 |
| 185 // Set the object tags. | 187 // Set the object tags. |
| 186 parameterized_type.set_tags(tags); | 188 parameterized_type.set_tags(tags); |
| 187 | 189 |
| 188 // Set all non object fields. | 190 // Set all non object fields. |
| 191 parameterized_type.set_token_index(reader->ReadIntptrValue()); |
| 189 parameterized_type.set_type_state(reader->Read<int8_t>()); | 192 parameterized_type.set_type_state(reader->Read<int8_t>()); |
| 190 | 193 |
| 191 // Set all the object fields. | 194 // Set all the object fields. |
| 192 // TODO(5411462): Need to assert No GC can happen here, even though | 195 // TODO(5411462): Need to assert No GC can happen here, even though |
| 193 // allocations may happen. | 196 // allocations may happen. |
| 194 intptr_t num_flds = (parameterized_type.raw()->to() - | 197 intptr_t num_flds = (parameterized_type.raw()->to() - |
| 195 parameterized_type.raw()->from()); | 198 parameterized_type.raw()->from()); |
| 196 for (intptr_t i = 0; i <= num_flds; i++) { | 199 for (intptr_t i = 0; i <= num_flds; i++) { |
| 197 *(parameterized_type.raw()->from() + i) = reader->ReadObject(); | 200 *(parameterized_type.raw()->from() + i) = reader->ReadObject(); |
| 198 } | 201 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 210 Snapshot::Kind kind) { | 213 Snapshot::Kind kind) { |
| 211 ASSERT(writer != NULL); | 214 ASSERT(writer != NULL); |
| 212 | 215 |
| 213 // Write out the serialization header value for this object. | 216 // Write out the serialization header value for this object. |
| 214 writer->WriteSerializationMarker(kInlined, object_id); | 217 writer->WriteSerializationMarker(kInlined, object_id); |
| 215 | 218 |
| 216 // Write out the class and tags information. | 219 // Write out the class and tags information. |
| 217 writer->WriteObjectHeader(Object::kTypeClass, ptr()->tags_); | 220 writer->WriteObjectHeader(Object::kTypeClass, ptr()->tags_); |
| 218 | 221 |
| 219 // Write out all the non object pointer fields. | 222 // Write out all the non object pointer fields. |
| 223 writer->WriteIntptrValue(ptr()->token_index_); |
| 220 writer->Write<int8_t>(ptr()->type_state_); | 224 writer->Write<int8_t>(ptr()->type_state_); |
| 221 | 225 |
| 222 // Write out all the object pointer fields. | 226 // Write out all the object pointer fields. |
| 223 SnapshotWriterVisitor visitor(writer); | 227 SnapshotWriterVisitor visitor(writer); |
| 224 visitor.VisitPointers(from(), to()); | 228 visitor.VisitPointers(from(), to()); |
| 225 } | 229 } |
| 226 | 230 |
| 227 | 231 |
| 228 RawTypeParameter* TypeParameter::ReadFrom(SnapshotReader* reader, | 232 RawTypeParameter* TypeParameter::ReadFrom(SnapshotReader* reader, |
| 229 intptr_t object_id, | 233 intptr_t object_id, |
| 230 intptr_t tags, | 234 intptr_t tags, |
| 231 Snapshot::Kind kind) { | 235 Snapshot::Kind kind) { |
| 232 ASSERT(reader != NULL); | 236 ASSERT(reader != NULL); |
| 233 | 237 |
| 234 // Allocate type parameter object. | 238 // Allocate type parameter object. |
| 235 TypeParameter& type_parameter = TypeParameter::ZoneHandle( | 239 TypeParameter& type_parameter = TypeParameter::ZoneHandle( |
| 236 reader->isolate(), NEW_OBJECT(TypeParameter)); | 240 reader->isolate(), NEW_OBJECT(TypeParameter)); |
| 237 reader->AddBackwardReference(object_id, &type_parameter); | 241 reader->AddBackwardReference(object_id, &type_parameter); |
| 238 | 242 |
| 239 // Set the object tags. | 243 // Set the object tags. |
| 240 type_parameter.set_tags(tags); | 244 type_parameter.set_tags(tags); |
| 241 | 245 |
| 242 // Set all non object fields. | 246 // Set all non object fields. |
| 243 type_parameter.set_index(reader->ReadIntptrValue()); | 247 type_parameter.set_index(reader->ReadIntptrValue()); |
| 248 type_parameter.set_token_index(reader->ReadIntptrValue()); |
| 244 type_parameter.set_type_state(reader->Read<int8_t>()); | 249 type_parameter.set_type_state(reader->Read<int8_t>()); |
| 245 | 250 |
| 246 // Set all the object fields. | 251 // Set all the object fields. |
| 247 // TODO(5411462): Need to assert No GC can happen here, even though | 252 // TODO(5411462): Need to assert No GC can happen here, even though |
| 248 // allocations may happen. | 253 // allocations may happen. |
| 249 intptr_t num_flds = (type_parameter.raw()->to() - | 254 intptr_t num_flds = (type_parameter.raw()->to() - |
| 250 type_parameter.raw()->from()); | 255 type_parameter.raw()->from()); |
| 251 for (intptr_t i = 0; i <= num_flds; i++) { | 256 for (intptr_t i = 0; i <= num_flds; i++) { |
| 252 *(type_parameter.raw()->from() + i) = reader->ReadObject(); | 257 *(type_parameter.raw()->from() + i) = reader->ReadObject(); |
| 253 } | 258 } |
| 254 | 259 |
| 255 return type_parameter.raw(); | 260 return type_parameter.raw(); |
| 256 } | 261 } |
| 257 | 262 |
| 258 | 263 |
| 259 void RawTypeParameter::WriteTo(SnapshotWriter* writer, | 264 void RawTypeParameter::WriteTo(SnapshotWriter* writer, |
| 260 intptr_t object_id, | 265 intptr_t object_id, |
| 261 Snapshot::Kind kind) { | 266 Snapshot::Kind kind) { |
| 262 ASSERT(writer != NULL); | 267 ASSERT(writer != NULL); |
| 263 | 268 |
| 264 // Write out the serialization header value for this object. | 269 // Write out the serialization header value for this object. |
| 265 writer->WriteSerializationMarker(kInlined, object_id); | 270 writer->WriteSerializationMarker(kInlined, object_id); |
| 266 | 271 |
| 267 // Write out the class and tags information. | 272 // Write out the class and tags information. |
| 268 writer->WriteObjectHeader(Object::kTypeParameterClass, ptr()->tags_); | 273 writer->WriteObjectHeader(Object::kTypeParameterClass, ptr()->tags_); |
| 269 | 274 |
| 270 // Write out all the non object pointer fields. | 275 // Write out all the non object pointer fields. |
| 271 writer->WriteIntptrValue(ptr()->index_); | 276 writer->WriteIntptrValue(ptr()->index_); |
| 277 writer->WriteIntptrValue(ptr()->token_index_); |
| 272 writer->Write<int8_t>(ptr()->type_state_); | 278 writer->Write<int8_t>(ptr()->type_state_); |
| 273 | 279 |
| 274 // Write out all the object pointer fields. | 280 // Write out all the object pointer fields. |
| 275 SnapshotWriterVisitor visitor(writer); | 281 SnapshotWriterVisitor visitor(writer); |
| 276 visitor.VisitPointers(from(), to()); | 282 visitor.VisitPointers(from(), to()); |
| 277 } | 283 } |
| 278 | 284 |
| 279 | 285 |
| 280 RawInstantiatedType* InstantiatedType::ReadFrom(SnapshotReader* reader, | 286 RawInstantiatedType* InstantiatedType::ReadFrom(SnapshotReader* reader, |
| 281 intptr_t object_id, | 287 intptr_t object_id, |
| (...skipping 1536 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1818 // Write out all the other fields. | 1824 // Write out all the other fields. |
| 1819 writer->Write<RawObject*>(ptr()->num_bracket_expressions_); | 1825 writer->Write<RawObject*>(ptr()->num_bracket_expressions_); |
| 1820 writer->WriteObject(ptr()->pattern_); | 1826 writer->WriteObject(ptr()->pattern_); |
| 1821 writer->WriteIntptrValue(ptr()->type_); | 1827 writer->WriteIntptrValue(ptr()->type_); |
| 1822 writer->WriteIntptrValue(ptr()->flags_); | 1828 writer->WriteIntptrValue(ptr()->flags_); |
| 1823 | 1829 |
| 1824 // Do not write out the data part which is native. | 1830 // Do not write out the data part which is native. |
| 1825 } | 1831 } |
| 1826 | 1832 |
| 1827 } // namespace dart | 1833 } // namespace dart |
| OLD | NEW |