Index: src/compiler/typer.cc |
diff --git a/src/compiler/typer.cc b/src/compiler/typer.cc |
index e33b7764567881f149e760262b26a9a58f2b1f87..15bc6dfba24becd2388b947c295f72ebc44ad7bd 100644 |
--- a/src/compiler/typer.cc |
+++ b/src/compiler/typer.cc |
@@ -295,6 +295,7 @@ class Typer::Visitor : public Reducer { |
static Type* ReferenceEqualTyper(Type*, Type*, Typer*); |
static Type* StringFromCharCodeTyper(Type*, Typer*); |
+ static Type* StringFromCodePointTyper(Type*, Typer*); |
Reduction UpdateType(Node* node, Type* current) { |
if (NodeProperties::IsTyped(node)) { |
@@ -1365,6 +1366,10 @@ Type* Typer::Visitor::JSCallFunctionTyper(Type* fun, Typer* t) { |
case kStringToLowerCase: |
case kStringToUpperCase: |
return Type::String(); |
+ |
+ case kStringIteratorNext: |
+ return Type::OtherObject(); |
+ |
// Array functions. |
case kArrayIndexOf: |
case kArrayLastIndexOf: |
@@ -1551,6 +1556,19 @@ Type* Typer::Visitor::StringFromCharCodeTyper(Type* type, Typer* t) { |
return Type::String(); |
} |
+Type* Typer::Visitor::StringFromCodePointTyper(Type* type, Typer* t) { |
+ type = NumberToUint32(ToNumber(type, t), t); |
+ Factory* f = t->isolate()->factory(); |
+ double min = type->Min(); |
+ double max = type->Max(); |
+ if (min == max) { |
+ uint32_t code = static_cast<uint32_t>(min) & String::kMaxUtf16CodeUnitU; |
+ Handle<String> string = f->LookupSingleCharacterStringFromCode(code); |
+ return Type::Constant(string, t->zone()); |
+ } |
+ return Type::String(); |
+} |
+ |
Type* Typer::Visitor::TypeStringCharCodeAt(Node* node) { |
// TODO(bmeurer): We could do better here based on inputs. |
return Type::Range(0, kMaxUInt16, zone()); |
@@ -1560,6 +1578,10 @@ Type* Typer::Visitor::TypeStringFromCharCode(Node* node) { |
return TypeUnaryOp(node, StringFromCharCodeTyper); |
} |
+Type* Typer::Visitor::TypeStringFromCodePoint(Node* node) { |
+ return TypeUnaryOp(node, StringFromCodePointTyper); |
+} |
+ |
Type* Typer::Visitor::TypeCheckBounds(Node* node) { |
Type* index = Operand(node, 0); |
Type* length = Operand(node, 1); |