seh_try_macros-04-NOOP.diff

Greg Turner gmturner007 at ameritech.net
Mon Jan 13 20:57:14 CST 2003


LICENSE: X11/Bugroff
CHANGELOG:
* dlls/ntdll: exception.c
  dlls/ntdll/tests: seh_macros.c
  include/wine: exception.h
  Greg Turner <gmturner007 at ameritch.net>
- fix indentation
- some comments

--
diff -ur -x CVS -x 'bigdif*' -x autom4te.cache ../wine.test/dlls/ntdll/exception.c ./dlls/ntdll/exception.c
--- ../wine.test/dlls/ntdll/exception.c	2003-01-13 20:48:06.000000000 -0600
+++ ./dlls/ntdll/exception.c	2003-01-13 20:11:01.000000000 -0600
@@ -72,24 +72,24 @@
     if (wine_seh_f_tls_index == -1)
         if ((wine_seh_f_tls_index = TlsAlloc()) == -1) assert(FALSE);
     if ((wine_SEH_FData = (wine_seh_f_data *) TlsGetValue(wine_seh_f_tls_index)) == 0)
-      if (GetLastError())
-        assert(FALSE);
+        if (GetLastError())
+            assert(FALSE);
     if (!wine_SEH_FData) {
-      wine_SEH_FData = (wine_seh_f_data *) LocalAlloc(LPTR, sizeof(wine_seh_f_data));
-      assert(wine_SEH_FData);
-      if (!(TlsSetValue(wine_seh_f_tls_index, (LPVOID) wine_SEH_FData))) assert (FALSE);
+        wine_SEH_FData = (wine_seh_f_data *) LocalAlloc(LPTR, sizeof(wine_seh_f_data));
+        assert(wine_SEH_FData);
+        if (!(TlsSetValue(wine_seh_f_tls_index, (LPVOID) wine_SEH_FData))) assert (FALSE);
     }
 }
 
 int __wine_get_seh_f_loop()
 { 
-  wine_init_thread_seh_f();
-  return wine_SEH_FData->loop;
+    wine_init_thread_seh_f();
+    return wine_SEH_FData->loop;
 }
 
 void __wine_set_seh_f_loop(int val) {
-  wine_init_thread_seh_f();
-  wine_SEH_FData->loop = val;
+    wine_init_thread_seh_f();
+    wine_SEH_FData->loop = val;
 }
 
 void __wine_push_seh_f_reraise(int val)
diff -ur -x CVS -x 'bigdif*' -x autom4te.cache ../wine.test/dlls/ntdll/tests/seh_macros.c ./dlls/ntdll/tests/seh_macros.c
--- ../wine.test/dlls/ntdll/tests/seh_macros.c	2003-01-13 20:48:06.000000000 -0600
+++ ./dlls/ntdll/tests/seh_macros.c	2003-01-13 20:32:28.000000000 -0600
@@ -34,32 +34,32 @@
      * generates asserts, ATM.  Once that is fixed the test should be silent.
      */
     #define CRASH_OUT \
-      \
-      if (x) /* I think this branch stops gcc from performing optimizations that break some tests */ \
-        x += (int)(*(int **)0); \
-      else \
-        x -= (int)(*(int **)0);
+        \
+        if (x) /* I think this branch stops gcc from performing optimizations that break some tests */ \
+            x += (int)(*(int **)0); \
+        else \
+            x -= (int)(*(int **)0);
 
     trace("beginning TryMacros:\n");
     trace("  basic no-exception-handling macro test\n");
 
     x = 0;
     __try {
-       x = 1; 
+         x = 1; 
     } __except( ok(FALSE, "Expression shouldn't run."), 1 ) {
-      ok(FALSE, "Except clause shouldn't run.");
+        ok(FALSE, "Except clause shouldn't run.");
     }
 
     trace("  handle exception:\n");
 
     x = 0;
     __try {
-      x++;
-      CRASH_OUT;
-      x++;
+        x++;
+        CRASH_OUT;
+        x++;
     } __except( ( (x!=1) ? ( ok(FALSE, "x should be 1 was %d",x) ) : (x=3) ), 1) {
-      ok((x==3), "x should be 3 was %d", x);
-      if (x==3) x = 4;
+        ok((x==3), "x should be 3 was %d", x);
+        if (x==3) x = 4;
     }
     ok((x==4), "x should be 4 was %d", x);
 
