Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index 00a81756f05781702b409d5468017f6454b95374..fa0eca646c15e2aeba30de1274e0473f7bad784e 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -105,28 +105,14 @@ MaybeObject* Object::ToObject() { |
} |
-Object* Object::ToBoolean() { |
- if (IsTrue()) return this; |
- if (IsFalse()) return this; |
- if (IsSmi()) { |
- return Isolate::Current()->heap()->ToBoolean(Smi::cast(this)->value() != 0); |
- } |
- HeapObject* heap_object = HeapObject::cast(this); |
- if (heap_object->IsUndefined() || heap_object->IsNull()) { |
- return heap_object->GetHeap()->false_value(); |
- } |
- // Undetectable object is false |
- if (heap_object->IsUndetectableObject()) { |
- return heap_object->GetHeap()->false_value(); |
- } |
- if (heap_object->IsString()) { |
- return heap_object->GetHeap()->ToBoolean( |
- String::cast(this)->length() != 0); |
- } |
- if (heap_object->IsHeapNumber()) { |
- return HeapNumber::cast(this)->HeapNumberToBoolean(); |
- } |
- return heap_object->GetHeap()->true_value(); |
+bool Object::BooleanValue() { |
+ if (IsBoolean()) return IsTrue(); |
+ if (IsSmi()) return Smi::cast(this)->value() != 0; |
+ if (IsUndefined() || IsNull()) return false; |
+ if (IsUndetectableObject()) return false; // Undetectable object is false. |
+ if (IsString()) return String::cast(this)->length() != 0; |
+ if (IsHeapNumber()) return HeapNumber::cast(this)->HeapNumberBooleanValue(); |
+ return true; |
} |
@@ -1627,7 +1613,7 @@ void HeapObject::IterateBody(InstanceType type, int object_size, |
} |
-Object* HeapNumber::HeapNumberToBoolean() { |
+bool HeapNumber::HeapNumberBooleanValue() { |
// NaN, +0, and -0 should return the false object |
#if __BYTE_ORDER == __LITTLE_ENDIAN |
union IeeeDoubleLittleEndianArchType u; |
@@ -1637,15 +1623,13 @@ Object* HeapNumber::HeapNumberToBoolean() { |
u.d = value(); |
if (u.bits.exp == 2047) { |
// Detect NaN for IEEE double precision floating point. |
- if ((u.bits.man_low | u.bits.man_high) != 0) |
- return GetHeap()->false_value(); |
+ if ((u.bits.man_low | u.bits.man_high) != 0) return false; |
} |
if (u.bits.exp == 0) { |
// Detect +0, and -0 for IEEE double precision floating point. |
- if ((u.bits.man_low | u.bits.man_high) == 0) |
- return GetHeap()->false_value(); |
+ if ((u.bits.man_low | u.bits.man_high) == 0) return false; |
} |
- return GetHeap()->true_value(); |
+ return true; |
} |
@@ -2778,7 +2762,7 @@ bool JSProxy::HasPropertyWithHandler(Name* name_raw) { |
"has", isolate->derived_has_trap(), ARRAY_SIZE(args), args); |
if (isolate->has_pending_exception()) return false; |
- return result->ToBoolean()->IsTrue(); |
+ return result->BooleanValue(); |
} |
@@ -2910,8 +2894,8 @@ MUST_USE_RESULT MaybeObject* JSProxy::DeletePropertyWithHandler( |
"delete", Handle<Object>(), ARRAY_SIZE(args), args); |
if (isolate->has_pending_exception()) return Failure::Exception(); |
- Object* bool_result = result->ToBoolean(); |
- if (mode == STRICT_DELETION && bool_result == GetHeap()->false_value()) { |
+ bool result_bool = result->BooleanValue(); |
+ if (mode == STRICT_DELETION && !result_bool) { |
Handle<Object> handler(receiver->handler(), isolate); |
Handle<String> trap_name = isolate->factory()->InternalizeOneByteString( |
STATIC_ASCII_VECTOR("delete")); |
@@ -2921,7 +2905,7 @@ MUST_USE_RESULT MaybeObject* JSProxy::DeletePropertyWithHandler( |
isolate->Throw(*error); |
return Failure::Exception(); |
} |
- return bool_result; |
+ return isolate->heap()->ToBoolean(result_bool); |
} |
@@ -2984,9 +2968,9 @@ MUST_USE_RESULT PropertyAttributes JSProxy::GetPropertyAttributeWithHandler( |
} |
int attributes = NONE; |
- if (enumerable->ToBoolean()->IsFalse()) attributes |= DONT_ENUM; |
- if (configurable->ToBoolean()->IsFalse()) attributes |= DONT_DELETE; |
- if (writable->ToBoolean()->IsFalse()) attributes |= READ_ONLY; |
+ if (!enumerable->BooleanValue()) attributes |= DONT_ENUM; |
+ if (!configurable->BooleanValue()) attributes |= DONT_DELETE; |
+ if (!writable->BooleanValue()) attributes |= READ_ONLY; |
return static_cast<PropertyAttributes>(attributes); |
} |