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 |