summaryrefslogtreecommitdiff
path: root/TAO/tao/try_macros.h
diff options
context:
space:
mode:
authornanbor <nanbor@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-12-04 23:01:23 +0000
committernanbor <nanbor@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-12-04 23:01:23 +0000
commit590c65ee569890183ed966d3bb072ddffd615230 (patch)
treea5456820eb925cc98f169fa508f7d9d1472685d3 /TAO/tao/try_macros.h
parente4089282012eb85fb8ae7bc6f86013de82f914bf (diff)
downloadATCD-590c65ee569890183ed966d3bb072ddffd615230.tar.gz
Added TAO_TRY_THROW[_EX] and renamed TAO_RETHROW*
Diffstat (limited to 'TAO/tao/try_macros.h')
-rw-r--r--TAO/tao/try_macros.h35
1 files changed, 26 insertions, 9 deletions
diff --git a/TAO/tao/try_macros.h b/TAO/tao/try_macros.h
index 254b9077d27..fbb5b9f27f5 100644
--- a/TAO/tao/try_macros.h
+++ b/TAO/tao/try_macros.h
@@ -61,6 +61,9 @@
#define TAO_CHECK_ENV_RETURN(X, Y)
#define TAO_CHECK_CONDITION_ENV_RETURN(X, COND, Y)
+#define TAO_TRY_THROW (EXCEPTION) throw EXCEPTION
+#define TAO_TRY_THROW_EX (EXCEPTION,LABEL) throw EXCEPTION
+
#define TAO_THROW(EXCEPTION) throw EXCEPTION
#define TAO_THROW_ENV(EXCEPTION, ENV) throw EXCEPTION
#define TAO_RETHROW throw
@@ -81,7 +84,7 @@
return RETURN; } while (0)
#define TAO_RETHROW_RETURN(RETURN) throw; \
return RETURN
-#define TAO_RETHROW_RETURN_VOID_SYS throw; \
+#define TAO_RETHROW_RETURN_VOID throw; \
return
#else
@@ -89,11 +92,12 @@
#define TAO_THROW_RETURN(EXCEPTION, RETURN) throw EXCEPTION
#define TAO_THROW_ENV_RETURN(EXCEPTION, ENV, RETURN) throw EXCEPTION
#define TAO_RETHROW_RETURN(RETURN) throw
-#define TAO_RETHROW_RETURN_VOID_SYS throw
+#define TAO_RETHROW_RETURN_VOID throw
#endif /* ACE_WIN32 */
-#define TAO_RETHROW_RETURN_SYS(RETURN) TAO_RETHROW_RETURN (RETURN)
+#define TAO_RETHROW_SAME_ENV_RETURN(RETURN) TAO_RETHROW_RETURN (RETURN)
+#define TAO_RETHROW_SAME_ENV_RETURN_VOID TAO_RETHROW_RETURN_VOID
// #define TAO_THROW_SPEC(X) ACE_THROW_SPEC(X)
#define TAO_THROW_SPEC(X)
@@ -146,6 +150,23 @@ TAO_TRY_LABEL ## LABEL: \
if (TAO_TRY_FLAG) \
do {
+// Throwing an exception within a try block must be treated differently
+// on platforms that don't support native exception because the exception
+// won't get caught by the catch clauses automatically.
+#define TAO_TRY_THROW(EXCEPTION) \
+{\
+ TAO_TRY_ENV.exception (new EXCEPTION); \
+ TAO_TRY_FLAG = 0; \
+ goto TAO_TRY_LABEL; \
+}
+
+#define TAO_TRY_THROW_EX (EXCEPTION,LABEL) \
+{\
+ TAO_TRY_ENV.exception (new EXCEPTION); \
+ TAO_TRY_FLAG = 0; \
+ goto TAO_TRY_LABEL ## LABEL; \
+}
+
// Each CATCH statement ends the previous scope and starts a new one.
// Since all CATCH statements can end the TAO_TRY macro, they must all
// start a new scope for the next potential TAO_CATCH. The TAO_ENDTRY
@@ -231,8 +252,8 @@ return
_env.exception (TAO_TRY_ENV.exception ()); \
return RETURN
-#define TAO_RETHROW_RETURN_SYS(RETURN) return RETURN
-#define TAO_RETHROW_RETURN_VOID_SYS return
+#define TAO_RETHROW_SAME_ENV_RETURN(RETURN) return RETURN
+#define TAO_RETHROW_SAME_ENV_RETURN_VOID return
#define TAO_THROW_SPEC(X)
@@ -263,10 +284,6 @@ return RETURN
return; \
}
-// Throwing an exception from within a TAO_TRY block has slightly
-// different semantics, we need to check that in the near future.
-# define TAO_TRY_THROW(EXCEPTION) TAO_THROW(EXCEPTION)
-
// This macros are used to grab a lock using a Guard, test that the
// lock was correctly grabbed and throw an exception on failure.
// If you do not wish to throw an exception, but just to return a