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

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

Issue 834233003: Fix for issue 21398 (only send "literal like" objects across isolates spawned using spawnURI (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 5 years, 11 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
« no previous file with comments | « runtime/vm/raw_object.h ('k') | runtime/vm/service.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/object.h" 5 #include "vm/object.h"
6 #include "vm/object_store.h" 6 #include "vm/object_store.h"
7 #include "vm/snapshot.h" 7 #include "vm/snapshot.h"
8 #include "vm/stub_code.h" 8 #include "vm/stub_code.h"
9 #include "vm/symbols.h" 9 #include "vm/symbols.h"
10 #include "vm/visitor.h" 10 #include "vm/visitor.h"
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 writer->Write<int16_t>(ptr()->num_type_arguments_); 109 writer->Write<int16_t>(ptr()->num_type_arguments_);
110 writer->Write<int16_t>(ptr()->num_own_type_arguments_); 110 writer->Write<int16_t>(ptr()->num_own_type_arguments_);
111 writer->Write<uint16_t>(ptr()->num_native_fields_); 111 writer->Write<uint16_t>(ptr()->num_native_fields_);
112 writer->Write<int32_t>(ptr()->token_pos_); 112 writer->Write<int32_t>(ptr()->token_pos_);
113 writer->Write<uint16_t>(ptr()->state_bits_); 113 writer->Write<uint16_t>(ptr()->state_bits_);
114 114
115 // Write out all the object pointer fields. 115 // Write out all the object pointer fields.
116 SnapshotWriterVisitor visitor(writer); 116 SnapshotWriterVisitor visitor(writer);
117 visitor.VisitPointers(from(), to()); 117 visitor.VisitPointers(from(), to());
118 } else { 118 } else {
119 writer->WriteClassId(this); 119 // Until we have maps implemented as internal VM objects we will use
120 // the collections library qualifier to allow maps to be sent across.
121 if (writer->can_send_any_object() ||
122 writer->AllowObjectsInDartLibrary(ptr()->library_)) {
123 writer->WriteClassId(this);
124 } else {
125 // We do not allow regular dart instances in isolate messages.
126 writer->SetWriteException(Exceptions::kArgument,
127 "Illegal argument in isolate message"
128 " : (object is a regular Dart Instance)");
129 }
120 } 130 }
121 } 131 }
122 132
123 133
124 RawUnresolvedClass* UnresolvedClass::ReadFrom(SnapshotReader* reader, 134 RawUnresolvedClass* UnresolvedClass::ReadFrom(SnapshotReader* reader,
125 intptr_t object_id, 135 intptr_t object_id,
126 intptr_t tags, 136 intptr_t tags,
127 Snapshot::Kind kind) { 137 Snapshot::Kind kind) {
128 ASSERT(reader != NULL); 138 ASSERT(reader != NULL);
129 139
(...skipping 2529 matching lines...) Expand 10 before | Expand all | Expand 10 after
2659 UNREACHABLE(); 2669 UNREACHABLE();
2660 } 2670 }
2661 } 2671 }
2662 2672
2663 2673
2664 RawSendPort* SendPort::ReadFrom(SnapshotReader* reader, 2674 RawSendPort* SendPort::ReadFrom(SnapshotReader* reader,
2665 intptr_t object_id, 2675 intptr_t object_id,
2666 intptr_t tags, 2676 intptr_t tags,
2667 Snapshot::Kind kind) { 2677 Snapshot::Kind kind) {
2668 uint64_t id = reader->Read<uint64_t>(); 2678 uint64_t id = reader->Read<uint64_t>();
2679 uint64_t origin_id = reader->Read<uint64_t>();
2669 2680
2670 SendPort& result = SendPort::ZoneHandle(reader->isolate(), 2681 SendPort& result = SendPort::ZoneHandle(reader->isolate(),
2671 SendPort::New(id)); 2682 SendPort::New(id, origin_id));
2672 reader->AddBackRef(object_id, &result, kIsDeserialized); 2683 reader->AddBackRef(object_id, &result, kIsDeserialized);
2673 return result.raw(); 2684 return result.raw();
2674 } 2685 }
2675 2686
2676 2687
2677 void RawSendPort::WriteTo(SnapshotWriter* writer, 2688 void RawSendPort::WriteTo(SnapshotWriter* writer,
2678 intptr_t object_id, 2689 intptr_t object_id,
2679 Snapshot::Kind kind) { 2690 Snapshot::Kind kind) {
2680 // Write out the serialization header value for this object. 2691 // Write out the serialization header value for this object.
2681 writer->WriteInlinedObjectHeader(object_id); 2692 writer->WriteInlinedObjectHeader(object_id);
2682 2693
2683 // Write out the class and tags information. 2694 // Write out the class and tags information.
2684 writer->WriteIndexedObject(kSendPortCid); 2695 writer->WriteIndexedObject(kSendPortCid);
2685 writer->WriteTags(writer->GetObjectTags(this)); 2696 writer->WriteTags(writer->GetObjectTags(this));
2686 2697
2687 writer->Write<uint64_t>(ptr()->id_); 2698 writer->Write<uint64_t>(ptr()->id_);
2699 writer->Write<uint64_t>(ptr()->origin_id_);
2688 } 2700 }
2689 2701
2690 2702
2691 RawStacktrace* Stacktrace::ReadFrom(SnapshotReader* reader, 2703 RawStacktrace* Stacktrace::ReadFrom(SnapshotReader* reader,
2692 intptr_t object_id, 2704 intptr_t object_id,
2693 intptr_t tags, 2705 intptr_t tags,
2694 Snapshot::Kind kind) { 2706 Snapshot::Kind kind) {
2695 if (kind == Snapshot::kFull) { 2707 if (kind == Snapshot::kFull) {
2696 Stacktrace& result = Stacktrace::ZoneHandle(reader->isolate(), 2708 Stacktrace& result = Stacktrace::ZoneHandle(reader->isolate(),
2697 reader->NewStacktrace()); 2709 reader->NewStacktrace());
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
2889 // We do not allow objects with native fields in an isolate message. 2901 // We do not allow objects with native fields in an isolate message.
2890 writer->SetWriteException(Exceptions::kArgument, 2902 writer->SetWriteException(Exceptions::kArgument,
2891 "Illegal argument in isolate message" 2903 "Illegal argument in isolate message"
2892 " : (object is a UserTag)"); 2904 " : (object is a UserTag)");
2893 } else { 2905 } else {
2894 UNREACHABLE(); 2906 UNREACHABLE();
2895 } 2907 }
2896 } 2908 }
2897 2909
2898 } // namespace dart 2910 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/raw_object.h ('k') | runtime/vm/service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698