OLD | NEW |
---|---|
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 #if !defined(DART_PRECOMPILED_RUNTIME) | 4 #if !defined(DART_PRECOMPILED_RUNTIME) |
5 | 5 |
6 #include "vm/kernel_binary.h" | 6 #include "vm/kernel_binary.h" |
7 #include "platform/globals.h" | 7 #include "platform/globals.h" |
8 #include "vm/flags.h" | 8 #include "vm/flags.h" |
9 #include "vm/growable_array.h" | 9 #include "vm/growable_array.h" |
10 #include "vm/kernel.h" | 10 #include "vm/kernel.h" |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
187 classes().EnsureInitialized(num_classes); | 187 classes().EnsureInitialized(num_classes); |
188 for (intptr_t i = 0; i < num_classes; i++) { | 188 for (intptr_t i = 0; i < num_classes; i++) { |
189 Tag tag = reader->ReadTag(); | 189 Tag tag = reader->ReadTag(); |
190 ASSERT(tag == kClass); | 190 ASSERT(tag == kClass); |
191 NormalClass* klass = classes().GetOrCreate<NormalClass>(i, this); | 191 NormalClass* klass = classes().GetOrCreate<NormalClass>(i, this); |
192 klass->ReadFrom(reader); | 192 klass->ReadFrom(reader); |
193 } | 193 } |
194 | 194 |
195 fields().ReadFrom<Field>(reader, this); | 195 fields().ReadFrom<Field>(reader, this); |
196 procedures().ReadFrom<Procedure>(reader, this); | 196 procedures().ReadFrom<Procedure>(reader, this); |
197 | |
198 cannot_stream_ = classes().cannot_stream() || fields().cannot_stream() || | |
199 procedures().cannot_stream(); | |
200 | |
197 return this; | 201 return this; |
198 } | 202 } |
199 | 203 |
200 | 204 |
201 Typedef* Typedef::ReadFrom(Reader* reader) { | 205 Typedef* Typedef::ReadFrom(Reader* reader) { |
202 TRACE_READ_OFFSET(); | 206 TRACE_READ_OFFSET(); |
203 | 207 |
204 canonical_name_ = reader->ReadCanonicalNameReference(); | 208 canonical_name_ = reader->ReadCanonicalNameReference(); |
205 position_ = reader->ReadPosition(false); | 209 position_ = reader->ReadPosition(false); |
206 name_index_ = reader->ReadUInt(); | 210 name_index_ = reader->ReadUInt(); |
(...skipping 10 matching lines...) Expand all Loading... | |
217 | 221 |
218 canonical_name_ = reader->ReadCanonicalNameReference(); | 222 canonical_name_ = reader->ReadCanonicalNameReference(); |
219 position_ = reader->ReadPosition(false); | 223 position_ = reader->ReadPosition(false); |
220 is_abstract_ = reader->ReadBool(); | 224 is_abstract_ = reader->ReadBool(); |
221 name_index_ = reader->ReadUInt(); | 225 name_index_ = reader->ReadUInt(); |
222 source_uri_index_ = reader->ReadUInt(); | 226 source_uri_index_ = reader->ReadUInt(); |
223 reader->set_current_script_id(source_uri_index_); | 227 reader->set_current_script_id(source_uri_index_); |
224 reader->record_token_position(position_); | 228 reader->record_token_position(position_); |
225 annotations_.ReadFromStatic<Expression>(reader); | 229 annotations_.ReadFromStatic<Expression>(reader); |
226 | 230 |
231 cannot_stream_ = annotations_.cannot_stream(); | |
232 | |
227 return this; | 233 return this; |
228 } | 234 } |
229 | 235 |
230 | 236 |
231 NormalClass* NormalClass::ReadFrom(Reader* reader) { | 237 NormalClass* NormalClass::ReadFrom(Reader* reader) { |
232 TRACE_READ_OFFSET(); | 238 TRACE_READ_OFFSET(); |
233 Class::ReadFrom(reader); | 239 Class::ReadFrom(reader); |
234 TypeParameterScope<ReaderHelper> scope(reader->helper()); | 240 TypeParameterScope<ReaderHelper> scope(reader->helper()); |
235 | 241 |
236 type_parameters_.ReadFrom(reader); | 242 type_parameters_.ReadFrom(reader); |
237 DartType* type = reader->ReadOptional<DartType>(); | 243 DartType* type = reader->ReadOptional<DartType>(); |
238 | 244 |
239 super_class_ = InterfaceType::Cast(type); | 245 super_class_ = InterfaceType::Cast(type); |
240 reader->ReadOptional<DartType>(); // Mixed-in type is unused. | 246 reader->ReadOptional<DartType>(); // Mixed-in type is unused. |
241 implemented_classes_.ReadFromStatic<DowncastReader<DartType, InterfaceType> >( | 247 implemented_classes_.ReadFromStatic<DowncastReader<DartType, InterfaceType> >( |
242 reader); | 248 reader); |
243 fields_.ReadFrom<Field>(reader, this); | 249 fields_.ReadFrom<Field>(reader, this); |
244 constructors_.ReadFrom<Constructor>(reader, this); | 250 constructors_.ReadFrom<Constructor>(reader, this); |
245 procedures_.ReadFrom<Procedure>(reader, this); | 251 procedures_.ReadFrom<Procedure>(reader, this); |
246 | 252 |
253 cannot_stream_ = fields_.cannot_stream() || constructors_.cannot_stream() || | |
Kevin Millikin (Google)
2017/05/11 10:38:35
This is overwriting cannot_stream_ which might hav
jensj
2017/05/11 12:59:25
Done.
| |
254 procedures_.cannot_stream(); | |
255 | |
247 return this; | 256 return this; |
248 } | 257 } |
249 | 258 |
250 | 259 |
251 MixinClass* MixinClass::ReadFrom(Reader* reader) { | 260 MixinClass* MixinClass::ReadFrom(Reader* reader) { |
252 TRACE_READ_OFFSET(); | 261 TRACE_READ_OFFSET(); |
253 TypeParameterScope<ReaderHelper> scope(reader->helper()); | 262 TypeParameterScope<ReaderHelper> scope(reader->helper()); |
254 | 263 |
255 Class::ReadFrom(reader); | 264 Class::ReadFrom(reader); |
256 type_parameters_.ReadFrom(reader); | 265 type_parameters_.ReadFrom(reader); |
257 first_ = InterfaceType::Cast(DartType::ReadFrom(reader)); | 266 first_ = InterfaceType::Cast(DartType::ReadFrom(reader)); |
258 second_ = InterfaceType::Cast(DartType::ReadFrom(reader)); | 267 second_ = InterfaceType::Cast(DartType::ReadFrom(reader)); |
259 implemented_classes_.ReadFromStatic<DowncastReader<DartType, InterfaceType> >( | 268 implemented_classes_.ReadFromStatic<DowncastReader<DartType, InterfaceType> >( |
260 reader); | 269 reader); |
261 constructors_.ReadFrom<Constructor>(reader, this); | 270 constructors_.ReadFrom<Constructor>(reader, this); |
271 | |
272 cannot_stream_ = constructors_.cannot_stream(); | |
273 | |
262 return this; | 274 return this; |
263 } | 275 } |
264 | 276 |
265 | 277 |
266 CanonicalName* Reference::ReadMemberFrom(Reader* reader, bool allow_null) { | 278 CanonicalName* Reference::ReadMemberFrom(Reader* reader, bool allow_null) { |
267 TRACE_READ_OFFSET(); | 279 TRACE_READ_OFFSET(); |
268 | 280 |
269 CanonicalName* canonical_name = reader->ReadCanonicalNameReference(); | 281 CanonicalName* canonical_name = reader->ReadCanonicalNameReference(); |
270 if (canonical_name == NULL && !allow_null) { | 282 if (canonical_name == NULL && !allow_null) { |
271 FATAL("Expected a valid member reference, but got `null`"); | 283 FATAL("Expected a valid member reference, but got `null`"); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
320 end_position_ = reader->ReadPosition(false); | 332 end_position_ = reader->ReadPosition(false); |
321 flags_ = reader->ReadFlags(); | 333 flags_ = reader->ReadFlags(); |
322 name_ = Name::ReadFrom(reader); | 334 name_ = Name::ReadFrom(reader); |
323 source_uri_index_ = reader->ReadUInt(); | 335 source_uri_index_ = reader->ReadUInt(); |
324 reader->set_current_script_id(source_uri_index_); | 336 reader->set_current_script_id(source_uri_index_); |
325 reader->record_token_position(position_); | 337 reader->record_token_position(position_); |
326 reader->record_token_position(end_position_); | 338 reader->record_token_position(end_position_); |
327 annotations_.ReadFromStatic<Expression>(reader); | 339 annotations_.ReadFromStatic<Expression>(reader); |
328 type_ = DartType::ReadFrom(reader); | 340 type_ = DartType::ReadFrom(reader); |
329 initializer_ = reader->ReadOptional<Expression>(); | 341 initializer_ = reader->ReadOptional<Expression>(); |
342 | |
343 cannot_stream_ = (initializer_ != NULL && initializer_->cannot_stream()) || | |
344 annotations_.cannot_stream(); | |
345 | |
330 return this; | 346 return this; |
331 } | 347 } |
332 | 348 |
333 | 349 |
334 Constructor* Constructor::ReadFrom(Reader* reader) { | 350 Constructor* Constructor::ReadFrom(Reader* reader) { |
335 TRACE_READ_OFFSET(); | 351 TRACE_READ_OFFSET(); |
336 Tag tag = reader->ReadTag(); | 352 Tag tag = reader->ReadTag(); |
337 ASSERT(tag == kConstructor); | 353 ASSERT(tag == kConstructor); |
338 | 354 |
339 canonical_name_ = reader->ReadCanonicalNameReference(); | 355 canonical_name_ = reader->ReadCanonicalNameReference(); |
340 VariableScope<ReaderHelper> parameters(reader->helper()); | 356 VariableScope<ReaderHelper> parameters(reader->helper()); |
341 position_ = reader->ReadPosition(); | 357 position_ = reader->ReadPosition(); |
342 end_position_ = reader->ReadPosition(); | 358 end_position_ = reader->ReadPosition(); |
343 flags_ = reader->ReadFlags(); | 359 flags_ = reader->ReadFlags(); |
344 name_ = Name::ReadFrom(reader); | 360 name_ = Name::ReadFrom(reader); |
345 annotations_.ReadFromStatic<Expression>(reader); | 361 annotations_.ReadFromStatic<Expression>(reader); |
346 function_ = FunctionNode::ReadFrom(reader); | 362 function_ = FunctionNode::ReadFrom(reader); |
347 initializers_.ReadFromStatic<Initializer>(reader); | 363 initializers_.ReadFromStatic<Initializer>(reader); |
364 | |
365 cannot_stream_ = annotations_.cannot_stream() || function_->cannot_stream() || | |
366 initializers_.cannot_stream(); | |
367 | |
348 return this; | 368 return this; |
349 } | 369 } |
350 | 370 |
351 | 371 |
352 Procedure* Procedure::ReadFrom(Reader* reader) { | 372 Procedure* Procedure::ReadFrom(Reader* reader) { |
353 TRACE_READ_OFFSET(); | 373 TRACE_READ_OFFSET(); |
354 Tag tag = reader->ReadTag(); | 374 Tag tag = reader->ReadTag(); |
355 ASSERT(tag == kProcedure); | 375 ASSERT(tag == kProcedure); |
356 | 376 |
357 canonical_name_ = reader->ReadCanonicalNameReference(); | 377 canonical_name_ = reader->ReadCanonicalNameReference(); |
358 VariableScope<ReaderHelper> parameters(reader->helper()); | 378 VariableScope<ReaderHelper> parameters(reader->helper()); |
359 position_ = reader->ReadPosition(false); | 379 position_ = reader->ReadPosition(false); |
360 end_position_ = reader->ReadPosition(false); | 380 end_position_ = reader->ReadPosition(false); |
361 kind_ = static_cast<ProcedureKind>(reader->ReadByte()); | 381 kind_ = static_cast<ProcedureKind>(reader->ReadByte()); |
362 flags_ = reader->ReadFlags(); | 382 flags_ = reader->ReadFlags(); |
363 name_ = Name::ReadFrom(reader); | 383 name_ = Name::ReadFrom(reader); |
364 source_uri_index_ = reader->ReadUInt(); | 384 source_uri_index_ = reader->ReadUInt(); |
365 reader->set_current_script_id(source_uri_index_); | 385 reader->set_current_script_id(source_uri_index_); |
366 reader->record_token_position(position_); | 386 reader->record_token_position(position_); |
367 reader->record_token_position(end_position_); | 387 reader->record_token_position(end_position_); |
368 annotations_.ReadFromStatic<Expression>(reader); | 388 annotations_.ReadFromStatic<Expression>(reader); |
369 function_ = reader->ReadOptional<FunctionNode>(); | 389 function_ = reader->ReadOptional<FunctionNode>(); |
390 | |
391 cannot_stream_ = annotations_.cannot_stream() || | |
392 (function_ != NULL && function_->cannot_stream()); | |
393 | |
370 return this; | 394 return this; |
371 } | 395 } |
372 | 396 |
373 | 397 |
374 Initializer* Initializer::ReadFrom(Reader* reader) { | 398 Initializer* Initializer::ReadFrom(Reader* reader) { |
375 TRACE_READ_OFFSET(); | 399 TRACE_READ_OFFSET(); |
376 Tag tag = reader->ReadTag(); | 400 Tag tag = reader->ReadTag(); |
377 switch (tag) { | 401 switch (tag) { |
378 case kInvalidInitializer: | 402 case kInvalidInitializer: |
379 return InvalidInitializer::ReadFromImpl(reader); | 403 return InvalidInitializer::ReadFromImpl(reader); |
(...skipping 16 matching lines...) Expand all Loading... | |
396 TRACE_READ_OFFSET(); | 420 TRACE_READ_OFFSET(); |
397 return new InvalidInitializer(); | 421 return new InvalidInitializer(); |
398 } | 422 } |
399 | 423 |
400 | 424 |
401 FieldInitializer* FieldInitializer::ReadFromImpl(Reader* reader) { | 425 FieldInitializer* FieldInitializer::ReadFromImpl(Reader* reader) { |
402 TRACE_READ_OFFSET(); | 426 TRACE_READ_OFFSET(); |
403 FieldInitializer* initializer = new FieldInitializer(); | 427 FieldInitializer* initializer = new FieldInitializer(); |
404 initializer->field_reference_ = Reference::ReadMemberFrom(reader); | 428 initializer->field_reference_ = Reference::ReadMemberFrom(reader); |
405 initializer->value_ = Expression::ReadFrom(reader); | 429 initializer->value_ = Expression::ReadFrom(reader); |
430 | |
431 initializer->cannot_stream_ = initializer->value_->cannot_stream(); | |
432 | |
406 return initializer; | 433 return initializer; |
407 } | 434 } |
408 | 435 |
409 | 436 |
410 SuperInitializer* SuperInitializer::ReadFromImpl(Reader* reader) { | 437 SuperInitializer* SuperInitializer::ReadFromImpl(Reader* reader) { |
411 TRACE_READ_OFFSET(); | 438 TRACE_READ_OFFSET(); |
412 SuperInitializer* init = new SuperInitializer(); | 439 SuperInitializer* init = new SuperInitializer(); |
413 init->target_reference_ = Reference::ReadMemberFrom(reader); | 440 init->target_reference_ = Reference::ReadMemberFrom(reader); |
414 init->arguments_ = Arguments::ReadFrom(reader); | 441 init->arguments_ = Arguments::ReadFrom(reader); |
442 | |
443 init->cannot_stream_ = init->arguments_->cannot_stream(); | |
444 | |
415 return init; | 445 return init; |
416 } | 446 } |
417 | 447 |
418 | 448 |
419 RedirectingInitializer* RedirectingInitializer::ReadFromImpl(Reader* reader) { | 449 RedirectingInitializer* RedirectingInitializer::ReadFromImpl(Reader* reader) { |
420 TRACE_READ_OFFSET(); | 450 TRACE_READ_OFFSET(); |
421 RedirectingInitializer* init = new RedirectingInitializer(); | 451 RedirectingInitializer* init = new RedirectingInitializer(); |
422 init->target_reference_ = Reference::ReadMemberFrom(reader); | 452 init->target_reference_ = Reference::ReadMemberFrom(reader); |
423 init->arguments_ = Arguments::ReadFrom(reader); | 453 init->arguments_ = Arguments::ReadFrom(reader); |
454 | |
455 init->cannot_stream_ = init->arguments_->cannot_stream(); | |
456 | |
424 return init; | 457 return init; |
425 } | 458 } |
426 | 459 |
427 | 460 |
428 LocalInitializer* LocalInitializer::ReadFromImpl(Reader* reader) { | 461 LocalInitializer* LocalInitializer::ReadFromImpl(Reader* reader) { |
429 TRACE_READ_OFFSET(); | 462 TRACE_READ_OFFSET(); |
430 LocalInitializer* init = new LocalInitializer(); | 463 LocalInitializer* init = new LocalInitializer(); |
431 init->variable_ = VariableDeclaration::ReadFromImpl(reader, false); | 464 init->variable_ = VariableDeclaration::ReadFromImpl(reader, false); |
465 | |
466 init->cannot_stream_ = init->variable_->cannot_stream(); | |
467 | |
432 return init; | 468 return init; |
433 } | 469 } |
434 | 470 |
435 | 471 |
436 Expression* Expression::ReadFrom(Reader* reader) { | 472 Expression* Expression::ReadFrom(Reader* reader) { |
437 TRACE_READ_OFFSET(); | 473 TRACE_READ_OFFSET(); |
438 uint8_t payload = 0; | 474 uint8_t payload = 0; |
439 Tag tag = reader->ReadTag(&payload); | 475 Tag tag = reader->ReadTag(&payload); |
440 switch (tag) { | 476 switch (tag) { |
441 case kInvalidExpression: | 477 case kInvalidExpression: |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
550 reader->offset() - 1; // -1 to include tag byte. | 586 reader->offset() - 1; // -1 to include tag byte. |
551 return invalid_expression; | 587 return invalid_expression; |
552 } | 588 } |
553 | 589 |
554 | 590 |
555 VariableGet* VariableGet::ReadFrom(Reader* reader) { | 591 VariableGet* VariableGet::ReadFrom(Reader* reader) { |
556 TRACE_READ_OFFSET(); | 592 TRACE_READ_OFFSET(); |
557 VariableGet* get = new VariableGet(); | 593 VariableGet* get = new VariableGet(); |
558 get->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 594 get->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
559 get->position_ = reader->ReadPosition(); | 595 get->position_ = reader->ReadPosition(); |
596 get->variable_kernel_offset_ = reader->ReadUInt(); | |
560 get->variable_ = reader->helper()->variables().Lookup(reader->ReadUInt()); | 597 get->variable_ = reader->helper()->variables().Lookup(reader->ReadUInt()); |
598 ASSERT(get->variable_->kernel_offset() == get->variable_kernel_offset_); | |
561 reader->ReadOptional<DartType>(); // Unused promoted type. | 599 reader->ReadOptional<DartType>(); // Unused promoted type. |
562 return get; | 600 return get; |
563 } | 601 } |
564 | 602 |
565 | 603 |
566 VariableGet* VariableGet::ReadFrom(Reader* reader, uint8_t payload) { | 604 VariableGet* VariableGet::ReadFrom(Reader* reader, uint8_t payload) { |
567 TRACE_READ_OFFSET(); | 605 TRACE_READ_OFFSET(); |
568 VariableGet* get = new VariableGet(); | 606 VariableGet* get = new VariableGet(); |
569 get->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 607 get->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
570 get->position_ = reader->ReadPosition(); | 608 get->position_ = reader->ReadPosition(); |
609 get->variable_kernel_offset_ = reader->ReadUInt(); | |
571 get->variable_ = reader->helper()->variables().Lookup(payload); | 610 get->variable_ = reader->helper()->variables().Lookup(payload); |
611 ASSERT(get->variable_->kernel_offset() == get->variable_kernel_offset_); | |
572 return get; | 612 return get; |
573 } | 613 } |
574 | 614 |
575 | 615 |
576 VariableSet* VariableSet::ReadFrom(Reader* reader) { | 616 VariableSet* VariableSet::ReadFrom(Reader* reader) { |
577 TRACE_READ_OFFSET(); | 617 TRACE_READ_OFFSET(); |
578 VariableSet* set = new VariableSet(); | 618 VariableSet* set = new VariableSet(); |
579 set->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 619 set->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
580 set->position_ = reader->ReadPosition(); | 620 set->position_ = reader->ReadPosition(); |
621 set->variable_kernel_offset_ = reader->ReadUInt(); | |
581 set->variable_ = reader->helper()->variables().Lookup(reader->ReadUInt()); | 622 set->variable_ = reader->helper()->variables().Lookup(reader->ReadUInt()); |
623 ASSERT(set->variable_->kernel_offset() == set->variable_kernel_offset_); | |
582 set->expression_ = Expression::ReadFrom(reader); | 624 set->expression_ = Expression::ReadFrom(reader); |
625 | |
626 set->cannot_stream_ = set->expression_->cannot_stream(); | |
627 | |
583 return set; | 628 return set; |
584 } | 629 } |
585 | 630 |
586 | 631 |
587 VariableSet* VariableSet::ReadFrom(Reader* reader, uint8_t payload) { | 632 VariableSet* VariableSet::ReadFrom(Reader* reader, uint8_t payload) { |
588 TRACE_READ_OFFSET(); | 633 TRACE_READ_OFFSET(); |
589 VariableSet* set = new VariableSet(); | 634 VariableSet* set = new VariableSet(); |
590 set->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 635 set->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
591 set->variable_ = reader->helper()->variables().Lookup(payload); | 636 set->variable_ = reader->helper()->variables().Lookup(payload); |
592 set->position_ = reader->ReadPosition(); | 637 set->position_ = reader->ReadPosition(); |
638 set->variable_kernel_offset_ = reader->ReadUInt(); | |
639 ASSERT(set->variable_->kernel_offset() == set->variable_kernel_offset_); | |
593 set->expression_ = Expression::ReadFrom(reader); | 640 set->expression_ = Expression::ReadFrom(reader); |
641 | |
642 set->cannot_stream_ = set->expression_->cannot_stream(); | |
643 | |
594 return set; | 644 return set; |
595 } | 645 } |
596 | 646 |
597 | 647 |
598 PropertyGet* PropertyGet::ReadFrom(Reader* reader) { | 648 PropertyGet* PropertyGet::ReadFrom(Reader* reader) { |
599 TRACE_READ_OFFSET(); | 649 TRACE_READ_OFFSET(); |
600 PropertyGet* get = new PropertyGet(); | 650 PropertyGet* get = new PropertyGet(); |
601 get->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 651 get->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
602 get->position_ = reader->ReadPosition(); | 652 get->position_ = reader->ReadPosition(); |
603 get->receiver_ = Expression::ReadFrom(reader); | 653 get->receiver_ = Expression::ReadFrom(reader); |
604 get->name_ = Name::ReadFrom(reader); | 654 get->name_ = Name::ReadFrom(reader); |
605 get->interface_target_reference_ = Reference::ReadMemberFrom(reader, true); | 655 get->interface_target_reference_ = Reference::ReadMemberFrom(reader, true); |
656 | |
657 get->cannot_stream_ = get->receiver_->cannot_stream(); | |
658 | |
606 return get; | 659 return get; |
607 } | 660 } |
608 | 661 |
609 | 662 |
610 PropertySet* PropertySet::ReadFrom(Reader* reader) { | 663 PropertySet* PropertySet::ReadFrom(Reader* reader) { |
611 TRACE_READ_OFFSET(); | 664 TRACE_READ_OFFSET(); |
612 PropertySet* set = new PropertySet(); | 665 PropertySet* set = new PropertySet(); |
613 set->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 666 set->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
614 set->position_ = reader->ReadPosition(); | 667 set->position_ = reader->ReadPosition(); |
615 set->receiver_ = Expression::ReadFrom(reader); | 668 set->receiver_ = Expression::ReadFrom(reader); |
616 set->name_ = Name::ReadFrom(reader); | 669 set->name_ = Name::ReadFrom(reader); |
617 set->value_ = Expression::ReadFrom(reader); | 670 set->value_ = Expression::ReadFrom(reader); |
618 set->interface_target_reference_ = Reference::ReadMemberFrom(reader, true); | 671 set->interface_target_reference_ = Reference::ReadMemberFrom(reader, true); |
672 | |
673 set->cannot_stream_ = | |
674 set->receiver_->cannot_stream() || set->value_->cannot_stream(); | |
675 | |
619 return set; | 676 return set; |
620 } | 677 } |
621 | 678 |
622 | 679 |
623 DirectPropertyGet* DirectPropertyGet::ReadFrom(Reader* reader) { | 680 DirectPropertyGet* DirectPropertyGet::ReadFrom(Reader* reader) { |
624 TRACE_READ_OFFSET(); | 681 TRACE_READ_OFFSET(); |
625 DirectPropertyGet* get = new DirectPropertyGet(); | 682 DirectPropertyGet* get = new DirectPropertyGet(); |
626 get->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 683 get->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
627 get->position_ = reader->ReadPosition(); | 684 get->position_ = reader->ReadPosition(); |
628 get->receiver_ = Expression::ReadFrom(reader); | 685 get->receiver_ = Expression::ReadFrom(reader); |
629 get->target_reference_ = Reference::ReadMemberFrom(reader); | 686 get->target_reference_ = Reference::ReadMemberFrom(reader); |
687 | |
688 get->cannot_stream_ = get->receiver_->cannot_stream(); | |
689 | |
630 return get; | 690 return get; |
631 } | 691 } |
632 | 692 |
633 | 693 |
634 DirectPropertySet* DirectPropertySet::ReadFrom(Reader* reader) { | 694 DirectPropertySet* DirectPropertySet::ReadFrom(Reader* reader) { |
635 TRACE_READ_OFFSET(); | 695 TRACE_READ_OFFSET(); |
636 DirectPropertySet* set = new DirectPropertySet(); | 696 DirectPropertySet* set = new DirectPropertySet(); |
637 set->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 697 set->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
638 set->position_ = reader->ReadPosition(); | 698 set->position_ = reader->ReadPosition(); |
639 set->receiver_ = Expression::ReadFrom(reader); | 699 set->receiver_ = Expression::ReadFrom(reader); |
640 set->target_reference_ = Reference::ReadMemberFrom(reader); | 700 set->target_reference_ = Reference::ReadMemberFrom(reader); |
641 set->value_ = Expression::ReadFrom(reader); | 701 set->value_ = Expression::ReadFrom(reader); |
702 | |
703 set->cannot_stream_ = | |
704 set->receiver_->cannot_stream() || set->value_->cannot_stream(); | |
705 | |
642 return set; | 706 return set; |
643 } | 707 } |
644 | 708 |
645 | 709 |
646 StaticGet* StaticGet::ReadFrom(Reader* reader) { | 710 StaticGet* StaticGet::ReadFrom(Reader* reader) { |
647 TRACE_READ_OFFSET(); | 711 TRACE_READ_OFFSET(); |
648 StaticGet* get = new StaticGet(); | 712 StaticGet* get = new StaticGet(); |
649 get->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 713 get->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
650 get->position_ = reader->ReadPosition(); | 714 get->position_ = reader->ReadPosition(); |
651 get->target_reference_ = Reference::ReadMemberFrom(reader); | 715 get->target_reference_ = Reference::ReadMemberFrom(reader); |
652 return get; | 716 return get; |
653 } | 717 } |
654 | 718 |
655 | 719 |
656 StaticSet* StaticSet::ReadFrom(Reader* reader) { | 720 StaticSet* StaticSet::ReadFrom(Reader* reader) { |
657 TRACE_READ_OFFSET(); | 721 TRACE_READ_OFFSET(); |
658 StaticSet* set = new StaticSet(); | 722 StaticSet* set = new StaticSet(); |
659 set->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 723 set->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
660 set->position_ = reader->ReadPosition(); | 724 set->position_ = reader->ReadPosition(); |
661 set->target_reference_ = Reference::ReadMemberFrom(reader); | 725 set->target_reference_ = Reference::ReadMemberFrom(reader); |
662 set->expression_ = Expression::ReadFrom(reader); | 726 set->expression_ = Expression::ReadFrom(reader); |
727 | |
728 set->cannot_stream_ = set->expression_->cannot_stream(); | |
729 | |
663 return set; | 730 return set; |
664 } | 731 } |
665 | 732 |
666 | 733 |
667 Arguments* Arguments::ReadFrom(Reader* reader) { | 734 Arguments* Arguments::ReadFrom(Reader* reader) { |
668 TRACE_READ_OFFSET(); | 735 TRACE_READ_OFFSET(); |
669 Arguments* arguments = new Arguments(); | 736 Arguments* arguments = new Arguments(); |
737 intptr_t num_arguments = reader->ReadUInt(); | |
670 arguments->types().ReadFromStatic<DartType>(reader); | 738 arguments->types().ReadFromStatic<DartType>(reader); |
671 arguments->positional().ReadFromStatic<Expression>(reader); | 739 arguments->positional().ReadFromStatic<Expression>(reader); |
672 arguments->named().ReadFromStatic<NamedExpression>(reader); | 740 arguments->named().ReadFromStatic<NamedExpression>(reader); |
741 ASSERT(arguments->count() == num_arguments); | |
742 | |
743 arguments->cannot_stream_ = arguments->positional().cannot_stream() || | |
744 arguments->named().cannot_stream(); | |
745 | |
673 return arguments; | 746 return arguments; |
674 } | 747 } |
675 | 748 |
676 | 749 |
677 NamedExpression* NamedExpression::ReadFrom(Reader* reader) { | 750 NamedExpression* NamedExpression::ReadFrom(Reader* reader) { |
678 TRACE_READ_OFFSET(); | 751 TRACE_READ_OFFSET(); |
679 intptr_t name_index = reader->ReadUInt(); | 752 intptr_t name_index = reader->ReadUInt(); |
680 Expression* expression = Expression::ReadFrom(reader); | 753 Expression* expression = Expression::ReadFrom(reader); |
681 return new NamedExpression(name_index, expression); | 754 NamedExpression* named = new NamedExpression(name_index, expression); |
755 | |
756 named->cannot_stream_ = expression->cannot_stream(); | |
757 | |
758 return named; | |
682 } | 759 } |
683 | 760 |
684 | 761 |
685 MethodInvocation* MethodInvocation::ReadFrom(Reader* reader) { | 762 MethodInvocation* MethodInvocation::ReadFrom(Reader* reader) { |
686 TRACE_READ_OFFSET(); | 763 TRACE_READ_OFFSET(); |
687 MethodInvocation* invocation = new MethodInvocation(); | 764 MethodInvocation* invocation = new MethodInvocation(); |
688 invocation->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 765 invocation->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
689 invocation->position_ = reader->ReadPosition(); | 766 invocation->position_ = reader->ReadPosition(); |
690 invocation->receiver_ = Expression::ReadFrom(reader); | 767 invocation->receiver_ = Expression::ReadFrom(reader); |
691 invocation->name_ = Name::ReadFrom(reader); | 768 invocation->name_ = Name::ReadFrom(reader); |
692 invocation->arguments_ = Arguments::ReadFrom(reader); | 769 invocation->arguments_ = Arguments::ReadFrom(reader); |
693 invocation->interface_target_reference_ = | 770 invocation->interface_target_reference_ = |
694 Reference::ReadMemberFrom(reader, true); | 771 Reference::ReadMemberFrom(reader, true); |
772 | |
773 invocation->cannot_stream_ = invocation->receiver_->cannot_stream() || | |
774 invocation->arguments_->cannot_stream(); | |
775 | |
695 return invocation; | 776 return invocation; |
696 } | 777 } |
697 | 778 |
698 | 779 |
699 DirectMethodInvocation* DirectMethodInvocation::ReadFrom(Reader* reader) { | 780 DirectMethodInvocation* DirectMethodInvocation::ReadFrom(Reader* reader) { |
700 TRACE_READ_OFFSET(); | 781 TRACE_READ_OFFSET(); |
701 DirectMethodInvocation* invocation = new DirectMethodInvocation(); | 782 DirectMethodInvocation* invocation = new DirectMethodInvocation(); |
702 invocation->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 783 invocation->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
703 invocation->receiver_ = Expression::ReadFrom(reader); | 784 invocation->receiver_ = Expression::ReadFrom(reader); |
704 invocation->target_reference_ = Reference::ReadMemberFrom(reader); | 785 invocation->target_reference_ = Reference::ReadMemberFrom(reader); |
705 invocation->arguments_ = Arguments::ReadFrom(reader); | 786 invocation->arguments_ = Arguments::ReadFrom(reader); |
787 | |
788 invocation->cannot_stream_ = invocation->receiver_->cannot_stream() || | |
789 invocation->arguments_->cannot_stream(); | |
790 | |
706 return invocation; | 791 return invocation; |
707 } | 792 } |
708 | 793 |
709 | 794 |
710 StaticInvocation* StaticInvocation::ReadFrom(Reader* reader, bool is_const) { | 795 StaticInvocation* StaticInvocation::ReadFrom(Reader* reader, bool is_const) { |
711 TRACE_READ_OFFSET(); | 796 TRACE_READ_OFFSET(); |
712 StaticInvocation* invocation = new StaticInvocation(); | 797 StaticInvocation* invocation = new StaticInvocation(); |
713 invocation->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 798 invocation->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
714 invocation->is_const_ = is_const; | 799 invocation->is_const_ = is_const; |
715 invocation->position_ = reader->ReadPosition(); | 800 invocation->position_ = reader->ReadPosition(); |
716 invocation->procedure_reference_ = Reference::ReadMemberFrom(reader); | 801 invocation->procedure_reference_ = Reference::ReadMemberFrom(reader); |
717 invocation->arguments_ = Arguments::ReadFrom(reader); | 802 invocation->arguments_ = Arguments::ReadFrom(reader); |
803 | |
804 invocation->cannot_stream_ = invocation->arguments_->cannot_stream(); | |
805 | |
718 return invocation; | 806 return invocation; |
719 } | 807 } |
720 | 808 |
721 | 809 |
722 ConstructorInvocation* ConstructorInvocation::ReadFrom(Reader* reader, | 810 ConstructorInvocation* ConstructorInvocation::ReadFrom(Reader* reader, |
723 bool is_const) { | 811 bool is_const) { |
724 TRACE_READ_OFFSET(); | 812 TRACE_READ_OFFSET(); |
725 ConstructorInvocation* invocation = new ConstructorInvocation(); | 813 ConstructorInvocation* invocation = new ConstructorInvocation(); |
726 invocation->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 814 invocation->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
727 invocation->is_const_ = is_const; | 815 invocation->is_const_ = is_const; |
728 invocation->position_ = reader->ReadPosition(); | 816 invocation->position_ = reader->ReadPosition(); |
729 invocation->target_reference_ = Reference::ReadMemberFrom(reader); | 817 invocation->target_reference_ = Reference::ReadMemberFrom(reader); |
730 invocation->arguments_ = Arguments::ReadFrom(reader); | 818 invocation->arguments_ = Arguments::ReadFrom(reader); |
819 | |
820 invocation->cannot_stream_ = invocation->arguments_->cannot_stream(); | |
821 | |
731 return invocation; | 822 return invocation; |
732 } | 823 } |
733 | 824 |
734 | 825 |
735 Not* Not::ReadFrom(Reader* reader) { | 826 Not* Not::ReadFrom(Reader* reader) { |
736 TRACE_READ_OFFSET(); | 827 TRACE_READ_OFFSET(); |
737 Not* n = new Not(); | 828 Not* n = new Not(); |
738 n->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 829 n->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
739 n->expression_ = Expression::ReadFrom(reader); | 830 n->expression_ = Expression::ReadFrom(reader); |
831 | |
832 n->cannot_stream_ = n->expression_->cannot_stream(); | |
833 | |
740 return n; | 834 return n; |
741 } | 835 } |
742 | 836 |
743 | 837 |
744 LogicalExpression* LogicalExpression::ReadFrom(Reader* reader) { | 838 LogicalExpression* LogicalExpression::ReadFrom(Reader* reader) { |
745 TRACE_READ_OFFSET(); | 839 TRACE_READ_OFFSET(); |
746 LogicalExpression* expr = new LogicalExpression(); | 840 LogicalExpression* expr = new LogicalExpression(); |
747 expr->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 841 expr->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
748 expr->left_ = Expression::ReadFrom(reader); | 842 expr->left_ = Expression::ReadFrom(reader); |
749 expr->operator_ = static_cast<Operator>(reader->ReadByte()); | 843 expr->operator_ = static_cast<Operator>(reader->ReadByte()); |
750 expr->right_ = Expression::ReadFrom(reader); | 844 expr->right_ = Expression::ReadFrom(reader); |
845 | |
846 expr->cannot_stream_ = | |
847 expr->left_->cannot_stream() || expr->right_->cannot_stream(); | |
848 | |
751 return expr; | 849 return expr; |
752 } | 850 } |
753 | 851 |
754 | 852 |
755 ConditionalExpression* ConditionalExpression::ReadFrom(Reader* reader) { | 853 ConditionalExpression* ConditionalExpression::ReadFrom(Reader* reader) { |
756 TRACE_READ_OFFSET(); | 854 TRACE_READ_OFFSET(); |
757 ConditionalExpression* expr = new ConditionalExpression(); | 855 ConditionalExpression* expr = new ConditionalExpression(); |
758 expr->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 856 expr->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
759 expr->condition_ = Expression::ReadFrom(reader); | 857 expr->condition_ = Expression::ReadFrom(reader); |
760 expr->then_ = Expression::ReadFrom(reader); | 858 expr->then_ = Expression::ReadFrom(reader); |
761 expr->otherwise_ = Expression::ReadFrom(reader); | 859 expr->otherwise_ = Expression::ReadFrom(reader); |
762 reader->ReadOptional<DartType>(); // Unused static type. | 860 reader->ReadOptional<DartType>(); // Unused static type. |
861 | |
862 expr->cannot_stream_ = expr->condition_->cannot_stream() || | |
863 expr->then_->cannot_stream() || | |
864 expr->otherwise_->cannot_stream(); | |
865 | |
763 return expr; | 866 return expr; |
764 } | 867 } |
765 | 868 |
766 | 869 |
767 StringConcatenation* StringConcatenation::ReadFrom(Reader* reader) { | 870 StringConcatenation* StringConcatenation::ReadFrom(Reader* reader) { |
768 TRACE_READ_OFFSET(); | 871 TRACE_READ_OFFSET(); |
769 StringConcatenation* concat = new StringConcatenation(); | 872 StringConcatenation* concat = new StringConcatenation(); |
770 concat->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 873 concat->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
771 concat->position_ = reader->ReadPosition(); | 874 concat->position_ = reader->ReadPosition(); |
772 concat->expressions_.ReadFromStatic<Expression>(reader); | 875 concat->expressions_.ReadFromStatic<Expression>(reader); |
876 | |
877 concat->cannot_stream_ = concat->expressions_.cannot_stream(); | |
878 | |
773 return concat; | 879 return concat; |
774 } | 880 } |
775 | 881 |
776 | 882 |
777 IsExpression* IsExpression::ReadFrom(Reader* reader) { | 883 IsExpression* IsExpression::ReadFrom(Reader* reader) { |
778 TRACE_READ_OFFSET(); | 884 TRACE_READ_OFFSET(); |
779 IsExpression* expr = new IsExpression(); | 885 IsExpression* expr = new IsExpression(); |
780 expr->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 886 expr->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
781 expr->position_ = reader->ReadPosition(); | 887 expr->position_ = reader->ReadPosition(); |
782 expr->operand_ = Expression::ReadFrom(reader); | 888 expr->operand_ = Expression::ReadFrom(reader); |
783 expr->type_ = DartType::ReadFrom(reader); | 889 expr->type_ = DartType::ReadFrom(reader); |
890 | |
891 expr->cannot_stream_ = expr->operand_->cannot_stream(); | |
892 | |
784 return expr; | 893 return expr; |
785 } | 894 } |
786 | 895 |
787 | 896 |
788 AsExpression* AsExpression::ReadFrom(Reader* reader) { | 897 AsExpression* AsExpression::ReadFrom(Reader* reader) { |
789 TRACE_READ_OFFSET(); | 898 TRACE_READ_OFFSET(); |
790 AsExpression* expr = new AsExpression(); | 899 AsExpression* expr = new AsExpression(); |
791 expr->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 900 expr->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
792 expr->position_ = reader->ReadPosition(); | 901 expr->position_ = reader->ReadPosition(); |
793 expr->operand_ = Expression::ReadFrom(reader); | 902 expr->operand_ = Expression::ReadFrom(reader); |
794 expr->type_ = DartType::ReadFrom(reader); | 903 expr->type_ = DartType::ReadFrom(reader); |
904 | |
905 expr->cannot_stream_ = expr->operand_->cannot_stream(); | |
906 | |
795 return expr; | 907 return expr; |
796 } | 908 } |
797 | 909 |
798 | 910 |
799 StringLiteral* StringLiteral::ReadFrom(Reader* reader) { | 911 StringLiteral* StringLiteral::ReadFrom(Reader* reader) { |
800 TRACE_READ_OFFSET(); | 912 TRACE_READ_OFFSET(); |
801 intptr_t offset = reader->offset() - 1; // -1 to include tag byte. | 913 intptr_t offset = reader->offset() - 1; // -1 to include tag byte. |
802 StringLiteral* lit = new StringLiteral(reader->ReadUInt()); | 914 StringLiteral* lit = new StringLiteral(reader->ReadUInt()); |
803 lit->kernel_offset_ = offset; | 915 lit->kernel_offset_ = offset; |
804 return lit; | 916 return lit; |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
893 return rethrow; | 1005 return rethrow; |
894 } | 1006 } |
895 | 1007 |
896 | 1008 |
897 Throw* Throw::ReadFrom(Reader* reader) { | 1009 Throw* Throw::ReadFrom(Reader* reader) { |
898 TRACE_READ_OFFSET(); | 1010 TRACE_READ_OFFSET(); |
899 Throw* t = new Throw(); | 1011 Throw* t = new Throw(); |
900 t->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 1012 t->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
901 t->position_ = reader->ReadPosition(); | 1013 t->position_ = reader->ReadPosition(); |
902 t->expression_ = Expression::ReadFrom(reader); | 1014 t->expression_ = Expression::ReadFrom(reader); |
1015 | |
1016 t->cannot_stream_ = t->expression_->cannot_stream(); | |
1017 | |
903 return t; | 1018 return t; |
904 } | 1019 } |
905 | 1020 |
906 | 1021 |
907 ListLiteral* ListLiteral::ReadFrom(Reader* reader, bool is_const) { | 1022 ListLiteral* ListLiteral::ReadFrom(Reader* reader, bool is_const) { |
908 TRACE_READ_OFFSET(); | 1023 TRACE_READ_OFFSET(); |
909 ListLiteral* literal = new ListLiteral(); | 1024 ListLiteral* literal = new ListLiteral(); |
910 literal->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 1025 literal->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
911 literal->is_const_ = is_const; | 1026 literal->is_const_ = is_const; |
912 literal->position_ = reader->ReadPosition(); | 1027 literal->position_ = reader->ReadPosition(); |
913 literal->type_ = DartType::ReadFrom(reader); | 1028 literal->type_ = DartType::ReadFrom(reader); |
914 literal->expressions_.ReadFromStatic<Expression>(reader); | 1029 literal->expressions_.ReadFromStatic<Expression>(reader); |
1030 | |
1031 literal->cannot_stream_ = literal->expressions_.cannot_stream(); | |
1032 | |
915 return literal; | 1033 return literal; |
916 } | 1034 } |
917 | 1035 |
918 | 1036 |
919 MapLiteral* MapLiteral::ReadFrom(Reader* reader, bool is_const) { | 1037 MapLiteral* MapLiteral::ReadFrom(Reader* reader, bool is_const) { |
920 TRACE_READ_OFFSET(); | 1038 TRACE_READ_OFFSET(); |
921 MapLiteral* literal = new MapLiteral(); | 1039 MapLiteral* literal = new MapLiteral(); |
922 literal->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 1040 literal->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
923 literal->is_const_ = is_const; | 1041 literal->is_const_ = is_const; |
924 literal->position_ = reader->ReadPosition(); | 1042 literal->position_ = reader->ReadPosition(); |
925 literal->key_type_ = DartType::ReadFrom(reader); | 1043 literal->key_type_ = DartType::ReadFrom(reader); |
926 literal->value_type_ = DartType::ReadFrom(reader); | 1044 literal->value_type_ = DartType::ReadFrom(reader); |
927 literal->entries_.ReadFromStatic<MapEntry>(reader); | 1045 literal->entries_.ReadFromStatic<MapEntry>(reader); |
1046 | |
1047 literal->cannot_stream_ = literal->entries_.cannot_stream(); | |
1048 | |
928 return literal; | 1049 return literal; |
929 } | 1050 } |
930 | 1051 |
931 | 1052 |
932 MapEntry* MapEntry::ReadFrom(Reader* reader) { | 1053 MapEntry* MapEntry::ReadFrom(Reader* reader) { |
933 MapEntry* entry = new MapEntry(); | 1054 MapEntry* entry = new MapEntry(); |
934 entry->key_ = Expression::ReadFrom(reader); | 1055 entry->key_ = Expression::ReadFrom(reader); |
935 entry->value_ = Expression::ReadFrom(reader); | 1056 entry->value_ = Expression::ReadFrom(reader); |
1057 | |
1058 entry->cannot_stream_ = | |
1059 entry->key_->cannot_stream() || entry->value_->cannot_stream(); | |
1060 | |
936 return entry; | 1061 return entry; |
937 } | 1062 } |
938 | 1063 |
939 | 1064 |
940 AwaitExpression* AwaitExpression::ReadFrom(Reader* reader) { | 1065 AwaitExpression* AwaitExpression::ReadFrom(Reader* reader) { |
941 TRACE_READ_OFFSET(); | 1066 TRACE_READ_OFFSET(); |
942 AwaitExpression* await = new AwaitExpression(); | 1067 AwaitExpression* await = new AwaitExpression(); |
943 await->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 1068 await->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
944 await->operand_ = Expression::ReadFrom(reader); | 1069 await->operand_ = Expression::ReadFrom(reader); |
1070 | |
1071 await->cannot_stream_ = await->operand_->cannot_stream(); | |
1072 | |
945 return await; | 1073 return await; |
946 } | 1074 } |
947 | 1075 |
948 | 1076 |
949 FunctionExpression* FunctionExpression::ReadFrom(Reader* reader) { | 1077 FunctionExpression* FunctionExpression::ReadFrom(Reader* reader) { |
950 TRACE_READ_OFFSET(); | 1078 TRACE_READ_OFFSET(); |
951 VariableScope<ReaderHelper> parameters(reader->helper()); | 1079 VariableScope<ReaderHelper> parameters(reader->helper()); |
952 FunctionExpression* expr = new FunctionExpression(); | 1080 FunctionExpression* expr = new FunctionExpression(); |
953 expr->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 1081 expr->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
954 expr->function_ = FunctionNode::ReadFrom(reader); | 1082 expr->function_ = FunctionNode::ReadFrom(reader); |
1083 | |
1084 expr->cannot_stream_ = true; | |
1085 | |
955 return expr; | 1086 return expr; |
956 } | 1087 } |
957 | 1088 |
958 | 1089 |
959 Let* Let::ReadFrom(Reader* reader) { | 1090 Let* Let::ReadFrom(Reader* reader) { |
960 TRACE_READ_OFFSET(); | 1091 TRACE_READ_OFFSET(); |
961 VariableScope<ReaderHelper> vars(reader->helper()); | 1092 VariableScope<ReaderHelper> vars(reader->helper()); |
962 PositionScope scope(reader); | 1093 PositionScope scope(reader); |
963 | 1094 |
964 Let* let = new Let(); | 1095 Let* let = new Let(); |
965 let->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 1096 let->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
966 let->variable_ = VariableDeclaration::ReadFromImpl(reader, false); | 1097 let->variable_ = VariableDeclaration::ReadFromImpl(reader, false); |
967 let->body_ = Expression::ReadFrom(reader); | 1098 let->body_ = Expression::ReadFrom(reader); |
968 let->position_ = reader->min_position(); | 1099 let->position_ = reader->min_position(); |
969 let->end_position_ = reader->max_position(); | 1100 let->end_position_ = reader->max_position(); |
970 | 1101 |
1102 let->cannot_stream_ = | |
1103 let->variable_->cannot_stream() || let->body_->cannot_stream(); | |
1104 | |
971 return let; | 1105 return let; |
972 } | 1106 } |
973 | 1107 |
974 | 1108 |
975 VectorCreation* VectorCreation::ReadFrom(Reader* reader) { | 1109 VectorCreation* VectorCreation::ReadFrom(Reader* reader) { |
976 TRACE_READ_OFFSET(); | 1110 TRACE_READ_OFFSET(); |
977 | 1111 |
978 VectorCreation* vector_creation = new VectorCreation(); | 1112 VectorCreation* vector_creation = new VectorCreation(); |
979 vector_creation->kernel_offset_ = | 1113 vector_creation->kernel_offset_ = |
980 reader->offset() - 1; // -1 to include tag byte. | 1114 reader->offset() - 1; // -1 to include tag byte. |
981 vector_creation->value_ = reader->ReadUInt(); | 1115 vector_creation->value_ = reader->ReadUInt(); |
982 | 1116 |
983 return vector_creation; | 1117 return vector_creation; |
984 } | 1118 } |
985 | 1119 |
986 | 1120 |
987 VectorGet* VectorGet::ReadFrom(Reader* reader) { | 1121 VectorGet* VectorGet::ReadFrom(Reader* reader) { |
988 TRACE_READ_OFFSET(); | 1122 TRACE_READ_OFFSET(); |
989 | 1123 |
990 VectorGet* vector_get = new VectorGet(); | 1124 VectorGet* vector_get = new VectorGet(); |
991 vector_get->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 1125 vector_get->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
992 vector_get->vector_expression_ = Expression::ReadFrom(reader); | 1126 vector_get->vector_expression_ = Expression::ReadFrom(reader); |
993 vector_get->index_ = reader->ReadUInt(); | 1127 vector_get->index_ = reader->ReadUInt(); |
994 | 1128 |
1129 vector_get->cannot_stream_ = vector_get->vector_expression_->cannot_stream(); | |
1130 | |
995 return vector_get; | 1131 return vector_get; |
996 } | 1132 } |
997 | 1133 |
998 | 1134 |
999 VectorSet* VectorSet::ReadFrom(Reader* reader) { | 1135 VectorSet* VectorSet::ReadFrom(Reader* reader) { |
1000 TRACE_READ_OFFSET(); | 1136 TRACE_READ_OFFSET(); |
1001 | 1137 |
1002 VectorSet* vector_set = new VectorSet(); | 1138 VectorSet* vector_set = new VectorSet(); |
1003 vector_set->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 1139 vector_set->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
1004 vector_set->vector_expression_ = Expression::ReadFrom(reader); | 1140 vector_set->vector_expression_ = Expression::ReadFrom(reader); |
1005 vector_set->index_ = reader->ReadUInt(); | 1141 vector_set->index_ = reader->ReadUInt(); |
1006 vector_set->value_ = Expression::ReadFrom(reader); | 1142 vector_set->value_ = Expression::ReadFrom(reader); |
1007 | 1143 |
1144 vector_set->cannot_stream_ = | |
1145 vector_set->vector_expression_->cannot_stream() || | |
1146 vector_set->value_->cannot_stream(); | |
1147 | |
1008 return vector_set; | 1148 return vector_set; |
1009 } | 1149 } |
1010 | 1150 |
1011 | 1151 |
1012 VectorCopy* VectorCopy::ReadFrom(Reader* reader) { | 1152 VectorCopy* VectorCopy::ReadFrom(Reader* reader) { |
1013 TRACE_READ_OFFSET(); | 1153 TRACE_READ_OFFSET(); |
1014 | 1154 |
1015 VectorCopy* vector_copy = new VectorCopy(); | 1155 VectorCopy* vector_copy = new VectorCopy(); |
1016 vector_copy->kernel_offset_ = | 1156 vector_copy->kernel_offset_ = |
1017 reader->offset() - 1; // -1 to include tag byte. | 1157 reader->offset() - 1; // -1 to include tag byte. |
1018 vector_copy->vector_expression_ = Expression::ReadFrom(reader); | 1158 vector_copy->vector_expression_ = Expression::ReadFrom(reader); |
1019 | 1159 |
1160 vector_copy->cannot_stream_ = | |
1161 vector_copy->vector_expression_->cannot_stream(); | |
1162 | |
1020 return vector_copy; | 1163 return vector_copy; |
1021 } | 1164 } |
1022 | 1165 |
1023 | 1166 |
1024 ClosureCreation* ClosureCreation::ReadFrom(Reader* reader) { | 1167 ClosureCreation* ClosureCreation::ReadFrom(Reader* reader) { |
1025 TRACE_READ_OFFSET(); | 1168 TRACE_READ_OFFSET(); |
1026 | 1169 |
1027 ClosureCreation* closure_creation = new ClosureCreation(); | 1170 ClosureCreation* closure_creation = new ClosureCreation(); |
1028 closure_creation->kernel_offset_ = | 1171 closure_creation->kernel_offset_ = |
1029 reader->offset() - 1; // to include tag byte. | 1172 reader->offset() - 1; // to include tag byte. |
1030 closure_creation->top_level_function_reference_ = | 1173 closure_creation->top_level_function_reference_ = |
1031 Reference::ReadMemberFrom(reader); | 1174 Reference::ReadMemberFrom(reader); |
1032 closure_creation->context_vector_ = Expression::ReadFrom(reader); | 1175 closure_creation->context_vector_ = Expression::ReadFrom(reader); |
1033 closure_creation->function_type_ = | 1176 closure_creation->function_type_ = |
1034 FunctionType::Cast(DartType::ReadFrom(reader)); | 1177 FunctionType::Cast(DartType::ReadFrom(reader)); |
1035 | 1178 |
1179 closure_creation->cannot_stream_ = | |
1180 closure_creation->context_vector_->cannot_stream(); | |
1181 | |
1036 return closure_creation; | 1182 return closure_creation; |
1037 } | 1183 } |
1038 | 1184 |
1039 | 1185 |
1040 Statement* Statement::ReadFrom(Reader* reader) { | 1186 Statement* Statement::ReadFrom(Reader* reader) { |
1041 TRACE_READ_OFFSET(); | 1187 TRACE_READ_OFFSET(); |
1042 Tag tag = reader->ReadTag(); | 1188 Tag tag = reader->ReadTag(); |
1043 switch (tag) { | 1189 switch (tag) { |
1044 case kInvalidStatement: | 1190 case kInvalidStatement: |
1045 return InvalidStatement::ReadFrom(reader); | 1191 return InvalidStatement::ReadFrom(reader); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1085 return FunctionDeclaration::ReadFrom(reader); | 1231 return FunctionDeclaration::ReadFrom(reader); |
1086 default: | 1232 default: |
1087 UNREACHABLE(); | 1233 UNREACHABLE(); |
1088 } | 1234 } |
1089 return NULL; | 1235 return NULL; |
1090 } | 1236 } |
1091 | 1237 |
1092 | 1238 |
1093 InvalidStatement* InvalidStatement::ReadFrom(Reader* reader) { | 1239 InvalidStatement* InvalidStatement::ReadFrom(Reader* reader) { |
1094 TRACE_READ_OFFSET(); | 1240 TRACE_READ_OFFSET(); |
1095 return new InvalidStatement(); | 1241 InvalidStatement* stmt = new InvalidStatement(); |
1242 stmt->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | |
1243 return stmt; | |
1096 } | 1244 } |
1097 | 1245 |
1098 | 1246 |
1099 ExpressionStatement* ExpressionStatement::ReadFrom(Reader* reader) { | 1247 ExpressionStatement* ExpressionStatement::ReadFrom(Reader* reader) { |
1100 TRACE_READ_OFFSET(); | 1248 TRACE_READ_OFFSET(); |
1101 return new ExpressionStatement(Expression::ReadFrom(reader)); | 1249 intptr_t offset = reader->offset() - 1; // -1 to include tag byte. |
1250 ExpressionStatement* stmt = | |
1251 new ExpressionStatement(Expression::ReadFrom(reader)); | |
1252 stmt->kernel_offset_ = offset; | |
1253 | |
1254 stmt->cannot_stream_ = stmt->expression_->cannot_stream(); | |
1255 | |
1256 return stmt; | |
1102 } | 1257 } |
1103 | 1258 |
1104 | 1259 |
1105 Block* Block::ReadFromImpl(Reader* reader) { | 1260 Block* Block::ReadFromImpl(Reader* reader) { |
1106 TRACE_READ_OFFSET(); | 1261 TRACE_READ_OFFSET(); |
1107 PositionScope scope(reader); | 1262 PositionScope scope(reader); |
1108 | 1263 |
1109 VariableScope<ReaderHelper> vars(reader->helper()); | 1264 VariableScope<ReaderHelper> vars(reader->helper()); |
1110 Block* block = new Block(); | 1265 Block* block = new Block(); |
1111 block->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 1266 block->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
1112 block->statements().ReadFromStatic<Statement>(reader); | 1267 block->statements().ReadFromStatic<Statement>(reader); |
1113 block->position_ = reader->min_position(); | 1268 block->position_ = reader->min_position(); |
1114 block->end_position_ = reader->max_position(); | 1269 block->end_position_ = reader->max_position(); |
1115 | 1270 |
1271 block->cannot_stream_ = block->statements().cannot_stream(); | |
1272 | |
1116 return block; | 1273 return block; |
1117 } | 1274 } |
1118 | 1275 |
1119 | 1276 |
1120 EmptyStatement* EmptyStatement::ReadFrom(Reader* reader) { | 1277 EmptyStatement* EmptyStatement::ReadFrom(Reader* reader) { |
1121 TRACE_READ_OFFSET(); | 1278 TRACE_READ_OFFSET(); |
1122 return new EmptyStatement(); | 1279 EmptyStatement* stmt = new EmptyStatement(); |
1280 stmt->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | |
1281 return stmt; | |
1123 } | 1282 } |
1124 | 1283 |
1125 | 1284 |
1126 AssertStatement* AssertStatement::ReadFrom(Reader* reader) { | 1285 AssertStatement* AssertStatement::ReadFrom(Reader* reader) { |
1127 TRACE_READ_OFFSET(); | 1286 TRACE_READ_OFFSET(); |
1128 AssertStatement* stmt = new AssertStatement(); | 1287 AssertStatement* stmt = new AssertStatement(); |
1288 stmt->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | |
1129 stmt->condition_ = Expression::ReadFrom(reader); | 1289 stmt->condition_ = Expression::ReadFrom(reader); |
1130 stmt->message_ = reader->ReadOptional<Expression>(); | 1290 stmt->message_ = reader->ReadOptional<Expression>(); |
1291 | |
1292 stmt->cannot_stream_ = | |
1293 stmt->condition_->cannot_stream() || | |
1294 (stmt->message_ != NULL && stmt->message_->cannot_stream()); | |
1295 | |
1131 return stmt; | 1296 return stmt; |
1132 } | 1297 } |
1133 | 1298 |
1134 | 1299 |
1135 LabeledStatement* LabeledStatement::ReadFrom(Reader* reader) { | 1300 LabeledStatement* LabeledStatement::ReadFrom(Reader* reader) { |
1136 TRACE_READ_OFFSET(); | 1301 TRACE_READ_OFFSET(); |
1137 LabeledStatement* stmt = new LabeledStatement(); | 1302 LabeledStatement* stmt = new LabeledStatement(); |
1303 stmt->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | |
1304 | |
1138 reader->helper()->labels()->Push(stmt); | 1305 reader->helper()->labels()->Push(stmt); |
1139 stmt->body_ = Statement::ReadFrom(reader); | 1306 stmt->body_ = Statement::ReadFrom(reader); |
1140 reader->helper()->labels()->Pop(stmt); | 1307 reader->helper()->labels()->Pop(stmt); |
1308 | |
1309 stmt->cannot_stream_ = stmt->body_->cannot_stream(); | |
1310 | |
1141 return stmt; | 1311 return stmt; |
1142 } | 1312 } |
1143 | 1313 |
1144 | 1314 |
1145 BreakStatement* BreakStatement::ReadFrom(Reader* reader) { | 1315 BreakStatement* BreakStatement::ReadFrom(Reader* reader) { |
1146 TRACE_READ_OFFSET(); | 1316 TRACE_READ_OFFSET(); |
1147 BreakStatement* stmt = new BreakStatement(); | 1317 BreakStatement* stmt = new BreakStatement(); |
1318 stmt->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | |
1148 stmt->position_ = reader->ReadPosition(); | 1319 stmt->position_ = reader->ReadPosition(); |
1149 stmt->target_ = reader->helper()->labels()->Lookup(reader->ReadUInt()); | 1320 stmt->target_index_ = reader->ReadUInt(); |
1150 return stmt; | 1321 return stmt; |
1151 } | 1322 } |
1152 | 1323 |
1153 | 1324 |
1154 WhileStatement* WhileStatement::ReadFrom(Reader* reader) { | 1325 WhileStatement* WhileStatement::ReadFrom(Reader* reader) { |
1155 TRACE_READ_OFFSET(); | 1326 TRACE_READ_OFFSET(); |
1156 WhileStatement* stmt = new WhileStatement(); | 1327 WhileStatement* stmt = new WhileStatement(); |
1328 stmt->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | |
1157 stmt->condition_ = Expression::ReadFrom(reader); | 1329 stmt->condition_ = Expression::ReadFrom(reader); |
1158 stmt->body_ = Statement::ReadFrom(reader); | 1330 stmt->body_ = Statement::ReadFrom(reader); |
1331 | |
1332 stmt->cannot_stream_ = | |
1333 stmt->condition_->cannot_stream() || stmt->body_->cannot_stream(); | |
1334 | |
1159 return stmt; | 1335 return stmt; |
1160 } | 1336 } |
1161 | 1337 |
1162 | 1338 |
1163 DoStatement* DoStatement::ReadFrom(Reader* reader) { | 1339 DoStatement* DoStatement::ReadFrom(Reader* reader) { |
1164 TRACE_READ_OFFSET(); | 1340 TRACE_READ_OFFSET(); |
1165 DoStatement* dostmt = new DoStatement(); | 1341 DoStatement* dostmt = new DoStatement(); |
1342 dostmt->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | |
1166 dostmt->body_ = Statement::ReadFrom(reader); | 1343 dostmt->body_ = Statement::ReadFrom(reader); |
1167 dostmt->condition_ = Expression::ReadFrom(reader); | 1344 dostmt->condition_ = Expression::ReadFrom(reader); |
1345 | |
1346 dostmt->cannot_stream_ = | |
1347 dostmt->body_->cannot_stream() || dostmt->condition_->cannot_stream(); | |
1348 | |
1168 return dostmt; | 1349 return dostmt; |
1169 } | 1350 } |
1170 | 1351 |
1171 | 1352 |
1172 ForStatement* ForStatement::ReadFrom(Reader* reader) { | 1353 ForStatement* ForStatement::ReadFrom(Reader* reader) { |
1173 TRACE_READ_OFFSET(); | 1354 TRACE_READ_OFFSET(); |
1174 VariableScope<ReaderHelper> vars(reader->helper()); | 1355 VariableScope<ReaderHelper> vars(reader->helper()); |
1175 PositionScope scope(reader); | 1356 PositionScope scope(reader); |
1176 | 1357 |
1177 ForStatement* forstmt = new ForStatement(); | 1358 ForStatement* forstmt = new ForStatement(); |
1178 forstmt->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 1359 forstmt->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
1179 forstmt->variables_.ReadFromStatic<VariableDeclarationImpl>(reader); | 1360 forstmt->variables_.ReadFromStatic<VariableDeclarationImpl>(reader); |
1180 forstmt->condition_ = reader->ReadOptional<Expression>(); | 1361 forstmt->condition_ = reader->ReadOptional<Expression>(); |
1181 forstmt->updates_.ReadFromStatic<Expression>(reader); | 1362 forstmt->updates_.ReadFromStatic<Expression>(reader); |
1182 forstmt->body_ = Statement::ReadFrom(reader); | 1363 forstmt->body_ = Statement::ReadFrom(reader); |
1183 forstmt->end_position_ = reader->max_position(); | 1364 forstmt->end_position_ = reader->max_position(); |
1184 forstmt->position_ = reader->min_position(); | 1365 forstmt->position_ = reader->min_position(); |
1185 | 1366 |
1367 forstmt->cannot_stream_ = | |
1368 forstmt->body_->cannot_stream() || | |
1369 (forstmt->condition_ != NULL && forstmt->condition_->cannot_stream()) || | |
1370 forstmt->variables_.cannot_stream() || forstmt->updates_.cannot_stream(); | |
1371 | |
1186 return forstmt; | 1372 return forstmt; |
1187 } | 1373 } |
1188 | 1374 |
1189 | 1375 |
1190 ForInStatement* ForInStatement::ReadFrom(Reader* reader, bool is_async) { | 1376 ForInStatement* ForInStatement::ReadFrom(Reader* reader, bool is_async) { |
1191 TRACE_READ_OFFSET(); | 1377 TRACE_READ_OFFSET(); |
1192 VariableScope<ReaderHelper> vars(reader->helper()); | 1378 VariableScope<ReaderHelper> vars(reader->helper()); |
1193 PositionScope scope(reader); | 1379 PositionScope scope(reader); |
1194 | 1380 |
1195 ForInStatement* forinstmt = new ForInStatement(); | 1381 ForInStatement* forinstmt = new ForInStatement(); |
1196 forinstmt->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 1382 forinstmt->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
1197 forinstmt->is_async_ = is_async; | 1383 forinstmt->is_async_ = is_async; |
1198 forinstmt->position_ = reader->ReadPosition(); | 1384 forinstmt->position_ = reader->ReadPosition(); |
1199 forinstmt->variable_ = VariableDeclaration::ReadFromImpl(reader, false); | 1385 forinstmt->variable_ = VariableDeclaration::ReadFromImpl(reader, false); |
1200 forinstmt->iterable_ = Expression::ReadFrom(reader); | 1386 forinstmt->iterable_ = Expression::ReadFrom(reader); |
1201 forinstmt->body_ = Statement::ReadFrom(reader); | 1387 forinstmt->body_ = Statement::ReadFrom(reader); |
1202 forinstmt->end_position_ = reader->max_position(); | 1388 forinstmt->end_position_ = reader->max_position(); |
1203 if (!forinstmt->position_.IsReal()) { | 1389 if (!forinstmt->position_.IsReal()) { |
1204 forinstmt->position_ = reader->min_position(); | 1390 forinstmt->position_ = reader->min_position(); |
1205 } | 1391 } |
1206 forinstmt->variable_->set_end_position(forinstmt->position_); | 1392 forinstmt->variable_->set_end_position(forinstmt->position_); |
1207 | 1393 |
1394 forinstmt->cannot_stream_ = forinstmt->variable_->cannot_stream() || | |
1395 forinstmt->iterable_->cannot_stream() || | |
1396 forinstmt->body_->cannot_stream(); | |
1397 | |
1208 return forinstmt; | 1398 return forinstmt; |
1209 } | 1399 } |
1210 | 1400 |
1211 | 1401 |
1212 SwitchStatement* SwitchStatement::ReadFrom(Reader* reader) { | 1402 SwitchStatement* SwitchStatement::ReadFrom(Reader* reader) { |
1213 TRACE_READ_OFFSET(); | 1403 TRACE_READ_OFFSET(); |
1214 SwitchCaseScope<ReaderHelper> scope(reader->helper()); | |
1215 SwitchStatement* stmt = new SwitchStatement(); | 1404 SwitchStatement* stmt = new SwitchStatement(); |
1405 stmt->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | |
1216 stmt->condition_ = Expression::ReadFrom(reader); | 1406 stmt->condition_ = Expression::ReadFrom(reader); |
1217 // We need to explicitly create empty [SwitchCase]s first in order to add them | |
1218 // to the [SwitchCaseScope]. This is necessary since a [Statement] in a switch | |
1219 // case can refer to one defined later on. | |
1220 int count = reader->ReadUInt(); | 1407 int count = reader->ReadUInt(); |
1408 stmt->cases_.EnsureInitialized(count); | |
1221 for (intptr_t i = 0; i < count; i++) { | 1409 for (intptr_t i = 0; i < count; i++) { |
1222 SwitchCase* sc = stmt->cases_.GetOrCreate<SwitchCase>(i); | 1410 SwitchCase* sc = stmt->cases_.GetOrCreate<SwitchCase>(i); |
1223 reader->helper()->switch_cases().Push(sc); | |
1224 } | |
1225 for (intptr_t i = 0; i < count; i++) { | |
1226 SwitchCase* sc = stmt->cases_[i]; | |
1227 sc->ReadFrom(reader); | 1411 sc->ReadFrom(reader); |
1228 } | 1412 } |
1413 | |
1414 stmt->cannot_stream_ = | |
1415 stmt->condition_->cannot_stream() || stmt->cases_.cannot_stream(); | |
1416 | |
1229 return stmt; | 1417 return stmt; |
1230 } | 1418 } |
1231 | 1419 |
1232 | 1420 |
1233 SwitchCase* SwitchCase::ReadFrom(Reader* reader) { | 1421 SwitchCase* SwitchCase::ReadFrom(Reader* reader) { |
1234 TRACE_READ_OFFSET(); | 1422 TRACE_READ_OFFSET(); |
1235 expressions_.ReadFromStatic<Expression>(reader); | 1423 int length = reader->ReadListLength(); |
1236 for (intptr_t i = 0; i < expressions_.length(); ++i) { | 1424 expressions_.EnsureInitialized(length); |
1237 expressions_[i]->set_position(reader->ReadPosition()); | 1425 |
1426 for (intptr_t i = 0; i < length; i++) { | |
1427 ASSERT(expressions_[i] == NULL); | |
1428 TokenPosition position = reader->ReadPosition(); | |
1429 expressions_[i] = Expression::ReadFrom(reader); | |
1430 expressions_[i]->set_position(position); | |
1238 } | 1431 } |
1239 is_default_ = reader->ReadBool(); | 1432 is_default_ = reader->ReadBool(); |
1240 body_ = Statement::ReadFrom(reader); | 1433 body_ = Statement::ReadFrom(reader); |
1434 | |
1435 cannot_stream_ = expressions_.cannot_stream() || body_->cannot_stream(); | |
1436 | |
1241 return this; | 1437 return this; |
1242 } | 1438 } |
1243 | 1439 |
1244 | 1440 |
1245 ContinueSwitchStatement* ContinueSwitchStatement::ReadFrom(Reader* reader) { | 1441 ContinueSwitchStatement* ContinueSwitchStatement::ReadFrom(Reader* reader) { |
1246 TRACE_READ_OFFSET(); | 1442 TRACE_READ_OFFSET(); |
1247 ContinueSwitchStatement* stmt = new ContinueSwitchStatement(); | 1443 ContinueSwitchStatement* stmt = new ContinueSwitchStatement(); |
1248 stmt->target_ = reader->helper()->switch_cases().Lookup(reader->ReadUInt()); | 1444 stmt->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
1445 stmt->target_index_ = reader->ReadUInt(); | |
1446 | |
1249 return stmt; | 1447 return stmt; |
1250 } | 1448 } |
1251 | 1449 |
1252 | 1450 |
1253 IfStatement* IfStatement::ReadFrom(Reader* reader) { | 1451 IfStatement* IfStatement::ReadFrom(Reader* reader) { |
1254 TRACE_READ_OFFSET(); | 1452 TRACE_READ_OFFSET(); |
1255 IfStatement* ifstmt = new IfStatement(); | 1453 IfStatement* ifstmt = new IfStatement(); |
1454 ifstmt->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | |
1256 ifstmt->condition_ = Expression::ReadFrom(reader); | 1455 ifstmt->condition_ = Expression::ReadFrom(reader); |
1257 ifstmt->then_ = Statement::ReadFrom(reader); | 1456 ifstmt->then_ = Statement::ReadFrom(reader); |
1258 ifstmt->otherwise_ = Statement::ReadFrom(reader); | 1457 ifstmt->otherwise_ = Statement::ReadFrom(reader); |
1458 | |
1459 ifstmt->cannot_stream_ = ifstmt->condition_->cannot_stream() || | |
1460 ifstmt->then_->cannot_stream() || | |
1461 ifstmt->otherwise_->cannot_stream(); | |
1462 | |
1259 return ifstmt; | 1463 return ifstmt; |
1260 } | 1464 } |
1261 | 1465 |
1262 | 1466 |
1263 ReturnStatement* ReturnStatement::ReadFrom(Reader* reader) { | 1467 ReturnStatement* ReturnStatement::ReadFrom(Reader* reader) { |
1264 TRACE_READ_OFFSET(); | 1468 TRACE_READ_OFFSET(); |
1265 ReturnStatement* ret = new ReturnStatement(); | 1469 ReturnStatement* ret = new ReturnStatement(); |
1470 ret->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | |
1266 ret->position_ = reader->ReadPosition(); | 1471 ret->position_ = reader->ReadPosition(); |
1267 ret->expression_ = reader->ReadOptional<Expression>(); | 1472 ret->expression_ = reader->ReadOptional<Expression>(); |
1473 | |
1474 ret->cannot_stream_ = | |
1475 (ret->expression_ != NULL && ret->expression_->cannot_stream()); | |
1476 | |
1268 return ret; | 1477 return ret; |
1269 } | 1478 } |
1270 | 1479 |
1271 | 1480 |
1272 TryCatch* TryCatch::ReadFrom(Reader* reader) { | 1481 TryCatch* TryCatch::ReadFrom(Reader* reader) { |
1273 TRACE_READ_OFFSET(); | 1482 TRACE_READ_OFFSET(); |
1274 PositionScope scope(reader); | 1483 PositionScope scope(reader); |
1275 | 1484 |
1276 TryCatch* tc = new TryCatch(); | 1485 TryCatch* tc = new TryCatch(); |
1486 tc->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | |
1277 tc->body_ = Statement::ReadFrom(reader); | 1487 tc->body_ = Statement::ReadFrom(reader); |
1488 reader->ReadBool(); // whether any catch needs a stacktrace. | |
1278 tc->catches_.ReadFromStatic<Catch>(reader); | 1489 tc->catches_.ReadFromStatic<Catch>(reader); |
1279 tc->position_ = reader->min_position(); | 1490 tc->position_ = reader->min_position(); |
1280 | 1491 |
1492 tc->cannot_stream_ = | |
1493 tc->body_->cannot_stream() || tc->catches_.cannot_stream(); | |
1494 | |
1281 return tc; | 1495 return tc; |
1282 } | 1496 } |
1283 | 1497 |
1284 | 1498 |
1285 Catch* Catch::ReadFrom(Reader* reader) { | 1499 Catch* Catch::ReadFrom(Reader* reader) { |
1286 TRACE_READ_OFFSET(); | 1500 TRACE_READ_OFFSET(); |
1287 VariableScope<ReaderHelper> vars(reader->helper()); | 1501 VariableScope<ReaderHelper> vars(reader->helper()); |
1288 PositionScope scope(reader); | 1502 PositionScope scope(reader); |
1289 | 1503 |
1290 Catch* c = new Catch(); | 1504 Catch* c = new Catch(); |
1291 c->kernel_offset_ = reader->offset(); // Catch has no tag. | 1505 c->kernel_offset_ = reader->offset(); // Catch has no tag. |
1292 c->guard_ = DartType::ReadFrom(reader); | 1506 c->guard_ = DartType::ReadFrom(reader); |
1293 c->exception_ = | 1507 c->exception_ = |
1294 reader->ReadOptional<VariableDeclaration, VariableDeclarationImpl>(); | 1508 reader->ReadOptional<VariableDeclaration, VariableDeclarationImpl>(); |
1295 c->stack_trace_ = | 1509 c->stack_trace_ = |
1296 reader->ReadOptional<VariableDeclaration, VariableDeclarationImpl>(); | 1510 reader->ReadOptional<VariableDeclaration, VariableDeclarationImpl>(); |
1297 c->body_ = Statement::ReadFrom(reader); | 1511 c->body_ = Statement::ReadFrom(reader); |
1298 c->end_position_ = reader->max_position(); | 1512 c->end_position_ = reader->max_position(); |
1299 c->position_ = reader->min_position(); | 1513 c->position_ = reader->min_position(); |
1300 | 1514 |
1515 c->cannot_stream_ = c->body_->cannot_stream(); | |
1516 | |
1301 return c; | 1517 return c; |
1302 } | 1518 } |
1303 | 1519 |
1304 | 1520 |
1305 TryFinally* TryFinally::ReadFrom(Reader* reader) { | 1521 TryFinally* TryFinally::ReadFrom(Reader* reader) { |
1306 TRACE_READ_OFFSET(); | 1522 TRACE_READ_OFFSET(); |
1307 TryFinally* tf = new TryFinally(); | 1523 TryFinally* tf = new TryFinally(); |
1524 tf->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | |
1308 tf->body_ = Statement::ReadFrom(reader); | 1525 tf->body_ = Statement::ReadFrom(reader); |
1309 tf->finalizer_ = Statement::ReadFrom(reader); | 1526 tf->finalizer_ = Statement::ReadFrom(reader); |
1527 | |
1528 tf->cannot_stream_ = | |
1529 tf->body_->cannot_stream() || tf->finalizer_->cannot_stream(); | |
1530 | |
1310 return tf; | 1531 return tf; |
1311 } | 1532 } |
1312 | 1533 |
1313 | 1534 |
1314 YieldStatement* YieldStatement::ReadFrom(Reader* reader) { | 1535 YieldStatement* YieldStatement::ReadFrom(Reader* reader) { |
1315 TRACE_READ_OFFSET(); | 1536 TRACE_READ_OFFSET(); |
1316 YieldStatement* stmt = new YieldStatement(); | 1537 YieldStatement* stmt = new YieldStatement(); |
1538 stmt->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | |
1317 stmt->position_ = reader->ReadPosition(); | 1539 stmt->position_ = reader->ReadPosition(); |
1318 reader->record_yield_token_position(stmt->position_); | 1540 reader->record_yield_token_position(stmt->position_); |
1319 stmt->flags_ = reader->ReadByte(); | 1541 stmt->flags_ = reader->ReadByte(); |
1320 stmt->expression_ = Expression::ReadFrom(reader); | 1542 stmt->expression_ = Expression::ReadFrom(reader); |
1543 | |
1544 stmt->cannot_stream_ = stmt->expression_->cannot_stream(); | |
1545 | |
1321 return stmt; | 1546 return stmt; |
1322 } | 1547 } |
1323 | 1548 |
1324 | 1549 |
1325 VariableDeclaration* VariableDeclaration::ReadFrom(Reader* reader) { | 1550 VariableDeclaration* VariableDeclaration::ReadFrom(Reader* reader) { |
1326 TRACE_READ_OFFSET(); | 1551 TRACE_READ_OFFSET(); |
1327 Tag tag = reader->ReadTag(); | 1552 Tag tag = reader->ReadTag(); |
1328 ASSERT(tag == kVariableDeclaration); | 1553 ASSERT(tag == kVariableDeclaration); |
1329 return VariableDeclaration::ReadFromImpl(reader, true); | 1554 return VariableDeclaration::ReadFromImpl(reader, true); |
1330 } | 1555 } |
(...skipping 14 matching lines...) Expand all Loading... | |
1345 decl->type_ = DartType::ReadFrom(reader); | 1570 decl->type_ = DartType::ReadFrom(reader); |
1346 decl->initializer_ = reader->ReadOptional<Expression>(); | 1571 decl->initializer_ = reader->ReadOptional<Expression>(); |
1347 | 1572 |
1348 // Go to next token position so it ends *after* the last potentially | 1573 // Go to next token position so it ends *after* the last potentially |
1349 // debuggable position in the initializer. | 1574 // debuggable position in the initializer. |
1350 TokenPosition position = reader->max_position(); | 1575 TokenPosition position = reader->max_position(); |
1351 if (position.IsReal()) position.Next(); | 1576 if (position.IsReal()) position.Next(); |
1352 decl->end_position_ = position; | 1577 decl->end_position_ = position; |
1353 reader->helper()->variables().Push(decl); | 1578 reader->helper()->variables().Push(decl); |
1354 | 1579 |
1580 decl->cannot_stream_ = | |
1581 decl->initializer_ != NULL && decl->initializer_->cannot_stream(); | |
1582 | |
1355 return decl; | 1583 return decl; |
1356 } | 1584 } |
1357 | 1585 |
1358 | 1586 |
1359 FunctionDeclaration* FunctionDeclaration::ReadFrom(Reader* reader) { | 1587 FunctionDeclaration* FunctionDeclaration::ReadFrom(Reader* reader) { |
1360 TRACE_READ_OFFSET(); | 1588 TRACE_READ_OFFSET(); |
1361 FunctionDeclaration* decl = new FunctionDeclaration(); | 1589 FunctionDeclaration* decl = new FunctionDeclaration(); |
1362 decl->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 1590 decl->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
1363 decl->position_ = reader->ReadPosition(); | 1591 decl->position_ = reader->ReadPosition(); |
1364 decl->variable_ = VariableDeclaration::ReadFromImpl(reader, false); | 1592 decl->variable_ = VariableDeclaration::ReadFromImpl(reader, false); |
1365 VariableScope<ReaderHelper> parameters(reader->helper()); | 1593 VariableScope<ReaderHelper> parameters(reader->helper()); |
1366 decl->function_ = FunctionNode::ReadFrom(reader); | 1594 decl->function_ = FunctionNode::ReadFrom(reader); |
1595 | |
1596 decl->cannot_stream_ = decl->variable_->cannot_stream() || | |
1597 decl->function_->cannot_stream() || true; | |
1598 | |
1367 return decl; | 1599 return decl; |
1368 } | 1600 } |
1369 | 1601 |
1370 | 1602 |
1371 Name* Name::ReadFrom(Reader* reader) { | 1603 Name* Name::ReadFrom(Reader* reader) { |
1372 intptr_t name_index = reader->ReadUInt(); | 1604 intptr_t name_index = reader->ReadUInt(); |
1373 if ((reader->StringLength(name_index) >= 1) && | 1605 if ((reader->StringLength(name_index) >= 1) && |
1374 (reader->CharacterAt(name_index, 0) == '_')) { | 1606 (reader->CharacterAt(name_index, 0) == '_')) { |
1375 CanonicalName* library_reference = reader->ReadCanonicalNameReference(); | 1607 CanonicalName* library_reference = reader->ReadCanonicalNameReference(); |
1376 return new Name(name_index, library_reference); | 1608 return new Name(name_index, library_reference); |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1457 return type; | 1689 return type; |
1458 } | 1690 } |
1459 | 1691 |
1460 | 1692 |
1461 FunctionType* FunctionType::ReadFrom(Reader* reader) { | 1693 FunctionType* FunctionType::ReadFrom(Reader* reader) { |
1462 TRACE_READ_OFFSET(); | 1694 TRACE_READ_OFFSET(); |
1463 FunctionType* type = new FunctionType(); | 1695 FunctionType* type = new FunctionType(); |
1464 TypeParameterScope<ReaderHelper> scope(reader->helper()); | 1696 TypeParameterScope<ReaderHelper> scope(reader->helper()); |
1465 type->type_parameters().ReadFrom(reader); | 1697 type->type_parameters().ReadFrom(reader); |
1466 type->required_parameter_count_ = reader->ReadUInt(); | 1698 type->required_parameter_count_ = reader->ReadUInt(); |
1699 intptr_t total_parameter_count = reader->ReadUInt(); | |
1467 type->positional_parameters().ReadFromStatic<DartType>(reader); | 1700 type->positional_parameters().ReadFromStatic<DartType>(reader); |
1468 type->named_parameters().ReadFromStatic<NamedParameter>(reader); | 1701 type->named_parameters().ReadFromStatic<NamedParameter>(reader); |
1702 ASSERT(type->positional_parameters().length() + | |
1703 type->named_parameters().length() == | |
1704 total_parameter_count); | |
1469 type->return_type_ = DartType::ReadFrom(reader); | 1705 type->return_type_ = DartType::ReadFrom(reader); |
1470 return type; | 1706 return type; |
1471 } | 1707 } |
1472 | 1708 |
1473 | 1709 |
1474 FunctionType* FunctionType::ReadFrom(Reader* reader, bool _is_simple_) { | 1710 FunctionType* FunctionType::ReadFrom(Reader* reader, bool _is_simple_) { |
1475 TRACE_READ_OFFSET(); | 1711 TRACE_READ_OFFSET(); |
1476 FunctionType* type = new FunctionType(); | 1712 FunctionType* type = new FunctionType(); |
1477 ASSERT(_is_simple_); | 1713 ASSERT(_is_simple_); |
1478 type->positional_parameters().ReadFromStatic<DartType>(reader); | 1714 type->positional_parameters().ReadFromStatic<DartType>(reader); |
1479 type->required_parameter_count_ = type->positional_parameters().length(); | 1715 type->required_parameter_count_ = type->positional_parameters().length(); |
1480 type->return_type_ = DartType::ReadFrom(reader); | 1716 type->return_type_ = DartType::ReadFrom(reader); |
1481 return type; | 1717 return type; |
1482 } | 1718 } |
1483 | 1719 |
1484 | 1720 |
1485 TypeParameterType* TypeParameterType::ReadFrom(Reader* reader) { | 1721 TypeParameterType* TypeParameterType::ReadFrom(Reader* reader) { |
1486 TRACE_READ_OFFSET(); | 1722 TRACE_READ_OFFSET(); |
1487 TypeParameterType* type = new TypeParameterType(); | 1723 TypeParameterType* type = new TypeParameterType(); |
1488 type->parameter_ = | 1724 type->parameter_ = |
1489 reader->helper()->type_parameters().Lookup(reader->ReadUInt()); | 1725 reader->helper()->type_parameters().Lookup(reader->ReadUInt()); |
1726 reader->ReadUInt(); // binary offset of parameter | |
1490 return type; | 1727 return type; |
1491 } | 1728 } |
1492 | 1729 |
1493 | 1730 |
1494 VectorType* VectorType::ReadFrom(Reader* reader) { | 1731 VectorType* VectorType::ReadFrom(Reader* reader) { |
1495 TRACE_READ_OFFSET(); | 1732 TRACE_READ_OFFSET(); |
1496 VectorType* type = new VectorType(); | 1733 VectorType* type = new VectorType(); |
1497 return type; | 1734 return type; |
1498 } | 1735 } |
1499 | 1736 |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1543 | 1780 |
1544 int libraries = reader->ReadUInt(); | 1781 int libraries = reader->ReadUInt(); |
1545 program->libraries().EnsureInitialized(libraries); | 1782 program->libraries().EnsureInitialized(libraries); |
1546 for (intptr_t i = 0; i < libraries; i++) { | 1783 for (intptr_t i = 0; i < libraries; i++) { |
1547 program->libraries().GetOrCreate<Library>(i)->ReadFrom(reader); | 1784 program->libraries().GetOrCreate<Library>(i)->ReadFrom(reader); |
1548 } | 1785 } |
1549 | 1786 |
1550 program->main_method_reference_ = | 1787 program->main_method_reference_ = |
1551 Reference::ReadMemberFrom(reader, /*allow_null=*/true); | 1788 Reference::ReadMemberFrom(reader, /*allow_null=*/true); |
1552 | 1789 |
1790 program->cannot_stream_ = true; | |
1791 | |
1553 return program; | 1792 return program; |
1554 } | 1793 } |
1555 | 1794 |
1556 | 1795 |
1557 FunctionNode* FunctionNode::ReadFrom(Reader* reader) { | 1796 FunctionNode* FunctionNode::ReadFrom(Reader* reader) { |
1558 TRACE_READ_OFFSET(); | 1797 TRACE_READ_OFFSET(); |
1559 TypeParameterScope<ReaderHelper> scope(reader->helper()); | 1798 TypeParameterScope<ReaderHelper> scope(reader->helper()); |
1560 | 1799 |
1561 FunctionNode* function = new FunctionNode(); | 1800 FunctionNode* function = new FunctionNode(); |
1562 function->kernel_offset_ = reader->offset(); // FunctionNode has no tag. | 1801 function->kernel_offset_ = reader->offset(); // FunctionNode has no tag. |
1563 function->position_ = reader->ReadPosition(); | 1802 function->position_ = reader->ReadPosition(); |
1564 function->end_position_ = reader->ReadPosition(); | 1803 function->end_position_ = reader->ReadPosition(); |
1565 function->async_marker_ = | 1804 function->async_marker_ = |
1566 static_cast<FunctionNode::AsyncMarker>(reader->ReadByte()); | 1805 static_cast<FunctionNode::AsyncMarker>(reader->ReadByte()); |
1567 function->dart_async_marker_ = | 1806 function->dart_async_marker_ = |
1568 static_cast<FunctionNode::AsyncMarker>(reader->ReadByte()); | 1807 static_cast<FunctionNode::AsyncMarker>(reader->ReadByte()); |
1569 function->type_parameters().ReadFrom(reader); | 1808 function->type_parameters().ReadFrom(reader); |
1570 function->required_parameter_count_ = reader->ReadUInt(); | 1809 function->required_parameter_count_ = reader->ReadUInt(); |
1571 function->positional_parameters().ReadFromStatic<VariableDeclarationImpl>( | 1810 function->positional_parameters().ReadFromStatic<VariableDeclarationImpl>( |
1572 reader); | 1811 reader); |
1573 function->named_parameters().ReadFromStatic<VariableDeclarationImpl>(reader); | 1812 function->named_parameters().ReadFromStatic<VariableDeclarationImpl>(reader); |
1574 function->return_type_ = DartType::ReadFrom(reader); | 1813 function->return_type_ = DartType::ReadFrom(reader); |
1575 | 1814 |
1576 LabelScope<ReaderHelper, BlockStack<LabeledStatement> > labels( | 1815 LabelScope<ReaderHelper, BlockStack<LabeledStatement> > labels( |
1577 reader->helper()); | 1816 reader->helper()); |
1578 VariableScope<ReaderHelper> vars(reader->helper()); | 1817 VariableScope<ReaderHelper> vars(reader->helper()); |
1579 function->body_ = reader->ReadOptional<Statement>(); | 1818 function->body_ = reader->ReadOptional<Statement>(); |
1819 | |
1820 function->cannot_stream_ = | |
1821 function->positional_parameters_.cannot_stream() || | |
1822 function->named_parameters_.cannot_stream() || | |
1823 (function->body_ != NULL && function->body_->cannot_stream()); | |
1824 | |
1580 return function; | 1825 return function; |
1581 } | 1826 } |
1582 | 1827 |
1583 | 1828 |
1584 TypeParameter* TypeParameter::ReadFrom(Reader* reader) { | 1829 TypeParameter* TypeParameter::ReadFrom(Reader* reader) { |
1585 TRACE_READ_OFFSET(); | 1830 TRACE_READ_OFFSET(); |
1831 kernel_offset_ = reader->offset(); | |
1586 name_index_ = reader->ReadUInt(); | 1832 name_index_ = reader->ReadUInt(); |
1587 bound_ = DartType::ReadFrom(reader); | 1833 bound_ = DartType::ReadFrom(reader); |
1588 return this; | 1834 return this; |
1589 } | 1835 } |
1590 | 1836 |
1591 | 1837 |
1592 } // namespace kernel | 1838 } // namespace kernel |
1593 | 1839 |
1594 | 1840 |
1595 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer, | 1841 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer, |
1596 intptr_t buffer_length) { | 1842 intptr_t buffer_length) { |
1597 kernel::Reader reader(buffer, buffer_length); | 1843 kernel::Reader reader(buffer, buffer_length); |
1598 return kernel::Program::ReadFrom(&reader); | 1844 return kernel::Program::ReadFrom(&reader); |
1599 } | 1845 } |
1600 | 1846 |
1601 | 1847 |
1602 } // namespace dart | 1848 } // namespace dart |
1603 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 1849 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
OLD | NEW |