 Chromium Code Reviews
 Chromium Code Reviews Issue 993333002:
  bindings: Use Maybe APIs in toXXX() functions  (Closed) 
  Base URL: svn://svn.chromium.org/blink/trunk
    
  
    Issue 993333002:
  bindings: Use Maybe APIs in toXXX() functions  (Closed) 
  Base URL: svn://svn.chromium.org/blink/trunk| Index: Source/bindings/core/v8/V8Binding.cpp | 
| diff --git a/Source/bindings/core/v8/V8Binding.cpp b/Source/bindings/core/v8/V8Binding.cpp | 
| index 68c856af103c17f42bab7f6fe9513dad57e7149d..6d7b77e483afa64d21973f2c114780e3406e94f7 100644 | 
| --- a/Source/bindings/core/v8/V8Binding.cpp | 
| +++ b/Source/bindings/core/v8/V8Binding.cpp | 
| @@ -164,7 +164,7 @@ static inline T toSmallerInt(v8::Isolate* isolate, v8::Handle<v8::Value> value, | 
| // Fast case. The value is already a 32-bit integer in the right range. | 
| if (value->IsInt32()) { | 
| - int32_t result = value->Int32Value(); | 
| + int32_t result = value.As<v8::Int32>()->Value(); | 
| if (result >= LimitsTrait::minValue && result <= LimitsTrait::maxValue) | 
| return static_cast<T>(result); | 
| if (configuration == EnforceRange) { | 
| @@ -183,8 +183,7 @@ static inline T toSmallerInt(v8::Isolate* isolate, v8::Handle<v8::Value> value, | 
| } else { | 
| // Can the value be converted to a number? | 
| v8::TryCatch block(isolate); | 
| - numberObject = value->ToNumber(isolate); | 
| - if (block.HasCaught()) { | 
| + if (!v8Call(value->ToNumber(isolate->GetCurrentContext()), numberObject, block)) { | 
| exceptionState.rethrowV8Exception(block.Exception()); | 
| return 0; | 
| } | 
| @@ -217,7 +216,7 @@ static inline T toSmallerUInt(v8::Isolate* isolate, v8::Handle<v8::Value> value, | 
| // Fast case. The value is a 32-bit signed integer - possibly positive? | 
| if (value->IsInt32()) { | 
| - int32_t result = value->Int32Value(); | 
| + int32_t result = value.As<v8::Int32>()->Value(); | 
| if (result >= 0 && result <= LimitsTrait::maxValue) | 
| return static_cast<T>(result); | 
| if (configuration == EnforceRange) { | 
| @@ -235,8 +234,7 @@ static inline T toSmallerUInt(v8::Isolate* isolate, v8::Handle<v8::Value> value, | 
| } else { | 
| // Can the value be converted to a number? | 
| v8::TryCatch block(isolate); | 
| - numberObject = value->ToNumber(isolate); | 
| - if (block.HasCaught()) { | 
| + if (!v8Call(value->ToNumber(isolate->GetCurrentContext()), numberObject, block)) { | 
| exceptionState.rethrowV8Exception(block.Exception()); | 
| return 0; | 
| } | 
| @@ -286,8 +284,8 @@ int32_t toInt32Slow(v8::Isolate* isolate, v8::Handle<v8::Value> value, IntegerCo | 
| ASSERT(!value->IsInt32()); | 
| // Can the value be converted to a number? | 
| v8::TryCatch block(isolate); | 
| - v8::Local<v8::Number> numberObject = value->ToNumber(isolate); | 
| - if (block.HasCaught()) { | 
| + v8::Local<v8::Number> numberObject; | 
| + if (!v8Call(value->ToNumber(isolate->GetCurrentContext()), numberObject, block)) { | 
| exceptionState.rethrowV8Exception(block.Exception()); | 
| return 0; | 
| } | 
| @@ -307,7 +305,12 @@ int32_t toInt32Slow(v8::Isolate* isolate, v8::Handle<v8::Value> value, IntegerCo | 
| if (std::isinf(numberValue)) | 
| return 0; | 
| - return numberObject->Int32Value(); | 
| + int32_t result; | 
| + if (!v8Call(numberObject->Int32Value(isolate->GetCurrentContext()), result, block)) { | 
| + exceptionState.rethrowV8Exception(block.Exception()); | 
| 
Jens Widell
2015/03/25 11:11:15
Technically, this call can't fail, since numberObj
 
haraken
2015/03/25 11:53:44
In practice this call won't fail, but conceptually
 | 
| + return 0; | 
| + } | 
| + return result; | 
| } | 
| uint32_t toUInt32Slow(v8::Isolate* isolate, v8::Handle<v8::Value> value, IntegerConversionConfiguration configuration, ExceptionState& exceptionState) | 
| @@ -315,7 +318,7 @@ uint32_t toUInt32Slow(v8::Isolate* isolate, v8::Handle<v8::Value> value, Integer | 
| ASSERT(!value->IsUint32()); | 
| if (value->IsInt32()) { | 
| ASSERT(configuration != NormalConversion); | 
| - int32_t result = value->Int32Value(); | 
| + int32_t result = value.As<v8::Int32>()->Value(); | 
| if (result >= 0) | 
| return result; | 
| if (configuration == EnforceRange) { | 
| @@ -328,8 +331,8 @@ uint32_t toUInt32Slow(v8::Isolate* isolate, v8::Handle<v8::Value> value, Integer | 
| // Can the value be converted to a number? | 
| v8::TryCatch block(isolate); | 
| - v8::Local<v8::Number> numberObject = value->ToNumber(isolate); | 
| - if (block.HasCaught()) { | 
| + v8::Local<v8::Number> numberObject; | 
| + if (!v8Call(value->ToNumber(isolate->GetCurrentContext()), numberObject, block)) { | 
| exceptionState.rethrowV8Exception(block.Exception()); | 
| return 0; | 
| } | 
| @@ -349,7 +352,12 @@ uint32_t toUInt32Slow(v8::Isolate* isolate, v8::Handle<v8::Value> value, Integer | 
| if (std::isinf(numberValue)) | 
| return 0; | 
| - return numberObject->Uint32Value(); | 
| + uint32_t result; | 
| + if (!v8Call(numberObject->Uint32Value(isolate->GetCurrentContext()), result, block)) { | 
| + exceptionState.rethrowV8Exception(block.Exception()); | 
| 
Jens Widell
2015/03/25 11:11:15
Same here.
 | 
| + return 0; | 
| + } | 
| + return result; | 
| } | 
| int64_t toInt64Slow(v8::Isolate* isolate, v8::Handle<v8::Value> value, IntegerConversionConfiguration configuration, ExceptionState& exceptionState) | 
| @@ -359,8 +367,7 @@ int64_t toInt64Slow(v8::Isolate* isolate, v8::Handle<v8::Value> value, IntegerCo | 
| v8::Local<v8::Number> numberObject; | 
| // Can the value be converted to a number? | 
| v8::TryCatch block(isolate); | 
| - numberObject = value->ToNumber(isolate); | 
| - if (block.HasCaught()) { | 
| + if (!v8Call(value->ToNumber(isolate->GetCurrentContext()), numberObject, block)) { | 
| exceptionState.rethrowV8Exception(block.Exception()); | 
| return 0; | 
| } | 
| @@ -385,7 +392,7 @@ uint64_t toUInt64Slow(v8::Isolate* isolate, v8::Handle<v8::Value> value, Integer | 
| ASSERT(!value->IsUint32()); | 
| if (value->IsInt32()) { | 
| ASSERT(configuration != NormalConversion); | 
| - int32_t result = value->Int32Value(); | 
| + int32_t result = value.As<v8::Int32>()->Value(); | 
| if (result >= 0) | 
| return result; | 
| if (configuration == EnforceRange) { | 
| @@ -399,8 +406,7 @@ uint64_t toUInt64Slow(v8::Isolate* isolate, v8::Handle<v8::Value> value, Integer | 
| v8::Local<v8::Number> numberObject; | 
| // Can the value be converted to a number? | 
| v8::TryCatch block(isolate); | 
| - numberObject = value->ToNumber(isolate); | 
| - if (block.HasCaught()) { | 
| + if (!v8Call(value->ToNumber(isolate->GetCurrentContext()), numberObject, block)) { | 
| exceptionState.rethrowV8Exception(block.Exception()); | 
| return 0; | 
| } | 
| @@ -442,8 +448,8 @@ double toDoubleSlow(v8::Isolate* isolate, v8::Handle<v8::Value> value, Exception | 
| { | 
| ASSERT(!value->IsNumber()); | 
| v8::TryCatch block(isolate); | 
| - double doubleValue = value->NumberValue(); | 
| - if (block.HasCaught()) { | 
| + double doubleValue; | 
| + if (!v8Call(value->NumberValue(isolate->GetCurrentContext()), doubleValue, block)) { | 
| exceptionState.rethrowV8Exception(block.Exception()); | 
| return 0; | 
| } | 
| @@ -478,8 +484,7 @@ String toByteString(v8::Isolate* isolate, v8::Handle<v8::Value> value, Exception | 
| stringObject = value.As<v8::String>(); | 
| } else { | 
| v8::TryCatch block(isolate); | 
| - stringObject = value->ToString(isolate); | 
| - if (block.HasCaught()) { | 
| + if (!v8Call(value->ToString(isolate->GetCurrentContext()), stringObject, block)) { | 
| exceptionState.rethrowV8Exception(block.Exception()); | 
| return String(); | 
| } | 
| @@ -613,8 +618,7 @@ String toUSVString(v8::Isolate* isolate, v8::Handle<v8::Value> value, ExceptionS | 
| stringObject = value.As<v8::String>(); | 
| } else { | 
| v8::TryCatch block(isolate); | 
| - stringObject = value->ToString(isolate); | 
| - if (block.HasCaught()) { | 
| + if (!v8Call(value->ToString(isolate->GetCurrentContext()), stringObject, block)) { | 
| exceptionState.rethrowV8Exception(block.Exception()); | 
| return String(); | 
| } |