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" |
11 #include "src/ast/variables.h" | 11 #include "src/ast/variables.h" |
12 #include "src/bailout-reason.h" | 12 #include "src/bailout-reason.h" |
13 #include "src/base/flags.h" | 13 #include "src/base/flags.h" |
14 #include "src/factory.h" | 14 #include "src/factory.h" |
15 #include "src/globals.h" | 15 #include "src/globals.h" |
16 #include "src/isolate.h" | 16 #include "src/isolate.h" |
17 #include "src/label.h" | 17 #include "src/label.h" |
18 #include "src/list.h" | 18 #include "src/list.h" |
19 #include "src/parsing/token.h" | 19 #include "src/parsing/token.h" |
20 #include "src/runtime/runtime.h" | 20 #include "src/runtime/runtime.h" |
21 #include "src/small-pointer-list.h" | 21 #include "src/small-pointer-list.h" |
22 #include "src/utils.h" | |
23 | 22 |
24 namespace v8 { | 23 namespace v8 { |
25 namespace internal { | 24 namespace internal { |
26 | 25 |
27 // The abstract syntax tree is an intermediate, light-weight | 26 // The abstract syntax tree is an intermediate, light-weight |
28 // representation of the parsed JavaScript code suitable for | 27 // representation of the parsed JavaScript code suitable for |
29 // compilation to native code. | 28 // compilation to native code. |
30 | 29 |
31 // Nodes are allocated in a separate zone, which allows faster | 30 // Nodes are allocated in a separate zone, which allows faster |
32 // allocation and constant-time deallocation of the entire syntax | 31 // allocation and constant-time deallocation of the entire syntax |
(...skipping 72 matching lines...) Loading... | |
105 V(EmptyParentheses) \ | 104 V(EmptyParentheses) \ |
106 V(GetIterator) \ | 105 V(GetIterator) \ |
107 V(DoExpression) \ | 106 V(DoExpression) \ |
108 V(RewritableExpression) | 107 V(RewritableExpression) |
109 | 108 |
110 #define AST_NODE_LIST(V) \ | 109 #define AST_NODE_LIST(V) \ |
111 DECLARATION_NODE_LIST(V) \ | 110 DECLARATION_NODE_LIST(V) \ |
112 STATEMENT_NODE_LIST(V) \ | 111 STATEMENT_NODE_LIST(V) \ |
113 EXPRESSION_NODE_LIST(V) | 112 EXPRESSION_NODE_LIST(V) |
114 | 113 |
114 #ifdef DEBUG | |
115 static const char* NameForNativeContextIntrinsicIndex(uint32_t idx) { | |
adamk
2017/01/25 20:26:43
Rather than copying this, what about exposing it i
gsathya
2017/01/25 21:05:19
Why is moving to contexts.h better?
adamk
2017/01/25 21:11:17
I'd rather not have two copies of this function. M
gsathya
2017/01/25 21:17:17
It's not exactly the same. As mentioned in my prev
adamk
2017/01/25 23:13:58
Sorry, missed the details of the macros. I'm ok wi
gsathya
2017/01/25 23:27:25
Done.
| |
116 switch (idx) { | |
117 #define NATIVE_CONTEXT_FIELDS_IDX(NAME, Type, name) \ | |
118 case Context::NAME: \ | |
119 return #name; | |
120 | |
121 NATIVE_CONTEXT_FIELDS(NATIVE_CONTEXT_FIELDS_IDX) | |
122 | |
123 default: | |
124 break; | |
125 } | |
126 | |
127 return "UnknownIntrinsicIndex"; | |
128 } | |
129 #endif // DEBUG | |
130 | |
115 // Forward declarations | 131 // Forward declarations |
116 class AstNodeFactory; | 132 class AstNodeFactory; |
117 class Declaration; | 133 class Declaration; |
118 class Module; | 134 class Module; |
119 class BreakableStatement; | 135 class BreakableStatement; |
120 class Expression; | 136 class Expression; |
121 class IterationStatement; | 137 class IterationStatement; |
122 class MaterializedLiteral; | 138 class MaterializedLiteral; |
123 class Statement; | 139 class Statement; |
124 class TypeFeedbackOracle; | 140 class TypeFeedbackOracle; |
(...skipping 1925 matching lines...) Loading... | |
2050 } | 2066 } |
2051 const Runtime::Function* function() const { | 2067 const Runtime::Function* function() const { |
2052 DCHECK(!is_jsruntime()); | 2068 DCHECK(!is_jsruntime()); |
2053 return function_; | 2069 return function_; |
2054 } | 2070 } |
2055 | 2071 |
2056 static int num_ids() { return parent_num_ids() + 1; } | 2072 static int num_ids() { return parent_num_ids() + 1; } |
2057 BailoutId CallId() { return BailoutId(local_id(0)); } | 2073 BailoutId CallId() { return BailoutId(local_id(0)); } |
2058 | 2074 |
2059 const char* debug_name() { | 2075 const char* debug_name() { |
2076 #ifdef DEBUG | |
2077 return NameForNativeContextIntrinsicIndex(context_index_); | |
2078 #else | |
2060 return is_jsruntime() ? "(context function)" : function_->name; | 2079 return is_jsruntime() ? "(context function)" : function_->name; |
2080 #endif // DEBUG | |
2061 } | 2081 } |
2062 | 2082 |
2063 private: | 2083 private: |
2064 friend class AstNodeFactory; | 2084 friend class AstNodeFactory; |
2065 | 2085 |
2066 CallRuntime(const Runtime::Function* function, | 2086 CallRuntime(const Runtime::Function* function, |
2067 ZoneList<Expression*>* arguments, int pos) | 2087 ZoneList<Expression*>* arguments, int pos) |
2068 : Expression(pos, kCallRuntime), | 2088 : Expression(pos, kCallRuntime), |
2069 function_(function), | 2089 function_(function), |
2070 arguments_(arguments) {} | 2090 arguments_(arguments) {} |
(...skipping 1585 matching lines...) Loading... | |
3656 : NULL; \ | 3676 : NULL; \ |
3657 } | 3677 } |
3658 AST_NODE_LIST(DECLARE_NODE_FUNCTIONS) | 3678 AST_NODE_LIST(DECLARE_NODE_FUNCTIONS) |
3659 #undef DECLARE_NODE_FUNCTIONS | 3679 #undef DECLARE_NODE_FUNCTIONS |
3660 | 3680 |
3661 | 3681 |
3662 } // namespace internal | 3682 } // namespace internal |
3663 } // namespace v8 | 3683 } // namespace v8 |
3664 | 3684 |
3665 #endif // V8_AST_AST_H_ | 3685 #endif // V8_AST_AST_H_ |
OLD | NEW |