| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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/compiler/ast-graph-builder.h" | 5 #include "src/compiler/ast-graph-builder.h" |
| 6 | 6 |
| 7 #include "src/compiler.h" | 7 #include "src/compiler.h" |
| 8 #include "src/compiler/ast-loop-assignment-analyzer.h" | 8 #include "src/compiler/ast-loop-assignment-analyzer.h" |
| 9 #include "src/compiler/control-builders.h" | 9 #include "src/compiler/control-builders.h" |
| 10 #include "src/compiler/js-type-feedback.h" | 10 #include "src/compiler/js-type-feedback.h" |
| (...skipping 1310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1321 // a few simplified instructions. | 1321 // a few simplified instructions. |
| 1322 Node* cache_pair = NewNode( | 1322 Node* cache_pair = NewNode( |
| 1323 javascript()->CallRuntime(Runtime::kForInInit, 2), obj, cache_type); | 1323 javascript()->CallRuntime(Runtime::kForInInit, 2), obj, cache_type); |
| 1324 // cache_type may have been replaced. | 1324 // cache_type may have been replaced. |
| 1325 Node* cache_array = NewNode(common()->Projection(0), cache_pair); | 1325 Node* cache_array = NewNode(common()->Projection(0), cache_pair); |
| 1326 cache_type = NewNode(common()->Projection(1), cache_pair); | 1326 cache_type = NewNode(common()->Projection(1), cache_pair); |
| 1327 Node* cache_length = | 1327 Node* cache_length = |
| 1328 NewNode(javascript()->CallRuntime(Runtime::kForInCacheArrayLength, 2), | 1328 NewNode(javascript()->CallRuntime(Runtime::kForInCacheArrayLength, 2), |
| 1329 cache_type, cache_array); | 1329 cache_type, cache_array); |
| 1330 { | 1330 { |
| 1331 // TODO(dcarney): this check is actually supposed to be for the | 1331 // Construct the rest of the environment. |
| 1332 // empty enum case only. | 1332 environment()->Push(cache_type); |
| 1333 IfBuilder have_no_properties(this); | 1333 environment()->Push(cache_array); |
| 1334 Node* empty_array_cond = NewNode(javascript()->StrictEqual(), | 1334 environment()->Push(cache_length); |
| 1335 cache_length, jsgraph()->ZeroConstant()); | 1335 environment()->Push(jsgraph()->ZeroConstant()); |
| 1336 have_no_properties.If(empty_array_cond); | |
| 1337 have_no_properties.Then(); | |
| 1338 // Pop obj and skip loop. | |
| 1339 environment()->Pop(); | |
| 1340 have_no_properties.Else(); | |
| 1341 { | |
| 1342 // Construct the rest of the environment. | |
| 1343 environment()->Push(cache_type); | |
| 1344 environment()->Push(cache_array); | |
| 1345 environment()->Push(cache_length); | |
| 1346 environment()->Push(jsgraph()->ZeroConstant()); | |
| 1347 | 1336 |
| 1348 // Build the actual loop body. | 1337 // Build the actual loop body. |
| 1349 VisitForInBody(stmt); | 1338 VisitForInBody(stmt); |
| 1350 } | |
| 1351 have_no_properties.End(); | |
| 1352 } | 1339 } |
| 1353 is_null.End(); | 1340 is_null.End(); |
| 1354 } | 1341 } |
| 1355 is_undefined.End(); | 1342 is_undefined.End(); |
| 1356 } | 1343 } |
| 1357 | 1344 |
| 1358 | 1345 |
| 1359 // TODO(dcarney): this is a big function. Try to clean up some. | 1346 // TODO(dcarney): this is a big function. Try to clean up some. |
| 1360 void AstGraphBuilder::VisitForInBody(ForInStatement* stmt) { | 1347 void AstGraphBuilder::VisitForInBody(ForInStatement* stmt) { |
| 1361 LoopBuilder for_loop(this); | 1348 LoopBuilder for_loop(this); |
| (...skipping 2434 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3796 // Phi does not exist yet, introduce one. | 3783 // Phi does not exist yet, introduce one. |
| 3797 value = NewPhi(inputs, value, control); | 3784 value = NewPhi(inputs, value, control); |
| 3798 value->ReplaceInput(inputs - 1, other); | 3785 value->ReplaceInput(inputs - 1, other); |
| 3799 } | 3786 } |
| 3800 return value; | 3787 return value; |
| 3801 } | 3788 } |
| 3802 | 3789 |
| 3803 } // namespace compiler | 3790 } // namespace compiler |
| 3804 } // namespace internal | 3791 } // namespace internal |
| 3805 } // namespace v8 | 3792 } // namespace v8 |
| OLD | NEW |