diff -r 965109e81ffa Lib/sre_parse.py --- a/Lib/sre_parse.py Wed Nov 04 22:38:40 2015 +0200 +++ b/Lib/sre_parse.py Thu Nov 05 09:00:00 2015 +0100 @@ -13,6 +13,7 @@ # XXX: show string offset and offending character for all errors from sre_constants import * +import weakref SPECIAL_CHARS = ".\\[{()*+?^$|" REPEAT_CHARS = "*+?{" @@ -195,7 +196,9 @@ lo = lo + 1 hi = hi + 1 elif op is GROUPREF: - i, j = self.pattern.subpatterns[av].getwidth() + # subpatterns[av] is a weakref object. + # get the original object + i, j = self.pattern.subpatterns[av]().getwidth() lo = lo + i hi = hi + j elif op is GROUPREF_EXISTS: @@ -780,7 +783,7 @@ raise source.error("missing ), unterminated subpattern", source.tell() - start) if group is not None: - state.closegroup(group, p) + state.closegroup(group, weakref.ref(p)) # Parse weakref object subpatternappend((SUBPATTERN, (group, p))) elif this == "^":