@@ -67,52 +67,52 @@
 
     x = 0;
     __try {
-      ok((x==0), "x should be 0 was %d", x);
-      if (x==0) x = 1;
-      __try {
-        ok((x==1), "x should be 1, was %d", x);
-	if (x==1) x = 2;
-      } __except(0) {
-        ok(FALSE, "exception handler code shouldn't run");
-	x = -99;
-	CRASH_OUT;
-      }
-      ok((x==2), "x should be 2 was %d", x);
-      if (x==2) x = 3;
-    } __except(1) {
-      ok(FALSE, " exception handler code shouldn't run");
-      x = -98;
-    }
+        ok((x==0), "x should be 0 was %d", x);
+        if (x==0) x = 1;
+        __try {
+            ok((x==1), "x should be 1, was %d", x);
+	    if (x==1) x = 2;
+        } __except(0) {
+            ok(FALSE, "exception handler code shouldn't run");
+	    x = -99;
+	    CRASH_OUT;
+        }
+        ok((x==2), "x should be 2 was %d", x);
+        if (x==2) x = 3;
+        } __except(1) {
+            ok(FALSE, " exception handler code shouldn't run");
+            x = -98;
+        }
 
-    ok((x==3), "x should be 3 was %d", x);
+        ok((x==3), "x should be 3 was %d", x);
 
-    trace("  twice nested exceptions test: all exceptions\n");
+        trace("  twice nested exceptions test: all exceptions\n");
 
     x = 0;
     __try {
-      __try {
-        ok((x==0), "x should be 0 was %d", x);
-	if (x==0) x = 1;
-	CRASH_OUT;
-      } __except(1) {
-        ok((x==1), "x should be 1 was %d", x);
-	if (x==1) x = 2;
-	CRASH_OUT;
-      }
-      ok(FALSE, "this code should be skipped");
+        __try {
+            ok((x==0), "x should be 0 was %d", x);
+	    if (x==0) x = 1;
+	    CRASH_OUT;
+        } __except(1) {
+            ok((x==1), "x should be 1 was %d", x);
+	    if (x==1) x = 2;
+	    CRASH_OUT;
+        }
+        ok(FALSE, "this code should be skipped");
     } __except(1) {
-      ok ((x==2), "x should be 2 was %d", x);
-      if (x==2) x = 3;
-      __try {
-        ok ((x==3), "x should be 3 was %d", x);
-	if (x==3) x = 4;
-	CRASH_OUT;
-      } __except(1) {
-        ok ((x==4), "x should be 4 was %d", x);
-	if (x==4) x = 5;
-      }
-      ok ((x==5), "x should be 5 was %d", x);
-      if (x==5) x = 6;
+        ok ((x==2), "x should be 2 was %d", x);
+        if (x==2) x = 3;
+        __try {
+            ok ((x==3), "x should be 3 was %d", x);
+	    if (x==3) x = 4;
+	    CRASH_OUT;
+        } __except(1) {
+            ok ((x==4), "x should be 4 was %d", x);
+	    if (x==4) x = 5;
+        }
+        ok ((x==5), "x should be 5 was %d", x);
+        if (x==5) x = 6;
     }
     ok ((x==6), "x should be 6 was %d", x);
 
@@ -147,7 +147,7 @@
     #define nesttry6(x) __try {x++; nesttry5(x) } __except(1) { x++; nesttry5(x); CRASH_OUT; }
     #define nesttry7(x) __try {x++; nesttry6(x); CRASH_OUT; } __except(1) { x++; nesttry6(x); CRASH_OUT; } 
     __try {
-      nesttry7(x)
+        nesttry7(x)
     } __except (1) {
     }
     #undef nesttry7
