| 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/js-builtin-reducer.h" | 5 #include "src/compiler/js-builtin-reducer.h" |
| 6 | 6 |
| 7 #include "src/compilation-dependencies.h" | 7 #include "src/compilation-dependencies.h" |
| 8 #include "src/compiler/access-builder.h" | 8 #include "src/compiler/access-builder.h" |
| 9 #include "src/compiler/js-graph.h" | 9 #include "src/compiler/js-graph.h" |
| 10 #include "src/compiler/node-matchers.h" | 10 #include "src/compiler/node-matchers.h" |
| (...skipping 1517 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1528 Node* receiver_length = effect = graph()->NewNode( | 1528 Node* receiver_length = effect = graph()->NewNode( |
| 1529 simplified()->LoadField(AccessBuilder::ForStringLength()), receiver, | 1529 simplified()->LoadField(AccessBuilder::ForStringLength()), receiver, |
| 1530 effect, control); | 1530 effect, control); |
| 1531 | 1531 |
| 1532 // Check if {index} is less than {receiver} length. | 1532 // Check if {index} is less than {receiver} length. |
| 1533 Node* check = graph()->NewNode(simplified()->NumberLessThan(), index, | 1533 Node* check = graph()->NewNode(simplified()->NumberLessThan(), index, |
| 1534 receiver_length); | 1534 receiver_length); |
| 1535 Node* branch = graph()->NewNode(common()->Branch(BranchHint::kTrue), | 1535 Node* branch = graph()->NewNode(common()->Branch(BranchHint::kTrue), |
| 1536 check, control); | 1536 check, control); |
| 1537 | 1537 |
| 1538 // Return the character from the {receiver} as single character string. |
| 1538 Node* if_true = graph()->NewNode(common()->IfTrue(), branch); | 1539 Node* if_true = graph()->NewNode(common()->IfTrue(), branch); |
| 1539 Node* vtrue; | 1540 Node* vtrue = graph()->NewNode(simplified()->StringCharAt(), receiver, |
| 1540 { | 1541 index, if_true); |
| 1541 // Load the character from the {receiver}. | |
| 1542 vtrue = graph()->NewNode(simplified()->StringCharCodeAt(), receiver, | |
| 1543 index, if_true); | |
| 1544 | |
| 1545 // Return it as single character string. | |
| 1546 vtrue = graph()->NewNode(simplified()->StringFromCharCode(), vtrue); | |
| 1547 } | |
| 1548 | 1542 |
| 1549 // Return the empty string otherwise. | 1543 // Return the empty string otherwise. |
| 1550 Node* if_false = graph()->NewNode(common()->IfFalse(), branch); | 1544 Node* if_false = graph()->NewNode(common()->IfFalse(), branch); |
| 1551 Node* vfalse = jsgraph()->EmptyStringConstant(); | 1545 Node* vfalse = jsgraph()->EmptyStringConstant(); |
| 1552 | 1546 |
| 1553 control = graph()->NewNode(common()->Merge(2), if_true, if_false); | 1547 control = graph()->NewNode(common()->Merge(2), if_true, if_false); |
| 1554 Node* value = | 1548 Node* value = |
| 1555 graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2), | 1549 graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2), |
| 1556 vtrue, vfalse, control); | 1550 vtrue, vfalse, control); |
| 1557 | 1551 |
| (...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2043 return jsgraph()->simplified(); | 2037 return jsgraph()->simplified(); |
| 2044 } | 2038 } |
| 2045 | 2039 |
| 2046 JSOperatorBuilder* JSBuiltinReducer::javascript() const { | 2040 JSOperatorBuilder* JSBuiltinReducer::javascript() const { |
| 2047 return jsgraph()->javascript(); | 2041 return jsgraph()->javascript(); |
| 2048 } | 2042 } |
| 2049 | 2043 |
| 2050 } // namespace compiler | 2044 } // namespace compiler |
| 2051 } // namespace internal | 2045 } // namespace internal |
| 2052 } // namespace v8 | 2046 } // namespace v8 |
| OLD | NEW |