Commit 1ed16c58 authored by Benedikt Meurer's avatar Benedikt Meurer

[turbofan] Improve typing of ToBoolean.

According to ES6 draft, revision 29 (2014-12-06), section 7.1.2,
ToBoolean yields true for true, detectable receivers (the ES6 Object
type), symbols and numbers except -0, +0 and NaN.

R=hpayer@chromium.org

Review URL: https://codereview.chromium.org/807663006

Cr-Commit-Position: refs/heads/master@{#25915}
parent b4302150
......@@ -187,6 +187,9 @@ Typer::Typer(Graph* graph, MaybeHandle<Context> context)
Type::Union(Type::Union(singleton_false, zeroish, zone),
undefined_or_null, zone),
zone);
truish = Type::Union(
singleton_true,
Type::Union(Type::DetectableReceiver(), Type::Symbol(), zone), zone);
integer = Type::Range(minusinfinity, infinity, zone);
weakint = Type::Union(integer, nan_or_minuszero, zone);
......@@ -513,8 +516,8 @@ Type* Typer::Visitor::ToPrimitive(Type* type, Typer* t) {
Type* Typer::Visitor::ToBoolean(Type* type, Typer* t) {
if (type->Is(Type::Boolean())) return type;
if (type->Is(t->falsish)) return t->singleton_false;
if (type->Is(Type::DetectableReceiver())) return t->singleton_true;
if (type->Is(Type::OrderedNumber()) && (type->Max() < 0 || 0 < type->Min())) {
if (type->Is(t->truish)) return t->singleton_true;
if (type->Is(Type::PlainNumber()) && (type->Max() < 0 || 0 < type->Min())) {
return t->singleton_true; // Ruled out nan, -0 and +0.
}
return Type::Boolean();
......
......@@ -54,6 +54,7 @@ class Typer {
Type* signed32ish;
Type* unsigned32ish;
Type* falsish;
Type* truish;
Type* integer;
Type* weakint;
Type* number_fun0_;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment