Index: trunk/include/k/kHlpAssert.h
===================================================================
--- trunk/include/k/kHlpAssert.h	(revision 36)
+++ trunk/include/k/kHlpAssert.h	(revision 37)
@@ -67,4 +67,14 @@
     } while (0)
 
+# define kHlpAssert(expr, stmt) \
+    do { \
+        if (!(expr)) \
+        { \
+            kHlpAssertMsg1(#expr, __FILE__, __LINE__, __FUNCTION__); \
+            kHlpAssertBreakpoint(); \
+            stmt; \
+        } \
+    } while (0)
+
 # define kHlpAssertReturn(expr, rcRet) \
     do { \
@@ -77,4 +87,15 @@
     } while (0)
 
+# define kHlpAssertStmtReturn(expr, stmt, rcRet) \
+    do { \
+        if (!(expr)) \
+        { \
+            kHlpAssertMsg1(#expr, __FILE__, __LINE__, __FUNCTION__); \
+            kHlpAssertBreakpoint(); \
+            stmt; \
+            return (rcRet); \
+        } \
+    } while (0)
+
 # define kHlpAssertReturnVoid(expr) \
     do { \
@@ -87,4 +108,15 @@
     } while (0)
 
+# define kHlpAssertStmtReturnVoid(expr, stmt) \
+    do { \
+        if (!(expr)) \
+        { \
+            kHlpAssertMsg1(#expr, __FILE__, __LINE__, __FUNCTION__); \
+            kHlpAssertBreakpoint(); \
+            stmt; \
+            return; \
+        } \
+    } while (0)
+
 # define kHlpAssertMsg(expr, msg) \
     do { \
@@ -97,4 +129,15 @@
     } while (0)
 
+# define kHlpAssertMsgStmt(expr, msg, stmt) \
+    do { \
+        if (!(expr)) \
+        { \
+            kHlpAssertMsg1(#expr, __FILE__, __LINE__, __FUNCTION__); \
+            kHlpAssertMsg2 msg; \
+            kHlpAssertBreakpoint(); \
+            stmt; \
+        } \
+    } while (0)
+
 # define kHlpAssertMsgReturn(expr, msg, rcRet) \
     do { \
@@ -108,4 +151,16 @@
     } while (0)
 
+# define kHlpAssertMsgReturn(expr, msg, stmt, rcRet) \
+    do { \
+        if (!(expr)) \
+        { \
+            kHlpAssertMsg1(#expr, __FILE__, __LINE__, __FUNCTION__); \
+            kHlpAssertMsg2 msg; \
+            kHlpAssertBreakpoint(); \
+            stmt; \
+            return (rcRet); \
+        } \
+    } while (0)
+
 # define kHlpAssertMsgReturnVoid(expr, msg) \
     do { \
@@ -119,14 +174,33 @@
     } while (0)
 
+# define kHlpAssertMsgReturnVoid(expr, msg, stmt) \
+    do { \
+        if (!(expr)) \
+        { \
+            kHlpAssertMsg1(#expr, __FILE__, __LINE__, __FUNCTION__); \
+            kHlpAssertMsg2 msg; \
+            kHlpAssertBreakpoint(); \
+            stmt; \
+            return; \
+        } \
+    } while (0)
+
 #else   /* !K_STRICT */
-# define kHlpAssert(expr)                       do { } while (0)
-# define kHlpAssertReturn(expr, rcRet)          do { if (!(expr)) return (rcRet); } while (0)
-# define kHlpAssertReturnVoid(expr)             do { if (!(expr)) return; } while (0)
-# define kHlpAssertMsg(expr, msg)               do { } while (0)
-# define kHlpAssertMsgReturn(expr, msg, rcRet)  do { if (!(expr)) return (rcRet); } while (0)
-# define kHlpAssertMsgReturnVoid(expr, msg)     do { if (!(expr)) return; } while (0)
+# define kHlpAssert(expr)                                   do { } while (0)
+# define kHlpAssertStmt(expr, stmt)                         do { if (!(expr)) { stmt; }  } while (0)
+# define kHlpAssertReturn(expr, rcRet)                      do { if (!(expr)) return (rcRet); } while (0)
+# define kHlpAssertStmtReturn(expr, stmt, rcRet)            do { if (!(expr)) { stmt; return (rcRet); } } while (0)
+# define kHlpAssertReturnVoid(expr)                         do { if (!(expr)) return; } while (0)
+# define kHlpAssertStmtReturnVoid(expr, stmt)               do { if (!(expr)) { stmt; return; } } while (0)
+# define kHlpAssertMsg(expr, msg)                           do { } while (0)
+# define kHlpAssertMsgStmt(expr, msg, stmt)                 do { if (!(expr)) { stmt; } } while (0)
+# define kHlpAssertMsgReturn(expr, msg, rcRet)              do { if (!(expr)) return (rcRet); } while (0)
+# define kHlpAssertMsgStmtReturn(expr, msg, stmt, rcRet)    do { if (!(expr)) { stmt; return (rcRet); } } while (0)
+# define kHlpAssertMsgReturnVoid(expr, msg)                 do { if (!(expr)) return; } while (0)
+# define kHlpAssertMsgStmtReturnVoid(expr, msg, stmt)       do { if (!(expr)) { stmt; return; } } while (0)
 #endif  /* !K_STRICT */
 
 #define kHlpAssertPtr(ptr)                      kHlpAssertMsg(K_VALID_PTR(ptr), ("%s = %p\n", #ptr, (ptr)))
+#define kHlpAssertPtrReturn(ptr, rcRet)         kHlpAssertMsgReturn(K_VALID_PTR(ptr), ("%s = %p -> %d\n", #ptr, (ptr), (rcRet)), (rcRet))
 #define kHlpAssertPtrReturn(ptr, rcRet)         kHlpAssertMsgReturn(K_VALID_PTR(ptr), ("%s = %p -> %d\n", #ptr, (ptr), (rcRet)), (rcRet))
 #define kHlpAssertPtrReturnVoid(ptr)            kHlpAssertMsgReturnVoid(K_VALID_PTR(ptr), ("%s = %p -> %d\n", #ptr, (ptr), (rcRet)))
