]> granicus.if.org Git - python/commitdiff
merge 3.4 (#9179)
authorBenjamin Peterson <benjamin@python.org>
Sun, 30 Nov 2014 16:51:16 +0000 (11:51 -0500)
committerBenjamin Peterson <benjamin@python.org>
Sun, 30 Nov 2014 16:51:16 +0000 (11:51 -0500)
1  2 
Lib/re.py
Lib/sre_parse.py
Lib/test/test_re.py
Misc/NEWS

diff --cc Lib/re.py
Simple merge
index 45411f89f16e9ff10a77738be76fbac34a46feec,b56d437c3479d04fc1f0351071bad85c9d8d7be1..8d9a09a860dde4e0e054777f7670cb905c1092b0
@@@ -68,27 -66,24 +68,26 @@@ class Pattern
      # master pattern object.  keeps track of global attributes
      def __init__(self):
          self.flags = 0
+         self.open = []
+         self.groups = 1
          self.groupdict = {}
-         self.subpatterns = [None]  # group 0
-     @property
-     def groups(self):
-         return len(self.subpatterns)
      def opengroup(self, name=None):
          gid = self.groups
-         self.subpatterns.append(None)
+         self.groups = gid + 1
 +        if self.groups > MAXGROUPS:
 +            raise error("groups number is too large")
          if name is not None:
              ogid = self.groupdict.get(name, None)
              if ogid is not None:
 -                raise error("redefinition of group name %s as group %d; "
 -                            "was group %d" % (repr(name), gid,  ogid))
 +                raise error("redefinition of group name %r as group %d; "
 +                            "was group %d" % (name, gid,  ogid))
              self.groupdict[name] = gid
+         self.open.append(gid)
          return gid
-     def closegroup(self, gid, p):
-         self.subpatterns[gid] = p
+     def closegroup(self, gid):
+         self.open.remove(gid)
      def checkgroup(self, gid):
-         return gid < self.groups and self.subpatterns[gid] is not None
+         return gid < self.groups and gid not in self.open
  
  class SubPattern:
      # a subpattern, in intermediate form
                  i, j = av[2].getwidth()
                  lo = lo + i * av[0]
                  hi = hi + j * av[1]
 -            elif op in UNITCODES:
 +            elif op in _UNITCODES:
                  lo = lo + 1
                  hi = hi + 1
-             elif op is GROUPREF:
-                 i, j = self.pattern.subpatterns[av].getwidth()
-                 lo = lo + i
-                 hi = hi + j
-             elif op is GROUPREF_EXISTS:
-                 i, j = av[1].getwidth()
-                 if av[2] is not None:
-                     l, h = av[2].getwidth()
-                     i = min(i, l)
-                     j = max(j, h)
-                 else:
-                     i = 0
-                 lo = lo + i
-                 hi = hi + j
-             elif op is SUCCESS:
+             elif op == SUCCESS:
                  break
          self.width = min(lo, MAXREPEAT - 1), min(hi, MAXREPEAT)
          return self.width
@@@ -739,18 -707,18 +724,18 @@@ def _parse(source, state)
                  else:
                      p = _parse_sub(source, state)
                  if not sourcematch(")"):
 -                    raise error("unbalanced parenthesis")
 +                    raise source.error("unbalanced parenthesis")
                  if group is not None:
-                     state.closegroup(group, p)
+                     state.closegroup(group)
                  subpatternappend((SUBPATTERN, (group, p)))
              else:
 -                while 1:
 +                while True:
                      char = sourceget()
                      if char is None:
 -                        raise error("unexpected end of pattern")
 +                        raise source.error("unexpected end of pattern")
                      if char == ")":
                          break
 -                    raise error("unknown extension")
 +                    raise source.error("unknown extension", len(char))
  
          elif this == "^":
              subpatternappend((AT, AT_BEGINNING))
Simple merge
diff --cc Misc/NEWS
index 21769d83304c18579588f9d00ac3c822b9c52cd8,6916ca3f539b2a2284e6de39ce6e1b0c85ef6be5..7e568c6503938f1a6da0f8e4455b79e986cec4d5
+++ b/Misc/NEWS
@@@ -238,17 -68,6 +238,14 @@@ Librar
  - Issue #22821: Fixed fcntl() with integer argument on 64-bit big-endian
    platforms.
  
- - Issues #814253, #9179: Group references and conditional group references now
-   work in lookbehind assertions in regular expressions.
 +- Issue #21650: Add an `--sort-keys` option to json.tool CLI.
 +
 +- Issue #22824:  Updated reprlib output format for sets to use set literals.
 +  Patch contributed by Berker Peksag.
 +
 +- Issue #22824:  Updated reprlib output format for arrays to display empty
 +  arrays without an unnecessary empty list.  Suggested by Serhiy Storchaka.
 +
  - Issue #22406: Fixed the uu_codec codec incorrectly ported to 3.x.
    Based on patch by Martin Panter.