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

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

Powered by Google App Engine
This is Rietveld 408576698