@@ -163,9 +163,9 @@
     
     x = 0;
     __try {
-      x++;
+        x++;
     } __finally {
-      x++;
+        x++;
     }
     ok((x==2), "x should be 2 was %d", x);
 
@@ -173,9 +173,9 @@
 
     x = 0;
     __try {
-      x++;
+        x++;
     } __finally {
-      x++;
+        x++;
     }
     ok((x==2), "x should be 2 was %d", x);
 
@@ -183,17 +183,17 @@
 
     x = 0;
     __try {
-      __try {
-        x++;
-	CRASH_OUT;
-        x++;
-      } __finally {
-        ok((x==1), "x should be 1 was %d", x);
-        if (x==1) x = 2;
-      }
+        __try {
+            x++;
+	    CRASH_OUT;
+            x++;
+        } __finally {
+            ok((x==1), "x should be 1 was %d", x);
+            if (x==1) x = 2;
+        }
     } __except (1) {
-      ok((x==2), "x should be 2 was %d", x);
-      if (x==2) x = 3;
+        ok((x==2), "x should be 2 was %d", x);
+        if (x==2) x = 3;
     }
     ok((x==3), "x should be 3 was %d", x);
 
@@ -201,15 +201,15 @@
 
     x = 0;
     __try {
-      x++;
-      __try {
         x++;
-      } __finally {
+        __try {
+            x++;
+        } __finally {
+            x++;
+        }
         x++;
-      }
-      x++;
     } __finally {
-      x++;
+        x++;
     }
     x++;
     ok((x==6), "x should be 6 was %d", x);
@@ -218,29 +218,29 @@
 
     x = 0;
     __try {
-      ok((x==0), "x should be 0 was %d", x);
-      if (x==0) x = 1;
-      __try {
-        ok((x==1), "x should be 1 was %d", x);
-	if (x==1) x = 2;
+        ok((x==0), "x should be 0 was %d", x);
+        if (x==0) x = 1;
         __try {
-	  ok((x==2), "x should be 2 was %d", x);
-	  if (x==2) x = 3;
-	  CRASH_OUT;
-	  ok(FALSE, "this code should not execute");
-	} __finally {
-	  ok((x==3), "x should be 3 was %d", x);
-	  if (x==3) x = 4;
-	}
-	ok(FALSE, "this code should not execute");
-      } __finally {
-        ok((x==4), "x should be 4 was %d", x);
-	if (x==4) x = 5;
-      }
-      ok(FALSE, "this code should not execute");
+            ok((x==1), "x should be 1 was %d", x);
+	    if (x==1) x = 2;
+            __try {
+	        ok((x==2), "x should be 2 was %d", x);
+	        if (x==2) x = 3;
+	        CRASH_OUT;
+	        ok(FALSE, "this code should not execute");
+	    } __finally {
+	        ok((x==3), "x should be 3 was %d", x);
+	        if (x==3) x = 4;
+	    }
+	    ok(FALSE, "this code should not execute");
+        } __finally {
+            ok((x==4), "x should be 4 was %d", x);
+	    if (x==4) x = 5;
+        }
+        ok(FALSE, "this code should not execute");
     } __except (1) {
-      ok((x==5), "x should be 5 was %d", x);
-      if (x==5) x = 6;
+        ok((x==5), "x should be 5 was %d", x);
+        if (x==5) x = 6;
     }
     ok((x==6), "x should be 6 was %d", x);
 
