| 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 "platform/globals.h" | 6 #include "platform/globals.h" |
| 7 #include "vm/flags.h" | 7 #include "vm/flags.h" |
| 8 #include "vm/growable_array.h" | 8 #include "vm/growable_array.h" |
| 9 #include "vm/kernel.h" | 9 #include "vm/kernel.h" |
| 10 #include "vm/kernel_to_il.h" | 10 #include "vm/kernel_to_il.h" |
| (...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 321 MallocGrowableArray<CanonicalName*> canonical_names_; | 321 MallocGrowableArray<CanonicalName*> canonical_names_; |
| 322 BlockStack<VariableDeclaration> scope_; | 322 BlockStack<VariableDeclaration> scope_; |
| 323 BlockStack<TypeParameter> type_parameters_; | 323 BlockStack<TypeParameter> type_parameters_; |
| 324 BlockStack<SwitchCase> switch_cases_; | 324 BlockStack<SwitchCase> switch_cases_; |
| 325 BlockStack<LabeledStatement>* labels_; | 325 BlockStack<LabeledStatement>* labels_; |
| 326 }; | 326 }; |
| 327 | 327 |
| 328 | 328 |
| 329 class Reader { | 329 class Reader { |
| 330 public: | 330 public: |
| 331 Reader(const uint8_t* buffer, int64_t size) | 331 Reader(const uint8_t* buffer, intptr_t size) |
| 332 : buffer_(buffer), size_(size), offset_(0) {} | 332 : buffer_(buffer), size_(size), offset_(0) {} |
| 333 | 333 |
| 334 uint32_t ReadUInt32() { | 334 uint32_t ReadUInt32() { |
| 335 ASSERT(offset_ + 4 <= size_); | 335 ASSERT(offset_ + 4 <= size_); |
| 336 | 336 |
| 337 uint32_t value = (buffer_[offset_ + 0] << 24) | | 337 uint32_t value = (buffer_[offset_ + 0] << 24) | |
| 338 (buffer_[offset_ + 1] << 16) | | 338 (buffer_[offset_ + 1] << 16) | |
| 339 (buffer_[offset_ + 2] << 8) | (buffer_[offset_ + 3] << 0); | 339 (buffer_[offset_ + 2] << 8) | (buffer_[offset_ + 3] << 0); |
| 340 offset_ += 4; | 340 offset_ += 4; |
| 341 return value; | 341 return value; |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 494 return name; | 494 return name; |
| 495 } | 495 } |
| 496 | 496 |
| 497 CanonicalName* ReadDefiningCanonicalNameReference(LinkedNode* node_to_link) { | 497 CanonicalName* ReadDefiningCanonicalNameReference(LinkedNode* node_to_link) { |
| 498 CanonicalName* name = ReadCanonicalNameReference(); | 498 CanonicalName* name = ReadCanonicalNameReference(); |
| 499 ASSERT(name != NULL); | 499 ASSERT(name != NULL); |
| 500 name->BindTo(node_to_link); | 500 name->BindTo(node_to_link); |
| 501 return name; | 501 return name; |
| 502 } | 502 } |
| 503 | 503 |
| 504 intptr_t offset() { return offset_; } |
| 505 |
| 504 private: | 506 private: |
| 505 const uint8_t* buffer_; | 507 const uint8_t* buffer_; |
| 506 int64_t size_; | 508 intptr_t size_; |
| 507 int64_t offset_; | 509 intptr_t offset_; |
| 508 ReaderHelper builder_; | 510 ReaderHelper builder_; |
| 509 TokenPosition max_position_; | 511 TokenPosition max_position_; |
| 510 TokenPosition min_position_; | 512 TokenPosition min_position_; |
| 511 intptr_t current_script_id_; | 513 intptr_t current_script_id_; |
| 512 | 514 |
| 513 friend class PositionScope; | 515 friend class PositionScope; |
| 514 }; | 516 }; |
| 515 | 517 |
| 516 | 518 |
| 517 // A helper class that resets the readers min and max positions both upon | 519 // A helper class that resets the readers min and max positions both upon |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 629 TRACE_READ_OFFSET(); | 631 TRACE_READ_OFFSET(); |
| 630 return String::ReadFromImpl(reader); | 632 return String::ReadFromImpl(reader); |
| 631 } | 633 } |
| 632 }; | 634 }; |
| 633 | 635 |
| 634 | 636 |
| 635 class VariableDeclarationImpl { | 637 class VariableDeclarationImpl { |
| 636 public: | 638 public: |
| 637 static VariableDeclaration* ReadFrom(Reader* reader) { | 639 static VariableDeclaration* ReadFrom(Reader* reader) { |
| 638 TRACE_READ_OFFSET(); | 640 TRACE_READ_OFFSET(); |
| 639 return VariableDeclaration::ReadFromImpl(reader); | 641 return VariableDeclaration::ReadFromImpl(reader, false); |
| 640 } | 642 } |
| 641 }; | 643 }; |
| 642 | 644 |
| 643 | 645 |
| 644 String* String::ReadFrom(Reader* reader) { | 646 String* String::ReadFrom(Reader* reader) { |
| 645 TRACE_READ_OFFSET(); | 647 TRACE_READ_OFFSET(); |
| 646 return Reference::ReadStringFrom(reader); | 648 return Reference::ReadStringFrom(reader); |
| 647 } | 649 } |
| 648 | 650 |
| 649 | 651 |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 796 | 798 |
| 797 | 799 |
| 798 String* Reference::ReadStringFrom(Reader* reader) { | 800 String* Reference::ReadStringFrom(Reader* reader) { |
| 799 int index = reader->ReadUInt(); | 801 int index = reader->ReadUInt(); |
| 800 return reader->helper()->program()->string_table().strings()[index]; | 802 return reader->helper()->program()->string_table().strings()[index]; |
| 801 } | 803 } |
| 802 | 804 |
| 803 | 805 |
| 804 Field* Field::ReadFrom(Reader* reader) { | 806 Field* Field::ReadFrom(Reader* reader) { |
| 805 TRACE_READ_OFFSET(); | 807 TRACE_READ_OFFSET(); |
| 808 kernel_offset_ = reader->offset(); // Notice the ReadTag() below. |
| 806 Tag tag = reader->ReadTag(); | 809 Tag tag = reader->ReadTag(); |
| 807 ASSERT(tag == kField); | 810 ASSERT(tag == kField); |
| 808 | 811 |
| 809 reader->ReadDefiningCanonicalNameReference(this); | 812 reader->ReadDefiningCanonicalNameReference(this); |
| 810 position_ = reader->ReadPosition(false); | 813 position_ = reader->ReadPosition(false); |
| 811 end_position_ = reader->ReadPosition(false); | 814 end_position_ = reader->ReadPosition(false); |
| 812 flags_ = reader->ReadFlags(); | 815 flags_ = reader->ReadFlags(); |
| 813 name_ = Name::ReadFrom(reader); | 816 name_ = Name::ReadFrom(reader); |
| 814 source_uri_index_ = reader->ReadUInt(); | 817 source_uri_index_ = reader->ReadUInt(); |
| 815 reader->set_current_script_id(source_uri_index_); | 818 reader->set_current_script_id(source_uri_index_); |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 913 RedirectingInitializer* init = new RedirectingInitializer(); | 916 RedirectingInitializer* init = new RedirectingInitializer(); |
| 914 init->target_reference_ = Reference::ReadMemberFrom(reader); | 917 init->target_reference_ = Reference::ReadMemberFrom(reader); |
| 915 init->arguments_ = Arguments::ReadFrom(reader); | 918 init->arguments_ = Arguments::ReadFrom(reader); |
| 916 return init; | 919 return init; |
| 917 } | 920 } |
| 918 | 921 |
| 919 | 922 |
| 920 LocalInitializer* LocalInitializer::ReadFromImpl(Reader* reader) { | 923 LocalInitializer* LocalInitializer::ReadFromImpl(Reader* reader) { |
| 921 TRACE_READ_OFFSET(); | 924 TRACE_READ_OFFSET(); |
| 922 LocalInitializer* init = new LocalInitializer(); | 925 LocalInitializer* init = new LocalInitializer(); |
| 923 init->variable_ = VariableDeclaration::ReadFromImpl(reader); | 926 init->variable_ = VariableDeclaration::ReadFromImpl(reader, false); |
| 924 return init; | 927 return init; |
| 925 } | 928 } |
| 926 | 929 |
| 927 | 930 |
| 928 Expression* Expression::ReadFrom(Reader* reader) { | 931 Expression* Expression::ReadFrom(Reader* reader) { |
| 929 TRACE_READ_OFFSET(); | 932 TRACE_READ_OFFSET(); |
| 930 uint8_t payload = 0; | 933 uint8_t payload = 0; |
| 931 Tag tag = reader->ReadTag(&payload); | 934 Tag tag = reader->ReadTag(&payload); |
| 932 switch (tag) { | 935 switch (tag) { |
| 933 case kInvalidExpression: | 936 case kInvalidExpression: |
| (...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1381 AwaitExpression* await = new AwaitExpression(); | 1384 AwaitExpression* await = new AwaitExpression(); |
| 1382 await->operand_ = Expression::ReadFrom(reader); | 1385 await->operand_ = Expression::ReadFrom(reader); |
| 1383 return await; | 1386 return await; |
| 1384 } | 1387 } |
| 1385 | 1388 |
| 1386 | 1389 |
| 1387 FunctionExpression* FunctionExpression::ReadFrom(Reader* reader) { | 1390 FunctionExpression* FunctionExpression::ReadFrom(Reader* reader) { |
| 1388 TRACE_READ_OFFSET(); | 1391 TRACE_READ_OFFSET(); |
| 1389 VariableScope<ReaderHelper> parameters(reader->helper()); | 1392 VariableScope<ReaderHelper> parameters(reader->helper()); |
| 1390 FunctionExpression* expr = new FunctionExpression(); | 1393 FunctionExpression* expr = new FunctionExpression(); |
| 1394 expr->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
| 1391 expr->function_ = FunctionNode::ReadFrom(reader); | 1395 expr->function_ = FunctionNode::ReadFrom(reader); |
| 1392 return expr; | 1396 return expr; |
| 1393 } | 1397 } |
| 1394 | 1398 |
| 1395 | 1399 |
| 1396 Let* Let::ReadFrom(Reader* reader) { | 1400 Let* Let::ReadFrom(Reader* reader) { |
| 1397 TRACE_READ_OFFSET(); | 1401 TRACE_READ_OFFSET(); |
| 1398 VariableScope<ReaderHelper> vars(reader->helper()); | 1402 VariableScope<ReaderHelper> vars(reader->helper()); |
| 1399 PositionScope scope(reader); | 1403 PositionScope scope(reader); |
| 1400 | 1404 |
| 1401 Let* let = new Let(); | 1405 Let* let = new Let(); |
| 1402 let->variable_ = VariableDeclaration::ReadFromImpl(reader); | 1406 let->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
| 1407 let->variable_ = VariableDeclaration::ReadFromImpl(reader, false); |
| 1403 let->body_ = Expression::ReadFrom(reader); | 1408 let->body_ = Expression::ReadFrom(reader); |
| 1404 let->position_ = reader->min_position(); | 1409 let->position_ = reader->min_position(); |
| 1405 let->end_position_ = reader->max_position(); | 1410 let->end_position_ = reader->max_position(); |
| 1406 | 1411 |
| 1407 return let; | 1412 return let; |
| 1408 } | 1413 } |
| 1409 | 1414 |
| 1410 | 1415 |
| 1411 Statement* Statement::ReadFrom(Reader* reader) { | 1416 Statement* Statement::ReadFrom(Reader* reader) { |
| 1412 TRACE_READ_OFFSET(); | 1417 TRACE_READ_OFFSET(); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1444 return IfStatement::ReadFrom(reader); | 1449 return IfStatement::ReadFrom(reader); |
| 1445 case kReturnStatement: | 1450 case kReturnStatement: |
| 1446 return ReturnStatement::ReadFrom(reader); | 1451 return ReturnStatement::ReadFrom(reader); |
| 1447 case kTryCatch: | 1452 case kTryCatch: |
| 1448 return TryCatch::ReadFrom(reader); | 1453 return TryCatch::ReadFrom(reader); |
| 1449 case kTryFinally: | 1454 case kTryFinally: |
| 1450 return TryFinally::ReadFrom(reader); | 1455 return TryFinally::ReadFrom(reader); |
| 1451 case kYieldStatement: | 1456 case kYieldStatement: |
| 1452 return YieldStatement::ReadFrom(reader); | 1457 return YieldStatement::ReadFrom(reader); |
| 1453 case kVariableDeclaration: | 1458 case kVariableDeclaration: |
| 1454 return VariableDeclaration::ReadFromImpl(reader); | 1459 return VariableDeclaration::ReadFromImpl(reader, true); |
| 1455 case kFunctionDeclaration: | 1460 case kFunctionDeclaration: |
| 1456 return FunctionDeclaration::ReadFrom(reader); | 1461 return FunctionDeclaration::ReadFrom(reader); |
| 1457 default: | 1462 default: |
| 1458 UNREACHABLE(); | 1463 UNREACHABLE(); |
| 1459 } | 1464 } |
| 1460 return NULL; | 1465 return NULL; |
| 1461 } | 1466 } |
| 1462 | 1467 |
| 1463 | 1468 |
| 1464 InvalidStatement* InvalidStatement::ReadFrom(Reader* reader) { | 1469 InvalidStatement* InvalidStatement::ReadFrom(Reader* reader) { |
| 1465 TRACE_READ_OFFSET(); | 1470 TRACE_READ_OFFSET(); |
| 1466 return new InvalidStatement(); | 1471 return new InvalidStatement(); |
| 1467 } | 1472 } |
| 1468 | 1473 |
| 1469 | 1474 |
| 1470 ExpressionStatement* ExpressionStatement::ReadFrom(Reader* reader) { | 1475 ExpressionStatement* ExpressionStatement::ReadFrom(Reader* reader) { |
| 1471 TRACE_READ_OFFSET(); | 1476 TRACE_READ_OFFSET(); |
| 1472 return new ExpressionStatement(Expression::ReadFrom(reader)); | 1477 return new ExpressionStatement(Expression::ReadFrom(reader)); |
| 1473 } | 1478 } |
| 1474 | 1479 |
| 1475 | 1480 |
| 1476 Block* Block::ReadFromImpl(Reader* reader) { | 1481 Block* Block::ReadFromImpl(Reader* reader) { |
| 1477 TRACE_READ_OFFSET(); | 1482 TRACE_READ_OFFSET(); |
| 1478 PositionScope scope(reader); | 1483 PositionScope scope(reader); |
| 1479 | 1484 |
| 1480 VariableScope<ReaderHelper> vars(reader->helper()); | 1485 VariableScope<ReaderHelper> vars(reader->helper()); |
| 1481 Block* block = new Block(); | 1486 Block* block = new Block(); |
| 1487 block->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
| 1482 block->statements().ReadFromStatic<Statement>(reader); | 1488 block->statements().ReadFromStatic<Statement>(reader); |
| 1483 block->position_ = reader->min_position(); | 1489 block->position_ = reader->min_position(); |
| 1484 block->end_position_ = reader->max_position(); | 1490 block->end_position_ = reader->max_position(); |
| 1485 | 1491 |
| 1486 return block; | 1492 return block; |
| 1487 } | 1493 } |
| 1488 | 1494 |
| 1489 | 1495 |
| 1490 EmptyStatement* EmptyStatement::ReadFrom(Reader* reader) { | 1496 EmptyStatement* EmptyStatement::ReadFrom(Reader* reader) { |
| 1491 TRACE_READ_OFFSET(); | 1497 TRACE_READ_OFFSET(); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1538 return dostmt; | 1544 return dostmt; |
| 1539 } | 1545 } |
| 1540 | 1546 |
| 1541 | 1547 |
| 1542 ForStatement* ForStatement::ReadFrom(Reader* reader) { | 1548 ForStatement* ForStatement::ReadFrom(Reader* reader) { |
| 1543 TRACE_READ_OFFSET(); | 1549 TRACE_READ_OFFSET(); |
| 1544 VariableScope<ReaderHelper> vars(reader->helper()); | 1550 VariableScope<ReaderHelper> vars(reader->helper()); |
| 1545 PositionScope scope(reader); | 1551 PositionScope scope(reader); |
| 1546 | 1552 |
| 1547 ForStatement* forstmt = new ForStatement(); | 1553 ForStatement* forstmt = new ForStatement(); |
| 1554 forstmt->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
| 1548 forstmt->variables_.ReadFromStatic<VariableDeclarationImpl>(reader); | 1555 forstmt->variables_.ReadFromStatic<VariableDeclarationImpl>(reader); |
| 1549 forstmt->condition_ = reader->ReadOptional<Expression>(); | 1556 forstmt->condition_ = reader->ReadOptional<Expression>(); |
| 1550 forstmt->updates_.ReadFromStatic<Expression>(reader); | 1557 forstmt->updates_.ReadFromStatic<Expression>(reader); |
| 1551 forstmt->body_ = Statement::ReadFrom(reader); | 1558 forstmt->body_ = Statement::ReadFrom(reader); |
| 1552 forstmt->end_position_ = reader->max_position(); | 1559 forstmt->end_position_ = reader->max_position(); |
| 1553 forstmt->position_ = reader->min_position(); | 1560 forstmt->position_ = reader->min_position(); |
| 1554 | 1561 |
| 1555 return forstmt; | 1562 return forstmt; |
| 1556 } | 1563 } |
| 1557 | 1564 |
| 1558 | 1565 |
| 1559 ForInStatement* ForInStatement::ReadFrom(Reader* reader, bool is_async) { | 1566 ForInStatement* ForInStatement::ReadFrom(Reader* reader, bool is_async) { |
| 1560 TRACE_READ_OFFSET(); | 1567 TRACE_READ_OFFSET(); |
| 1561 VariableScope<ReaderHelper> vars(reader->helper()); | 1568 VariableScope<ReaderHelper> vars(reader->helper()); |
| 1562 PositionScope scope(reader); | 1569 PositionScope scope(reader); |
| 1563 | 1570 |
| 1564 ForInStatement* forinstmt = new ForInStatement(); | 1571 ForInStatement* forinstmt = new ForInStatement(); |
| 1572 forinstmt->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
| 1565 forinstmt->is_async_ = is_async; | 1573 forinstmt->is_async_ = is_async; |
| 1566 forinstmt->position_ = reader->ReadPosition(); | 1574 forinstmt->position_ = reader->ReadPosition(); |
| 1567 forinstmt->variable_ = VariableDeclaration::ReadFromImpl(reader); | 1575 forinstmt->variable_ = VariableDeclaration::ReadFromImpl(reader, false); |
| 1568 forinstmt->iterable_ = Expression::ReadFrom(reader); | 1576 forinstmt->iterable_ = Expression::ReadFrom(reader); |
| 1569 forinstmt->body_ = Statement::ReadFrom(reader); | 1577 forinstmt->body_ = Statement::ReadFrom(reader); |
| 1570 forinstmt->end_position_ = reader->max_position(); | 1578 forinstmt->end_position_ = reader->max_position(); |
| 1571 if (!forinstmt->position_.IsReal()) { | 1579 if (!forinstmt->position_.IsReal()) { |
| 1572 forinstmt->position_ = reader->min_position(); | 1580 forinstmt->position_ = reader->min_position(); |
| 1573 } | 1581 } |
| 1574 forinstmt->variable_->set_end_position(forinstmt->position_); | 1582 forinstmt->variable_->set_end_position(forinstmt->position_); |
| 1575 | 1583 |
| 1576 return forinstmt; | 1584 return forinstmt; |
| 1577 } | 1585 } |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1649 return tc; | 1657 return tc; |
| 1650 } | 1658 } |
| 1651 | 1659 |
| 1652 | 1660 |
| 1653 Catch* Catch::ReadFrom(Reader* reader) { | 1661 Catch* Catch::ReadFrom(Reader* reader) { |
| 1654 TRACE_READ_OFFSET(); | 1662 TRACE_READ_OFFSET(); |
| 1655 VariableScope<ReaderHelper> vars(reader->helper()); | 1663 VariableScope<ReaderHelper> vars(reader->helper()); |
| 1656 PositionScope scope(reader); | 1664 PositionScope scope(reader); |
| 1657 | 1665 |
| 1658 Catch* c = new Catch(); | 1666 Catch* c = new Catch(); |
| 1667 c->kernel_offset_ = reader->offset(); // Catch has no tag. |
| 1659 c->guard_ = DartType::ReadFrom(reader); | 1668 c->guard_ = DartType::ReadFrom(reader); |
| 1660 c->exception_ = | 1669 c->exception_ = |
| 1661 reader->ReadOptional<VariableDeclaration, VariableDeclarationImpl>(); | 1670 reader->ReadOptional<VariableDeclaration, VariableDeclarationImpl>(); |
| 1662 c->stack_trace_ = | 1671 c->stack_trace_ = |
| 1663 reader->ReadOptional<VariableDeclaration, VariableDeclarationImpl>(); | 1672 reader->ReadOptional<VariableDeclaration, VariableDeclarationImpl>(); |
| 1664 c->body_ = Statement::ReadFrom(reader); | 1673 c->body_ = Statement::ReadFrom(reader); |
| 1665 c->end_position_ = reader->max_position(); | 1674 c->end_position_ = reader->max_position(); |
| 1666 c->position_ = reader->min_position(); | 1675 c->position_ = reader->min_position(); |
| 1667 | 1676 |
| 1668 return c; | 1677 return c; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1686 stmt->flags_ = reader->ReadByte(); | 1695 stmt->flags_ = reader->ReadByte(); |
| 1687 stmt->expression_ = Expression::ReadFrom(reader); | 1696 stmt->expression_ = Expression::ReadFrom(reader); |
| 1688 return stmt; | 1697 return stmt; |
| 1689 } | 1698 } |
| 1690 | 1699 |
| 1691 | 1700 |
| 1692 VariableDeclaration* VariableDeclaration::ReadFrom(Reader* reader) { | 1701 VariableDeclaration* VariableDeclaration::ReadFrom(Reader* reader) { |
| 1693 TRACE_READ_OFFSET(); | 1702 TRACE_READ_OFFSET(); |
| 1694 Tag tag = reader->ReadTag(); | 1703 Tag tag = reader->ReadTag(); |
| 1695 ASSERT(tag == kVariableDeclaration); | 1704 ASSERT(tag == kVariableDeclaration); |
| 1696 return VariableDeclaration::ReadFromImpl(reader); | 1705 return VariableDeclaration::ReadFromImpl(reader, true); |
| 1697 } | 1706 } |
| 1698 | 1707 |
| 1699 | 1708 |
| 1700 VariableDeclaration* VariableDeclaration::ReadFromImpl(Reader* reader) { | 1709 VariableDeclaration* VariableDeclaration::ReadFromImpl(Reader* reader, |
| 1710 bool read_tag) { |
| 1701 TRACE_READ_OFFSET(); | 1711 TRACE_READ_OFFSET(); |
| 1702 PositionScope scope(reader); | 1712 PositionScope scope(reader); |
| 1703 | 1713 |
| 1704 VariableDeclaration* decl = new VariableDeclaration(); | 1714 VariableDeclaration* decl = new VariableDeclaration(); |
| 1715 // -1 or -0 depending on whether there's a tag or not. |
| 1716 decl->kernel_offset_ = reader->offset() - (read_tag ? 1 : 0); |
| 1705 decl->position_ = reader->ReadPosition(); | 1717 decl->position_ = reader->ReadPosition(); |
| 1706 decl->equals_position_ = reader->ReadPosition(); | 1718 decl->equals_position_ = reader->ReadPosition(); |
| 1707 decl->flags_ = reader->ReadFlags(); | 1719 decl->flags_ = reader->ReadFlags(); |
| 1708 decl->name_ = Reference::ReadStringFrom(reader); | 1720 decl->name_ = Reference::ReadStringFrom(reader); |
| 1709 decl->type_ = DartType::ReadFrom(reader); | 1721 decl->type_ = DartType::ReadFrom(reader); |
| 1710 decl->inferred_value_ = reader->ReadOptional<InferredValue>(); | 1722 decl->inferred_value_ = reader->ReadOptional<InferredValue>(); |
| 1711 decl->initializer_ = reader->ReadOptional<Expression>(); | 1723 decl->initializer_ = reader->ReadOptional<Expression>(); |
| 1712 | 1724 |
| 1713 // Go to next token position so it ends *after* the last potentially | 1725 // Go to next token position so it ends *after* the last potentially |
| 1714 // debuggable position in the initializer. | 1726 // debuggable position in the initializer. |
| 1715 TokenPosition position = reader->max_position(); | 1727 TokenPosition position = reader->max_position(); |
| 1716 if (position.IsReal()) position.Next(); | 1728 if (position.IsReal()) position.Next(); |
| 1717 decl->end_position_ = position; | 1729 decl->end_position_ = position; |
| 1718 reader->helper()->variables().Push(decl); | 1730 reader->helper()->variables().Push(decl); |
| 1719 | 1731 |
| 1720 return decl; | 1732 return decl; |
| 1721 } | 1733 } |
| 1722 | 1734 |
| 1723 | 1735 |
| 1724 FunctionDeclaration* FunctionDeclaration::ReadFrom(Reader* reader) { | 1736 FunctionDeclaration* FunctionDeclaration::ReadFrom(Reader* reader) { |
| 1725 TRACE_READ_OFFSET(); | 1737 TRACE_READ_OFFSET(); |
| 1726 FunctionDeclaration* decl = new FunctionDeclaration(); | 1738 FunctionDeclaration* decl = new FunctionDeclaration(); |
| 1739 decl->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
| 1727 decl->position_ = reader->ReadPosition(); | 1740 decl->position_ = reader->ReadPosition(); |
| 1728 decl->variable_ = VariableDeclaration::ReadFromImpl(reader); | 1741 decl->variable_ = VariableDeclaration::ReadFromImpl(reader, false); |
| 1729 VariableScope<ReaderHelper> parameters(reader->helper()); | 1742 VariableScope<ReaderHelper> parameters(reader->helper()); |
| 1730 decl->function_ = FunctionNode::ReadFrom(reader); | 1743 decl->function_ = FunctionNode::ReadFrom(reader); |
| 1731 return decl; | 1744 return decl; |
| 1732 } | 1745 } |
| 1733 | 1746 |
| 1734 | 1747 |
| 1735 Name* Name::ReadFrom(Reader* reader) { | 1748 Name* Name::ReadFrom(Reader* reader) { |
| 1736 String* string = Reference::ReadStringFrom(reader); | 1749 String* string = Reference::ReadStringFrom(reader); |
| 1737 if (string->size() >= 1 && string->buffer()[0] == '_') { | 1750 if (string->size() >= 1 && string->buffer()[0] == '_') { |
| 1738 CanonicalName* library_reference = reader->ReadCanonicalNameReference(); | 1751 CanonicalName* library_reference = reader->ReadCanonicalNameReference(); |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1899 | 1912 |
| 1900 return program; | 1913 return program; |
| 1901 } | 1914 } |
| 1902 | 1915 |
| 1903 | 1916 |
| 1904 FunctionNode* FunctionNode::ReadFrom(Reader* reader) { | 1917 FunctionNode* FunctionNode::ReadFrom(Reader* reader) { |
| 1905 TRACE_READ_OFFSET(); | 1918 TRACE_READ_OFFSET(); |
| 1906 TypeParameterScope<ReaderHelper> scope(reader->helper()); | 1919 TypeParameterScope<ReaderHelper> scope(reader->helper()); |
| 1907 | 1920 |
| 1908 FunctionNode* function = new FunctionNode(); | 1921 FunctionNode* function = new FunctionNode(); |
| 1922 function->kernel_offset_ = reader->offset(); // FunctionNode has no tag. |
| 1909 function->position_ = reader->ReadPosition(); | 1923 function->position_ = reader->ReadPosition(); |
| 1910 function->end_position_ = reader->ReadPosition(); | 1924 function->end_position_ = reader->ReadPosition(); |
| 1911 function->async_marker_ = | 1925 function->async_marker_ = |
| 1912 static_cast<FunctionNode::AsyncMarker>(reader->ReadByte()); | 1926 static_cast<FunctionNode::AsyncMarker>(reader->ReadByte()); |
| 1913 function->dart_async_marker_ = | 1927 function->dart_async_marker_ = |
| 1914 static_cast<FunctionNode::AsyncMarker>(reader->ReadByte()); | 1928 static_cast<FunctionNode::AsyncMarker>(reader->ReadByte()); |
| 1915 function->type_parameters().ReadFrom(reader); | 1929 function->type_parameters().ReadFrom(reader); |
| 1916 function->required_parameter_count_ = reader->ReadUInt(); | 1930 function->required_parameter_count_ = reader->ReadUInt(); |
| 1917 function->positional_parameters().ReadFromStatic<VariableDeclarationImpl>( | 1931 function->positional_parameters().ReadFromStatic<VariableDeclarationImpl>( |
| 1918 reader); | 1932 reader); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1941 | 1955 |
| 1942 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer, | 1956 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer, |
| 1943 intptr_t buffer_length) { | 1957 intptr_t buffer_length) { |
| 1944 kernel::Reader reader(buffer, buffer_length); | 1958 kernel::Reader reader(buffer, buffer_length); |
| 1945 return kernel::Program::ReadFrom(&reader); | 1959 return kernel::Program::ReadFrom(&reader); |
| 1946 } | 1960 } |
| 1947 | 1961 |
| 1948 | 1962 |
| 1949 } // namespace dart | 1963 } // namespace dart |
| 1950 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 1964 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
| OLD | NEW |