| 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 |