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