Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: src/ast/ast.h

Issue 2557593004: [ignition] desugar GetIterator() via bytecode rather than via AST (Closed)
Patch Set: georg's comments Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/asmjs/asm-wasm-builder.cc ('k') | src/ast/ast-expression-rewriter.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 V(CallRuntime) \ 95 V(CallRuntime) \
96 V(UnaryOperation) \ 96 V(UnaryOperation) \
97 V(BinaryOperation) \ 97 V(BinaryOperation) \
98 V(CompareOperation) \ 98 V(CompareOperation) \
99 V(Spread) \ 99 V(Spread) \
100 V(ThisFunction) \ 100 V(ThisFunction) \
101 V(SuperPropertyReference) \ 101 V(SuperPropertyReference) \
102 V(SuperCallReference) \ 102 V(SuperCallReference) \
103 V(CaseClause) \ 103 V(CaseClause) \
104 V(EmptyParentheses) \ 104 V(EmptyParentheses) \
105 V(GetIterator) \
105 V(DoExpression) \ 106 V(DoExpression) \
106 V(RewritableExpression) 107 V(RewritableExpression)
107 108
108 #define AST_NODE_LIST(V) \ 109 #define AST_NODE_LIST(V) \
109 DECLARATION_NODE_LIST(V) \ 110 DECLARATION_NODE_LIST(V) \
110 STATEMENT_NODE_LIST(V) \ 111 STATEMENT_NODE_LIST(V) \
111 EXPRESSION_NODE_LIST(V) 112 EXPRESSION_NODE_LIST(V)
112 113
113 // Forward declarations 114 // Forward declarations
114 class AstNodeFactory; 115 class AstNodeFactory;
(...skipping 2814 matching lines...) Expand 10 before | Expand all | Expand 10 after
2929 2930
2930 // This class is produced when parsing the () in arrow functions without any 2931 // This class is produced when parsing the () in arrow functions without any
2931 // arguments and is not actually a valid expression. 2932 // arguments and is not actually a valid expression.
2932 class EmptyParentheses final : public Expression { 2933 class EmptyParentheses final : public Expression {
2933 private: 2934 private:
2934 friend class AstNodeFactory; 2935 friend class AstNodeFactory;
2935 2936
2936 explicit EmptyParentheses(int pos) : Expression(pos, kEmptyParentheses) {} 2937 explicit EmptyParentheses(int pos) : Expression(pos, kEmptyParentheses) {}
2937 }; 2938 };
2938 2939
2940 // Represents the spec operation `GetIterator()`
2941 // (defined at https://tc39.github.io/ecma262/#sec-getiterator). Ignition
2942 // desugars this into a LoadIC / JSLoadNamed, CallIC, and a type-check to
2943 // validate return value of the Symbol.iterator() call.
2944 class GetIterator final : public Expression {
2945 public:
2946 Expression* iterable() const { return iterable_; }
2947 void set_iterable(Expression* iterable) { iterable_ = iterable; }
2939 2948
2949 static int num_ids() { return parent_num_ids(); }
2950
2951 void AssignFeedbackVectorSlots(Isolate* isolate, FeedbackVectorSpec* spec,
2952 FeedbackVectorSlotCache* cache) {
2953 iterator_property_feedback_slot_ =
2954 spec->AddSlot(FeedbackVectorSlotKind::LOAD_IC);
2955 iterator_call_feedback_slot_ =
2956 spec->AddSlot(FeedbackVectorSlotKind::CALL_IC);
2957 }
2958
2959 FeedbackVectorSlot IteratorPropertyFeedbackSlot() const {
2960 return iterator_property_feedback_slot_;
2961 }
2962
2963 FeedbackVectorSlot IteratorCallFeedbackSlot() const {
2964 return iterator_call_feedback_slot_;
2965 }
2966
2967 private:
2968 friend class AstNodeFactory;
2969
2970 explicit GetIterator(Expression* iterable, int pos)
2971 : Expression(pos, kGetIterator), iterable_(iterable) {}
2972
2973 Expression* iterable_;
2974 FeedbackVectorSlot iterator_property_feedback_slot_;
2975 FeedbackVectorSlot iterator_call_feedback_slot_;
2976 };
2940 2977
2941 // ---------------------------------------------------------------------------- 2978 // ----------------------------------------------------------------------------
2942 // Basic visitor 2979 // Basic visitor
2943 // Sub-class should parametrize AstVisitor with itself, e.g.: 2980 // Sub-class should parametrize AstVisitor with itself, e.g.:
2944 // class SpecificVisitor : public AstVisitor<SpecificVisitor> { ... } 2981 // class SpecificVisitor : public AstVisitor<SpecificVisitor> { ... }
2945 2982
2946 template <class Subclass> 2983 template <class Subclass>
2947 class AstVisitor BASE_EMBEDDED { 2984 class AstVisitor BASE_EMBEDDED {
2948 public: 2985 public:
2949 void Visit(AstNode* node) { impl()->Visit(node); } 2986 void Visit(AstNode* node) { impl()->Visit(node); }
(...skipping 562 matching lines...) Expand 10 before | Expand all | Expand 10 after
3512 VariableProxy* this_function_var, 3549 VariableProxy* this_function_var,
3513 int pos) { 3550 int pos) {
3514 return new (zone_) 3551 return new (zone_)
3515 SuperCallReference(this_var, new_target_var, this_function_var, pos); 3552 SuperCallReference(this_var, new_target_var, this_function_var, pos);
3516 } 3553 }
3517 3554
3518 EmptyParentheses* NewEmptyParentheses(int pos) { 3555 EmptyParentheses* NewEmptyParentheses(int pos) {
3519 return new (zone_) EmptyParentheses(pos); 3556 return new (zone_) EmptyParentheses(pos);
3520 } 3557 }
3521 3558
3559 GetIterator* NewGetIterator(Expression* iterable, int pos) {
3560 return new (zone_) GetIterator(iterable, pos);
3561 }
3562
3522 Zone* zone() const { return zone_; } 3563 Zone* zone() const { return zone_; }
3523 void set_zone(Zone* zone) { zone_ = zone; } 3564 void set_zone(Zone* zone) { zone_ = zone; }
3524 3565
3525 // Handles use of temporary zones when parsing inner function bodies. 3566 // Handles use of temporary zones when parsing inner function bodies.
3526 class BodyScope { 3567 class BodyScope {
3527 public: 3568 public:
3528 BodyScope(AstNodeFactory* factory, Zone* temp_zone, bool use_temp_zone) 3569 BodyScope(AstNodeFactory* factory, Zone* temp_zone, bool use_temp_zone)
3529 : factory_(factory), prev_zone_(factory->zone_) { 3570 : factory_(factory), prev_zone_(factory->zone_) {
3530 if (use_temp_zone) { 3571 if (use_temp_zone) {
3531 factory->zone_ = temp_zone; 3572 factory->zone_ = temp_zone;
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
3587 : NULL; \ 3628 : NULL; \
3588 } 3629 }
3589 AST_NODE_LIST(DECLARE_NODE_FUNCTIONS) 3630 AST_NODE_LIST(DECLARE_NODE_FUNCTIONS)
3590 #undef DECLARE_NODE_FUNCTIONS 3631 #undef DECLARE_NODE_FUNCTIONS
3591 3632
3592 3633
3593 } // namespace internal 3634 } // namespace internal
3594 } // namespace v8 3635 } // namespace v8
3595 3636
3596 #endif // V8_AST_AST_H_ 3637 #endif // V8_AST_AST_H_
OLDNEW
« no previous file with comments | « src/asmjs/asm-wasm-builder.cc ('k') | src/ast/ast-expression-rewriter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698