OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 817 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
828 ZoneList<Label*>* targets() { return &targets_; } | 828 ZoneList<Label*>* targets() { return &targets_; } |
829 virtual bool IsInlineable() const; | 829 virtual bool IsInlineable() const; |
830 | 830 |
831 private: | 831 private: |
832 ZoneList<Label*> targets_; | 832 ZoneList<Label*> targets_; |
833 }; | 833 }; |
834 | 834 |
835 | 835 |
836 class TryStatement: public Statement { | 836 class TryStatement: public Statement { |
837 public: | 837 public: |
838 explicit TryStatement(Block* try_block) | 838 explicit TryStatement(int index, Block* try_block) |
839 : try_block_(try_block), escaping_targets_(NULL) { } | 839 : index_(index), |
| 840 try_block_(try_block), |
| 841 escaping_targets_(NULL) { |
| 842 } |
840 | 843 |
841 void set_escaping_targets(ZoneList<Label*>* targets) { | 844 void set_escaping_targets(ZoneList<Label*>* targets) { |
842 escaping_targets_ = targets; | 845 escaping_targets_ = targets; |
843 } | 846 } |
844 | 847 |
| 848 int index() const { return index_; } |
845 Block* try_block() const { return try_block_; } | 849 Block* try_block() const { return try_block_; } |
846 ZoneList<Label*>* escaping_targets() const { return escaping_targets_; } | 850 ZoneList<Label*>* escaping_targets() const { return escaping_targets_; } |
847 virtual bool IsInlineable() const; | 851 virtual bool IsInlineable() const; |
848 | 852 |
849 private: | 853 private: |
| 854 // Unique (per-function) index of this handler. This is not an AST ID. |
| 855 int index_; |
| 856 |
850 Block* try_block_; | 857 Block* try_block_; |
851 ZoneList<Label*>* escaping_targets_; | 858 ZoneList<Label*>* escaping_targets_; |
852 }; | 859 }; |
853 | 860 |
854 | 861 |
855 class TryCatchStatement: public TryStatement { | 862 class TryCatchStatement: public TryStatement { |
856 public: | 863 public: |
857 TryCatchStatement(Block* try_block, | 864 TryCatchStatement(int index, |
| 865 Block* try_block, |
858 Scope* scope, | 866 Scope* scope, |
859 Variable* variable, | 867 Variable* variable, |
860 Block* catch_block) | 868 Block* catch_block) |
861 : TryStatement(try_block), | 869 : TryStatement(index, try_block), |
862 scope_(scope), | 870 scope_(scope), |
863 variable_(variable), | 871 variable_(variable), |
864 catch_block_(catch_block) { | 872 catch_block_(catch_block) { |
865 } | 873 } |
866 | 874 |
867 DECLARE_NODE_TYPE(TryCatchStatement) | 875 DECLARE_NODE_TYPE(TryCatchStatement) |
868 | 876 |
869 Scope* scope() { return scope_; } | 877 Scope* scope() { return scope_; } |
870 Variable* variable() { return variable_; } | 878 Variable* variable() { return variable_; } |
871 Block* catch_block() const { return catch_block_; } | 879 Block* catch_block() const { return catch_block_; } |
872 virtual bool IsInlineable() const; | 880 virtual bool IsInlineable() const; |
873 | 881 |
874 private: | 882 private: |
875 Scope* scope_; | 883 Scope* scope_; |
876 Variable* variable_; | 884 Variable* variable_; |
877 Block* catch_block_; | 885 Block* catch_block_; |
878 }; | 886 }; |
879 | 887 |
880 | 888 |
881 class TryFinallyStatement: public TryStatement { | 889 class TryFinallyStatement: public TryStatement { |
882 public: | 890 public: |
883 TryFinallyStatement(Block* try_block, Block* finally_block) | 891 TryFinallyStatement(int index, Block* try_block, Block* finally_block) |
884 : TryStatement(try_block), | 892 : TryStatement(index, try_block), |
885 finally_block_(finally_block) { } | 893 finally_block_(finally_block) { } |
886 | 894 |
887 DECLARE_NODE_TYPE(TryFinallyStatement) | 895 DECLARE_NODE_TYPE(TryFinallyStatement) |
888 | 896 |
889 Block* finally_block() const { return finally_block_; } | 897 Block* finally_block() const { return finally_block_; } |
890 virtual bool IsInlineable() const; | 898 virtual bool IsInlineable() const; |
891 | 899 |
892 private: | 900 private: |
893 Block* finally_block_; | 901 Block* finally_block_; |
894 }; | 902 }; |
(...skipping 742 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1637 NAMED_EXPRESSION, | 1645 NAMED_EXPRESSION, |
1638 DECLARATION | 1646 DECLARATION |
1639 }; | 1647 }; |
1640 | 1648 |
1641 FunctionLiteral(Isolate* isolate, | 1649 FunctionLiteral(Isolate* isolate, |
1642 Handle<String> name, | 1650 Handle<String> name, |
1643 Scope* scope, | 1651 Scope* scope, |
1644 ZoneList<Statement*>* body, | 1652 ZoneList<Statement*>* body, |
1645 int materialized_literal_count, | 1653 int materialized_literal_count, |
1646 int expected_property_count, | 1654 int expected_property_count, |
| 1655 int handler_count, |
1647 bool has_only_simple_this_property_assignments, | 1656 bool has_only_simple_this_property_assignments, |
1648 Handle<FixedArray> this_property_assignments, | 1657 Handle<FixedArray> this_property_assignments, |
1649 int parameter_count, | 1658 int parameter_count, |
1650 Type type, | 1659 Type type, |
1651 bool has_duplicate_parameters) | 1660 bool has_duplicate_parameters) |
1652 : Expression(isolate), | 1661 : Expression(isolate), |
1653 name_(name), | 1662 name_(name), |
1654 scope_(scope), | 1663 scope_(scope), |
1655 body_(body), | 1664 body_(body), |
1656 this_property_assignments_(this_property_assignments), | 1665 this_property_assignments_(this_property_assignments), |
1657 inferred_name_(isolate->factory()->empty_string()), | 1666 inferred_name_(isolate->factory()->empty_string()), |
1658 materialized_literal_count_(materialized_literal_count), | 1667 materialized_literal_count_(materialized_literal_count), |
1659 expected_property_count_(expected_property_count), | 1668 expected_property_count_(expected_property_count), |
| 1669 handler_count_(handler_count), |
1660 parameter_count_(parameter_count), | 1670 parameter_count_(parameter_count), |
1661 function_token_position_(RelocInfo::kNoPosition) { | 1671 function_token_position_(RelocInfo::kNoPosition) { |
1662 bitfield_ = | 1672 bitfield_ = |
1663 HasOnlySimpleThisPropertyAssignments::encode( | 1673 HasOnlySimpleThisPropertyAssignments::encode( |
1664 has_only_simple_this_property_assignments) | | 1674 has_only_simple_this_property_assignments) | |
1665 IsExpression::encode(type != DECLARATION) | | 1675 IsExpression::encode(type != DECLARATION) | |
1666 IsAnonymous::encode(type == ANONYMOUS_EXPRESSION) | | 1676 IsAnonymous::encode(type == ANONYMOUS_EXPRESSION) | |
1667 Pretenure::encode(false) | | 1677 Pretenure::encode(false) | |
1668 HasDuplicateParameters::encode(has_duplicate_parameters); | 1678 HasDuplicateParameters::encode(has_duplicate_parameters); |
1669 } | 1679 } |
1670 | 1680 |
1671 DECLARE_NODE_TYPE(FunctionLiteral) | 1681 DECLARE_NODE_TYPE(FunctionLiteral) |
1672 | 1682 |
1673 Handle<String> name() const { return name_; } | 1683 Handle<String> name() const { return name_; } |
1674 Scope* scope() const { return scope_; } | 1684 Scope* scope() const { return scope_; } |
1675 ZoneList<Statement*>* body() const { return body_; } | 1685 ZoneList<Statement*>* body() const { return body_; } |
1676 void set_function_token_position(int pos) { function_token_position_ = pos; } | 1686 void set_function_token_position(int pos) { function_token_position_ = pos; } |
1677 int function_token_position() const { return function_token_position_; } | 1687 int function_token_position() const { return function_token_position_; } |
1678 int start_position() const; | 1688 int start_position() const; |
1679 int end_position() const; | 1689 int end_position() const; |
1680 bool is_expression() const { return IsExpression::decode(bitfield_); } | 1690 bool is_expression() const { return IsExpression::decode(bitfield_); } |
1681 bool is_anonymous() const { return IsAnonymous::decode(bitfield_); } | 1691 bool is_anonymous() const { return IsAnonymous::decode(bitfield_); } |
1682 bool strict_mode() const { return strict_mode_flag() == kStrictMode; } | 1692 bool strict_mode() const { return strict_mode_flag() == kStrictMode; } |
1683 StrictModeFlag strict_mode_flag() const; | 1693 StrictModeFlag strict_mode_flag() const; |
1684 | 1694 |
1685 int materialized_literal_count() { return materialized_literal_count_; } | 1695 int materialized_literal_count() { return materialized_literal_count_; } |
1686 int expected_property_count() { return expected_property_count_; } | 1696 int expected_property_count() { return expected_property_count_; } |
| 1697 int handler_count() { return handler_count_; } |
1687 bool has_only_simple_this_property_assignments() { | 1698 bool has_only_simple_this_property_assignments() { |
1688 return HasOnlySimpleThisPropertyAssignments::decode(bitfield_); | 1699 return HasOnlySimpleThisPropertyAssignments::decode(bitfield_); |
1689 } | 1700 } |
1690 Handle<FixedArray> this_property_assignments() { | 1701 Handle<FixedArray> this_property_assignments() { |
1691 return this_property_assignments_; | 1702 return this_property_assignments_; |
1692 } | 1703 } |
1693 int parameter_count() { return parameter_count_; } | 1704 int parameter_count() { return parameter_count_; } |
1694 | 1705 |
1695 bool AllowsLazyCompilation(); | 1706 bool AllowsLazyCompilation(); |
1696 | 1707 |
(...skipping 17 matching lines...) Expand all Loading... |
1714 | 1725 |
1715 private: | 1726 private: |
1716 Handle<String> name_; | 1727 Handle<String> name_; |
1717 Scope* scope_; | 1728 Scope* scope_; |
1718 ZoneList<Statement*>* body_; | 1729 ZoneList<Statement*>* body_; |
1719 Handle<FixedArray> this_property_assignments_; | 1730 Handle<FixedArray> this_property_assignments_; |
1720 Handle<String> inferred_name_; | 1731 Handle<String> inferred_name_; |
1721 | 1732 |
1722 int materialized_literal_count_; | 1733 int materialized_literal_count_; |
1723 int expected_property_count_; | 1734 int expected_property_count_; |
| 1735 int handler_count_; |
1724 int parameter_count_; | 1736 int parameter_count_; |
1725 int function_token_position_; | 1737 int function_token_position_; |
1726 | 1738 |
1727 unsigned bitfield_; | 1739 unsigned bitfield_; |
1728 class HasOnlySimpleThisPropertyAssignments: public BitField<bool, 0, 1> {}; | 1740 class HasOnlySimpleThisPropertyAssignments: public BitField<bool, 0, 1> {}; |
1729 class IsExpression: public BitField<bool, 1, 1> {}; | 1741 class IsExpression: public BitField<bool, 1, 1> {}; |
1730 class IsAnonymous: public BitField<bool, 2, 1> {}; | 1742 class IsAnonymous: public BitField<bool, 2, 1> {}; |
1731 class Pretenure: public BitField<bool, 3, 1> {}; | 1743 class Pretenure: public BitField<bool, 3, 1> {}; |
1732 class HasDuplicateParameters: public BitField<bool, 4, 1> {}; | 1744 class HasDuplicateParameters: public BitField<bool, 4, 1> {}; |
1733 }; | 1745 }; |
(...skipping 421 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2155 | 2167 |
2156 private: | 2168 private: |
2157 Isolate* isolate_; | 2169 Isolate* isolate_; |
2158 bool stack_overflow_; | 2170 bool stack_overflow_; |
2159 }; | 2171 }; |
2160 | 2172 |
2161 | 2173 |
2162 } } // namespace v8::internal | 2174 } } // namespace v8::internal |
2163 | 2175 |
2164 #endif // V8_AST_H_ | 2176 #endif // V8_AST_H_ |
OLD | NEW |