| Index: Source/bindings/v8/V8BindingMacros.h
|
| diff --git a/Source/bindings/v8/V8BindingMacros.h b/Source/bindings/v8/V8BindingMacros.h
|
| index 8098652e2093930f5d7941ee7656f063e10f62c0..f5ab5832bef8783b2b6e8890d6f03dce09915a27 100644
|
| --- a/Source/bindings/v8/V8BindingMacros.h
|
| +++ b/Source/bindings/v8/V8BindingMacros.h
|
| @@ -33,13 +33,13 @@
|
|
|
| namespace WebCore {
|
|
|
| -#define V8TRYCATCH(type, var, value) \
|
| - type var; \
|
| - { \
|
| - v8::TryCatch block; \
|
| - var = (value); \
|
| - if (block.HasCaught()) \
|
| - return block.ReThrow(); \
|
| +#define V8TRYCATCH(type, var, value) \
|
| + type var; \
|
| + { \
|
| + v8::TryCatch block; \
|
| + var = (value); \
|
| + if (UNLIKELY(block.HasCaught())) \
|
| + return block.ReThrow(); \
|
| }
|
|
|
| #define V8TRYCATCH_RETURN(type, var, value, retVal) \
|
| @@ -47,49 +47,53 @@ namespace WebCore {
|
| { \
|
| v8::TryCatch block; \
|
| var = (value); \
|
| - if (block.HasCaught()) { \
|
| + if (UNLIKELY(block.HasCaught())) { \
|
| block.ReThrow(); \
|
| return retVal; \
|
| } \
|
| }
|
|
|
| -#define V8TRYCATCH_VOID(type, var, value) \
|
| - type var; \
|
| - { \
|
| - v8::TryCatch block; \
|
| - var = (value); \
|
| - if (block.HasCaught()) { \
|
| - block.ReThrow(); \
|
| - return; \
|
| - } \
|
| +#define V8TRYCATCH_EXCEPTION_RETURN(type, var, value, exceptionState, retVal) \
|
| + type var; \
|
| + { \
|
| + v8::TryCatch block; \
|
| + var = (value); \
|
| + if (UNLIKELY(block.HasCaught())) \
|
| + exceptionState.rethrowV8Exception(block.Exception()); \
|
| + if (UNLIKELY(exceptionState.throwIfNeeded())) \
|
| + return retVal; \
|
| }
|
|
|
| -#define V8TRYCATCH_WITH_TYPECHECK_VOID(type, var, value, isolate) \
|
| - type var; \
|
| - { \
|
| - bool ok = true; \
|
| - { \
|
| - v8::TryCatch block; \
|
| - var = (value); \
|
| - if (block.HasCaught()) { \
|
| - block.ReThrow(); \
|
| - return; \
|
| - } \
|
| - } \
|
| - if (UNLIKELY(!ok)) { \
|
| - throwUninformativeAndGenericTypeError(isolate); \
|
| - return; \
|
| - } \
|
| +#define V8TRYCATCH_VOID(type, var, value) \
|
| + type var; \
|
| + { \
|
| + v8::TryCatch block; \
|
| + var = (value); \
|
| + if (UNLIKELY(block.HasCaught())) { \
|
| + block.ReThrow(); \
|
| + return; \
|
| + } \
|
| + }
|
| +
|
| +#define V8TRYCATCH_EXCEPTION_VOID(type, var, value, exceptionState) \
|
| + type var; \
|
| + { \
|
| + v8::TryCatch block; \
|
| + var = (value); \
|
| + if (UNLIKELY(block.HasCaught())) \
|
| + exceptionState.rethrowV8Exception(block.Exception()); \
|
| + if (UNLIKELY(exceptionState.throwIfNeeded())) \
|
| + return; \
|
| }
|
|
|
| #define V8TRYCATCH_FOR_V8STRINGRESOURCE_RETURN(type, var, value, retVal) \
|
| type var(value); \
|
| - if (!var.prepare()) \
|
| + if (UNLIKELY(!var.prepare())) \
|
| return retVal;
|
|
|
| #define V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(type, var, value) \
|
| - type var(value); \
|
| - if (!var.prepare()) \
|
| + type var(value); \
|
| + if (UNLIKELY(!var.prepare())) \
|
| return;
|
|
|
| } // namespace WebCore
|
|
|