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

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

Issue 2359543003: Make sure unresolved function type parameter bounds do not end up in snapshot. (Closed)
Patch Set: address Siva/s comments Created 4 years, 3 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
« no previous file with comments | « runtime/vm/parser.cc ('k') | no next file » | 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/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 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 (ptr()->type_state_ == RawType::kFinalizedUninstantiated)); 251 (ptr()->type_state_ == RawType::kFinalizedUninstantiated));
252 ASSERT(ptr()->type_class_id_ != Object::null()); 252 ASSERT(ptr()->type_class_id_ != Object::null());
253 253
254 // Write out the serialization header value for this object. 254 // Write out the serialization header value for this object.
255 writer->WriteInlinedObjectHeader(object_id); 255 writer->WriteInlinedObjectHeader(object_id);
256 256
257 // Write out the class and tags information. 257 // Write out the class and tags information.
258 writer->WriteIndexedObject(kTypeCid); 258 writer->WriteIndexedObject(kTypeCid);
259 writer->WriteTags(writer->GetObjectTags(this)); 259 writer->WriteTags(writer->GetObjectTags(this));
260 260
261 if (ptr()->type_class_id_->IsHeapObject()) {
262 // Type class is still an unresolved class.
263 UNREACHABLE();
264 }
265
261 // Lookup the type class. 266 // Lookup the type class.
262 RawSmi* raw_type_class_id = Smi::RawCast(ptr()->type_class_id_); 267 RawSmi* raw_type_class_id = Smi::RawCast(ptr()->type_class_id_);
263 RawClass* type_class = 268 RawClass* type_class =
264 writer->isolate()->class_table()->At(Smi::Value(raw_type_class_id)); 269 writer->isolate()->class_table()->At(Smi::Value(raw_type_class_id));
265 270
266 // Write out typeclass_is_in_fullsnapshot first as this will 271 // Write out typeclass_is_in_fullsnapshot first as this will
267 // help the reader decide on how to canonicalize the type object. 272 // help the reader decide on how to canonicalize the type object.
268 intptr_t tags = writer->GetObjectTags(type_class); 273 intptr_t tags = writer->GetObjectTags(type_class);
269 bool typeclass_is_in_fullsnapshot = 274 bool typeclass_is_in_fullsnapshot =
270 (ClassIdTag::decode(tags) == kClassCid) && 275 (ClassIdTag::decode(tags) == kClassCid) &&
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 339
335 // Allocate type parameter object. 340 // Allocate type parameter object.
336 TypeParameter& type_parameter = TypeParameter::ZoneHandle( 341 TypeParameter& type_parameter = TypeParameter::ZoneHandle(
337 reader->zone(), TypeParameter::New()); 342 reader->zone(), TypeParameter::New());
338 reader->AddBackRef(object_id, &type_parameter, kIsDeserialized); 343 reader->AddBackRef(object_id, &type_parameter, kIsDeserialized);
339 344
340 // Set all non object fields. 345 // Set all non object fields.
341 type_parameter.set_token_pos( 346 type_parameter.set_token_pos(
342 TokenPosition::SnapshotDecode(reader->Read<int32_t>())); 347 TokenPosition::SnapshotDecode(reader->Read<int32_t>()));
343 type_parameter.set_index(reader->Read<int16_t>()); 348 type_parameter.set_index(reader->Read<int16_t>());
349 type_parameter.set_parent_level(reader->Read<uint8_t>());
344 type_parameter.set_type_state(reader->Read<int8_t>()); 350 type_parameter.set_type_state(reader->Read<int8_t>());
345 351
346 // Set all the object fields. 352 // Set all the object fields.
347 READ_OBJECT_FIELDS(type_parameter, 353 READ_OBJECT_FIELDS(type_parameter,
348 type_parameter.raw()->from(), type_parameter.raw()->to(), 354 type_parameter.raw()->from(), type_parameter.raw()->to(),
349 kAsReference); 355 kAsReference);
350 356
351 // Read in the parameterized class. 357 // Read in the parameterized class.
352 (*reader->ClassHandle()) = 358 (*reader->ClassHandle()) =
353 Class::RawCast(reader->ReadObjectImpl(kAsReference)); 359 Class::RawCast(reader->ReadObjectImpl(kAsReference));
(...skipping 15 matching lines...) Expand all
369 // Write out the serialization header value for this object. 375 // Write out the serialization header value for this object.
370 writer->WriteInlinedObjectHeader(object_id); 376 writer->WriteInlinedObjectHeader(object_id);
371 377
372 // Write out the class and tags information. 378 // Write out the class and tags information.
373 writer->WriteIndexedObject(kTypeParameterCid); 379 writer->WriteIndexedObject(kTypeParameterCid);
374 writer->WriteTags(writer->GetObjectTags(this)); 380 writer->WriteTags(writer->GetObjectTags(this));
375 381
376 // Write out all the non object pointer fields. 382 // Write out all the non object pointer fields.
377 writer->Write<int32_t>(ptr()->token_pos_.SnapshotEncode()); 383 writer->Write<int32_t>(ptr()->token_pos_.SnapshotEncode());
378 writer->Write<int16_t>(ptr()->index_); 384 writer->Write<int16_t>(ptr()->index_);
385 writer->Write<uint8_t>(ptr()->parent_level_);
379 writer->Write<int8_t>(ptr()->type_state_); 386 writer->Write<int8_t>(ptr()->type_state_);
380 387
381 // Write out all the object pointer fields. 388 // Write out all the object pointer fields.
382 SnapshotWriterVisitor visitor(writer, kAsReference); 389 SnapshotWriterVisitor visitor(writer, kAsReference);
383 visitor.VisitPointers(from(), to()); 390 visitor.VisitPointers(from(), to());
384 391
385 // Write out the parameterized class. 392 // Write out the parameterized class.
386 RawClass* param_class = 393 RawClass* param_class =
387 writer->isolate()->class_table()->At(ptr()->parameterized_class_id_); 394 writer->isolate()->class_table()->At(ptr()->parameterized_class_id_);
388 writer->WriteObjectImpl(param_class, kAsReference); 395 writer->WriteObjectImpl(param_class, kAsReference);
(...skipping 2657 matching lines...) Expand 10 before | Expand all | Expand 10 after
3046 // We do not allow objects with native fields in an isolate message. 3053 // We do not allow objects with native fields in an isolate message.
3047 writer->SetWriteException(Exceptions::kArgument, 3054 writer->SetWriteException(Exceptions::kArgument,
3048 "Illegal argument in isolate message" 3055 "Illegal argument in isolate message"
3049 " : (object is a UserTag)"); 3056 " : (object is a UserTag)");
3050 } else { 3057 } else {
3051 UNREACHABLE(); 3058 UNREACHABLE();
3052 } 3059 }
3053 } 3060 }
3054 3061
3055 } // namespace dart 3062 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/parser.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698