| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef VM_AST_H_ | 5 #ifndef VM_AST_H_ |
| 6 #define VM_AST_H_ | 6 #define VM_AST_H_ |
| 7 | 7 |
| 8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
| 9 #include "vm/allocation.h" | 9 #include "vm/allocation.h" |
| 10 #include "vm/growable_array.h" | 10 #include "vm/growable_array.h" |
| (...skipping 1538 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1549 | 1549 |
| 1550 class CatchClauseNode : public AstNode { | 1550 class CatchClauseNode : public AstNode { |
| 1551 public: | 1551 public: |
| 1552 static const int kInvalidTryIndex = -1; | 1552 static const int kInvalidTryIndex = -1; |
| 1553 | 1553 |
| 1554 CatchClauseNode(intptr_t token_pos, | 1554 CatchClauseNode(intptr_t token_pos, |
| 1555 SequenceNode* catch_block, | 1555 SequenceNode* catch_block, |
| 1556 const Array& handler_types, | 1556 const Array& handler_types, |
| 1557 const LocalVariable* context_var, | 1557 const LocalVariable* context_var, |
| 1558 const LocalVariable* exception_var, | 1558 const LocalVariable* exception_var, |
| 1559 const LocalVariable* stacktrace_var) | 1559 const LocalVariable* stacktrace_var, |
| 1560 intptr_t catch_handler_index) |
| 1560 : AstNode(token_pos), | 1561 : AstNode(token_pos), |
| 1561 catch_block_(catch_block), | 1562 catch_block_(catch_block), |
| 1562 handler_types_(handler_types), | 1563 handler_types_(handler_types), |
| 1563 context_var_(*context_var), | 1564 context_var_(*context_var), |
| 1564 exception_var_(*exception_var), | 1565 exception_var_(*exception_var), |
| 1565 stacktrace_var_(*stacktrace_var) { | 1566 stacktrace_var_(*stacktrace_var), |
| 1567 catch_handler_index_(catch_handler_index) { |
| 1566 ASSERT(catch_block_ != NULL); | 1568 ASSERT(catch_block_ != NULL); |
| 1567 ASSERT(handler_types.IsZoneHandle()); | 1569 ASSERT(handler_types.IsZoneHandle()); |
| 1568 ASSERT(context_var != NULL); | 1570 ASSERT(context_var != NULL); |
| 1569 ASSERT(exception_var != NULL); | 1571 ASSERT(exception_var != NULL); |
| 1570 ASSERT(stacktrace_var != NULL); | 1572 ASSERT(stacktrace_var != NULL); |
| 1571 } | 1573 } |
| 1572 | 1574 |
| 1573 const Array& handler_types() const { return handler_types_; } | 1575 const Array& handler_types() const { return handler_types_; } |
| 1574 const LocalVariable& context_var() const { return context_var_; } | 1576 const LocalVariable& context_var() const { return context_var_; } |
| 1575 const LocalVariable& exception_var() const { return exception_var_; } | 1577 const LocalVariable& exception_var() const { return exception_var_; } |
| 1576 const LocalVariable& stacktrace_var() const { return stacktrace_var_; } | 1578 const LocalVariable& stacktrace_var() const { return stacktrace_var_; } |
| 1579 intptr_t catch_handler_index() const { return catch_handler_index_; } |
| 1577 | 1580 |
| 1578 virtual void VisitChildren(AstNodeVisitor* visitor) const { | 1581 virtual void VisitChildren(AstNodeVisitor* visitor) const { |
| 1579 catch_block_->Visit(visitor); | 1582 catch_block_->Visit(visitor); |
| 1580 } | 1583 } |
| 1581 | 1584 |
| 1582 DECLARE_COMMON_NODE_FUNCTIONS(CatchClauseNode); | 1585 DECLARE_COMMON_NODE_FUNCTIONS(CatchClauseNode); |
| 1583 | 1586 |
| 1584 private: | 1587 private: |
| 1585 SequenceNode* catch_block_; | 1588 SequenceNode* catch_block_; |
| 1586 const Array& handler_types_; | 1589 const Array& handler_types_; |
| 1587 const LocalVariable& context_var_; | 1590 const LocalVariable& context_var_; |
| 1588 const LocalVariable& exception_var_; | 1591 const LocalVariable& exception_var_; |
| 1589 const LocalVariable& stacktrace_var_; | 1592 const LocalVariable& stacktrace_var_; |
| 1593 const intptr_t catch_handler_index_; |
| 1590 | 1594 |
| 1591 DISALLOW_COPY_AND_ASSIGN(CatchClauseNode); | 1595 DISALLOW_COPY_AND_ASSIGN(CatchClauseNode); |
| 1592 }; | 1596 }; |
| 1593 | 1597 |
| 1594 | 1598 |
| 1595 class TryCatchNode : public AstNode { | 1599 class TryCatchNode : public AstNode { |
| 1596 public: | 1600 public: |
| 1597 TryCatchNode(intptr_t token_pos, | 1601 TryCatchNode(intptr_t token_pos, |
| 1598 SequenceNode* try_block, | 1602 SequenceNode* try_block, |
| 1599 SourceLabel* end_catch_label, | 1603 SourceLabel* end_catch_label, |
| 1600 const LocalVariable* context_var, | 1604 const LocalVariable* context_var, |
| 1601 CatchClauseNode* catch_block, | 1605 CatchClauseNode* catch_block, |
| 1602 SequenceNode* finally_block) | 1606 SequenceNode* finally_block, |
| 1607 intptr_t try_index) |
| 1603 : AstNode(token_pos), | 1608 : AstNode(token_pos), |
| 1604 try_block_(try_block), | 1609 try_block_(try_block), |
| 1605 end_catch_label_(end_catch_label), | 1610 end_catch_label_(end_catch_label), |
| 1606 context_var_(*context_var), | 1611 context_var_(*context_var), |
| 1607 catch_block_(catch_block), | 1612 catch_block_(catch_block), |
| 1608 finally_block_(finally_block) { | 1613 finally_block_(finally_block), |
| 1614 try_index_(try_index) { |
| 1609 ASSERT(try_block_ != NULL); | 1615 ASSERT(try_block_ != NULL); |
| 1610 ASSERT(context_var != NULL); | 1616 ASSERT(context_var != NULL); |
| 1611 ASSERT(catch_block_ != NULL || finally_block_ != NULL); | 1617 ASSERT(catch_block_ != NULL || finally_block_ != NULL); |
| 1612 ASSERT(end_catch_label_ != NULL); | 1618 ASSERT(end_catch_label_ != NULL); |
| 1613 } | 1619 } |
| 1614 | 1620 |
| 1615 SequenceNode* try_block() const { return try_block_; } | 1621 SequenceNode* try_block() const { return try_block_; } |
| 1616 SourceLabel* end_catch_label() const { return end_catch_label_; } | 1622 SourceLabel* end_catch_label() const { return end_catch_label_; } |
| 1617 CatchClauseNode* catch_block() const { return catch_block_; } | 1623 CatchClauseNode* catch_block() const { return catch_block_; } |
| 1618 SequenceNode* finally_block() const { return finally_block_; } | 1624 SequenceNode* finally_block() const { return finally_block_; } |
| 1619 const LocalVariable& context_var() const { return context_var_; } | 1625 const LocalVariable& context_var() const { return context_var_; } |
| 1626 intptr_t try_index() const { return try_index_; } |
| 1620 | 1627 |
| 1621 virtual void VisitChildren(AstNodeVisitor* visitor) const { | 1628 virtual void VisitChildren(AstNodeVisitor* visitor) const { |
| 1622 try_block_->Visit(visitor); | 1629 try_block_->Visit(visitor); |
| 1623 if (catch_block_ != NULL) { | 1630 if (catch_block_ != NULL) { |
| 1624 catch_block_->Visit(visitor); | 1631 catch_block_->Visit(visitor); |
| 1625 } | 1632 } |
| 1626 if (finally_block_ != NULL) { | 1633 if (finally_block_ != NULL) { |
| 1627 finally_block_->Visit(visitor); | 1634 finally_block_->Visit(visitor); |
| 1628 } | 1635 } |
| 1629 } | 1636 } |
| 1630 | 1637 |
| 1631 DECLARE_COMMON_NODE_FUNCTIONS(TryCatchNode); | 1638 DECLARE_COMMON_NODE_FUNCTIONS(TryCatchNode); |
| 1632 | 1639 |
| 1633 private: | 1640 private: |
| 1634 SequenceNode* try_block_; | 1641 SequenceNode* try_block_; |
| 1635 SourceLabel* end_catch_label_; | 1642 SourceLabel* end_catch_label_; |
| 1636 const LocalVariable& context_var_; | 1643 const LocalVariable& context_var_; |
| 1637 CatchClauseNode* catch_block_; | 1644 CatchClauseNode* catch_block_; |
| 1638 SequenceNode* finally_block_; | 1645 SequenceNode* finally_block_; |
| 1646 const intptr_t try_index_; |
| 1639 | 1647 |
| 1640 DISALLOW_COPY_AND_ASSIGN(TryCatchNode); | 1648 DISALLOW_COPY_AND_ASSIGN(TryCatchNode); |
| 1641 }; | 1649 }; |
| 1642 | 1650 |
| 1643 | 1651 |
| 1644 class ThrowNode : public AstNode { | 1652 class ThrowNode : public AstNode { |
| 1645 public: | 1653 public: |
| 1646 ThrowNode(intptr_t token_pos, AstNode* exception, AstNode* stacktrace) | 1654 ThrowNode(intptr_t token_pos, AstNode* exception, AstNode* stacktrace) |
| 1647 : AstNode(token_pos), exception_(exception), stacktrace_(stacktrace) { | 1655 : AstNode(token_pos), exception_(exception), stacktrace_(stacktrace) { |
| 1648 ASSERT(exception_ != NULL); | 1656 ASSERT(exception_ != NULL); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1665 AstNode* stacktrace_; | 1673 AstNode* stacktrace_; |
| 1666 | 1674 |
| 1667 DISALLOW_IMPLICIT_CONSTRUCTORS(ThrowNode); | 1675 DISALLOW_IMPLICIT_CONSTRUCTORS(ThrowNode); |
| 1668 }; | 1676 }; |
| 1669 | 1677 |
| 1670 | 1678 |
| 1671 class InlinedFinallyNode : public AstNode { | 1679 class InlinedFinallyNode : public AstNode { |
| 1672 public: | 1680 public: |
| 1673 InlinedFinallyNode(intptr_t token_pos, | 1681 InlinedFinallyNode(intptr_t token_pos, |
| 1674 AstNode* finally_block, | 1682 AstNode* finally_block, |
| 1675 const LocalVariable* context_var) | 1683 const LocalVariable* context_var, |
| 1684 intptr_t try_index) |
| 1676 : AstNode(token_pos), | 1685 : AstNode(token_pos), |
| 1677 finally_block_(finally_block), | 1686 finally_block_(finally_block), |
| 1678 context_var_(*context_var) { | 1687 context_var_(*context_var), |
| 1688 try_index_(try_index) { |
| 1679 ASSERT(finally_block_ != NULL); | 1689 ASSERT(finally_block_ != NULL); |
| 1680 ASSERT(context_var != NULL); | 1690 ASSERT(context_var != NULL); |
| 1681 } | 1691 } |
| 1682 | 1692 |
| 1683 AstNode* finally_block() const { return finally_block_; } | 1693 AstNode* finally_block() const { return finally_block_; } |
| 1684 const LocalVariable& context_var() const { return context_var_; } | 1694 const LocalVariable& context_var() const { return context_var_; } |
| 1695 intptr_t try_index() const { return try_index_; } |
| 1685 | 1696 |
| 1686 virtual void VisitChildren(AstNodeVisitor* visitor) const { | 1697 virtual void VisitChildren(AstNodeVisitor* visitor) const { |
| 1687 finally_block()->Visit(visitor); | 1698 finally_block()->Visit(visitor); |
| 1688 } | 1699 } |
| 1689 | 1700 |
| 1690 DECLARE_COMMON_NODE_FUNCTIONS(InlinedFinallyNode); | 1701 DECLARE_COMMON_NODE_FUNCTIONS(InlinedFinallyNode); |
| 1691 | 1702 |
| 1692 private: | 1703 private: |
| 1693 AstNode* finally_block_; | 1704 AstNode* finally_block_; |
| 1694 const LocalVariable& context_var_; | 1705 const LocalVariable& context_var_; |
| 1706 const intptr_t try_index_; |
| 1695 | 1707 |
| 1696 DISALLOW_IMPLICIT_CONSTRUCTORS(InlinedFinallyNode); | 1708 DISALLOW_IMPLICIT_CONSTRUCTORS(InlinedFinallyNode); |
| 1697 }; | 1709 }; |
| 1698 | 1710 |
| 1699 } // namespace dart | 1711 } // namespace dart |
| 1700 | 1712 |
| 1701 #undef DECLARE_COMMON_NODE_FUNCTIONS | 1713 #undef DECLARE_COMMON_NODE_FUNCTIONS |
| 1702 | 1714 |
| 1703 #endif // VM_AST_H_ | 1715 #endif // VM_AST_H_ |
| OLD | NEW |