Index: src/compiler/typer.cc |
diff --git a/src/compiler/typer.cc b/src/compiler/typer.cc |
index 936e5a0c455d7af1451ea858cdf6adef1d46c7d8..ac6fda4877504f354d5ef22748bcb79cca40d8ed 100644 |
--- a/src/compiler/typer.cc |
+++ b/src/compiler/typer.cc |
@@ -41,9 +41,9 @@ Typer::Typer(Isolate* isolate, Graph* graph) |
Zone* zone = this->zone(); |
Factory* const factory = isolate->factory(); |
- singleton_false_ = Type::Constant(factory->false_value(), zone); |
- singleton_true_ = Type::Constant(factory->true_value(), zone); |
- singleton_the_hole_ = Type::Constant(factory->the_hole_value(), zone); |
+ singleton_false_ = Type::HeapConstant(factory->false_value(), zone); |
+ singleton_true_ = Type::HeapConstant(factory->true_value(), zone); |
+ singleton_the_hole_ = Type::HeapConstant(factory->the_hole_value(), zone); |
falsish_ = Type::Union( |
Type::Undetectable(), |
Type::Union(Type::Union(singleton_false_, cache_.kZeroish, zone), |
@@ -604,15 +604,10 @@ Type* Typer::Visitor::TypeFloat64Constant(Node* node) { |
Type* Typer::Visitor::TypeNumberConstant(Node* node) { |
- Factory* f = isolate()->factory(); |
double number = OpParameter<double>(node); |
- if (Type::IsInteger(number)) { |
- return Type::Range(number, number, zone()); |
- } |
- return Type::Constant(f->NewNumber(number), zone()); |
+ return Type::NewConstant(number, zone()); |
} |
- |
Type* Typer::Visitor::TypeHeapConstant(Node* node) { |
return TypeConstant(OpParameter<Handle<HeapObject>>(node)); |
} |
@@ -836,7 +831,7 @@ Type* Typer::Visitor::JSEqualTyper(Type* lhs, Type* rhs, Typer* t) { |
(lhs->Max() < rhs->Min() || lhs->Min() > rhs->Max())) { |
return t->singleton_false_; |
} |
- if (lhs->IsConstant() && rhs->Is(lhs)) { |
+ if (lhs->IsHeapConstant() && rhs->Is(lhs)) { |
// Types are equal and are inhabited only by a single semantic value, |
// which is not nan due to the earlier check. |
return t->singleton_true_; |
@@ -873,7 +868,7 @@ Type* Typer::Visitor::JSStrictEqualTyper(Type* lhs, Type* rhs, Typer* t) { |
!lhs->Maybe(rhs)) { |
return t->singleton_false_; |
} |
- if (lhs->IsConstant() && rhs->Is(lhs)) { |
+ if (lhs->IsHeapConstant() && rhs->Is(lhs)) { |
// Types are equal and are inhabited only by a single semantic value, |
// which is not nan due to the earlier check. |
return t->singleton_true_; |
@@ -907,7 +902,7 @@ Typer::Visitor::ComparisonOutcome Typer::Visitor::JSCompareTyper(Type* lhs, |
if (lhs->Is(Type::NaN()) || rhs->Is(Type::NaN())) return kComparisonUndefined; |
ComparisonOutcome result; |
- if (lhs->IsConstant() && rhs->Is(lhs)) { |
+ if (lhs->IsHeapConstant() && rhs->Is(lhs)) { |
// Types are equal and are inhabited only by a single semantic value. |
result = kComparisonFalse; |
} else if (lhs->Min() >= rhs->Max()) { |
@@ -1021,23 +1016,26 @@ Type* Typer::Visitor::JSModulusTyper(Type* lhs, Type* rhs, Typer* t) { |
Type* Typer::Visitor::JSTypeOfTyper(Type* type, Typer* t) { |
Factory* const f = t->isolate()->factory(); |
if (type->Is(Type::Boolean())) { |
- return Type::Constant(f->boolean_string(), t->zone()); |
+ return Type::HeapConstant(f->boolean_string(), t->zone()); |
} else if (type->Is(Type::Number())) { |
- return Type::Constant(f->number_string(), t->zone()); |
+ return Type::HeapConstant(f->number_string(), t->zone()); |
} else if (type->Is(Type::String())) { |
- return Type::Constant(f->string_string(), t->zone()); |
+ return Type::HeapConstant(f->string_string(), t->zone()); |
} else if (type->Is(Type::Symbol())) { |
- return Type::Constant(f->symbol_string(), t->zone()); |
+ return Type::HeapConstant(f->symbol_string(), t->zone()); |
} else if (type->Is(Type::Union(Type::Undefined(), Type::OtherUndetectable(), |
t->zone()))) { |
- return Type::Constant(f->undefined_string(), t->zone()); |
+ return Type::HeapConstant(f->undefined_string(), t->zone()); |
} else if (type->Is(Type::Null())) { |
- return Type::Constant(f->object_string(), t->zone()); |
+ return Type::HeapConstant(f->object_string(), t->zone()); |
} else if (type->Is(Type::Function())) { |
- return Type::Constant(f->function_string(), t->zone()); |
- } else if (type->IsConstant()) { |
- return Type::Constant( |
- Object::TypeOf(t->isolate(), type->AsConstant()->Value()), t->zone()); |
+ return Type::HeapConstant(f->function_string(), t->zone()); |
+ } else if (type->IsHeapConstant()) { |
+ return Type::HeapConstant( |
+ Object::TypeOf(t->isolate(), type->AsHeapConstant()->Value()), |
+ t->zone()); |
+ } else if (type->IsOtherNumberConstant()) { |
+ return Type::HeapConstant(f->number_string(), t->zone()); |
} |
return Type::InternalizedString(); |
} |
@@ -1292,9 +1290,9 @@ Type* Typer::Visitor::TypeJSCallConstruct(Node* node) { |
Type* Typer::Visitor::JSCallFunctionTyper(Type* fun, Typer* t) { |
- if (fun->IsConstant() && fun->AsConstant()->Value()->IsJSFunction()) { |
+ if (fun->IsHeapConstant() && fun->AsHeapConstant()->Value()->IsJSFunction()) { |
Handle<JSFunction> function = |
- Handle<JSFunction>::cast(fun->AsConstant()->Value()); |
+ Handle<JSFunction>::cast(fun->AsHeapConstant()->Value()); |
if (function->shared()->HasBuiltinFunctionId()) { |
switch (function->shared()->builtin_function_id()) { |
case kMathRandom: |
@@ -1537,7 +1535,7 @@ Type* Typer::Visitor::TypePlainPrimitiveToFloat64(Node* node) { |
// static |
Type* Typer::Visitor::ReferenceEqualTyper(Type* lhs, Type* rhs, Typer* t) { |
- if (lhs->IsConstant() && rhs->Is(lhs)) { |
+ if (lhs->IsHeapConstant() && rhs->Is(lhs)) { |
return t->singleton_true_; |
} |
return Type::Boolean(); |
@@ -1564,7 +1562,7 @@ Type* Typer::Visitor::StringFromCharCodeTyper(Type* type, Typer* t) { |
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::HeapConstant(string, t->zone()); |
} |
return Type::String(); |
} |
@@ -1577,7 +1575,7 @@ Type* Typer::Visitor::StringFromCodePointTyper(Type* type, Typer* t) { |
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::HeapConstant(string, t->zone()); |
} |
return Type::String(); |
} |
@@ -1752,7 +1750,7 @@ Type* Typer::Visitor::TypeConstant(Handle<Object> value) { |
if (Type::IsInteger(*value)) { |
return Type::Range(value->Number(), value->Number(), zone()); |
} |
- return Type::Constant(value, zone()); |
+ return Type::NewConstant(value, zone()); |
} |
} // namespace compiler |