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