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

Side by Side Diff: src/ast-numbering.cc

Issue 826833004: Remove distinction between DisableTurbofan and DisableCrankshaft. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebased. Created 5 years, 11 months 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 | « no previous file | src/compiler/pipeline.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 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/ast.h" 7 #include "src/ast.h"
8 #include "src/ast-numbering.h" 8 #include "src/ast-numbering.h"
9 #include "src/compiler.h" 9 #include "src/compiler.h"
10 #include "src/scopes.h" 10 #include "src/scopes.h"
11 11
12 namespace v8 { 12 namespace v8 {
13 namespace internal { 13 namespace internal {
14 14
15 15
16 class AstNumberingVisitor FINAL : public AstVisitor { 16 class AstNumberingVisitor FINAL : public AstVisitor {
17 public: 17 public:
18 explicit AstNumberingVisitor(Zone* zone) 18 explicit AstNumberingVisitor(Zone* zone)
19 : AstVisitor(), 19 : AstVisitor(),
20 next_id_(BailoutId::FirstUsable().ToInt()), 20 next_id_(BailoutId::FirstUsable().ToInt()),
21 dont_crankshaft_reason_(kNoReason), 21 dont_optimize_reason_(kNoReason) {
22 dont_turbofan_reason_(kNoReason) {
23 InitializeAstVisitor(zone); 22 InitializeAstVisitor(zone);
24 } 23 }
25 24
26 bool Renumber(FunctionLiteral* node); 25 bool Renumber(FunctionLiteral* node);
27 26
28 private: 27 private:
29 // AST node visitor interface. 28 // AST node visitor interface.
30 #define DEFINE_VISIT(type) virtual void Visit##type(type* node) OVERRIDE; 29 #define DEFINE_VISIT(type) virtual void Visit##type(type* node) OVERRIDE;
31 AST_NODE_LIST(DEFINE_VISIT) 30 AST_NODE_LIST(DEFINE_VISIT)
32 #undef DEFINE_VISIT 31 #undef DEFINE_VISIT
33 32
34 bool Finish(FunctionLiteral* node); 33 bool Finish(FunctionLiteral* node);
35 34
36 void VisitStatements(ZoneList<Statement*>* statements) OVERRIDE; 35 void VisitStatements(ZoneList<Statement*>* statements) OVERRIDE;
37 void VisitDeclarations(ZoneList<Declaration*>* declarations) OVERRIDE; 36 void VisitDeclarations(ZoneList<Declaration*>* declarations) OVERRIDE;
38 void VisitArguments(ZoneList<Expression*>* arguments); 37 void VisitArguments(ZoneList<Expression*>* arguments);
39 void VisitObjectLiteralProperty(ObjectLiteralProperty* property); 38 void VisitObjectLiteralProperty(ObjectLiteralProperty* property);
40 39
41 int ReserveIdRange(int n) { 40 int ReserveIdRange(int n) {
42 int tmp = next_id_; 41 int tmp = next_id_;
43 next_id_ += n; 42 next_id_ += n;
44 return tmp; 43 return tmp;
45 } 44 }
46 45
47 void IncrementNodeCount() { properties_.add_node_count(1); } 46 void IncrementNodeCount() { properties_.add_node_count(1); }
48 void DisableCrankshaft(BailoutReason reason) {
49 dont_crankshaft_reason_ = reason;
50 DisableSelfOptimization();
51 }
52 // TODO(turbofan): Remove the dont_turbofan_reason once no nodes are
53 // DisableTurbofan. That set of nodes must be kept in sync with
54 // Pipeline::GenerateCode.
55 void DisableTurbofan(BailoutReason reason) {
56 dont_crankshaft_reason_ = reason;
57 dont_turbofan_reason_ = reason;
58 DisableSelfOptimization();
59 }
60 void DisableSelfOptimization() { 47 void DisableSelfOptimization() {
61 properties_.flags()->Add(kDontSelfOptimize); 48 properties_.flags()->Add(kDontSelfOptimize);
62 } 49 }
50 void DisableOptimization(BailoutReason reason) {
51 dont_optimize_reason_ = reason;
52 DisableSelfOptimization();
53 }
63 void DisableCaching(BailoutReason reason) { 54 void DisableCaching(BailoutReason reason) {
64 dont_crankshaft_reason_ = reason; 55 dont_optimize_reason_ = reason;
65 DisableSelfOptimization(); 56 DisableSelfOptimization();
66 properties_.flags()->Add(kDontCache); 57 properties_.flags()->Add(kDontCache);
67 } 58 }
68 59
69 template <typename Node> 60 template <typename Node>
70 void ReserveFeedbackSlots(Node* node) { 61 void ReserveFeedbackSlots(Node* node) {
71 FeedbackVectorRequirements reqs = 62 FeedbackVectorRequirements reqs =
72 node->ComputeFeedbackRequirements(isolate()); 63 node->ComputeFeedbackRequirements(isolate());
73 if (reqs.slots() > 0) { 64 if (reqs.slots() > 0) {
74 node->SetFirstFeedbackSlot(FeedbackVectorSlot(properties_.slots())); 65 node->SetFirstFeedbackSlot(FeedbackVectorSlot(properties_.slots()));
75 properties_.increase_slots(reqs.slots()); 66 properties_.increase_slots(reqs.slots());
76 } 67 }
77 if (reqs.ic_slots() > 0) { 68 if (reqs.ic_slots() > 0) {
78 int ic_slots = properties_.ic_slots(); 69 int ic_slots = properties_.ic_slots();
79 node->SetFirstFeedbackICSlot(FeedbackVectorICSlot(ic_slots)); 70 node->SetFirstFeedbackICSlot(FeedbackVectorICSlot(ic_slots));
80 properties_.increase_ic_slots(reqs.ic_slots()); 71 properties_.increase_ic_slots(reqs.ic_slots());
81 if (FLAG_vector_ics) { 72 if (FLAG_vector_ics) {
82 for (int i = 0; i < reqs.ic_slots(); i++) { 73 for (int i = 0; i < reqs.ic_slots(); i++) {
83 properties_.SetKind(ic_slots + i, node->FeedbackICSlotKind(i)); 74 properties_.SetKind(ic_slots + i, node->FeedbackICSlotKind(i));
84 } 75 }
85 } 76 }
86 } 77 }
87 } 78 }
88 79
89 BailoutReason dont_optimize_reason() const { 80 BailoutReason dont_optimize_reason() const { return dont_optimize_reason_; }
90 return (dont_turbofan_reason_ != kNoReason) ? dont_turbofan_reason_
91 : dont_crankshaft_reason_;
92 }
93 81
94 int next_id_; 82 int next_id_;
95 AstProperties properties_; 83 AstProperties properties_;
96 BailoutReason dont_crankshaft_reason_; 84 BailoutReason dont_optimize_reason_;
97 BailoutReason dont_turbofan_reason_;
98 85
99 DEFINE_AST_VISITOR_SUBCLASS_MEMBERS(); 86 DEFINE_AST_VISITOR_SUBCLASS_MEMBERS();
100 DISALLOW_COPY_AND_ASSIGN(AstNumberingVisitor); 87 DISALLOW_COPY_AND_ASSIGN(AstNumberingVisitor);
101 }; 88 };
102 89
103 90
104 void AstNumberingVisitor::VisitVariableDeclaration(VariableDeclaration* node) { 91 void AstNumberingVisitor::VisitVariableDeclaration(VariableDeclaration* node) {
105 IncrementNodeCount(); 92 IncrementNodeCount();
106 VisitVariableProxy(node->proxy()); 93 VisitVariableProxy(node->proxy());
107 } 94 }
108 95
109 96
110 void AstNumberingVisitor::VisitExportDeclaration(ExportDeclaration* node) { 97 void AstNumberingVisitor::VisitExportDeclaration(ExportDeclaration* node) {
111 IncrementNodeCount(); 98 IncrementNodeCount();
112 DisableCrankshaft(kExportDeclaration); 99 DisableOptimization(kExportDeclaration);
113 VisitVariableProxy(node->proxy()); 100 VisitVariableProxy(node->proxy());
114 } 101 }
115 102
116 103
117 void AstNumberingVisitor::VisitModuleUrl(ModuleUrl* node) { 104 void AstNumberingVisitor::VisitModuleUrl(ModuleUrl* node) {
118 IncrementNodeCount(); 105 IncrementNodeCount();
119 DisableCrankshaft(kModuleUrl); 106 DisableOptimization(kModuleUrl);
120 } 107 }
121 108
122 109
123 void AstNumberingVisitor::VisitEmptyStatement(EmptyStatement* node) { 110 void AstNumberingVisitor::VisitEmptyStatement(EmptyStatement* node) {
124 IncrementNodeCount(); 111 IncrementNodeCount();
125 } 112 }
126 113
127 114
128 void AstNumberingVisitor::VisitContinueStatement(ContinueStatement* node) { 115 void AstNumberingVisitor::VisitContinueStatement(ContinueStatement* node) {
129 IncrementNodeCount(); 116 IncrementNodeCount();
130 } 117 }
131 118
132 119
133 void AstNumberingVisitor::VisitBreakStatement(BreakStatement* node) { 120 void AstNumberingVisitor::VisitBreakStatement(BreakStatement* node) {
134 IncrementNodeCount(); 121 IncrementNodeCount();
135 } 122 }
136 123
137 124
138 void AstNumberingVisitor::VisitDebuggerStatement(DebuggerStatement* node) { 125 void AstNumberingVisitor::VisitDebuggerStatement(DebuggerStatement* node) {
139 IncrementNodeCount(); 126 IncrementNodeCount();
140 DisableCrankshaft(kDebuggerStatement); 127 DisableOptimization(kDebuggerStatement);
141 node->set_base_id(ReserveIdRange(DebuggerStatement::num_ids())); 128 node->set_base_id(ReserveIdRange(DebuggerStatement::num_ids()));
142 } 129 }
143 130
144 131
145 void AstNumberingVisitor::VisitNativeFunctionLiteral( 132 void AstNumberingVisitor::VisitNativeFunctionLiteral(
146 NativeFunctionLiteral* node) { 133 NativeFunctionLiteral* node) {
147 IncrementNodeCount(); 134 IncrementNodeCount();
148 DisableCrankshaft(kNativeFunctionLiteral); 135 DisableOptimization(kNativeFunctionLiteral);
149 node->set_base_id(ReserveIdRange(NativeFunctionLiteral::num_ids())); 136 node->set_base_id(ReserveIdRange(NativeFunctionLiteral::num_ids()));
150 } 137 }
151 138
152 139
153 void AstNumberingVisitor::VisitLiteral(Literal* node) { 140 void AstNumberingVisitor::VisitLiteral(Literal* node) {
154 IncrementNodeCount(); 141 IncrementNodeCount();
155 node->set_base_id(ReserveIdRange(Literal::num_ids())); 142 node->set_base_id(ReserveIdRange(Literal::num_ids()));
156 } 143 }
157 144
158 145
159 void AstNumberingVisitor::VisitRegExpLiteral(RegExpLiteral* node) { 146 void AstNumberingVisitor::VisitRegExpLiteral(RegExpLiteral* node) {
160 IncrementNodeCount(); 147 IncrementNodeCount();
161 node->set_base_id(ReserveIdRange(RegExpLiteral::num_ids())); 148 node->set_base_id(ReserveIdRange(RegExpLiteral::num_ids()));
162 } 149 }
163 150
164 151
165 void AstNumberingVisitor::VisitVariableProxy(VariableProxy* node) { 152 void AstNumberingVisitor::VisitVariableProxy(VariableProxy* node) {
166 IncrementNodeCount(); 153 IncrementNodeCount();
167 if (node->var()->IsLookupSlot()) { 154 if (node->var()->IsLookupSlot()) {
168 DisableCrankshaft(kReferenceToAVariableWhichRequiresDynamicLookup); 155 DisableOptimization(kReferenceToAVariableWhichRequiresDynamicLookup);
169 } 156 }
170 ReserveFeedbackSlots(node); 157 ReserveFeedbackSlots(node);
171 node->set_base_id(ReserveIdRange(VariableProxy::num_ids())); 158 node->set_base_id(ReserveIdRange(VariableProxy::num_ids()));
172 } 159 }
173 160
174 161
175 void AstNumberingVisitor::VisitThisFunction(ThisFunction* node) { 162 void AstNumberingVisitor::VisitThisFunction(ThisFunction* node) {
176 IncrementNodeCount(); 163 IncrementNodeCount();
177 node->set_base_id(ReserveIdRange(ThisFunction::num_ids())); 164 node->set_base_id(ReserveIdRange(ThisFunction::num_ids()));
178 } 165 }
179 166
180 167
181 void AstNumberingVisitor::VisitSuperReference(SuperReference* node) { 168 void AstNumberingVisitor::VisitSuperReference(SuperReference* node) {
182 IncrementNodeCount(); 169 IncrementNodeCount();
183 DisableTurbofan(kSuperReference); 170 DisableOptimization(kSuperReference);
184 ReserveFeedbackSlots(node); 171 ReserveFeedbackSlots(node);
185 node->set_base_id(ReserveIdRange(SuperReference::num_ids())); 172 node->set_base_id(ReserveIdRange(SuperReference::num_ids()));
186 Visit(node->this_var()); 173 Visit(node->this_var());
187 } 174 }
188 175
189 176
190 void AstNumberingVisitor::VisitModuleDeclaration(ModuleDeclaration* node) { 177 void AstNumberingVisitor::VisitModuleDeclaration(ModuleDeclaration* node) {
191 IncrementNodeCount(); 178 IncrementNodeCount();
192 DisableCrankshaft(kModuleDeclaration); 179 DisableOptimization(kModuleDeclaration);
193 VisitVariableProxy(node->proxy()); 180 VisitVariableProxy(node->proxy());
194 Visit(node->module()); 181 Visit(node->module());
195 } 182 }
196 183
197 184
198 void AstNumberingVisitor::VisitImportDeclaration(ImportDeclaration* node) { 185 void AstNumberingVisitor::VisitImportDeclaration(ImportDeclaration* node) {
199 IncrementNodeCount(); 186 IncrementNodeCount();
200 DisableCrankshaft(kImportDeclaration); 187 DisableOptimization(kImportDeclaration);
201 VisitVariableProxy(node->proxy()); 188 VisitVariableProxy(node->proxy());
202 Visit(node->module()); 189 Visit(node->module());
203 } 190 }
204 191
205 192
206 void AstNumberingVisitor::VisitModuleVariable(ModuleVariable* node) { 193 void AstNumberingVisitor::VisitModuleVariable(ModuleVariable* node) {
207 IncrementNodeCount(); 194 IncrementNodeCount();
208 DisableCrankshaft(kModuleVariable); 195 DisableOptimization(kModuleVariable);
209 Visit(node->proxy()); 196 Visit(node->proxy());
210 } 197 }
211 198
212 199
213 void AstNumberingVisitor::VisitModulePath(ModulePath* node) { 200 void AstNumberingVisitor::VisitModulePath(ModulePath* node) {
214 IncrementNodeCount(); 201 IncrementNodeCount();
215 DisableCrankshaft(kModulePath); 202 DisableOptimization(kModulePath);
216 Visit(node->module()); 203 Visit(node->module());
217 } 204 }
218 205
219 206
220 void AstNumberingVisitor::VisitModuleStatement(ModuleStatement* node) { 207 void AstNumberingVisitor::VisitModuleStatement(ModuleStatement* node) {
221 IncrementNodeCount(); 208 IncrementNodeCount();
222 DisableCrankshaft(kModuleStatement); 209 DisableOptimization(kModuleStatement);
223 Visit(node->body()); 210 Visit(node->body());
224 } 211 }
225 212
226 213
227 void AstNumberingVisitor::VisitExpressionStatement(ExpressionStatement* node) { 214 void AstNumberingVisitor::VisitExpressionStatement(ExpressionStatement* node) {
228 IncrementNodeCount(); 215 IncrementNodeCount();
229 Visit(node->expression()); 216 Visit(node->expression());
230 } 217 }
231 218
232 219
233 void AstNumberingVisitor::VisitReturnStatement(ReturnStatement* node) { 220 void AstNumberingVisitor::VisitReturnStatement(ReturnStatement* node) {
234 IncrementNodeCount(); 221 IncrementNodeCount();
235 Visit(node->expression()); 222 Visit(node->expression());
236 } 223 }
237 224
238 225
239 void AstNumberingVisitor::VisitYield(Yield* node) { 226 void AstNumberingVisitor::VisitYield(Yield* node) {
240 IncrementNodeCount(); 227 IncrementNodeCount();
241 DisableCrankshaft(kYield); 228 DisableOptimization(kYield);
242 ReserveFeedbackSlots(node); 229 ReserveFeedbackSlots(node);
243 node->set_base_id(ReserveIdRange(Yield::num_ids())); 230 node->set_base_id(ReserveIdRange(Yield::num_ids()));
244 Visit(node->generator_object()); 231 Visit(node->generator_object());
245 Visit(node->expression()); 232 Visit(node->expression());
246 } 233 }
247 234
248 235
249 void AstNumberingVisitor::VisitThrow(Throw* node) { 236 void AstNumberingVisitor::VisitThrow(Throw* node) {
250 IncrementNodeCount(); 237 IncrementNodeCount();
251 node->set_base_id(ReserveIdRange(Throw::num_ids())); 238 node->set_base_id(ReserveIdRange(Throw::num_ids()));
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 DisableCaching(kModuleLiteral); 274 DisableCaching(kModuleLiteral);
288 VisitBlock(node->body()); 275 VisitBlock(node->body());
289 } 276 }
290 277
291 278
292 void AstNumberingVisitor::VisitCallRuntime(CallRuntime* node) { 279 void AstNumberingVisitor::VisitCallRuntime(CallRuntime* node) {
293 IncrementNodeCount(); 280 IncrementNodeCount();
294 ReserveFeedbackSlots(node); 281 ReserveFeedbackSlots(node);
295 if (node->is_jsruntime()) { 282 if (node->is_jsruntime()) {
296 // Don't try to optimize JS runtime calls because we bailout on them. 283 // Don't try to optimize JS runtime calls because we bailout on them.
297 DisableCrankshaft(kCallToAJavaScriptRuntimeFunction); 284 DisableOptimization(kCallToAJavaScriptRuntimeFunction);
298 } 285 }
299 node->set_base_id(ReserveIdRange(CallRuntime::num_ids())); 286 node->set_base_id(ReserveIdRange(CallRuntime::num_ids()));
300 VisitArguments(node->arguments()); 287 VisitArguments(node->arguments());
301 } 288 }
302 289
303 290
304 void AstNumberingVisitor::VisitWithStatement(WithStatement* node) { 291 void AstNumberingVisitor::VisitWithStatement(WithStatement* node) {
305 IncrementNodeCount(); 292 IncrementNodeCount();
306 DisableCrankshaft(kWithStatement); 293 DisableOptimization(kWithStatement);
307 Visit(node->expression()); 294 Visit(node->expression());
308 Visit(node->statement()); 295 Visit(node->statement());
309 } 296 }
310 297
311 298
312 void AstNumberingVisitor::VisitDoWhileStatement(DoWhileStatement* node) { 299 void AstNumberingVisitor::VisitDoWhileStatement(DoWhileStatement* node) {
313 IncrementNodeCount(); 300 IncrementNodeCount();
314 DisableSelfOptimization(); 301 DisableSelfOptimization();
315 node->set_base_id(ReserveIdRange(DoWhileStatement::num_ids())); 302 node->set_base_id(ReserveIdRange(DoWhileStatement::num_ids()));
316 Visit(node->body()); 303 Visit(node->body());
317 Visit(node->cond()); 304 Visit(node->cond());
318 } 305 }
319 306
320 307
321 void AstNumberingVisitor::VisitWhileStatement(WhileStatement* node) { 308 void AstNumberingVisitor::VisitWhileStatement(WhileStatement* node) {
322 IncrementNodeCount(); 309 IncrementNodeCount();
323 DisableSelfOptimization(); 310 DisableSelfOptimization();
324 node->set_base_id(ReserveIdRange(WhileStatement::num_ids())); 311 node->set_base_id(ReserveIdRange(WhileStatement::num_ids()));
325 Visit(node->cond()); 312 Visit(node->cond());
326 Visit(node->body()); 313 Visit(node->body());
327 } 314 }
328 315
329 316
330 void AstNumberingVisitor::VisitTryCatchStatement(TryCatchStatement* node) { 317 void AstNumberingVisitor::VisitTryCatchStatement(TryCatchStatement* node) {
331 IncrementNodeCount(); 318 IncrementNodeCount();
332 DisableTurbofan(kTryCatchStatement); 319 DisableOptimization(kTryCatchStatement);
333 Visit(node->try_block()); 320 Visit(node->try_block());
334 Visit(node->catch_block()); 321 Visit(node->catch_block());
335 } 322 }
336 323
337 324
338 void AstNumberingVisitor::VisitTryFinallyStatement(TryFinallyStatement* node) { 325 void AstNumberingVisitor::VisitTryFinallyStatement(TryFinallyStatement* node) {
339 IncrementNodeCount(); 326 IncrementNodeCount();
340 DisableTurbofan(kTryFinallyStatement); 327 DisableOptimization(kTryFinallyStatement);
341 Visit(node->try_block()); 328 Visit(node->try_block());
342 Visit(node->finally_block()); 329 Visit(node->finally_block());
343 } 330 }
344 331
345 332
346 void AstNumberingVisitor::VisitProperty(Property* node) { 333 void AstNumberingVisitor::VisitProperty(Property* node) {
347 IncrementNodeCount(); 334 IncrementNodeCount();
348 ReserveFeedbackSlots(node); 335 ReserveFeedbackSlots(node);
349 node->set_base_id(ReserveIdRange(Property::num_ids())); 336 node->set_base_id(ReserveIdRange(Property::num_ids()));
350 Visit(node->key()); 337 Visit(node->key());
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 ReserveFeedbackSlots(node); 370 ReserveFeedbackSlots(node);
384 node->set_base_id(ReserveIdRange(ForInStatement::num_ids())); 371 node->set_base_id(ReserveIdRange(ForInStatement::num_ids()));
385 Visit(node->each()); 372 Visit(node->each());
386 Visit(node->enumerable()); 373 Visit(node->enumerable());
387 Visit(node->body()); 374 Visit(node->body());
388 } 375 }
389 376
390 377
391 void AstNumberingVisitor::VisitForOfStatement(ForOfStatement* node) { 378 void AstNumberingVisitor::VisitForOfStatement(ForOfStatement* node) {
392 IncrementNodeCount(); 379 IncrementNodeCount();
393 DisableCrankshaft(kForOfStatement); 380 DisableOptimization(kForOfStatement);
394 node->set_base_id(ReserveIdRange(ForOfStatement::num_ids())); 381 node->set_base_id(ReserveIdRange(ForOfStatement::num_ids()));
395 Visit(node->assign_iterator()); 382 Visit(node->assign_iterator());
396 Visit(node->next_result()); 383 Visit(node->next_result());
397 Visit(node->result_done()); 384 Visit(node->result_done());
398 Visit(node->assign_each()); 385 Visit(node->assign_each());
399 Visit(node->body()); 386 Visit(node->body());
400 } 387 }
401 388
402 389
403 void AstNumberingVisitor::VisitConditional(Conditional* node) { 390 void AstNumberingVisitor::VisitConditional(Conditional* node) {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 node->set_base_id(ReserveIdRange(ForStatement::num_ids())); 432 node->set_base_id(ReserveIdRange(ForStatement::num_ids()));
446 if (node->init() != NULL) Visit(node->init()); 433 if (node->init() != NULL) Visit(node->init());
447 if (node->cond() != NULL) Visit(node->cond()); 434 if (node->cond() != NULL) Visit(node->cond());
448 if (node->next() != NULL) Visit(node->next()); 435 if (node->next() != NULL) Visit(node->next());
449 Visit(node->body()); 436 Visit(node->body());
450 } 437 }
451 438
452 439
453 void AstNumberingVisitor::VisitClassLiteral(ClassLiteral* node) { 440 void AstNumberingVisitor::VisitClassLiteral(ClassLiteral* node) {
454 IncrementNodeCount(); 441 IncrementNodeCount();
455 DisableCrankshaft(kClassLiteral); 442 DisableOptimization(kClassLiteral);
456 node->set_base_id(ReserveIdRange(ClassLiteral::num_ids())); 443 node->set_base_id(ReserveIdRange(ClassLiteral::num_ids()));
457 if (node->extends()) Visit(node->extends()); 444 if (node->extends()) Visit(node->extends());
458 if (node->constructor()) Visit(node->constructor()); 445 if (node->constructor()) Visit(node->constructor());
459 if (node->class_variable_proxy()) { 446 if (node->class_variable_proxy()) {
460 VisitVariableProxy(node->class_variable_proxy()); 447 VisitVariableProxy(node->class_variable_proxy());
461 } 448 }
462 for (int i = 0; i < node->properties()->length(); i++) { 449 for (int i = 0; i < node->properties()->length(); i++) {
463 VisitObjectLiteralProperty(node->properties()->at(i)); 450 VisitObjectLiteralProperty(node->properties()->at(i));
464 } 451 }
465 } 452 }
466 453
467 454
468 void AstNumberingVisitor::VisitObjectLiteral(ObjectLiteral* node) { 455 void AstNumberingVisitor::VisitObjectLiteral(ObjectLiteral* node) {
469 IncrementNodeCount(); 456 IncrementNodeCount();
470 node->set_base_id(ReserveIdRange(ObjectLiteral::num_ids())); 457 node->set_base_id(ReserveIdRange(ObjectLiteral::num_ids()));
471 for (int i = 0; i < node->properties()->length(); i++) { 458 for (int i = 0; i < node->properties()->length(); i++) {
472 VisitObjectLiteralProperty(node->properties()->at(i)); 459 VisitObjectLiteralProperty(node->properties()->at(i));
473 } 460 }
474 } 461 }
475 462
476 463
477 void AstNumberingVisitor::VisitObjectLiteralProperty( 464 void AstNumberingVisitor::VisitObjectLiteralProperty(
478 ObjectLiteralProperty* node) { 465 ObjectLiteralProperty* node) {
479 if (node->is_computed_name()) DisableTurbofan(kComputedPropertyName); 466 if (node->is_computed_name()) DisableOptimization(kComputedPropertyName);
480 Visit(node->key()); 467 Visit(node->key());
481 Visit(node->value()); 468 Visit(node->value());
482 } 469 }
483 470
484 471
485 void AstNumberingVisitor::VisitArrayLiteral(ArrayLiteral* node) { 472 void AstNumberingVisitor::VisitArrayLiteral(ArrayLiteral* node) {
486 IncrementNodeCount(); 473 IncrementNodeCount();
487 node->set_base_id(ReserveIdRange(node->num_ids())); 474 node->set_base_id(ReserveIdRange(node->num_ids()));
488 for (int i = 0; i < node->values()->length(); i++) { 475 for (int i = 0; i < node->values()->length(); i++) {
489 Visit(node->values()->at(i)); 476 Visit(node->values()->at(i));
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 node->set_dont_optimize_reason(dont_optimize_reason()); 532 node->set_dont_optimize_reason(dont_optimize_reason());
546 return !HasStackOverflow(); 533 return !HasStackOverflow();
547 } 534 }
548 535
549 536
550 bool AstNumberingVisitor::Renumber(FunctionLiteral* node) { 537 bool AstNumberingVisitor::Renumber(FunctionLiteral* node) {
551 Scope* scope = node->scope(); 538 Scope* scope = node->scope();
552 539
553 if (scope->HasIllegalRedeclaration()) { 540 if (scope->HasIllegalRedeclaration()) {
554 scope->VisitIllegalRedeclaration(this); 541 scope->VisitIllegalRedeclaration(this);
555 DisableCrankshaft(kFunctionWithIllegalRedeclaration); 542 DisableOptimization(kFunctionWithIllegalRedeclaration);
556 return Finish(node); 543 return Finish(node);
557 } 544 }
558 if (scope->calls_eval()) DisableCrankshaft(kFunctionCallsEval); 545 if (scope->calls_eval()) DisableOptimization(kFunctionCallsEval);
559 if (scope->arguments() != NULL && !scope->arguments()->IsStackAllocated()) { 546 if (scope->arguments() != NULL && !scope->arguments()->IsStackAllocated()) {
560 DisableCrankshaft(kContextAllocatedArguments); 547 DisableOptimization(kContextAllocatedArguments);
561 } 548 }
562 549
563 VisitDeclarations(scope->declarations()); 550 VisitDeclarations(scope->declarations());
564 if (scope->is_function_scope() && scope->function() != NULL) { 551 if (scope->is_function_scope() && scope->function() != NULL) {
565 // Visit the name of the named function expression. 552 // Visit the name of the named function expression.
566 Visit(scope->function()); 553 Visit(scope->function());
567 } 554 }
568 VisitStatements(node->body()); 555 VisitStatements(node->body());
569 556
570 return Finish(node); 557 return Finish(node);
571 } 558 }
572 559
573 560
574 bool AstNumbering::Renumber(FunctionLiteral* function, Zone* zone) { 561 bool AstNumbering::Renumber(FunctionLiteral* function, Zone* zone) {
575 AstNumberingVisitor visitor(zone); 562 AstNumberingVisitor visitor(zone);
576 return visitor.Renumber(function); 563 return visitor.Renumber(function);
577 } 564 }
578 } 565 }
579 } // namespace v8::internal 566 } // namespace v8::internal
OLDNEW
« no previous file with comments | « no previous file | src/compiler/pipeline.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698