| Index: src/compiler/operation-typer.cc
|
| diff --git a/src/compiler/operation-typer.cc b/src/compiler/operation-typer.cc
|
| index f3ef778dc020d40213b1f5b2bb984031421816e5..564b3981020d72787fcf98d818b150cdd428bc7c 100644
|
| --- a/src/compiler/operation-typer.cc
|
| +++ b/src/compiler/operation-typer.cc
|
| @@ -17,7 +17,7 @@ namespace internal {
|
| namespace compiler {
|
|
|
| OperationTyper::OperationTyper(Isolate* isolate, Zone* zone)
|
| - : zone_(zone), cache_(TypeCache::Get()) {
|
| + : isolate_(isolate), zone_(zone), cache_(TypeCache::Get()) {
|
| Factory* factory = isolate->factory();
|
| infinity_ = Type::Constant(factory->infinity_value(), zone);
|
| minus_infinity_ = Type::Constant(factory->minus_infinity_value(), zone);
|
| @@ -484,6 +484,25 @@ Type* OperationTyper::NumberToUint32(Type* type) {
|
| return Type::Unsigned32();
|
| }
|
|
|
| +Type* OperationTyper::NumberToString(Type* lhs, Type* rhs) {
|
| + DCHECK(lhs->Is(Type::Number()));
|
| + DCHECK(rhs->Is(Type::Unsigned30()));
|
| + if (!lhs->IsInhabited()) return Type::None();
|
| + if (lhs->Is(Type::NaN())) {
|
| + return Type::Constant(factory()->nan_string(), zone());
|
| + }
|
| + if (lhs->Is(cache_.kZeroish)) {
|
| + return Type::Constant(factory()->zero_string(), zone());
|
| + }
|
| + if (lhs->Is(infinity_)) {
|
| + return Type::Constant(factory()->infinity_string(), zone());
|
| + }
|
| + if (lhs->Is(minus_infinity_)) {
|
| + return Type::Constant(factory()->minus_infinity_string(), zone());
|
| + }
|
| + return Type::String();
|
| +}
|
| +
|
| Type* OperationTyper::NumberSilenceNaN(Type* type) {
|
| DCHECK(type->Is(Type::Number()));
|
| // TODO(jarin): This is a terrible hack; we definitely need a dedicated type
|
| @@ -963,6 +982,8 @@ Type* OperationTyper::TypeTypeGuard(const Operator* sigma_op, Type* input) {
|
| return Type::Intersect(input, TypeGuardTypeOf(sigma_op), zone());
|
| }
|
|
|
| +Factory* OperationTyper::factory() const { return isolate()->factory(); }
|
| +
|
| } // namespace compiler
|
| } // namespace internal
|
| } // namespace v8
|
|
|