| 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/symbols.h" | 9 #include "vm/symbols.h" |
| 10 #include "vm/visitor.h" | 10 #include "vm/visitor.h" |
| (...skipping 889 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 900 | 900 |
| 901 // Allocate library prefix object. | 901 // Allocate library prefix object. |
| 902 LibraryPrefix& prefix = LibraryPrefix::ZoneHandle( | 902 LibraryPrefix& prefix = LibraryPrefix::ZoneHandle( |
| 903 reader->isolate(), NEW_OBJECT(LibraryPrefix)); | 903 reader->isolate(), NEW_OBJECT(LibraryPrefix)); |
| 904 reader->AddBackRef(object_id, &prefix, kIsDeserialized); | 904 reader->AddBackRef(object_id, &prefix, kIsDeserialized); |
| 905 | 905 |
| 906 // Set the object tags. | 906 // Set the object tags. |
| 907 prefix.set_tags(tags); | 907 prefix.set_tags(tags); |
| 908 | 908 |
| 909 // Set all non object fields. | 909 // Set all non object fields. |
| 910 prefix.raw_ptr()->num_libs_ = reader->ReadIntptrValue(); | 910 prefix.raw_ptr()->num_imports_ = reader->ReadIntptrValue(); |
| 911 | 911 |
| 912 // Set all the object fields. | 912 // Set all the object fields. |
| 913 // TODO(5411462): Need to assert No GC can happen here, even though | 913 // TODO(5411462): Need to assert No GC can happen here, even though |
| 914 // allocations may happen. | 914 // allocations may happen. |
| 915 intptr_t num_flds = (prefix.raw()->to() - prefix.raw()->from()); | 915 intptr_t num_flds = (prefix.raw()->to() - prefix.raw()->from()); |
| 916 for (intptr_t i = 0; i <= num_flds; i++) { | 916 for (intptr_t i = 0; i <= num_flds; i++) { |
| 917 *(prefix.raw()->from() + i) = reader->ReadObjectRef(); | 917 *(prefix.raw()->from() + i) = reader->ReadObjectRef(); |
| 918 } | 918 } |
| 919 | 919 |
| 920 return prefix.raw(); | 920 return prefix.raw(); |
| 921 } | 921 } |
| 922 | 922 |
| 923 | 923 |
| 924 void RawLibraryPrefix::WriteTo(SnapshotWriter* writer, | 924 void RawLibraryPrefix::WriteTo(SnapshotWriter* writer, |
| 925 intptr_t object_id, | 925 intptr_t object_id, |
| 926 Snapshot::Kind kind) { | 926 Snapshot::Kind kind) { |
| 927 ASSERT(writer != NULL); | 927 ASSERT(writer != NULL); |
| 928 ASSERT((kind != Snapshot::kMessage) && | 928 ASSERT((kind != Snapshot::kMessage) && |
| 929 !RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))); | 929 !RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))); |
| 930 | 930 |
| 931 // Write out the serialization header value for this object. | 931 // Write out the serialization header value for this object. |
| 932 writer->WriteInlinedObjectHeader(object_id); | 932 writer->WriteInlinedObjectHeader(object_id); |
| 933 | 933 |
| 934 // Write out the class and tags information. | 934 // Write out the class and tags information. |
| 935 writer->WriteVMIsolateObject(kLibraryPrefixCid); | 935 writer->WriteVMIsolateObject(kLibraryPrefixCid); |
| 936 writer->WriteIntptrValue(writer->GetObjectTags(this)); | 936 writer->WriteIntptrValue(writer->GetObjectTags(this)); |
| 937 | 937 |
| 938 // Write out all non object fields. | 938 // Write out all non object fields. |
| 939 writer->WriteIntptrValue(ptr()->num_libs_); | 939 writer->WriteIntptrValue(ptr()->num_imports_); |
| 940 | 940 |
| 941 // Write out all the object pointer fields. | 941 // Write out all the object pointer fields. |
| 942 SnapshotWriterVisitor visitor(writer); | 942 SnapshotWriterVisitor visitor(writer); |
| 943 visitor.VisitPointers(from(), to()); | 943 visitor.VisitPointers(from(), to()); |
| 944 } | 944 } |
| 945 | 945 |
| 946 | 946 |
| 947 RawNamespace* Namespace::ReadFrom(SnapshotReader* reader, |
| 948 intptr_t object_id, |
| 949 intptr_t tags, |
| 950 Snapshot::Kind kind) { |
| 951 ASSERT(reader != NULL); |
| 952 ASSERT((kind != Snapshot::kMessage) && |
| 953 !RawObject::IsCreatedFromSnapshot(tags)); |
| 954 |
| 955 // Allocate Namespace object. |
| 956 Namespace& ns = Namespace::ZoneHandle( |
| 957 reader->isolate(), NEW_OBJECT(Namespace)); |
| 958 reader->AddBackRef(object_id, &ns, kIsDeserialized); |
| 959 |
| 960 // Set the object tags. |
| 961 ns.set_tags(tags); |
| 962 |
| 963 // Set all the object fields. |
| 964 // TODO(5411462): Need to assert No GC can happen here, even though |
| 965 // allocations may happen. |
| 966 intptr_t num_flds = (ns.raw()->to() - ns.raw()->from()); |
| 967 for (intptr_t i = 0; i <= num_flds; i++) { |
| 968 *(ns.raw()->from() + i) = reader->ReadObjectRef(); |
| 969 } |
| 970 |
| 971 return ns.raw(); |
| 972 } |
| 973 |
| 974 |
| 975 void RawNamespace::WriteTo(SnapshotWriter* writer, |
| 976 intptr_t object_id, |
| 977 Snapshot::Kind kind) { |
| 978 ASSERT(writer != NULL); |
| 979 ASSERT((kind != Snapshot::kMessage) && |
| 980 !RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))); |
| 981 |
| 982 // Write out the serialization header value for this object. |
| 983 writer->WriteInlinedObjectHeader(object_id); |
| 984 |
| 985 // Write out the class and tags information. |
| 986 writer->WriteVMIsolateObject(kNamespaceCid); |
| 987 writer->WriteIntptrValue(writer->GetObjectTags(this)); |
| 988 |
| 989 // Write out all the object pointer fields. |
| 990 SnapshotWriterVisitor visitor(writer); |
| 991 visitor.VisitPointers(from(), to()); |
| 992 } |
| 993 |
| 994 |
| 947 RawCode* Code::ReadFrom(SnapshotReader* reader, | 995 RawCode* Code::ReadFrom(SnapshotReader* reader, |
| 948 intptr_t object_id, | 996 intptr_t object_id, |
| 949 intptr_t tags, | 997 intptr_t tags, |
| 950 Snapshot::Kind kind) { | 998 Snapshot::Kind kind) { |
| 951 UNREACHABLE(); | 999 UNREACHABLE(); |
| 952 return Code::null(); | 1000 return Code::null(); |
| 953 } | 1001 } |
| 954 | 1002 |
| 955 | 1003 |
| 956 void RawCode::WriteTo(SnapshotWriter* writer, | 1004 void RawCode::WriteTo(SnapshotWriter* writer, |
| (...skipping 1271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2228 // Write out the class and tags information. | 2276 // Write out the class and tags information. |
| 2229 writer->WriteIndexedObject(kWeakPropertyCid); | 2277 writer->WriteIndexedObject(kWeakPropertyCid); |
| 2230 writer->WriteIntptrValue(writer->GetObjectTags(this)); | 2278 writer->WriteIntptrValue(writer->GetObjectTags(this)); |
| 2231 | 2279 |
| 2232 // Write out all the other fields. | 2280 // Write out all the other fields. |
| 2233 writer->Write<RawObject*>(ptr()->key_); | 2281 writer->Write<RawObject*>(ptr()->key_); |
| 2234 writer->Write<RawObject*>(ptr()->value_); | 2282 writer->Write<RawObject*>(ptr()->value_); |
| 2235 } | 2283 } |
| 2236 | 2284 |
| 2237 } // namespace dart | 2285 } // namespace dart |
| OLD | NEW |