| 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_AST_H_ | 5 #ifndef V8_AST_AST_H_ |
| 6 #define V8_AST_AST_H_ | 6 #define V8_AST_AST_H_ |
| 7 | 7 |
| 8 #include "src/ast/ast-types.h" | 8 #include "src/ast/ast-types.h" |
| 9 #include "src/ast/ast-value-factory.h" | 9 #include "src/ast/ast-value-factory.h" |
| 10 #include "src/ast/modules.h" | 10 #include "src/ast/modules.h" |
| (...skipping 2558 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2569 int SourceSize() const { return end_position() - start_position(); } | 2569 int SourceSize() const { return end_position() - start_position(); } |
| 2570 bool is_declaration() const { return function_type() == kDeclaration; } | 2570 bool is_declaration() const { return function_type() == kDeclaration; } |
| 2571 bool is_named_expression() const { | 2571 bool is_named_expression() const { |
| 2572 return function_type() == kNamedExpression; | 2572 return function_type() == kNamedExpression; |
| 2573 } | 2573 } |
| 2574 bool is_anonymous_expression() const { | 2574 bool is_anonymous_expression() const { |
| 2575 return function_type() == kAnonymousExpression; | 2575 return function_type() == kAnonymousExpression; |
| 2576 } | 2576 } |
| 2577 LanguageMode language_mode() const; | 2577 LanguageMode language_mode() const; |
| 2578 | 2578 |
| 2579 void AssignFeedbackVectorSlots(Isolate* isolate, FeedbackVectorSpec* spec, | |
| 2580 FeedbackVectorSlotCache* cache) { | |
| 2581 // The + 1 is because we need an array with room for the literals | |
| 2582 // as well as the feedback vector. | |
| 2583 literal_feedback_slot_ = | |
| 2584 spec->AddCreateClosureSlot(materialized_literal_count_ + 1); | |
| 2585 } | |
| 2586 | |
| 2587 FeedbackVectorSlot LiteralFeedbackSlot() const { | |
| 2588 return literal_feedback_slot_; | |
| 2589 } | |
| 2590 | |
| 2591 static bool NeedsHomeObject(Expression* expr); | 2579 static bool NeedsHomeObject(Expression* expr); |
| 2592 | 2580 |
| 2593 int materialized_literal_count() { return materialized_literal_count_; } | 2581 int materialized_literal_count() { return materialized_literal_count_; } |
| 2594 int expected_property_count() { return expected_property_count_; } | 2582 int expected_property_count() { return expected_property_count_; } |
| 2595 int parameter_count() { return parameter_count_; } | 2583 int parameter_count() { return parameter_count_; } |
| 2596 int function_length() { return function_length_; } | 2584 int function_length() { return function_length_; } |
| 2597 | 2585 |
| 2598 bool AllowsLazyCompilation(); | 2586 bool AllowsLazyCompilation(); |
| 2599 | 2587 |
| 2600 Handle<String> debug_name() const { | 2588 Handle<String> debug_name() const { |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2748 int yield_count_; | 2736 int yield_count_; |
| 2749 bool has_braces_; | 2737 bool has_braces_; |
| 2750 | 2738 |
| 2751 const AstString* raw_name_; | 2739 const AstString* raw_name_; |
| 2752 DeclarationScope* scope_; | 2740 DeclarationScope* scope_; |
| 2753 ZoneList<Statement*>* body_; | 2741 ZoneList<Statement*>* body_; |
| 2754 const AstString* raw_inferred_name_; | 2742 const AstString* raw_inferred_name_; |
| 2755 Handle<String> inferred_name_; | 2743 Handle<String> inferred_name_; |
| 2756 AstProperties ast_properties_; | 2744 AstProperties ast_properties_; |
| 2757 int function_literal_id_; | 2745 int function_literal_id_; |
| 2758 FeedbackVectorSlot literal_feedback_slot_; | |
| 2759 }; | 2746 }; |
| 2760 | 2747 |
| 2761 // Property is used for passing information | 2748 // Property is used for passing information |
| 2762 // about a class literal's properties from the parser to the code generator. | 2749 // about a class literal's properties from the parser to the code generator. |
| 2763 class ClassLiteralProperty final : public LiteralProperty { | 2750 class ClassLiteralProperty final : public LiteralProperty { |
| 2764 public: | 2751 public: |
| 2765 enum Kind : uint8_t { METHOD, GETTER, SETTER, FIELD }; | 2752 enum Kind : uint8_t { METHOD, GETTER, SETTER, FIELD }; |
| 2766 | 2753 |
| 2767 Kind kind() const { return kind_; } | 2754 Kind kind() const { return kind_; } |
| 2768 | 2755 |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2839 : public BitField<bool, Expression::kNextBitFieldIndex, 1> {}; | 2826 : public BitField<bool, Expression::kNextBitFieldIndex, 1> {}; |
| 2840 class HasStaticComputedNames | 2827 class HasStaticComputedNames |
| 2841 : public BitField<bool, HasNameStaticProperty::kNext, 1> {}; | 2828 : public BitField<bool, HasNameStaticProperty::kNext, 1> {}; |
| 2842 }; | 2829 }; |
| 2843 | 2830 |
| 2844 | 2831 |
| 2845 class NativeFunctionLiteral final : public Expression { | 2832 class NativeFunctionLiteral final : public Expression { |
| 2846 public: | 2833 public: |
| 2847 Handle<String> name() const { return name_->string(); } | 2834 Handle<String> name() const { return name_->string(); } |
| 2848 v8::Extension* extension() const { return extension_; } | 2835 v8::Extension* extension() const { return extension_; } |
| 2849 FeedbackVectorSlot LiteralFeedbackSlot() const { | |
| 2850 return literal_feedback_slot_; | |
| 2851 } | |
| 2852 | |
| 2853 void AssignFeedbackVectorSlots(Isolate* isolate, FeedbackVectorSpec* spec, | |
| 2854 FeedbackVectorSlotCache* cache) { | |
| 2855 // 0 is a magic number here. It means we are holding the literals | |
| 2856 // array for a native function literal, which needs to be | |
| 2857 // the empty literals array. | |
| 2858 // TODO(mvstanton): The FeedbackVectorSlotCache can be adapted | |
| 2859 // to always return the same slot for this case. | |
| 2860 literal_feedback_slot_ = spec->AddCreateClosureSlot(0); | |
| 2861 } | |
| 2862 | 2836 |
| 2863 private: | 2837 private: |
| 2864 friend class AstNodeFactory; | 2838 friend class AstNodeFactory; |
| 2865 | 2839 |
| 2866 NativeFunctionLiteral(const AstRawString* name, v8::Extension* extension, | 2840 NativeFunctionLiteral(const AstRawString* name, v8::Extension* extension, |
| 2867 int pos) | 2841 int pos) |
| 2868 : Expression(pos, kNativeFunctionLiteral), | 2842 : Expression(pos, kNativeFunctionLiteral), |
| 2869 name_(name), | 2843 name_(name), |
| 2870 extension_(extension) {} | 2844 extension_(extension) {} |
| 2871 | 2845 |
| 2872 const AstRawString* name_; | 2846 const AstRawString* name_; |
| 2873 v8::Extension* extension_; | 2847 v8::Extension* extension_; |
| 2874 FeedbackVectorSlot literal_feedback_slot_; | |
| 2875 }; | 2848 }; |
| 2876 | 2849 |
| 2877 | 2850 |
| 2878 class ThisFunction final : public Expression { | 2851 class ThisFunction final : public Expression { |
| 2879 private: | 2852 private: |
| 2880 friend class AstNodeFactory; | 2853 friend class AstNodeFactory; |
| 2881 explicit ThisFunction(int pos) : Expression(pos, kThisFunction) {} | 2854 explicit ThisFunction(int pos) : Expression(pos, kThisFunction) {} |
| 2882 }; | 2855 }; |
| 2883 | 2856 |
| 2884 | 2857 |
| (...skipping 745 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3630 : NULL; \ | 3603 : NULL; \ |
| 3631 } | 3604 } |
| 3632 AST_NODE_LIST(DECLARE_NODE_FUNCTIONS) | 3605 AST_NODE_LIST(DECLARE_NODE_FUNCTIONS) |
| 3633 #undef DECLARE_NODE_FUNCTIONS | 3606 #undef DECLARE_NODE_FUNCTIONS |
| 3634 | 3607 |
| 3635 | 3608 |
| 3636 } // namespace internal | 3609 } // namespace internal |
| 3637 } // namespace v8 | 3610 } // namespace v8 |
| 3638 | 3611 |
| 3639 #endif // V8_AST_AST_H_ | 3612 #endif // V8_AST_AST_H_ |
| OLD | NEW |