OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_AST_H_ | 5 #ifndef V8_AST_H_ |
6 #define V8_AST_H_ | 6 #define V8_AST_H_ |
7 | 7 |
8 #include "src/v8.h" | 8 #include "src/v8.h" |
9 | 9 |
10 #include "src/assembler.h" | 10 #include "src/assembler.h" |
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
230 | 230 |
231 virtual TargetCollector* AsTargetCollector() { return NULL; } | 231 virtual TargetCollector* AsTargetCollector() { return NULL; } |
232 virtual BreakableStatement* AsBreakableStatement() { return NULL; } | 232 virtual BreakableStatement* AsBreakableStatement() { return NULL; } |
233 virtual IterationStatement* AsIterationStatement() { return NULL; } | 233 virtual IterationStatement* AsIterationStatement() { return NULL; } |
234 virtual MaterializedLiteral* AsMaterializedLiteral() { return NULL; } | 234 virtual MaterializedLiteral* AsMaterializedLiteral() { return NULL; } |
235 | 235 |
236 // The interface for feedback slots, with default no-op implementations for | 236 // The interface for feedback slots, with default no-op implementations for |
237 // node types which don't actually have this. Note that this is conceptually | 237 // node types which don't actually have this. Note that this is conceptually |
238 // not really nice, but multiple inheritance would introduce yet another | 238 // not really nice, but multiple inheritance would introduce yet another |
239 // vtable entry per node, something we don't want for space reasons. | 239 // vtable entry per node, something we don't want for space reasons. |
240 virtual FeedbackVectorRequirements ComputeFeedbackRequirements() { | 240 virtual FeedbackVectorRequirements ComputeFeedbackRequirements( |
| 241 Isolate* isolate) { |
241 return FeedbackVectorRequirements(0, 0); | 242 return FeedbackVectorRequirements(0, 0); |
242 } | 243 } |
243 virtual void SetFirstFeedbackSlot(FeedbackVectorSlot slot) { UNREACHABLE(); } | 244 virtual void SetFirstFeedbackSlot(FeedbackVectorSlot slot) { UNREACHABLE(); } |
244 virtual void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot) { | 245 virtual void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot) { |
245 UNREACHABLE(); | 246 UNREACHABLE(); |
246 } | 247 } |
247 | 248 |
248 private: | 249 private: |
249 // Hidden to prevent accidental usage. It would have to load the | 250 // Hidden to prevent accidental usage. It would have to load the |
250 // current zone from the TLS. | 251 // current zone from the TLS. |
(...skipping 665 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
916 | 917 |
917 class ForInStatement FINAL : public ForEachStatement { | 918 class ForInStatement FINAL : public ForEachStatement { |
918 public: | 919 public: |
919 DECLARE_NODE_TYPE(ForInStatement) | 920 DECLARE_NODE_TYPE(ForInStatement) |
920 | 921 |
921 Expression* enumerable() const { | 922 Expression* enumerable() const { |
922 return subject(); | 923 return subject(); |
923 } | 924 } |
924 | 925 |
925 // Type feedback information. | 926 // Type feedback information. |
926 virtual FeedbackVectorRequirements ComputeFeedbackRequirements() OVERRIDE { | 927 virtual FeedbackVectorRequirements ComputeFeedbackRequirements( |
| 928 Isolate* isolate) OVERRIDE { |
927 return FeedbackVectorRequirements(1, 0); | 929 return FeedbackVectorRequirements(1, 0); |
928 } | 930 } |
929 virtual void SetFirstFeedbackSlot(FeedbackVectorSlot slot) OVERRIDE { | 931 virtual void SetFirstFeedbackSlot(FeedbackVectorSlot slot) OVERRIDE { |
930 for_in_feedback_slot_ = slot; | 932 for_in_feedback_slot_ = slot; |
931 } | 933 } |
932 | 934 |
933 FeedbackVectorSlot ForInFeedbackSlot() { | 935 FeedbackVectorSlot ForInFeedbackSlot() { |
934 DCHECK(!for_in_feedback_slot_.IsInvalid()); | 936 DCHECK(!for_in_feedback_slot_.IsInvalid()); |
935 return for_in_feedback_slot_; | 937 return for_in_feedback_slot_; |
936 } | 938 } |
(...skipping 752 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1689 bool is_resolved() const { return IsResolvedField::decode(bit_field_); } | 1691 bool is_resolved() const { return IsResolvedField::decode(bit_field_); } |
1690 void set_is_resolved() { | 1692 void set_is_resolved() { |
1691 bit_field_ = IsResolvedField::update(bit_field_, true); | 1693 bit_field_ = IsResolvedField::update(bit_field_, true); |
1692 } | 1694 } |
1693 | 1695 |
1694 Interface* interface() const { return interface_; } | 1696 Interface* interface() const { return interface_; } |
1695 | 1697 |
1696 // Bind this proxy to the variable var. Interfaces must match. | 1698 // Bind this proxy to the variable var. Interfaces must match. |
1697 void BindTo(Variable* var); | 1699 void BindTo(Variable* var); |
1698 | 1700 |
1699 virtual FeedbackVectorRequirements ComputeFeedbackRequirements() OVERRIDE { | 1701 virtual FeedbackVectorRequirements ComputeFeedbackRequirements( |
| 1702 Isolate* isolate) OVERRIDE { |
1700 return FeedbackVectorRequirements(0, FLAG_vector_ics ? 1 : 0); | 1703 return FeedbackVectorRequirements(0, FLAG_vector_ics ? 1 : 0); |
1701 } | 1704 } |
1702 virtual void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot) OVERRIDE { | 1705 virtual void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot) OVERRIDE { |
1703 variable_feedback_slot_ = slot; | 1706 variable_feedback_slot_ = slot; |
1704 } | 1707 } |
1705 | 1708 |
1706 FeedbackVectorICSlot VariableFeedbackSlot() { | 1709 FeedbackVectorICSlot VariableFeedbackSlot() { |
1707 DCHECK(!FLAG_vector_ics || !variable_feedback_slot_.IsInvalid()); | 1710 DCHECK(!FLAG_vector_ics || !variable_feedback_slot_.IsInvalid()); |
1708 return variable_feedback_slot_; | 1711 return variable_feedback_slot_; |
1709 } | 1712 } |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1775 } | 1778 } |
1776 void mark_for_call() { | 1779 void mark_for_call() { |
1777 bit_field_ = IsForCallField::update(bit_field_, true); | 1780 bit_field_ = IsForCallField::update(bit_field_, true); |
1778 } | 1781 } |
1779 bool is_for_call() const { return IsForCallField::decode(bit_field_); } | 1782 bool is_for_call() const { return IsForCallField::decode(bit_field_); } |
1780 | 1783 |
1781 bool IsSuperAccess() { | 1784 bool IsSuperAccess() { |
1782 return obj()->IsSuperReference(); | 1785 return obj()->IsSuperReference(); |
1783 } | 1786 } |
1784 | 1787 |
1785 virtual FeedbackVectorRequirements ComputeFeedbackRequirements() OVERRIDE { | 1788 virtual FeedbackVectorRequirements ComputeFeedbackRequirements( |
| 1789 Isolate* isolate) OVERRIDE { |
1786 return FeedbackVectorRequirements(0, FLAG_vector_ics ? 1 : 0); | 1790 return FeedbackVectorRequirements(0, FLAG_vector_ics ? 1 : 0); |
1787 } | 1791 } |
1788 virtual void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot) OVERRIDE { | 1792 virtual void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot) OVERRIDE { |
1789 property_feedback_slot_ = slot; | 1793 property_feedback_slot_ = slot; |
1790 } | 1794 } |
1791 | 1795 |
1792 FeedbackVectorICSlot PropertyFeedbackSlot() const { | 1796 FeedbackVectorICSlot PropertyFeedbackSlot() const { |
1793 DCHECK(!FLAG_vector_ics || !property_feedback_slot_.IsInvalid()); | 1797 DCHECK(!FLAG_vector_ics || !property_feedback_slot_.IsInvalid()); |
1794 return property_feedback_slot_; | 1798 return property_feedback_slot_; |
1795 } | 1799 } |
(...skipping 24 matching lines...) Expand all Loading... |
1820 | 1824 |
1821 | 1825 |
1822 class Call FINAL : public Expression { | 1826 class Call FINAL : public Expression { |
1823 public: | 1827 public: |
1824 DECLARE_NODE_TYPE(Call) | 1828 DECLARE_NODE_TYPE(Call) |
1825 | 1829 |
1826 Expression* expression() const { return expression_; } | 1830 Expression* expression() const { return expression_; } |
1827 ZoneList<Expression*>* arguments() const { return arguments_; } | 1831 ZoneList<Expression*>* arguments() const { return arguments_; } |
1828 | 1832 |
1829 // Type feedback information. | 1833 // Type feedback information. |
1830 virtual FeedbackVectorRequirements ComputeFeedbackRequirements() OVERRIDE { | 1834 virtual FeedbackVectorRequirements ComputeFeedbackRequirements( |
1831 return FeedbackVectorRequirements(0, 1); | 1835 Isolate* isolate) OVERRIDE; |
1832 } | |
1833 virtual void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot) OVERRIDE { | 1836 virtual void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot) OVERRIDE { |
1834 call_feedback_slot_ = slot; | 1837 call_feedback_slot_ = slot; |
1835 } | 1838 } |
1836 | 1839 |
1837 bool HasCallFeedbackSlot() const { return !call_feedback_slot_.IsInvalid(); } | 1840 bool HasCallFeedbackSlot() const { return !call_feedback_slot_.IsInvalid(); } |
1838 FeedbackVectorICSlot CallFeedbackSlot() const { | 1841 FeedbackVectorICSlot CallFeedbackSlot() const { |
1839 DCHECK(!call_feedback_slot_.IsInvalid()); | 1842 DCHECK(!call_feedback_slot_.IsInvalid()); |
1840 return call_feedback_slot_; | 1843 return call_feedback_slot_; |
1841 } | 1844 } |
1842 | 1845 |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1933 | 1936 |
1934 | 1937 |
1935 class CallNew FINAL : public Expression { | 1938 class CallNew FINAL : public Expression { |
1936 public: | 1939 public: |
1937 DECLARE_NODE_TYPE(CallNew) | 1940 DECLARE_NODE_TYPE(CallNew) |
1938 | 1941 |
1939 Expression* expression() const { return expression_; } | 1942 Expression* expression() const { return expression_; } |
1940 ZoneList<Expression*>* arguments() const { return arguments_; } | 1943 ZoneList<Expression*>* arguments() const { return arguments_; } |
1941 | 1944 |
1942 // Type feedback information. | 1945 // Type feedback information. |
1943 virtual FeedbackVectorRequirements ComputeFeedbackRequirements() OVERRIDE { | 1946 virtual FeedbackVectorRequirements ComputeFeedbackRequirements( |
| 1947 Isolate* isolate) OVERRIDE { |
1944 return FeedbackVectorRequirements(FLAG_pretenuring_call_new ? 2 : 1, 0); | 1948 return FeedbackVectorRequirements(FLAG_pretenuring_call_new ? 2 : 1, 0); |
1945 } | 1949 } |
1946 virtual void SetFirstFeedbackSlot(FeedbackVectorSlot slot) OVERRIDE { | 1950 virtual void SetFirstFeedbackSlot(FeedbackVectorSlot slot) OVERRIDE { |
1947 callnew_feedback_slot_ = slot; | 1951 callnew_feedback_slot_ = slot; |
1948 } | 1952 } |
1949 | 1953 |
1950 FeedbackVectorSlot CallNewFeedbackSlot() { | 1954 FeedbackVectorSlot CallNewFeedbackSlot() { |
1951 DCHECK(!callnew_feedback_slot_.IsInvalid()); | 1955 DCHECK(!callnew_feedback_slot_.IsInvalid()); |
1952 return callnew_feedback_slot_; | 1956 return callnew_feedback_slot_; |
1953 } | 1957 } |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1998 public: | 2002 public: |
1999 DECLARE_NODE_TYPE(CallRuntime) | 2003 DECLARE_NODE_TYPE(CallRuntime) |
2000 | 2004 |
2001 Handle<String> name() const { return raw_name_->string(); } | 2005 Handle<String> name() const { return raw_name_->string(); } |
2002 const AstRawString* raw_name() const { return raw_name_; } | 2006 const AstRawString* raw_name() const { return raw_name_; } |
2003 const Runtime::Function* function() const { return function_; } | 2007 const Runtime::Function* function() const { return function_; } |
2004 ZoneList<Expression*>* arguments() const { return arguments_; } | 2008 ZoneList<Expression*>* arguments() const { return arguments_; } |
2005 bool is_jsruntime() const { return function_ == NULL; } | 2009 bool is_jsruntime() const { return function_ == NULL; } |
2006 | 2010 |
2007 // Type feedback information. | 2011 // Type feedback information. |
2008 virtual FeedbackVectorRequirements ComputeFeedbackRequirements() OVERRIDE { | 2012 virtual FeedbackVectorRequirements ComputeFeedbackRequirements( |
| 2013 Isolate* isolate) OVERRIDE { |
2009 return FeedbackVectorRequirements( | 2014 return FeedbackVectorRequirements( |
2010 0, (FLAG_vector_ics && is_jsruntime()) ? 1 : 0); | 2015 0, (FLAG_vector_ics && is_jsruntime()) ? 1 : 0); |
2011 } | 2016 } |
2012 virtual void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot) OVERRIDE { | 2017 virtual void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot) OVERRIDE { |
2013 callruntime_feedback_slot_ = slot; | 2018 callruntime_feedback_slot_ = slot; |
2014 } | 2019 } |
2015 | 2020 |
2016 FeedbackVectorICSlot CallRuntimeFeedbackSlot() { | 2021 FeedbackVectorICSlot CallRuntimeFeedbackSlot() { |
2017 DCHECK(!(FLAG_vector_ics && is_jsruntime()) || | 2022 DCHECK(!(FLAG_vector_ics && is_jsruntime()) || |
2018 !callruntime_feedback_slot_.IsInvalid()); | 2023 !callruntime_feedback_slot_.IsInvalid()); |
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2377 int index() const { | 2382 int index() const { |
2378 DCHECK_EQ(kDelegating, yield_kind()); | 2383 DCHECK_EQ(kDelegating, yield_kind()); |
2379 return index_; | 2384 return index_; |
2380 } | 2385 } |
2381 void set_index(int index) { | 2386 void set_index(int index) { |
2382 DCHECK_EQ(kDelegating, yield_kind()); | 2387 DCHECK_EQ(kDelegating, yield_kind()); |
2383 index_ = index; | 2388 index_ = index; |
2384 } | 2389 } |
2385 | 2390 |
2386 // Type feedback information. | 2391 // Type feedback information. |
2387 virtual FeedbackVectorRequirements ComputeFeedbackRequirements() OVERRIDE { | 2392 virtual FeedbackVectorRequirements ComputeFeedbackRequirements( |
| 2393 Isolate* isolate) OVERRIDE { |
2388 return FeedbackVectorRequirements( | 2394 return FeedbackVectorRequirements( |
2389 0, (FLAG_vector_ics && yield_kind() == kDelegating) ? 3 : 0); | 2395 0, (FLAG_vector_ics && yield_kind() == kDelegating) ? 3 : 0); |
2390 } | 2396 } |
2391 virtual void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot) OVERRIDE { | 2397 virtual void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot) OVERRIDE { |
2392 yield_first_feedback_slot_ = slot; | 2398 yield_first_feedback_slot_ = slot; |
2393 } | 2399 } |
2394 | 2400 |
2395 FeedbackVectorICSlot KeyedLoadFeedbackSlot() { | 2401 FeedbackVectorICSlot KeyedLoadFeedbackSlot() { |
2396 DCHECK(!FLAG_vector_ics || !yield_first_feedback_slot_.IsInvalid()); | 2402 DCHECK(!FLAG_vector_ics || !yield_first_feedback_slot_.IsInvalid()); |
2397 return yield_first_feedback_slot_; | 2403 return yield_first_feedback_slot_; |
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2714 class SuperReference FINAL : public Expression { | 2720 class SuperReference FINAL : public Expression { |
2715 public: | 2721 public: |
2716 DECLARE_NODE_TYPE(SuperReference) | 2722 DECLARE_NODE_TYPE(SuperReference) |
2717 | 2723 |
2718 VariableProxy* this_var() const { return this_var_; } | 2724 VariableProxy* this_var() const { return this_var_; } |
2719 | 2725 |
2720 static int num_ids() { return parent_num_ids() + 1; } | 2726 static int num_ids() { return parent_num_ids() + 1; } |
2721 TypeFeedbackId HomeObjectFeedbackId() { return TypeFeedbackId(local_id(0)); } | 2727 TypeFeedbackId HomeObjectFeedbackId() { return TypeFeedbackId(local_id(0)); } |
2722 | 2728 |
2723 // Type feedback information. | 2729 // Type feedback information. |
2724 virtual FeedbackVectorRequirements ComputeFeedbackRequirements() OVERRIDE { | 2730 virtual FeedbackVectorRequirements ComputeFeedbackRequirements( |
| 2731 Isolate* isolate) OVERRIDE { |
2725 return FeedbackVectorRequirements(0, FLAG_vector_ics ? 1 : 0); | 2732 return FeedbackVectorRequirements(0, FLAG_vector_ics ? 1 : 0); |
2726 } | 2733 } |
2727 virtual void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot) OVERRIDE { | 2734 virtual void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot) OVERRIDE { |
2728 homeobject_feedback_slot_ = slot; | 2735 homeobject_feedback_slot_ = slot; |
2729 } | 2736 } |
2730 | 2737 |
2731 FeedbackVectorICSlot HomeObjectFeedbackSlot() { | 2738 FeedbackVectorICSlot HomeObjectFeedbackSlot() { |
2732 DCHECK(!FLAG_vector_ics || !homeobject_feedback_slot_.IsInvalid()); | 2739 DCHECK(!FLAG_vector_ics || !homeobject_feedback_slot_.IsInvalid()); |
2733 return homeobject_feedback_slot_; | 2740 return homeobject_feedback_slot_; |
2734 } | 2741 } |
(...skipping 808 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3543 | 3550 |
3544 private: | 3551 private: |
3545 Zone* zone_; | 3552 Zone* zone_; |
3546 AstValueFactory* ast_value_factory_; | 3553 AstValueFactory* ast_value_factory_; |
3547 }; | 3554 }; |
3548 | 3555 |
3549 | 3556 |
3550 } } // namespace v8::internal | 3557 } } // namespace v8::internal |
3551 | 3558 |
3552 #endif // V8_AST_H_ | 3559 #endif // V8_AST_H_ |
OLD | NEW |