Index: Source/bindings/core/v8/V8Binding.cpp |
diff --git a/Source/bindings/core/v8/V8Binding.cpp b/Source/bindings/core/v8/V8Binding.cpp |
index b1e36c0770e75469d2b5ca77c8109eb2dabbcc69..ff24e6097cd89c7778d7b286a186b719378850dd 100644 |
--- a/Source/bindings/core/v8/V8Binding.cpp |
+++ b/Source/bindings/core/v8/V8Binding.cpp |
@@ -202,12 +202,15 @@ static inline T toSmallerInt(v8::Handle<v8::Value> value, IntegerConversionConfi |
} |
// Can the value be converted to a number? |
- TONATIVE_DEFAULT_EXCEPTIONSTATE(v8::Local<v8::Number>, numberObject, value->ToNumber(), exceptionState, 0); |
- if (numberObject.IsEmpty()) { |
- exceptionState.throwTypeError("Not convertible to a number value (of type '" + String(typeName) + "'."); |
+ v8::TryCatch block; |
+ v8::Local<v8::Number> numberObject(value->ToNumber()); |
+ if (block.HasCaught()) { |
+ exceptionState.rethrowV8Exception(block.Exception()); |
return 0; |
} |
+ ASSERT(!numberObject.IsEmpty()); |
+ |
if (configuration == EnforceRange) |
return enforceRange(numberObject->Value(), LimitsTrait::minValue, LimitsTrait::maxValue, typeName, exceptionState); |
@@ -239,12 +242,15 @@ static inline T toSmallerUInt(v8::Handle<v8::Value> value, IntegerConversionConf |
} |
// Can the value be converted to a number? |
- TONATIVE_DEFAULT_EXCEPTIONSTATE(v8::Local<v8::Number>, numberObject, value->ToNumber(), exceptionState, 0); |
- if (numberObject.IsEmpty()) { |
- exceptionState.throwTypeError("Not convertible to a number value (of type '" + String(typeName) + "'."); |
+ v8::TryCatch block; |
+ v8::Local<v8::Number> numberObject(value->ToNumber()); |
+ if (block.HasCaught()) { |
+ exceptionState.rethrowV8Exception(block.Exception()); |
return 0; |
} |
+ ASSERT(!numberObject.IsEmpty()); |
+ |
if (configuration == EnforceRange) |
return enforceRange(numberObject->Value(), 0, LimitsTrait::maxValue, typeName, exceptionState); |
@@ -311,12 +317,15 @@ int32_t toInt32(v8::Handle<v8::Value> value, IntegerConversionConfiguration conf |
return value->Int32Value(); |
// Can the value be converted to a number? |
- TONATIVE_DEFAULT_EXCEPTIONSTATE(v8::Local<v8::Number>, numberObject, value->ToNumber(), exceptionState, 0); |
- if (numberObject.IsEmpty()) { |
- exceptionState.throwTypeError("Not convertible to a number value (of type 'long'.)"); |
+ v8::TryCatch block; |
+ v8::Local<v8::Number> numberObject(value->ToNumber()); |
+ if (block.HasCaught()) { |
+ exceptionState.rethrowV8Exception(block.Exception()); |
return 0; |
} |
+ ASSERT(!numberObject.IsEmpty()); |
+ |
if (configuration == EnforceRange) |
return enforceRange(numberObject->Value(), kMinInt32, kMaxInt32, "long", exceptionState); |
@@ -328,8 +337,7 @@ int32_t toInt32(v8::Handle<v8::Value> value, IntegerConversionConfiguration conf |
if (configuration == Clamp) |
return clampTo<int32_t>(numberObject->Value()); |
- TONATIVE_DEFAULT_EXCEPTIONSTATE(int32_t, result, numberObject->Int32Value(), exceptionState, 0); |
- return result; |
+ return numberObject->Int32Value(); |
} |
int32_t toInt32(v8::Handle<v8::Value> value) |
@@ -357,12 +365,15 @@ uint32_t toUInt32(v8::Handle<v8::Value> value, IntegerConversionConfiguration co |
} |
// Can the value be converted to a number? |
- TONATIVE_DEFAULT_EXCEPTIONSTATE(v8::Local<v8::Number>, numberObject, value->ToNumber(), exceptionState, 0); |
- if (numberObject.IsEmpty()) { |
- exceptionState.throwTypeError("Not convertible to a number value (of type 'unsigned long'.)"); |
+ v8::TryCatch block; |
+ v8::Local<v8::Number> numberObject(value->ToNumber()); |
+ if (block.HasCaught()) { |
+ exceptionState.rethrowV8Exception(block.Exception()); |
return 0; |
} |
+ ASSERT(!numberObject.IsEmpty()); |
+ |
if (configuration == EnforceRange) |
return enforceRange(numberObject->Value(), 0, kMaxUInt32, "unsigned long", exceptionState); |
@@ -374,8 +385,7 @@ uint32_t toUInt32(v8::Handle<v8::Value> value, IntegerConversionConfiguration co |
if (configuration == Clamp) |
return clampTo<uint32_t>(numberObject->Value()); |
- TONATIVE_DEFAULT(uint32_t, result, numberObject->Uint32Value(), 0); |
- return result; |
+ return numberObject->Uint32Value(); |
} |
uint32_t toUInt32(v8::Handle<v8::Value> value) |
@@ -391,12 +401,15 @@ int64_t toInt64(v8::Handle<v8::Value> value, IntegerConversionConfiguration conf |
return value->Int32Value(); |
// Can the value be converted to a number? |
- TONATIVE_DEFAULT_EXCEPTIONSTATE(v8::Local<v8::Number>, numberObject, value->ToNumber(), exceptionState, 0); |
- if (numberObject.IsEmpty()) { |
- exceptionState.throwTypeError("Not convertible to a number value (of type 'long long'.)"); |
+ v8::TryCatch block; |
+ v8::Local<v8::Number> numberObject(value->ToNumber()); |
+ if (block.HasCaught()) { |
+ exceptionState.rethrowV8Exception(block.Exception()); |
return 0; |
} |
+ ASSERT(!numberObject.IsEmpty()); |
+ |
double x = numberObject->Value(); |
if (configuration == EnforceRange) |
@@ -437,12 +450,15 @@ uint64_t toUInt64(v8::Handle<v8::Value> value, IntegerConversionConfiguration co |
} |
// Can the value be converted to a number? |
- TONATIVE_DEFAULT_EXCEPTIONSTATE(v8::Local<v8::Number>, numberObject, value->ToNumber(), exceptionState, 0); |
- if (numberObject.IsEmpty()) { |
- exceptionState.throwTypeError("Not convertible to a number value (of type 'unsigned long long'.)"); |
+ v8::TryCatch block; |
+ v8::Local<v8::Number> numberObject(value->ToNumber()); |
+ if (block.HasCaught()) { |
+ exceptionState.rethrowV8Exception(block.Exception()); |
return 0; |
} |
+ ASSERT(!numberObject.IsEmpty()); |
+ |
double x = numberObject->Value(); |
if (configuration == EnforceRange) |
@@ -466,7 +482,12 @@ uint64_t toUInt64(v8::Handle<v8::Value> value) |
float toFloat(v8::Handle<v8::Value> value, ExceptionState& exceptionState) |
{ |
- TONATIVE_DEFAULT_EXCEPTIONSTATE(v8::Local<v8::Number>, numberObject, value->ToNumber(), exceptionState, 0); |
+ v8::TryCatch block; |
+ v8::Local<v8::Number> numberObject(value->ToNumber()); |
+ if (block.HasCaught()) { |
+ exceptionState.rethrowV8Exception(block.Exception()); |
+ return 0; |
+ } |
return numberObject->NumberValue(); |
} |
@@ -481,7 +502,13 @@ String toByteString(v8::Handle<v8::Value> value, ExceptionState& exceptionState) |
return String(); |
// 1. Let x be ToString(v) |
- TONATIVE_DEFAULT_EXCEPTIONSTATE(v8::Local<v8::String>, stringObject, value->ToString(), exceptionState, String()); |
+ v8::TryCatch block; |
+ v8::Local<v8::String> stringObject(value->ToString()); |
+ if (block.HasCaught()) { |
+ exceptionState.rethrowV8Exception(block.Exception()); |
+ return String(); |
+ } |
+ |
String x = toCoreString(stringObject); |
// 2. If the value of any element of x is greater than 255, then throw a TypeError. |
@@ -605,7 +632,13 @@ String toScalarValueString(v8::Handle<v8::Value> value, ExceptionState& exceptio |
// http://encoding.spec.whatwg.org/#type-scalarvaluestring |
if (value.IsEmpty()) |
return String(); |
- TONATIVE_DEFAULT_EXCEPTIONSTATE(v8::Local<v8::String>, stringObject, value->ToString(), exceptionState, String()); |
+ |
+ v8::TryCatch block; |
+ v8::Local<v8::String> stringObject(value->ToString()); |
+ if (block.HasCaught()) { |
+ exceptionState.rethrowV8Exception(block.Exception()); |
+ return String(); |
+ } |
// ScalarValueString is identical to DOMString except that "convert a |
// DOMString to a sequence of Unicode characters" is used subsequently |