--- trunk/reactos/include/pseh/prettybased.h 2005-01-11 01:12:36 UTC (rev 12923)
+++ trunk/reactos/include/pseh/prettybased.h 2005-01-11 01:47:35 UTC (rev 12924)
@@ -39,8 +39,12 @@
to prevent variables from being optimized into registers.
See: http://alphalinux.org/archives/axp-list/1998/February1998/0330.html
+-you can't use return within a try/except/finally block
+-you can't use __LEAVE within a (for/do/while) loop. it will only leave the loop
+and not the try-block itself
+
USAGE:
__TRY{
@@ -98,7 +102,7 @@
{
_SEHPortableFrame_t SEH_Header;
_SEHJmpBuf_t SEH_JmpBuf;
-/* alternative: _SEHJmpBuf_t* SEH_JmpRetPtr; */
+ _SEHJmpBuf_t* SEH_JmpRetPtr;
}
_SEHFrame_t;
@@ -151,12 +155,8 @@
if(_SEHSetJmp(jmpRetBuf) == 0)
{
- _SEHLongJmp_KeepEsp(myframe->SEH_JmpBuf, (int)&jmpRetBuf);
-
- /* alternative:
myframe->SEH_JmpRetPtr = &jmpRetBuf;
_SEHLongJmp_KeepEsp(myframe->SEH_JmpBuf, 2);
- */
}
}
@@ -259,10 +259,9 @@
#define ___ENDTRY \
} while (0); \
\
- if (_ret > 1) \
+ if (_ret == 2) \
{ \
- _SEHLongJmp(*((_SEHJmpBuf_t*)_ret), 1); \
- /* alternative: _SEHLongJmp(*_SEHFrame->SEH_JmpRetPtr, 1); */ \
+ _SEHLongJmp(*_SEHFrame->SEH_JmpRetPtr, 1); \
} \
break; \
} \
@@ -282,6 +281,7 @@
#define __ENDTRY
#define _SEH_STATIC_FILTER(ACTION_) (ACTION_)
#define __LEAVE __leave
+ #define __LEAVE2 __leave
#else
#define __TRY2 ___TRY
#define __EXCEPT2 ___EXCEPT_DUAL
@@ -292,6 +292,7 @@
#define __FINALLY ___FINALLY_SINGLE
#define __ENDTRY ___ENDTRY
#define __LEAVE break
+ #define __LEAVE2 break
#endif