- fixed lookahead assertions (#10, #11, #12)

- untabified sre_constants.py
diff --git a/Modules/_sre.c b/Modules/_sre.c
index 6fcd65e..22b6c73 100644
--- a/Modules/_sre.c
+++ b/Modules/_sre.c
@@ -20,6 +20,7 @@
  * 00-06-28 fl	fixed findall (0.9.1)
  * 00-06-29 fl	fixed split, added more scanner features (0.9.2)
  * 00-06-30 fl	tuning, fast search (0.9.3)
+ * 00-06-30 fl	added assert (lookahead) primitives (0.9.4)
  *
  * Copyright (c) 1997-2000 by Secret Labs AB.  All rights reserved.
  *
@@ -30,7 +31,7 @@
 
 #ifndef SRE_RECURSIVE
 
-char copyright[] = " SRE 0.9.3 Copyright (c) 1997-2000 by Secret Labs AB ";
+char copyright[] = " SRE 0.9.4 Copyright (c) 1997-2000 by Secret Labs AB ";
 
 #include "Python.h"
 
@@ -576,11 +577,10 @@
 			pattern += pattern[0];
 			break;
 
-#if 0
-		case SRE_OP_CALL:
-			/* match subpattern, without backtracking */
+		case SRE_OP_ASSERT:
+			/* assert subpattern */
 			/* args: <skip> <pattern> */
-			TRACE(("%8d: subpattern\n", PTR(ptr)));
+			TRACE(("%8d: assert subpattern\n", PTR(ptr)));
 			state->ptr = ptr;
 			i = SRE_MATCH(state, pattern + 1);
             if (i < 0)
@@ -588,9 +588,20 @@
             if (!i)
 				goto failure;
 			pattern += pattern[0];
-			ptr = state->ptr;
 			break;
-#endif
+
+		case SRE_OP_ASSERT_NOT:
+			/* assert not subpattern */
+			/* args: <skip> <pattern> */
+			TRACE(("%8d: assert not subpattern\n", PTR(ptr)));
+			state->ptr = ptr;
+			i = SRE_MATCH(state, pattern + 1);
+            if (i < 0)
+                return i;
+            if (i)
+				goto failure;
+			pattern += pattern[0];
+			break;
 
 #if 0
 		case SRE_OP_MAX_REPEAT_ONE:
diff --git a/Modules/sre_constants.h b/Modules/sre_constants.h
index 01c8448..2ec00ba 100644
--- a/Modules/sre_constants.h
+++ b/Modules/sre_constants.h
@@ -1,29 +1,42 @@
-/* generated from sre_constants.py */
+/*
+ * Secret Labs' Regular Expression Engine
+ *
+ * regular expression matching engine
+ *
+ * NOTE: This file is generated by sre_constants.py.  If you need
+ * to change anything in here, edit sre_constants.py and run it.
+ *
+ * Copyright (c) 1997-2000 by Secret Labs AB.  All rights reserved.
+ *
+ * See the _sre.c file for information on usage and redistribution.
+ */
+
 #define SRE_OP_FAILURE 0
 #define SRE_OP_SUCCESS 1
 #define SRE_OP_ANY 2
 #define SRE_OP_ASSERT 3
-#define SRE_OP_AT 4
-#define SRE_OP_BRANCH 5
-#define SRE_OP_CALL 6
-#define SRE_OP_CATEGORY 7
-#define SRE_OP_GROUP 8
-#define SRE_OP_GROUP_IGNORE 9
-#define SRE_OP_IN 10
-#define SRE_OP_IN_IGNORE 11
-#define SRE_OP_INFO 12
-#define SRE_OP_JUMP 13
-#define SRE_OP_LITERAL 14
-#define SRE_OP_LITERAL_IGNORE 15
-#define SRE_OP_MARK 16
-#define SRE_OP_MAX_REPEAT 17
-#define SRE_OP_MAX_REPEAT_ONE 18
-#define SRE_OP_MIN_REPEAT 19
-#define SRE_OP_NOT_LITERAL 20
-#define SRE_OP_NOT_LITERAL_IGNORE 21
-#define SRE_OP_NEGATE 22
-#define SRE_OP_RANGE 23
-#define SRE_OP_REPEAT 24
+#define SRE_OP_ASSERT_NOT 4
+#define SRE_OP_AT 5
+#define SRE_OP_BRANCH 6
+#define SRE_OP_CALL 7
+#define SRE_OP_CATEGORY 8
+#define SRE_OP_GROUP 9
+#define SRE_OP_GROUP_IGNORE 10
+#define SRE_OP_IN 11
+#define SRE_OP_IN_IGNORE 12
+#define SRE_OP_INFO 13
+#define SRE_OP_JUMP 14
+#define SRE_OP_LITERAL 15
+#define SRE_OP_LITERAL_IGNORE 16
+#define SRE_OP_MARK 17
+#define SRE_OP_MAX_REPEAT 18
+#define SRE_OP_MAX_REPEAT_ONE 19
+#define SRE_OP_MIN_REPEAT 20
+#define SRE_OP_NOT_LITERAL 21
+#define SRE_OP_NOT_LITERAL_IGNORE 22
+#define SRE_OP_NEGATE 23
+#define SRE_OP_RANGE 24
+#define SRE_OP_REPEAT 25
 #define SRE_AT_BEGINNING 0
 #define SRE_AT_BEGINNING_LINE 1
 #define SRE_AT_BOUNDARY 2