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

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

Issue 668143003: Move BailoutReason and flags computation to post-pass (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fix extraneous Renumber() call that crept back in Created 6 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « src/ast.cc ('k') | src/compiler.cc » ('j') | src/compiler.cc » ('J')
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(), next_id_(BailoutId::FirstUsable().ToInt()) { 19 : AstVisitor(),
20 next_id_(BailoutId::FirstUsable().ToInt()),
21 dont_crankshaft_reason_(kNoReason),
22 dont_turbofan_reason_(kNoReason) {
20 InitializeAstVisitor(zone); 23 InitializeAstVisitor(zone);
21 } 24 }
22 25
23 void Renumber(FunctionLiteral* node); 26 void Renumber(FunctionLiteral* node);
24 27
25 private: 28 private:
26 // AST node visitor interface. 29 // AST node visitor interface.
27 #define DEFINE_VISIT(type) virtual void Visit##type(type* node); 30 #define DEFINE_VISIT(type) virtual void Visit##type(type* node);
28 AST_NODE_LIST(DEFINE_VISIT) 31 AST_NODE_LIST(DEFINE_VISIT)
29 #undef DEFINE_VISIT 32 #undef DEFINE_VISIT
30 33
31 void VisitStatements(ZoneList<Statement*>* statements); 34 void VisitStatements(ZoneList<Statement*>* statements);
32 void VisitDeclarations(ZoneList<Declaration*>* declarations); 35 void VisitDeclarations(ZoneList<Declaration*>* declarations);
33 void VisitArguments(ZoneList<Expression*>* arguments); 36 void VisitArguments(ZoneList<Expression*>* arguments);
34 void VisitObjectLiteralProperty(ObjectLiteralProperty* property); 37 void VisitObjectLiteralProperty(ObjectLiteralProperty* property);
35 38
36 int ReserveIdRange(int n) { 39 int ReserveIdRange(int n) {
37 int tmp = next_id_; 40 int tmp = next_id_;
38 next_id_ += n; 41 next_id_ += n;
39 return tmp; 42 return tmp;
40 } 43 }
41 44
42 void IncrementNodeCount() { properties_.add_node_count(1); } 45 void IncrementNodeCount() { properties_.add_node_count(1); }
46 void DisableCrankshaft(BailoutReason reason) {
47 dont_crankshaft_reason_ = reason;
48 properties_.flags()->Add(kDontSelfOptimize);
49 }
50 // TODO(turbofan): Remove the dont_turbofan_reason once no nodes are
51 // DontTurbofanNode. That set of nodes must be kept in sync with
52 // Pipeline::GenerateCode.
53 void DisableTurbofan(BailoutReason reason) {
54 dont_crankshaft_reason_ = reason;
55 dont_turbofan_reason_ = reason;
56 properties_.flags()->Add(kDontSelfOptimize);
57 }
58 void DisableSelfOptimization() {
59 properties_.add_node_count(1);
60 properties_.flags()->Add(kDontSelfOptimize);
61 }
62 void DisableCaching(BailoutReason reason) {
63 properties_.add_node_count(1);
64 dont_crankshaft_reason_ = reason;
65 properties_.flags()->Add(kDontSelfOptimize);
66 properties_.flags()->Add(kDontCache);
67 }
68
69 BailoutReason dont_optimize_reason() const {
70 return (dont_turbofan_reason_ != kNoReason) ? dont_turbofan_reason_
71 : dont_crankshaft_reason_;
72 }
43 73
44 int next_id_; 74 int next_id_;
45 AstProperties properties_; 75 AstProperties properties_;
76 BailoutReason dont_crankshaft_reason_;
77 BailoutReason dont_turbofan_reason_;
46 78
47 DEFINE_AST_VISITOR_SUBCLASS_MEMBERS(); 79 DEFINE_AST_VISITOR_SUBCLASS_MEMBERS();
48 DISALLOW_COPY_AND_ASSIGN(AstNumberingVisitor); 80 DISALLOW_COPY_AND_ASSIGN(AstNumberingVisitor);
49 }; 81 };
50 82
51 83
52 void AstNumberingVisitor::VisitVariableDeclaration(VariableDeclaration* node) { 84 void AstNumberingVisitor::VisitVariableDeclaration(VariableDeclaration* node) {
53 IncrementNodeCount(); 85 IncrementNodeCount();
54 VisitVariableProxy(node->proxy()); 86 VisitVariableProxy(node->proxy());
55 } 87 }
56 88
57 89
58 void AstNumberingVisitor::VisitExportDeclaration(ExportDeclaration* node) { 90 void AstNumberingVisitor::VisitExportDeclaration(ExportDeclaration* node) {
59 IncrementNodeCount(); 91 IncrementNodeCount();
92 DisableCrankshaft(kExportDeclaration);
60 VisitVariableProxy(node->proxy()); 93 VisitVariableProxy(node->proxy());
61 } 94 }
62 95
63 96
64 void AstNumberingVisitor::VisitModuleUrl(ModuleUrl* node) { 97 void AstNumberingVisitor::VisitModuleUrl(ModuleUrl* node) {
65 IncrementNodeCount(); 98 IncrementNodeCount();
99 DisableCrankshaft(kModuleUrl);
66 } 100 }
67 101
68 102
69 void AstNumberingVisitor::VisitEmptyStatement(EmptyStatement* node) { 103 void AstNumberingVisitor::VisitEmptyStatement(EmptyStatement* node) {
70 IncrementNodeCount(); 104 IncrementNodeCount();
71 } 105 }
72 106
73 107
74 void AstNumberingVisitor::VisitContinueStatement(ContinueStatement* node) { 108 void AstNumberingVisitor::VisitContinueStatement(ContinueStatement* node) {
75 IncrementNodeCount(); 109 IncrementNodeCount();
76 } 110 }
77 111
78 112
79 void AstNumberingVisitor::VisitBreakStatement(BreakStatement* node) { 113 void AstNumberingVisitor::VisitBreakStatement(BreakStatement* node) {
80 IncrementNodeCount(); 114 IncrementNodeCount();
81 } 115 }
82 116
83 117
84 void AstNumberingVisitor::VisitDebuggerStatement(DebuggerStatement* node) { 118 void AstNumberingVisitor::VisitDebuggerStatement(DebuggerStatement* node) {
85 IncrementNodeCount(); 119 IncrementNodeCount();
120 DisableCrankshaft(kDebuggerStatement);
86 node->set_base_id(ReserveIdRange(DebuggerStatement::num_ids())); 121 node->set_base_id(ReserveIdRange(DebuggerStatement::num_ids()));
87 } 122 }
88 123
89 124
90 void AstNumberingVisitor::VisitNativeFunctionLiteral( 125 void AstNumberingVisitor::VisitNativeFunctionLiteral(
91 NativeFunctionLiteral* node) { 126 NativeFunctionLiteral* node) {
92 IncrementNodeCount(); 127 IncrementNodeCount();
128 DisableCrankshaft(kNativeFunctionLiteral);
93 node->set_base_id(ReserveIdRange(NativeFunctionLiteral::num_ids())); 129 node->set_base_id(ReserveIdRange(NativeFunctionLiteral::num_ids()));
94 } 130 }
95 131
96 132
97 void AstNumberingVisitor::VisitLiteral(Literal* node) { 133 void AstNumberingVisitor::VisitLiteral(Literal* node) {
98 IncrementNodeCount(); 134 IncrementNodeCount();
99 node->set_base_id(ReserveIdRange(Literal::num_ids())); 135 node->set_base_id(ReserveIdRange(Literal::num_ids()));
100 } 136 }
101 137
102 138
103 void AstNumberingVisitor::VisitRegExpLiteral(RegExpLiteral* node) { 139 void AstNumberingVisitor::VisitRegExpLiteral(RegExpLiteral* node) {
104 IncrementNodeCount(); 140 IncrementNodeCount();
105 node->set_base_id(ReserveIdRange(RegExpLiteral::num_ids())); 141 node->set_base_id(ReserveIdRange(RegExpLiteral::num_ids()));
106 } 142 }
107 143
108 144
109 void AstNumberingVisitor::VisitVariableProxy(VariableProxy* node) { 145 void AstNumberingVisitor::VisitVariableProxy(VariableProxy* node) {
110 IncrementNodeCount(); 146 IncrementNodeCount();
147 if (node->var()->IsLookupSlot()) {
148 DisableCrankshaft(kReferenceToAVariableWhichRequiresDynamicLookup);
149 }
111 node->set_base_id(ReserveIdRange(VariableProxy::num_ids())); 150 node->set_base_id(ReserveIdRange(VariableProxy::num_ids()));
112 } 151 }
113 152
114 153
115 void AstNumberingVisitor::VisitThisFunction(ThisFunction* node) { 154 void AstNumberingVisitor::VisitThisFunction(ThisFunction* node) {
116 IncrementNodeCount(); 155 IncrementNodeCount();
117 node->set_base_id(ReserveIdRange(ThisFunction::num_ids())); 156 node->set_base_id(ReserveIdRange(ThisFunction::num_ids()));
118 } 157 }
119 158
120 159
121 void AstNumberingVisitor::VisitSuperReference(SuperReference* node) { 160 void AstNumberingVisitor::VisitSuperReference(SuperReference* node) {
122 IncrementNodeCount(); 161 IncrementNodeCount();
162 DisableTurbofan(kSuperReference);
123 node->set_base_id(ReserveIdRange(SuperReference::num_ids())); 163 node->set_base_id(ReserveIdRange(SuperReference::num_ids()));
124 Visit(node->this_var()); 164 Visit(node->this_var());
125 } 165 }
126 166
127 167
128 void AstNumberingVisitor::VisitModuleDeclaration(ModuleDeclaration* node) { 168 void AstNumberingVisitor::VisitModuleDeclaration(ModuleDeclaration* node) {
129 IncrementNodeCount(); 169 IncrementNodeCount();
170 DisableCrankshaft(kModuleDeclaration);
130 VisitVariableProxy(node->proxy()); 171 VisitVariableProxy(node->proxy());
131 Visit(node->module()); 172 Visit(node->module());
132 } 173 }
133 174
134 175
135 void AstNumberingVisitor::VisitImportDeclaration(ImportDeclaration* node) { 176 void AstNumberingVisitor::VisitImportDeclaration(ImportDeclaration* node) {
136 IncrementNodeCount(); 177 IncrementNodeCount();
178 DisableCrankshaft(kImportDeclaration);
137 VisitVariableProxy(node->proxy()); 179 VisitVariableProxy(node->proxy());
138 Visit(node->module()); 180 Visit(node->module());
139 } 181 }
140 182
141 183
142 void AstNumberingVisitor::VisitModuleVariable(ModuleVariable* node) { 184 void AstNumberingVisitor::VisitModuleVariable(ModuleVariable* node) {
143 IncrementNodeCount(); 185 IncrementNodeCount();
186 DisableCrankshaft(kModuleVariable);
144 Visit(node->proxy()); 187 Visit(node->proxy());
145 } 188 }
146 189
147 190
148 void AstNumberingVisitor::VisitModulePath(ModulePath* node) { 191 void AstNumberingVisitor::VisitModulePath(ModulePath* node) {
149 IncrementNodeCount(); 192 IncrementNodeCount();
193 DisableCrankshaft(kModulePath);
150 Visit(node->module()); 194 Visit(node->module());
151 } 195 }
152 196
153 197
154 void AstNumberingVisitor::VisitModuleStatement(ModuleStatement* node) { 198 void AstNumberingVisitor::VisitModuleStatement(ModuleStatement* node) {
155 IncrementNodeCount(); 199 IncrementNodeCount();
200 DisableCrankshaft(kModuleStatement);
156 Visit(node->body()); 201 Visit(node->body());
157 } 202 }
158 203
159 204
160 void AstNumberingVisitor::VisitExpressionStatement(ExpressionStatement* node) { 205 void AstNumberingVisitor::VisitExpressionStatement(ExpressionStatement* node) {
161 IncrementNodeCount(); 206 IncrementNodeCount();
162 Visit(node->expression()); 207 Visit(node->expression());
163 } 208 }
164 209
165 210
166 void AstNumberingVisitor::VisitReturnStatement(ReturnStatement* node) { 211 void AstNumberingVisitor::VisitReturnStatement(ReturnStatement* node) {
167 IncrementNodeCount(); 212 IncrementNodeCount();
168 Visit(node->expression()); 213 Visit(node->expression());
169 } 214 }
170 215
171 216
172 void AstNumberingVisitor::VisitYield(Yield* node) { 217 void AstNumberingVisitor::VisitYield(Yield* node) {
173 IncrementNodeCount(); 218 IncrementNodeCount();
219 DisableCrankshaft(kYield);
174 node->set_base_id(ReserveIdRange(Yield::num_ids())); 220 node->set_base_id(ReserveIdRange(Yield::num_ids()));
175 Visit(node->generator_object()); 221 Visit(node->generator_object());
176 Visit(node->expression()); 222 Visit(node->expression());
177 } 223 }
178 224
179 225
180 void AstNumberingVisitor::VisitThrow(Throw* node) { 226 void AstNumberingVisitor::VisitThrow(Throw* node) {
181 IncrementNodeCount(); 227 IncrementNodeCount();
182 node->set_base_id(ReserveIdRange(Throw::num_ids())); 228 node->set_base_id(ReserveIdRange(Throw::num_ids()));
183 Visit(node->exception()); 229 Visit(node->exception());
(...skipping 24 matching lines...) Expand all
208 254
209 void AstNumberingVisitor::VisitFunctionDeclaration(FunctionDeclaration* node) { 255 void AstNumberingVisitor::VisitFunctionDeclaration(FunctionDeclaration* node) {
210 IncrementNodeCount(); 256 IncrementNodeCount();
211 VisitVariableProxy(node->proxy()); 257 VisitVariableProxy(node->proxy());
212 VisitFunctionLiteral(node->fun()); 258 VisitFunctionLiteral(node->fun());
213 } 259 }
214 260
215 261
216 void AstNumberingVisitor::VisitModuleLiteral(ModuleLiteral* node) { 262 void AstNumberingVisitor::VisitModuleLiteral(ModuleLiteral* node) {
217 IncrementNodeCount(); 263 IncrementNodeCount();
264 DisableCaching(kModuleLiteral);
218 VisitBlock(node->body()); 265 VisitBlock(node->body());
219 } 266 }
220 267
221 268
222 void AstNumberingVisitor::VisitCallRuntime(CallRuntime* node) { 269 void AstNumberingVisitor::VisitCallRuntime(CallRuntime* node) {
223 IncrementNodeCount(); 270 IncrementNodeCount();
271 if (node->is_jsruntime()) {
272 // Don't try to optimize JS runtime calls because we bailout on them.
273 DisableCrankshaft(kCallToAJavaScriptRuntimeFunction);
274 }
224 node->set_base_id(ReserveIdRange(CallRuntime::num_ids())); 275 node->set_base_id(ReserveIdRange(CallRuntime::num_ids()));
225 VisitArguments(node->arguments()); 276 VisitArguments(node->arguments());
226 } 277 }
227 278
228 279
229 void AstNumberingVisitor::VisitWithStatement(WithStatement* node) { 280 void AstNumberingVisitor::VisitWithStatement(WithStatement* node) {
230 IncrementNodeCount(); 281 IncrementNodeCount();
282 DisableCrankshaft(kWithStatement);
231 Visit(node->expression()); 283 Visit(node->expression());
232 Visit(node->statement()); 284 Visit(node->statement());
233 } 285 }
234 286
235 287
236 void AstNumberingVisitor::VisitDoWhileStatement(DoWhileStatement* node) { 288 void AstNumberingVisitor::VisitDoWhileStatement(DoWhileStatement* node) {
237 IncrementNodeCount(); 289 IncrementNodeCount();
290 DisableSelfOptimization();
238 node->set_base_id(ReserveIdRange(DoWhileStatement::num_ids())); 291 node->set_base_id(ReserveIdRange(DoWhileStatement::num_ids()));
239 Visit(node->body()); 292 Visit(node->body());
240 Visit(node->cond()); 293 Visit(node->cond());
241 } 294 }
242 295
243 296
244 void AstNumberingVisitor::VisitWhileStatement(WhileStatement* node) { 297 void AstNumberingVisitor::VisitWhileStatement(WhileStatement* node) {
245 IncrementNodeCount(); 298 IncrementNodeCount();
299 DisableSelfOptimization();
246 node->set_base_id(ReserveIdRange(WhileStatement::num_ids())); 300 node->set_base_id(ReserveIdRange(WhileStatement::num_ids()));
247 Visit(node->cond()); 301 Visit(node->cond());
248 Visit(node->body()); 302 Visit(node->body());
249 } 303 }
250 304
251 305
252 void AstNumberingVisitor::VisitTryCatchStatement(TryCatchStatement* node) { 306 void AstNumberingVisitor::VisitTryCatchStatement(TryCatchStatement* node) {
253 IncrementNodeCount(); 307 IncrementNodeCount();
308 DisableTurbofan(kTryCatchStatement);
254 Visit(node->try_block()); 309 Visit(node->try_block());
255 Visit(node->catch_block()); 310 Visit(node->catch_block());
256 } 311 }
257 312
258 313
259 void AstNumberingVisitor::VisitTryFinallyStatement(TryFinallyStatement* node) { 314 void AstNumberingVisitor::VisitTryFinallyStatement(TryFinallyStatement* node) {
260 IncrementNodeCount(); 315 IncrementNodeCount();
316 DisableTurbofan(kTryFinallyStatement);
261 Visit(node->try_block()); 317 Visit(node->try_block());
262 Visit(node->finally_block()); 318 Visit(node->finally_block());
263 } 319 }
264 320
265 321
266 void AstNumberingVisitor::VisitProperty(Property* node) { 322 void AstNumberingVisitor::VisitProperty(Property* node) {
267 IncrementNodeCount(); 323 IncrementNodeCount();
268 node->set_base_id(ReserveIdRange(Property::num_ids())); 324 node->set_base_id(ReserveIdRange(Property::num_ids()));
269 Visit(node->key()); 325 Visit(node->key());
270 Visit(node->obj()); 326 Visit(node->obj());
(...skipping 20 matching lines...) Expand all
291 void AstNumberingVisitor::VisitCompareOperation(CompareOperation* node) { 347 void AstNumberingVisitor::VisitCompareOperation(CompareOperation* node) {
292 IncrementNodeCount(); 348 IncrementNodeCount();
293 node->set_base_id(ReserveIdRange(CompareOperation::num_ids())); 349 node->set_base_id(ReserveIdRange(CompareOperation::num_ids()));
294 Visit(node->left()); 350 Visit(node->left());
295 Visit(node->right()); 351 Visit(node->right());
296 } 352 }
297 353
298 354
299 void AstNumberingVisitor::VisitForInStatement(ForInStatement* node) { 355 void AstNumberingVisitor::VisitForInStatement(ForInStatement* node) {
300 IncrementNodeCount(); 356 IncrementNodeCount();
357 DisableSelfOptimization();
301 node->set_base_id(ReserveIdRange(ForInStatement::num_ids())); 358 node->set_base_id(ReserveIdRange(ForInStatement::num_ids()));
302 Visit(node->each()); 359 Visit(node->each());
303 Visit(node->enumerable()); 360 Visit(node->enumerable());
304 Visit(node->body()); 361 Visit(node->body());
305 } 362 }
306 363
307 364
308 void AstNumberingVisitor::VisitForOfStatement(ForOfStatement* node) { 365 void AstNumberingVisitor::VisitForOfStatement(ForOfStatement* node) {
309 IncrementNodeCount(); 366 IncrementNodeCount();
367 DisableTurbofan(kForOfStatement);
310 node->set_base_id(ReserveIdRange(ForOfStatement::num_ids())); 368 node->set_base_id(ReserveIdRange(ForOfStatement::num_ids()));
311 Visit(node->assign_iterator()); 369 Visit(node->assign_iterator());
312 Visit(node->next_result()); 370 Visit(node->next_result());
313 Visit(node->result_done()); 371 Visit(node->result_done());
314 Visit(node->assign_each()); 372 Visit(node->assign_each());
315 Visit(node->body()); 373 Visit(node->body());
316 } 374 }
317 375
318 376
319 void AstNumberingVisitor::VisitConditional(Conditional* node) { 377 void AstNumberingVisitor::VisitConditional(Conditional* node) {
(...skipping 30 matching lines...) Expand all
350 void AstNumberingVisitor::VisitCaseClause(CaseClause* node) { 408 void AstNumberingVisitor::VisitCaseClause(CaseClause* node) {
351 IncrementNodeCount(); 409 IncrementNodeCount();
352 node->set_base_id(ReserveIdRange(CaseClause::num_ids())); 410 node->set_base_id(ReserveIdRange(CaseClause::num_ids()));
353 if (!node->is_default()) Visit(node->label()); 411 if (!node->is_default()) Visit(node->label());
354 VisitStatements(node->statements()); 412 VisitStatements(node->statements());
355 } 413 }
356 414
357 415
358 void AstNumberingVisitor::VisitForStatement(ForStatement* node) { 416 void AstNumberingVisitor::VisitForStatement(ForStatement* node) {
359 IncrementNodeCount(); 417 IncrementNodeCount();
418 DisableSelfOptimization();
360 node->set_base_id(ReserveIdRange(ForStatement::num_ids())); 419 node->set_base_id(ReserveIdRange(ForStatement::num_ids()));
361 if (node->init() != NULL) Visit(node->init()); 420 if (node->init() != NULL) Visit(node->init());
362 if (node->cond() != NULL) Visit(node->cond()); 421 if (node->cond() != NULL) Visit(node->cond());
363 if (node->next() != NULL) Visit(node->next()); 422 if (node->next() != NULL) Visit(node->next());
364 Visit(node->body()); 423 Visit(node->body());
365 } 424 }
366 425
367 426
368 void AstNumberingVisitor::VisitClassLiteral(ClassLiteral* node) { 427 void AstNumberingVisitor::VisitClassLiteral(ClassLiteral* node) {
369 IncrementNodeCount(); 428 IncrementNodeCount();
429 DisableTurbofan(kClassLiteral);
370 node->set_base_id(ReserveIdRange(ClassLiteral::num_ids())); 430 node->set_base_id(ReserveIdRange(ClassLiteral::num_ids()));
371 if (node->extends()) Visit(node->extends()); 431 if (node->extends()) Visit(node->extends());
372 if (node->constructor()) Visit(node->constructor()); 432 if (node->constructor()) Visit(node->constructor());
373 for (int i = 0; i < node->properties()->length(); i++) { 433 for (int i = 0; i < node->properties()->length(); i++) {
374 VisitObjectLiteralProperty(node->properties()->at(i)); 434 VisitObjectLiteralProperty(node->properties()->at(i));
375 } 435 }
376 } 436 }
377 437
378 438
379 void AstNumberingVisitor::VisitObjectLiteral(ObjectLiteral* node) { 439 void AstNumberingVisitor::VisitObjectLiteral(ObjectLiteral* node) {
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 520
461 Scope* scope = node->scope(); 521 Scope* scope = node->scope();
462 VisitDeclarations(scope->declarations()); 522 VisitDeclarations(scope->declarations());
463 if (scope->is_function_scope() && scope->function() != NULL) { 523 if (scope->is_function_scope() && scope->function() != NULL) {
464 // Visit the name of the named function expression. 524 // Visit the name of the named function expression.
465 Visit(scope->function()); 525 Visit(scope->function());
466 } 526 }
467 VisitStatements(node->body()); 527 VisitStatements(node->body());
468 528
469 node->set_ast_properties(&properties_); 529 node->set_ast_properties(&properties_);
530 node->set_dont_optimize_reason(dont_optimize_reason());
470 } 531 }
471 532
472 533
473 bool AstNumbering::Renumber(FunctionLiteral* function, Zone* zone) { 534 bool AstNumbering::Renumber(FunctionLiteral* function, Zone* zone) {
474 AstNumberingVisitor visitor(zone); 535 AstNumberingVisitor visitor(zone);
475 visitor.Renumber(function); 536 visitor.Renumber(function);
476 return !visitor.HasStackOverflow(); 537 return !visitor.HasStackOverflow();
477 } 538 }
478 } 539 }
479 } // namespace v8::internal 540 } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/ast.cc ('k') | src/compiler.cc » ('j') | src/compiler.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698