| 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 #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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |