SRE bug #441409:
    compile should raise error for non-strings
SRE bug #432570, 448951:
    reset group after failed match

also bumped version number to 2.2.0
diff --git a/Lib/sre.py b/Lib/sre.py
index 7a640f9..70d0148 100644
--- a/Lib/sre.py
+++ b/Lib/sre.py
@@ -104,7 +104,7 @@
     "U", "IGNORECASE", "LOCALE", "MULTILINE", "DOTALL", "VERBOSE",
     "UNICODE", "error" ]
 
-__version__ = "2.1.1"
+__version__ = "2.2.0"
 
 # this module works under 1.5.2 and later.  don't use string methods
 import string
@@ -197,6 +197,8 @@
 _cache = {}
 _cache_repl = {}
 
+_pattern_type = type(sre_compile.compile("", 0))
+
 _MAXCACHE = 100
 
 def _join(seq, sep):
@@ -209,8 +211,10 @@
     if p is not None:
         return p
     pattern, flags = key
-    if type(pattern) not in sre_compile.STRING_TYPES:
+    if type(pattern) is _pattern_type:
         return pattern
+    if type(pattern) not in sre_compile.STRING_TYPES:
+        raise TypeError, "first argument must be string or compiled pattern"
     try:
         p = sre_compile.compile(pattern, flags)
     except error, v:
@@ -312,7 +316,7 @@
 def _pickle(p):
     return _compile, (p.pattern, p.flags)
 
-copy_reg.pickle(type(_compile("", 0)), _pickle, _compile)
+copy_reg.pickle(_pattern_type, _pickle, _compile)
 
 # --------------------------------------------------------------------
 # experimental stuff (see python-dev discussions for details)
diff --git a/Lib/test/test_sre.py b/Lib/test/test_sre.py
index 4a71447..12a66f9 100644
--- a/Lib/test/test_sre.py
+++ b/Lib/test/test_sre.py
@@ -204,6 +204,12 @@
 test(r"""pat.match('b').group('a1', 'b2', 'c3')""", (None, 'b', None))
 test(r"""pat.match('ac').group(1, 'b2', 3)""", ('a', None, 'c'))
 
+# bug 448951 (similar to 429357, but with single char match)
+# (Also test greedy matches.)
+for op in '','?','*':
+    test(r"""sre.match(r'((.%s):)?z', 'z').groups()"""%op, (None, None))
+    test(r"""sre.match(r'((.%s):)?z', 'a:z').groups()"""%op, ('a:', 'a'))
+
 if verbose:
     print "Running tests on sre.escape"
 
diff --git a/Modules/_sre.c b/Modules/_sre.c
index 32cd48b..537dc29 100644
--- a/Modules/_sre.c
+++ b/Modules/_sre.c
@@ -32,6 +32,7 @@
  * 2001-05-14 fl  fixes for 1.5.2
  * 2001-07-01 fl  added BIGCHARSET support (from Martin von Loewis)
  * 2001-09-18 fl  added _getliteral helper
+ * 2001-10-18 fl  fixed group reset issue (from Matthew Mueller)
  *
  * Copyright (c) 1997-2001 by Secret Labs AB.  All rights reserved.
  *
@@ -47,7 +48,7 @@
 #ifndef SRE_RECURSIVE
 
 static char copyright[] =
-    " SRE 2.1.1 Copyright (c) 1997-2001 by Secret Labs AB ";
+    " SRE 2.2.0 Copyright (c) 1997-2001 by Secret Labs AB ";
 
 #include "Python.h"
 #include "structmember.h" /* offsetof */
@@ -1061,6 +1062,7 @@
                 if (i)
                     return i;
                 i = mark_restore(state, 0, lastmark);
+                state->lastmark = lastmark;
                 if (i < 0)
                     return i;
                 rp->count = count - 1;