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/assembler.h" | 8 #include "src/assembler.h" |
9 #include "src/ast-value-factory.h" | 9 #include "src/ast-value-factory.h" |
10 #include "src/bailout-reason.h" | 10 #include "src/bailout-reason.h" |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 Flags& flags() { return flags_; } | 190 Flags& flags() { return flags_; } |
191 Flags flags() const { return flags_; } | 191 Flags flags() const { return flags_; } |
192 int node_count() { return node_count_; } | 192 int node_count() { return node_count_; } |
193 void add_node_count(int count) { node_count_ += count; } | 193 void add_node_count(int count) { node_count_ += count; } |
194 | 194 |
195 int slots() const { return spec_.slots(); } | 195 int slots() const { return spec_.slots(); } |
196 void increase_slots(int count) { spec_.increase_slots(count); } | 196 void increase_slots(int count) { spec_.increase_slots(count); } |
197 | 197 |
198 int ic_slots() const { return spec_.ic_slots(); } | 198 int ic_slots() const { return spec_.ic_slots(); } |
199 void increase_ic_slots(int count) { spec_.increase_ic_slots(count); } | 199 void increase_ic_slots(int count) { spec_.increase_ic_slots(count); } |
200 void SetKind(int ic_slot, Code::Kind kind) { spec_.SetKind(ic_slot, kind); } | 200 void SetKind(int ic_slot, FeedbackVectorSlotKind kind) { |
| 201 spec_.SetKind(ic_slot, kind); |
| 202 } |
201 const ZoneFeedbackVectorSpec* get_spec() const { return &spec_; } | 203 const ZoneFeedbackVectorSpec* get_spec() const { return &spec_; } |
202 | 204 |
203 private: | 205 private: |
204 Flags flags_; | 206 Flags flags_; |
205 int node_count_; | 207 int node_count_; |
206 ZoneFeedbackVectorSpec spec_; | 208 ZoneFeedbackVectorSpec spec_; |
207 }; | 209 }; |
208 | 210 |
209 DEFINE_OPERATORS_FOR_FLAGS(AstProperties::Flags) | 211 DEFINE_OPERATORS_FOR_FLAGS(AstProperties::Flags) |
210 | 212 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
250 virtual FeedbackVectorRequirements ComputeFeedbackRequirements( | 252 virtual FeedbackVectorRequirements ComputeFeedbackRequirements( |
251 Isolate* isolate, const ICSlotCache* cache) { | 253 Isolate* isolate, const ICSlotCache* cache) { |
252 return FeedbackVectorRequirements(0, 0); | 254 return FeedbackVectorRequirements(0, 0); |
253 } | 255 } |
254 virtual void SetFirstFeedbackSlot(FeedbackVectorSlot slot) { UNREACHABLE(); } | 256 virtual void SetFirstFeedbackSlot(FeedbackVectorSlot slot) { UNREACHABLE(); } |
255 virtual void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot, | 257 virtual void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot, |
256 ICSlotCache* cache) { | 258 ICSlotCache* cache) { |
257 UNREACHABLE(); | 259 UNREACHABLE(); |
258 } | 260 } |
259 // Each ICSlot stores a kind of IC which the participating node should know. | 261 // Each ICSlot stores a kind of IC which the participating node should know. |
260 virtual Code::Kind FeedbackICSlotKind(int index) { | 262 virtual FeedbackVectorSlotKind FeedbackICSlotKind(int index) { |
261 UNREACHABLE(); | 263 UNREACHABLE(); |
262 return Code::NUMBER_OF_KINDS; | 264 return FeedbackVectorSlotKind::UNUSED; |
263 } | 265 } |
264 | 266 |
265 private: | 267 private: |
266 // Hidden to prevent accidental usage. It would have to load the | 268 // Hidden to prevent accidental usage. It would have to load the |
267 // current zone from the TLS. | 269 // current zone from the TLS. |
268 void* operator new(size_t size); | 270 void* operator new(size_t size); |
269 | 271 |
270 friend class CaseClause; // Generates AST IDs. | 272 friend class CaseClause; // Generates AST IDs. |
271 | 273 |
272 int position_; | 274 int position_; |
(...skipping 532 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
805 | 807 |
806 Expression* each() const { return each_; } | 808 Expression* each() const { return each_; } |
807 Expression* subject() const { return subject_; } | 809 Expression* subject() const { return subject_; } |
808 | 810 |
809 FeedbackVectorRequirements ComputeFeedbackRequirements( | 811 FeedbackVectorRequirements ComputeFeedbackRequirements( |
810 Isolate* isolate, const ICSlotCache* cache) override; | 812 Isolate* isolate, const ICSlotCache* cache) override; |
811 void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot, | 813 void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot, |
812 ICSlotCache* cache) override { | 814 ICSlotCache* cache) override { |
813 each_slot_ = slot; | 815 each_slot_ = slot; |
814 } | 816 } |
815 Code::Kind FeedbackICSlotKind(int index) override; | 817 FeedbackVectorSlotKind FeedbackICSlotKind(int index) override; |
816 FeedbackVectorICSlot EachFeedbackSlot() const { return each_slot_; } | 818 FeedbackVectorICSlot EachFeedbackSlot() const { return each_slot_; } |
817 | 819 |
818 protected: | 820 protected: |
819 ForEachStatement(Zone* zone, ZoneList<const AstRawString*>* labels, int pos) | 821 ForEachStatement(Zone* zone, ZoneList<const AstRawString*>* labels, int pos) |
820 : IterationStatement(zone, labels, pos), | 822 : IterationStatement(zone, labels, pos), |
821 each_(NULL), | 823 each_(NULL), |
822 subject_(NULL), | 824 subject_(NULL), |
823 each_slot_(FeedbackVectorICSlot::Invalid()) {} | 825 each_slot_(FeedbackVectorICSlot::Invalid()) {} |
824 | 826 |
825 private: | 827 private: |
(...skipping 721 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1547 int num_ids() const { return parent_num_ids() + 1 + properties()->length(); } | 1549 int num_ids() const { return parent_num_ids() + 1 + properties()->length(); } |
1548 | 1550 |
1549 // Object literals need one feedback slot for each non-trivial value, as well | 1551 // Object literals need one feedback slot for each non-trivial value, as well |
1550 // as some slots for home objects. | 1552 // as some slots for home objects. |
1551 FeedbackVectorRequirements ComputeFeedbackRequirements( | 1553 FeedbackVectorRequirements ComputeFeedbackRequirements( |
1552 Isolate* isolate, const ICSlotCache* cache) override; | 1554 Isolate* isolate, const ICSlotCache* cache) override; |
1553 void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot, | 1555 void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot, |
1554 ICSlotCache* cache) override { | 1556 ICSlotCache* cache) override { |
1555 slot_ = slot; | 1557 slot_ = slot; |
1556 } | 1558 } |
1557 Code::Kind FeedbackICSlotKind(int index) override { return Code::STORE_IC; } | 1559 FeedbackVectorSlotKind FeedbackICSlotKind(int index) override { |
| 1560 return FeedbackVectorSlotKind::STORE_IC; |
| 1561 } |
1558 | 1562 |
1559 // After feedback slots were assigned, propagate information to the properties | 1563 // After feedback slots were assigned, propagate information to the properties |
1560 // which need it. | 1564 // which need it. |
1561 void LayoutFeedbackSlots(); | 1565 void LayoutFeedbackSlots(); |
1562 | 1566 |
1563 protected: | 1567 protected: |
1564 ObjectLiteral(Zone* zone, ZoneList<Property*>* properties, int literal_index, | 1568 ObjectLiteral(Zone* zone, ZoneList<Property*>* properties, int literal_index, |
1565 int boilerplate_properties, bool has_function, bool is_strong, | 1569 int boilerplate_properties, bool has_function, bool is_strong, |
1566 int pos) | 1570 int pos) |
1567 : MaterializedLiteral(zone, literal_index, is_strong, pos), | 1571 : MaterializedLiteral(zone, literal_index, is_strong, pos), |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1725 | 1729 |
1726 bool UsesVariableFeedbackSlot() const { | 1730 bool UsesVariableFeedbackSlot() const { |
1727 return var()->IsUnallocated() || var()->IsLookupSlot(); | 1731 return var()->IsUnallocated() || var()->IsLookupSlot(); |
1728 } | 1732 } |
1729 | 1733 |
1730 virtual FeedbackVectorRequirements ComputeFeedbackRequirements( | 1734 virtual FeedbackVectorRequirements ComputeFeedbackRequirements( |
1731 Isolate* isolate, const ICSlotCache* cache) override; | 1735 Isolate* isolate, const ICSlotCache* cache) override; |
1732 | 1736 |
1733 void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot, | 1737 void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot, |
1734 ICSlotCache* cache) override; | 1738 ICSlotCache* cache) override; |
1735 Code::Kind FeedbackICSlotKind(int index) override { return Code::LOAD_IC; } | 1739 FeedbackVectorSlotKind FeedbackICSlotKind(int index) override { |
| 1740 return FeedbackVectorSlotKind::LOAD_IC; |
| 1741 } |
1736 FeedbackVectorICSlot VariableFeedbackSlot() { | 1742 FeedbackVectorICSlot VariableFeedbackSlot() { |
1737 return variable_feedback_slot_; | 1743 return variable_feedback_slot_; |
1738 } | 1744 } |
1739 | 1745 |
1740 static int num_ids() { return parent_num_ids() + 1; } | 1746 static int num_ids() { return parent_num_ids() + 1; } |
1741 BailoutId BeforeId() const { return BailoutId(local_id(0)); } | 1747 BailoutId BeforeId() const { return BailoutId(local_id(0)); } |
1742 | 1748 |
1743 protected: | 1749 protected: |
1744 VariableProxy(Zone* zone, Variable* var, int start_position, | 1750 VariableProxy(Zone* zone, Variable* var, int start_position, |
1745 int end_position); | 1751 int end_position); |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1830 bool IsSuperAccess() { return obj()->IsSuperPropertyReference(); } | 1836 bool IsSuperAccess() { return obj()->IsSuperPropertyReference(); } |
1831 | 1837 |
1832 virtual FeedbackVectorRequirements ComputeFeedbackRequirements( | 1838 virtual FeedbackVectorRequirements ComputeFeedbackRequirements( |
1833 Isolate* isolate, const ICSlotCache* cache) override { | 1839 Isolate* isolate, const ICSlotCache* cache) override { |
1834 return FeedbackVectorRequirements(0, 1); | 1840 return FeedbackVectorRequirements(0, 1); |
1835 } | 1841 } |
1836 void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot, | 1842 void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot, |
1837 ICSlotCache* cache) override { | 1843 ICSlotCache* cache) override { |
1838 property_feedback_slot_ = slot; | 1844 property_feedback_slot_ = slot; |
1839 } | 1845 } |
1840 Code::Kind FeedbackICSlotKind(int index) override { | 1846 FeedbackVectorSlotKind FeedbackICSlotKind(int index) override { |
1841 return key()->IsPropertyName() ? Code::LOAD_IC : Code::KEYED_LOAD_IC; | 1847 return key()->IsPropertyName() ? FeedbackVectorSlotKind::LOAD_IC |
| 1848 : FeedbackVectorSlotKind::KEYED_LOAD_IC; |
1842 } | 1849 } |
1843 | 1850 |
1844 FeedbackVectorICSlot PropertyFeedbackSlot() const { | 1851 FeedbackVectorICSlot PropertyFeedbackSlot() const { |
1845 return property_feedback_slot_; | 1852 return property_feedback_slot_; |
1846 } | 1853 } |
1847 | 1854 |
1848 static LhsKind GetAssignType(Property* property) { | 1855 static LhsKind GetAssignType(Property* property) { |
1849 if (property == NULL) return VARIABLE; | 1856 if (property == NULL) return VARIABLE; |
1850 bool super_access = property->IsSuperAccess(); | 1857 bool super_access = property->IsSuperAccess(); |
1851 return (property->key()->IsPropertyName()) | 1858 return (property->key()->IsPropertyName()) |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1887 ZoneList<Expression*>* arguments() const { return arguments_; } | 1894 ZoneList<Expression*>* arguments() const { return arguments_; } |
1888 | 1895 |
1889 // Type feedback information. | 1896 // Type feedback information. |
1890 virtual FeedbackVectorRequirements ComputeFeedbackRequirements( | 1897 virtual FeedbackVectorRequirements ComputeFeedbackRequirements( |
1891 Isolate* isolate, const ICSlotCache* cache) override; | 1898 Isolate* isolate, const ICSlotCache* cache) override; |
1892 void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot, | 1899 void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot, |
1893 ICSlotCache* cache) override { | 1900 ICSlotCache* cache) override { |
1894 ic_slot_ = slot; | 1901 ic_slot_ = slot; |
1895 } | 1902 } |
1896 void SetFirstFeedbackSlot(FeedbackVectorSlot slot) override { slot_ = slot; } | 1903 void SetFirstFeedbackSlot(FeedbackVectorSlot slot) override { slot_ = slot; } |
1897 Code::Kind FeedbackICSlotKind(int index) override { return Code::CALL_IC; } | 1904 FeedbackVectorSlotKind FeedbackICSlotKind(int index) override { |
| 1905 return FeedbackVectorSlotKind::CALL_IC; |
| 1906 } |
1898 | 1907 |
1899 FeedbackVectorSlot CallFeedbackSlot() const { return slot_; } | 1908 FeedbackVectorSlot CallFeedbackSlot() const { return slot_; } |
1900 | 1909 |
1901 FeedbackVectorICSlot CallFeedbackICSlot() const { return ic_slot_; } | 1910 FeedbackVectorICSlot CallFeedbackICSlot() const { return ic_slot_; } |
1902 | 1911 |
1903 SmallMapList* GetReceiverTypes() override { | 1912 SmallMapList* GetReceiverTypes() override { |
1904 if (expression()->IsProperty()) { | 1913 if (expression()->IsProperty()) { |
1905 return expression()->AsProperty()->GetReceiverTypes(); | 1914 return expression()->AsProperty()->GetReceiverTypes(); |
1906 } | 1915 } |
1907 return NULL; | 1916 return NULL; |
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2237 TypeFeedbackId CountStoreFeedbackId() const { | 2246 TypeFeedbackId CountStoreFeedbackId() const { |
2238 return TypeFeedbackId(local_id(3)); | 2247 return TypeFeedbackId(local_id(3)); |
2239 } | 2248 } |
2240 | 2249 |
2241 FeedbackVectorRequirements ComputeFeedbackRequirements( | 2250 FeedbackVectorRequirements ComputeFeedbackRequirements( |
2242 Isolate* isolate, const ICSlotCache* cache) override; | 2251 Isolate* isolate, const ICSlotCache* cache) override; |
2243 void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot, | 2252 void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot, |
2244 ICSlotCache* cache) override { | 2253 ICSlotCache* cache) override { |
2245 slot_ = slot; | 2254 slot_ = slot; |
2246 } | 2255 } |
2247 Code::Kind FeedbackICSlotKind(int index) override; | 2256 FeedbackVectorSlotKind FeedbackICSlotKind(int index) override; |
2248 FeedbackVectorICSlot CountSlot() const { return slot_; } | 2257 FeedbackVectorICSlot CountSlot() const { return slot_; } |
2249 | 2258 |
2250 protected: | 2259 protected: |
2251 CountOperation(Zone* zone, Token::Value op, bool is_prefix, Expression* expr, | 2260 CountOperation(Zone* zone, Token::Value op, bool is_prefix, Expression* expr, |
2252 int pos) | 2261 int pos) |
2253 : Expression(zone, pos), | 2262 : Expression(zone, pos), |
2254 bit_field_( | 2263 bit_field_( |
2255 IsPrefixField::encode(is_prefix) | KeyTypeField::encode(ELEMENT) | | 2264 IsPrefixField::encode(is_prefix) | KeyTypeField::encode(ELEMENT) | |
2256 StoreModeField::encode(STANDARD_STORE) | TokenField::encode(op)), | 2265 StoreModeField::encode(STANDARD_STORE) | TokenField::encode(op)), |
2257 type_(NULL), | 2266 type_(NULL), |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2415 void set_store_mode(KeyedAccessStoreMode mode) { | 2424 void set_store_mode(KeyedAccessStoreMode mode) { |
2416 bit_field_ = StoreModeField::update(bit_field_, mode); | 2425 bit_field_ = StoreModeField::update(bit_field_, mode); |
2417 } | 2426 } |
2418 | 2427 |
2419 FeedbackVectorRequirements ComputeFeedbackRequirements( | 2428 FeedbackVectorRequirements ComputeFeedbackRequirements( |
2420 Isolate* isolate, const ICSlotCache* cache) override; | 2429 Isolate* isolate, const ICSlotCache* cache) override; |
2421 void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot, | 2430 void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot, |
2422 ICSlotCache* cache) override { | 2431 ICSlotCache* cache) override { |
2423 slot_ = slot; | 2432 slot_ = slot; |
2424 } | 2433 } |
2425 Code::Kind FeedbackICSlotKind(int index) override; | 2434 FeedbackVectorSlotKind FeedbackICSlotKind(int index) override; |
2426 FeedbackVectorICSlot AssignmentSlot() const { return slot_; } | 2435 FeedbackVectorICSlot AssignmentSlot() const { return slot_; } |
2427 | 2436 |
2428 protected: | 2437 protected: |
2429 Assignment(Zone* zone, Token::Value op, Expression* target, Expression* value, | 2438 Assignment(Zone* zone, Token::Value op, Expression* target, Expression* value, |
2430 int pos); | 2439 int pos); |
2431 static int parent_num_ids() { return Expression::num_ids(); } | 2440 static int parent_num_ids() { return Expression::num_ids(); } |
2432 | 2441 |
2433 private: | 2442 private: |
2434 int local_id(int n) const { return base_id() + parent_num_ids() + n; } | 2443 int local_id(int n) const { return base_id() + parent_num_ids() + n; } |
2435 | 2444 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2467 // Type feedback information. | 2476 // Type feedback information. |
2468 bool HasFeedbackSlots() const { return yield_kind() == kDelegating; } | 2477 bool HasFeedbackSlots() const { return yield_kind() == kDelegating; } |
2469 virtual FeedbackVectorRequirements ComputeFeedbackRequirements( | 2478 virtual FeedbackVectorRequirements ComputeFeedbackRequirements( |
2470 Isolate* isolate, const ICSlotCache* cache) override { | 2479 Isolate* isolate, const ICSlotCache* cache) override { |
2471 return FeedbackVectorRequirements(0, HasFeedbackSlots() ? 3 : 0); | 2480 return FeedbackVectorRequirements(0, HasFeedbackSlots() ? 3 : 0); |
2472 } | 2481 } |
2473 void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot, | 2482 void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot, |
2474 ICSlotCache* cache) override { | 2483 ICSlotCache* cache) override { |
2475 yield_first_feedback_slot_ = slot; | 2484 yield_first_feedback_slot_ = slot; |
2476 } | 2485 } |
2477 Code::Kind FeedbackICSlotKind(int index) override { | 2486 FeedbackVectorSlotKind FeedbackICSlotKind(int index) override { |
2478 return index == 0 ? Code::KEYED_LOAD_IC : Code::LOAD_IC; | 2487 return index == 0 ? FeedbackVectorSlotKind::KEYED_LOAD_IC |
| 2488 : FeedbackVectorSlotKind::LOAD_IC; |
2479 } | 2489 } |
2480 | 2490 |
2481 FeedbackVectorICSlot KeyedLoadFeedbackSlot() { | 2491 FeedbackVectorICSlot KeyedLoadFeedbackSlot() { |
2482 DCHECK(!HasFeedbackSlots() || !yield_first_feedback_slot_.IsInvalid()); | 2492 DCHECK(!HasFeedbackSlots() || !yield_first_feedback_slot_.IsInvalid()); |
2483 return yield_first_feedback_slot_; | 2493 return yield_first_feedback_slot_; |
2484 } | 2494 } |
2485 | 2495 |
2486 FeedbackVectorICSlot DoneFeedbackSlot() { | 2496 FeedbackVectorICSlot DoneFeedbackSlot() { |
2487 return KeyedLoadFeedbackSlot().next(); | 2497 return KeyedLoadFeedbackSlot().next(); |
2488 } | 2498 } |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2742 int num_ids() const { return parent_num_ids() + 4 + properties()->length(); } | 2752 int num_ids() const { return parent_num_ids() + 4 + properties()->length(); } |
2743 | 2753 |
2744 // Object literals need one feedback slot for each non-trivial value, as well | 2754 // Object literals need one feedback slot for each non-trivial value, as well |
2745 // as some slots for home objects. | 2755 // as some slots for home objects. |
2746 FeedbackVectorRequirements ComputeFeedbackRequirements( | 2756 FeedbackVectorRequirements ComputeFeedbackRequirements( |
2747 Isolate* isolate, const ICSlotCache* cache) override; | 2757 Isolate* isolate, const ICSlotCache* cache) override; |
2748 void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot, | 2758 void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot, |
2749 ICSlotCache* cache) override { | 2759 ICSlotCache* cache) override { |
2750 slot_ = slot; | 2760 slot_ = slot; |
2751 } | 2761 } |
2752 Code::Kind FeedbackICSlotKind(int index) override { return Code::STORE_IC; } | 2762 FeedbackVectorSlotKind FeedbackICSlotKind(int index) override { |
| 2763 return FeedbackVectorSlotKind::STORE_IC; |
| 2764 } |
2753 | 2765 |
2754 bool NeedsProxySlot() const { | 2766 bool NeedsProxySlot() const { |
2755 return FLAG_vector_stores && scope() != NULL && | 2767 return FLAG_vector_stores && scope() != NULL && |
2756 class_variable_proxy()->var()->IsUnallocated(); | 2768 class_variable_proxy()->var()->IsUnallocated(); |
2757 } | 2769 } |
2758 | 2770 |
2759 FeedbackVectorICSlot ProxySlot() const { return slot_; } | 2771 FeedbackVectorICSlot ProxySlot() const { return slot_; } |
2760 | 2772 |
2761 // After feedback slots were assigned, propagate information to the properties | 2773 // After feedback slots were assigned, propagate information to the properties |
2762 // which need it. | 2774 // which need it. |
(...skipping 966 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3729 // ZoneObjects which need to persist until scope analysis must be allocated in | 3741 // ZoneObjects which need to persist until scope analysis must be allocated in |
3730 // the parser-level zone. | 3742 // the parser-level zone. |
3731 Zone* parser_zone_; | 3743 Zone* parser_zone_; |
3732 AstValueFactory* ast_value_factory_; | 3744 AstValueFactory* ast_value_factory_; |
3733 }; | 3745 }; |
3734 | 3746 |
3735 | 3747 |
3736 } } // namespace v8::internal | 3748 } } // namespace v8::internal |
3737 | 3749 |
3738 #endif // V8_AST_H_ | 3750 #endif // V8_AST_H_ |
OLD | NEW |