Index: src/api.cc |
diff --git a/src/api.cc b/src/api.cc |
index 05a77d0d74c96f8f987dd603689f40653caf0d10..07818940140dcab6c2113e057d3ec93b24245e8b 100644 |
--- a/src/api.cc |
+++ b/src/api.cc |
@@ -471,6 +471,11 @@ Local<Value> V8::GetEternal(Isolate* v8_isolate, int index) { |
} |
+void V8::CheckIsJust(bool is_just) { |
+ Utils::ApiCheck(is_just, "v8::FromJust", "Maybe value is Nothing."); |
+} |
+ |
+ |
// --- H a n d l e s --- |
@@ -2996,7 +3001,7 @@ void v8::RegExp::CheckCast(v8::Value* that) { |
Maybe<bool> Value::BooleanValue(Local<Context> context) const { |
- return maybe(Utils::OpenHandle(this)->BooleanValue()); |
+ return Just(Utils::OpenHandle(this)->BooleanValue()); |
} |
@@ -3007,13 +3012,13 @@ bool Value::BooleanValue() const { |
Maybe<double> Value::NumberValue(Local<Context> context) const { |
auto obj = Utils::OpenHandle(this); |
- if (obj->IsNumber()) return maybe(obj->Number()); |
+ if (obj->IsNumber()) return Just(obj->Number()); |
CONTEXT_SCOPE_GET_ISOLATE(context, "NumberValue"); |
EXCEPTION_PREAMBLE(isolate); |
i::Handle<i::Object> num; |
has_pending_exception = !i::Execution::ToNumber(isolate, obj).ToHandle(&num); |
- EXCEPTION_BAILOUT_CHECK(isolate, Maybe<double>()); |
- return maybe(num->Number()); |
+ EXCEPTION_BAILOUT_CHECK(isolate, Nothing<double>()); |
+ return Just(num->Number()); |
} |
@@ -3021,7 +3026,7 @@ double Value::NumberValue() const { |
auto obj = Utils::OpenHandle(this); |
if (obj->IsNumber()) return obj->Number(); |
return NumberValue(ContextFromHeapObject(obj)) |
- .From(std::numeric_limits<double>::quiet_NaN()); |
+ .FromMaybe(std::numeric_limits<double>::quiet_NaN()); |
} |
@@ -3035,13 +3040,10 @@ Maybe<int64_t> Value::IntegerValue(Local<Context> context) const { |
EXCEPTION_PREAMBLE(isolate); |
has_pending_exception = |
!i::Execution::ToInteger(isolate, obj).ToHandle(&num); |
- EXCEPTION_BAILOUT_CHECK(isolate, Maybe<int64_t>()); |
- } |
- if (num->IsSmi()) { |
- return maybe(static_cast<int64_t>(i::Smi::cast(*num)->value())); |
- } else { |
- return maybe(static_cast<int64_t>(num->Number())); |
+ EXCEPTION_BAILOUT_CHECK(isolate, Nothing<int64_t>()); |
} |
+ return Just(num->IsSmi() ? static_cast<int64_t>(i::Smi::cast(*num)->value()) |
+ : static_cast<int64_t>(num->Number())); |
} |
@@ -3054,53 +3056,47 @@ int64_t Value::IntegerValue() const { |
return static_cast<int64_t>(obj->Number()); |
} |
} |
- return IntegerValue(ContextFromHeapObject(obj)).From(0); |
+ return IntegerValue(ContextFromHeapObject(obj)).FromMaybe(0); |
} |
Maybe<int32_t> Value::Int32Value(Local<Context> context) const { |
auto obj = Utils::OpenHandle(this); |
- if (obj->IsNumber()) return maybe(NumberToInt32(*obj)); |
+ if (obj->IsNumber()) return Just(NumberToInt32(*obj)); |
CONTEXT_SCOPE_GET_ISOLATE(context, "Int32Value"); |
EXCEPTION_PREAMBLE(isolate); |
i::Handle<i::Object> num; |
has_pending_exception = !i::Execution::ToInt32(isolate, obj).ToHandle(&num); |
- EXCEPTION_BAILOUT_CHECK(isolate, Maybe<int32_t>()); |
- if (num->IsSmi()) { |
- return maybe(i::Smi::cast(*num)->value()); |
- } else { |
- return maybe(static_cast<int32_t>(num->Number())); |
- } |
+ EXCEPTION_BAILOUT_CHECK(isolate, Nothing<int32_t>()); |
+ return Just(num->IsSmi() ? i::Smi::cast(*num)->value() |
+ : static_cast<int32_t>(num->Number())); |
} |
int32_t Value::Int32Value() const { |
auto obj = Utils::OpenHandle(this); |
if (obj->IsNumber()) return NumberToInt32(*obj); |
- return Int32Value(ContextFromHeapObject(obj)).From(0); |
+ return Int32Value(ContextFromHeapObject(obj)).FromMaybe(0); |
} |
Maybe<uint32_t> Value::Uint32Value(Local<Context> context) const { |
auto obj = Utils::OpenHandle(this); |
- if (obj->IsNumber()) return maybe(NumberToUint32(*obj)); |
+ if (obj->IsNumber()) return Just(NumberToUint32(*obj)); |
CONTEXT_SCOPE_GET_ISOLATE(context, "Uint32Value"); |
EXCEPTION_PREAMBLE(isolate); |
i::Handle<i::Object> num; |
has_pending_exception = !i::Execution::ToUint32(isolate, obj).ToHandle(&num); |
- EXCEPTION_BAILOUT_CHECK(isolate, Maybe<uint32_t>()); |
- if (num->IsSmi()) { |
- return maybe(static_cast<uint32_t>(i::Smi::cast(*num)->value())); |
- } else { |
- return maybe(static_cast<uint32_t>(num->Number())); |
- } |
+ EXCEPTION_BAILOUT_CHECK(isolate, Nothing<uint32_t>()); |
+ return Just(num->IsSmi() ? static_cast<uint32_t>(i::Smi::cast(*num)->value()) |
+ : static_cast<uint32_t>(num->Number())); |
} |
uint32_t Value::Uint32Value() const { |
auto obj = Utils::OpenHandle(this); |
if (obj->IsNumber()) return NumberToUint32(*obj); |
- return Uint32Value(ContextFromHeapObject(obj)).From(0); |
+ return Uint32Value(ContextFromHeapObject(obj)).FromMaybe(0); |
} |
@@ -3589,7 +3585,7 @@ bool v8::Object::Has(v8::Handle<Value> key) { |
i::Handle<i::JSReceiver> self = Utils::OpenHandle(this); |
i::Handle<i::Object> key_obj = Utils::OpenHandle(*key); |
EXCEPTION_PREAMBLE(isolate); |
- Maybe<bool> maybe; |
+ Maybe<bool> maybe = Nothing<bool>(); |
// Check if the given key is an array index. |
uint32_t index; |
if (key_obj->ToArrayIndex(&index)) { |
@@ -3803,8 +3799,9 @@ static Local<Value> GetPropertyByLookup(i::LookupIterator* it) { |
static Maybe<PropertyAttribute> GetPropertyAttributesByLookup( |
i::LookupIterator* it) { |
Maybe<PropertyAttributes> attr = i::JSReceiver::GetPropertyAttributes(it); |
- if (!it->IsFound()) return Maybe<PropertyAttribute>(); |
- return Maybe<PropertyAttribute>(static_cast<PropertyAttribute>(attr.value)); |
+ return it->IsFound() ? Just<PropertyAttribute>( |
+ static_cast<PropertyAttribute>(attr.value)) |
+ : Nothing<PropertyAttribute>(); |
} |
@@ -3831,12 +3828,12 @@ v8::Object::GetRealNamedPropertyAttributesInPrototypeChain(Handle<String> key) { |
i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
ON_BAILOUT(isolate, |
"v8::Object::GetRealNamedPropertyAttributesInPrototypeChain()", |
- return Maybe<PropertyAttribute>()); |
+ return Nothing<PropertyAttribute>()); |
ENTER_V8(isolate); |
i::Handle<i::JSObject> self_obj = Utils::OpenHandle(this); |
i::Handle<i::String> key_obj = Utils::OpenHandle(*key); |
i::PrototypeIterator iter(isolate, self_obj); |
- if (iter.IsAtEnd()) return Maybe<PropertyAttribute>(); |
+ if (iter.IsAtEnd()) return Nothing<PropertyAttribute>(); |
i::Handle<i::Object> proto = i::PrototypeIterator::GetCurrent(iter); |
i::LookupIterator it(self_obj, key_obj, i::Handle<i::JSReceiver>::cast(proto), |
i::LookupIterator::PROTOTYPE_CHAIN_SKIP_INTERCEPTOR); |
@@ -3861,7 +3858,7 @@ Maybe<PropertyAttribute> v8::Object::GetRealNamedPropertyAttributes( |
Handle<String> key) { |
i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
ON_BAILOUT(isolate, "v8::Object::GetRealNamedPropertyAttributes()", |
- return Maybe<PropertyAttribute>()); |
+ return Nothing<PropertyAttribute>()); |
ENTER_V8(isolate); |
i::Handle<i::JSObject> self_obj = Utils::OpenHandle(this); |
i::Handle<i::String> key_obj = Utils::OpenHandle(*key); |