@@ -248,28 +248,28 @@
 
     x = 0;
     __try {
-      ok((x==0), "x should be 0 was %d", x);
-      if (x==0) x = 1;
-      __try {
-        ok((x==1), "x should be 1 was %d", x);
-	if (x==1) x = 2;
+        ok((x==0), "x should be 0 was %d", x);
+        if (x==0) x = 1;
         __try {
-	  ok((x==2), "x should be 2 was %d", x);
-	  if (x==2) x = 3;
-	} __finally {
-	  ok((x==3), "x should be 3 was %d", x);
-	  if (x==3) x = 4;
-	}
-	CRASH_OUT;
-	ok(FALSE, "this code should not execute");
-      } __finally {
-        ok((x==4), "x should be 4 was %d", x);
-	if (x==4) x = 5;
-      }
-      ok(FALSE, "this code should not execute");
+            ok((x==1), "x should be 1 was %d", x);
+	    if (x==1) x = 2;
+            __try {
+	        ok((x==2), "x should be 2 was %d", x);
+	        if (x==2) x = 3;
+	    } __finally {
+	        ok((x==3), "x should be 3 was %d", x);
+	        if (x==3) x = 4;
+	    }
+	    CRASH_OUT;
+	    ok(FALSE, "this code should not execute");
+        } __finally {
+            ok((x==4), "x should be 4 was %d", x);
+	    if (x==4) x = 5;
+        }
+        ok(FALSE, "this code should not execute");
     } __except (1) {
-      ok((x==5), "x should be 5 was %d", x);
-      if (x==5) x = 6;
+        ok((x==5), "x should be 5 was %d", x);
+        if (x==5) x = 6;
     }
     ok((x==6), "x should be 6 was %d", x);
 
@@ -303,11 +303,11 @@
 
     x = 0;
     __try {
-      x = 1;
-      __leave;
-      x = 2;
+        x = 1;
+        __leave;
+        x = 2;
     } __except(1) {
-      x = 3;
+        x = 3;
     }
     ok((x==1), "x should be 1 was %d",x);
 
@@ -315,12 +315,12 @@
     
     x = 0;
     __try {
-      x = 1;
-      __leave;
-      x = 2;
+        x = 1;
+        __leave;
+        x = 2;
     } __finally {
-      ok((x==1), "x should be 1 was %d",x);
-      if (x==1) x = 3;
+        ok((x==1), "x should be 1 was %d",x);
+        if (x==1) x = 3;
     }
     ok((x==3), "x should be 3 was %d", x);
 
diff -ur -x CVS -x 'bigdif*' -x autom4te.cache ../wine.test/include/wine/exception.h ./include/wine/exception.h
--- ../wine.test/include/wine/exception.h	2003-01-13 20:48:06.000000000 -0600
+++ ./include/wine/exception.h	2003-01-13 20:24:04.000000000 -0600
@@ -59,6 +59,21 @@
  *          You can use them to leave a __EXCEPT block though.
  *
  * -- AJ
+ *
+ * Now we can implement the __try/__except/__finally magic of VC++ as standard (?) macros.
+ * this is a "good enough" implementation, it's incomplete (i.e.: no __leave yet, no :break in
+ * __try clauses, and who knows what else...), but should suffice for most uses.
+ * 
+ * The macros require some symbols to be found in ntdll.dll.so, so link with that DLL if you
+ * use them.
+ *
+ * If you are using VC++ and this header, #define USE_COMPILER_EXCEPTIONS before you include it.
+ *
+ * If you are using wrc, and having problems with this header, you can #define __NO_VC_SEH_MACROS__
+ * This will also work if you have some other reason to want __TRY and friends, but not the
+ * lower case versions.
+ *
+ * -gmt
  */
 
 /* Define this if you want to use your compiler built-in __try/__except support.
@@ -151,11 +166,6 @@
 extern DWORD __wine_finally_handler( PEXCEPTION_RECORD record, EXCEPTION_FRAME *frame,
                                      CONTEXT *context, LPVOID pdispatcher );
 
-/*
- * now we can implement the __try/__except/__finally magic of VC++ as standard (?) macros.
- * this is a "good enough" implementation, it's incomplete (i.e.: no __leave yet, no :break in
- * __try clauses, and who knows what else...); but should suffice for most uses.
- */
 
 /* these functions simultate a global thread-local variable */
 extern int __wine_get_seh_f_loop(); 
