Index: src/compiler/effect-control-linearizer.cc |
diff --git a/src/compiler/effect-control-linearizer.cc b/src/compiler/effect-control-linearizer.cc |
index 0a8fbd900d9ddafe7f95c1c1146961e6bfaa193d..6b72b14249e1f5a8d5c39b92a952509359230c08 100644 |
--- a/src/compiler/effect-control-linearizer.cc |
+++ b/src/compiler/effect-control-linearizer.cc |
@@ -745,6 +745,9 @@ bool EffectControlLinearizer::TryWireInStateEffect(Node* node, |
case IrOpcode::kStringFromCodePoint: |
state = LowerStringFromCodePoint(node, *effect, *control); |
break; |
+ case IrOpcode::kStringCharAt: |
+ state = LowerStringCharAt(node, *effect, *control); |
+ break; |
case IrOpcode::kStringCharCodeAt: |
state = LowerStringCharCodeAt(node, *effect, *control); |
break; |
@@ -2226,6 +2229,22 @@ EffectControlLinearizer::LowerArrayBufferWasNeutered(Node* node, Node* effect, |
} |
EffectControlLinearizer::ValueEffectControl |
+EffectControlLinearizer::LowerStringCharAt(Node* node, Node* effect, |
+ Node* control) { |
+ Callable const callable = CodeFactory::StringCharAt(isolate()); |
+ Operator::Properties properties = Operator::kNoThrow | Operator::kNoWrite; |
+ CallDescriptor::Flags flags = CallDescriptor::kNoFlags; |
+ CallDescriptor* desc = Linkage::GetStubCallDescriptor( |
+ isolate(), graph()->zone(), callable.descriptor(), 0, flags, properties); |
+ node->InsertInput(graph()->zone(), 0, |
+ jsgraph()->HeapConstant(callable.code())); |
+ node->InsertInput(graph()->zone(), 3, jsgraph()->NoContextConstant()); |
+ node->InsertInput(graph()->zone(), 4, effect); |
+ NodeProperties::ChangeOp(node, common()->Call(desc)); |
+ return ValueEffectControl(node, node, control); |
+} |
+ |
+EffectControlLinearizer::ValueEffectControl |
EffectControlLinearizer::LowerStringCharCodeAt(Node* node, Node* effect, |
Node* control) { |
Node* subject = node->InputAt(0); |