@@ -169,52 +179,53 @@
 #ifndef __NO_VC_SEH_MACROS__
 
 #define __try \
-  \
-  if ( ({ \
-    __label__ __leavelabel; \
-    int seh_result = -2; \
-    static WINE_EXCEPTION_FILTER(seh_handler); \
-    __TRY {
+    \
+    if ( ({ \
+        __label__ __leavelabel; \
+        int seh_result = -2; \
+        static WINE_EXCEPTION_FILTER(seh_handler); \
+        __TRY { \
+	    \
 
 #define __finally \
-        \
-        __leavelabel: \
-	if (0) { goto __leavelabel; } /* appease compiler */ \
-    } __EXCEPT(seh_handler) { \
-    } __ENDTRY \
-    WINE_EXCEPTION_FILTER(seh_handler) { \
-      /* FIXME: remember exception info */ \
-      seh_result = -4; \
-      __wine_push_seh_f_reraise(1); \
-      return(1); \
-    } \
-    if (seh_result != -4) __wine_push_seh_f_reraise(0); \
-  0; }) ) { } else \
-    for (__wine_set_seh_f_loop(0); __wine_get_seh_f_loop() <= 1; __wine_inc_seh_f_loop() ) \
-      if (__wine_get_seh_f_loop() == 1) { \
-        if (__wine_pop_seh_f_reraise()) { \
-          /* FIXME: re-raise from stored exception info */ assert(FALSE); \
-	} else { \
-	  /* do nothing */ \
-	} \
-      } else
+            \
+            __leavelabel: \
+	    if (0) { goto __leavelabel; } /* appease compiler */ \
+        } __EXCEPT(seh_handler) { \
+        } __ENDTRY \
+        WINE_EXCEPTION_FILTER(seh_handler) { \
+            /* FIXME: remember exception info */ \
+            seh_result = -4; \
+            __wine_push_seh_f_reraise(1); \
+            return(1); \
+        } \
+        if (seh_result != -4) __wine_push_seh_f_reraise(0); \
+    0; }) ) { } else \
+        for (__wine_set_seh_f_loop(0); __wine_get_seh_f_loop() <= 1; __wine_inc_seh_f_loop() ) \
+            if (__wine_get_seh_f_loop() == 1) { \
+                if (__wine_pop_seh_f_reraise()) { \
+                    /* FIXME: re-raise from stored exception info */ assert(FALSE); \
+	        } else { \
+	            /* do nothing */ \
+	        } \
+            } else
 
 #define __except(...) \
-      \
-      __leavelabel: \
-      if (0) { goto __leavelabel; } /* appease compiler */ \
-    } __EXCEPT(seh_handler) { \
-      seh_result = -3; \
-    } __ENDTRY \
-    WINE_EXCEPTION_FILTER(seh_handler) { \
-      seh_result = (__VA_ARGS__); \
-      return(seh_result); \
-    } \
-  (seh_result != -3); }) ) { } else
+            \
+            __leavelabel: \
+            if (0) { goto __leavelabel; } /* appease compiler */ \
+        } __EXCEPT(seh_handler) { \
+            seh_result = -3; \
+        } __ENDTRY \
+        WINE_EXCEPTION_FILTER(seh_handler) { \
+            seh_result = (__VA_ARGS__); \
+            return(seh_result); \
+        } \
+    (seh_result != -3); }) ) { } else
 
 #define __leave \
-  \
-  goto __leavelabel
+    \
+    goto __leavelabel
 
 #endif /* NO_VC_SEH_MACROS */
 
-- 
gmt

note: again, the "\n" between "#endif /* NO_VC_SEH_MACROS */" and "--\ngmt"
      is part of the .diff.

"If everyone is thinking alike then somebody isn't
thinking." --George S. Patton




More information about the wine-patches mailing list