[Python-checkins] CVS: python/dist/src/Lib sre.py,1.15,1.16 sre_compile.py,1.13,1.14 sre_parse.py,1.12,1.13

Fredrik Lundh python-dev@python.org
Fri, 30 Jun 2000 00:51:01 -0700


Update of /cvsroot/python/python/dist/src/Lib
In directory slayer.i.sourceforge.net:/tmp/cvs-serv24009/Lib

Modified Files:
	sre.py sre_compile.py sre_parse.py 
Log Message:

- pedantic: make sure "python -t" doesn't complain...

Index: sre.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/sre.py,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -r1.15 -r1.16
*** sre.py	2000/06/30 07:05:47	1.15
--- sre.py	2000/06/30 07:50:59	1.16
***************
*** 99,103 ****
          filter = template
      else:
! 	template = sre_parse.parse_template(template, pattern)
          def filter(match, template=template):
              return sre_parse.expand_template(template, match)
--- 99,103 ----
          filter = template
      else:
!         template = sre_parse.parse_template(template, pattern)
          def filter(match, template=template):
              return sre_parse.expand_template(template, match)
***************
*** 110,118 ****
          if not m:
              break
! 	b, e = m.span()
          if i < b:
              append(string[i:b])
          append(filter(m))
! 	i = e
          n = n + 1
      append(string[i:])
--- 110,118 ----
          if not m:
              break
!         b, e = m.span()
          if i < b:
              append(string[i:b])
          append(filter(m))
!         i = e
          n = n + 1
      append(string[i:])
***************
*** 131,143 ****
          if not m:
              break
! 	b, e = m.span()
! 	if b == e:
! 	    if i >= len(string):
! 		break
! 	    continue
          append(string[i:b])
! 	if g and b != e:
! 	    extend(m.groups())
! 	i = e
          n = n + 1
      append(string[i:])
--- 131,143 ----
          if not m:
              break
!         b, e = m.span()
!         if b == e:
!             if i >= len(string):
!                 break
!             continue
          append(string[i:b])
!         if g and b != e:
!             extend(m.groups())
!         i = e
          n = n + 1
      append(string[i:])

Index: sre_compile.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/sre_compile.py,v
retrieving revision 1.13
retrieving revision 1.14
diff -C2 -r1.13 -r1.14
*** sre_compile.py	2000/06/30 00:27:45	1.13
--- sre_compile.py	2000/06/30 07:50:59	1.14
***************
*** 19,23 ****
  for WORDSIZE in "BHil":
      if len(array.array(WORDSIZE, [0]).tostring()) == _sre.getcodesize():
! 	break
  else:
      raise RuntimeError, "cannot find a useable array type"
--- 19,23 ----
  for WORDSIZE in "BHil":
      if len(array.array(WORDSIZE, [0]).tostring()) == _sre.getcodesize():
!         break
  else:
      raise RuntimeError, "cannot find a useable array type"
***************
*** 27,156 ****
      emit = code.append
      for op, av in pattern:
! 	if op is ANY:
! 	    if flags & SRE_FLAG_DOTALL:
! 		emit(OPCODES[op])
! 	    else:
! 		emit(OPCODES[CATEGORY])
! 		emit(CHCODES[CATEGORY_NOT_LINEBREAK])
! 	elif op in (SUCCESS, FAILURE):
! 	    emit(OPCODES[op])
! 	elif op is AT:
! 	    emit(OPCODES[op])
! 	    if flags & SRE_FLAG_MULTILINE:
! 		emit(ATCODES[AT_MULTILINE[av]])
! 	    else:
! 		emit(ATCODES[av])
! 	elif op is BRANCH:
! 	    emit(OPCODES[op])
! 	    tail = []
! 	    for av in av[1]:
! 		skip = len(code); emit(0)
! 		_compile(code, av, flags)
!  		emit(OPCODES[JUMP])
!  		tail.append(len(code)); emit(0)
! 		code[skip] = len(code) - skip
! 	    emit(0) # end of branch
!  	    for tail in tail:
! 		code[tail] = len(code) - tail
! 	elif op is CALL:
! 	    emit(OPCODES[op])
! 	    skip = len(code); emit(0)
! 	    _compile(code, av, flags)
! 	    emit(OPCODES[SUCCESS])
! 	    code[skip] = len(code) - skip
! 	elif op is CATEGORY:
! 	    emit(OPCODES[op])
! 	    if flags & SRE_FLAG_LOCALE:
! 		emit(CHCODES[CH_LOCALE[av]])
! 	    elif flags & SRE_FLAG_UNICODE:
! 		emit(CHCODES[CH_UNICODE[av]])
! 	    else:
! 		emit(CHCODES[av])
! 	elif op is GROUP:
! 	    if flags & SRE_FLAG_IGNORECASE:
! 		emit(OPCODES[OP_IGNORE[op]])
! 	    else:
! 		emit(OPCODES[op])
! 	    emit(av-1)
! 	elif op is IN:
! 	    if flags & SRE_FLAG_IGNORECASE:
! 		emit(OPCODES[OP_IGNORE[op]])
! 		def fixup(literal, flags=flags):
! 		    return _sre.getlower(ord(literal), flags)
! 	    else:
! 		emit(OPCODES[op])
! 		fixup = ord
! 	    skip = len(code); emit(0)
! 	    for op, av in av:
! 		emit(OPCODES[op])
! 		if op is NEGATE:
! 		    pass
! 		elif op is LITERAL:
! 		    emit(fixup(av))
! 		elif op is RANGE:
! 		    emit(fixup(av[0]))
! 		    emit(fixup(av[1]))
! 		elif op is CATEGORY:
! 		    if flags & SRE_FLAG_LOCALE:
! 			emit(CHCODES[CH_LOCALE[av]])
! 		    elif flags & SRE_FLAG_UNICODE:
! 			emit(CHCODES[CH_UNICODE[av]])
! 		    else:
! 			emit(CHCODES[av])
! 		else:
! 		    raise error, "internal: unsupported set operator"
! 	    emit(OPCODES[FAILURE])
! 	    code[skip] = len(code) - skip
! 	elif op in (LITERAL, NOT_LITERAL):
! 	    if flags & SRE_FLAG_IGNORECASE:
! 		emit(OPCODES[OP_IGNORE[op]])
! 	    else:
! 		emit(OPCODES[op])
! 	    emit(ord(av))
! 	elif op is MARK:
! 	    emit(OPCODES[op])
! 	    emit(av)
!  	elif op in (REPEAT, MIN_REPEAT, MAX_REPEAT):
! 	    if flags & SRE_FLAG_TEMPLATE:
! 		emit(OPCODES[REPEAT])
! 		skip = len(code); emit(0)
! 		emit(av[0])
! 		emit(av[1])
! 		_compile(code, av[2], flags)
! 		emit(OPCODES[SUCCESS])
! 		code[skip] = len(code) - skip
! 	    else:
! 		lo, hi = av[2].getwidth()
! 		if lo == 0:
! 		    raise error, "nothing to repeat"
! 		if 0 and lo == hi == 1 and op is MAX_REPEAT:
! 		    # FIXME: <fl> need a better way to figure out when
! 		    # it's safe to use this one (in the parser, probably)
! 		    emit(OPCODES[MAX_REPEAT_ONE])
! 		    skip = len(code); emit(0)
! 		    emit(av[0])
! 		    emit(av[1])
! 		    _compile(code, av[2], flags)
! 		    emit(OPCODES[SUCCESS])
! 		    code[skip] = len(code) - skip
! 		else:
! 		    emit(OPCODES[op])
! 		    skip = len(code); emit(0)
! 		    emit(av[0])
! 		    emit(av[1])
! 		    _compile(code, av[2], flags)
! 		    emit(OPCODES[SUCCESS])
! 		    code[skip] = len(code) - skip
! 	elif op is SUBPATTERN:
!  	    group = av[0]
!  	    if group:
!  		emit(OPCODES[MARK])
!  		emit((group-1)*2)
! 	    _compile(code, av[1], flags)
!  	    if group:
!  		emit(OPCODES[MARK])
!  		emit((group-1)*2+1)
! 	else:
! 	    raise ValueError, ("unsupported operand type", op)
  
  def _compile_info(code, pattern, flags):
--- 27,156 ----
      emit = code.append
      for op, av in pattern:
!         if op is ANY:
!             if flags & SRE_FLAG_DOTALL:
!                 emit(OPCODES[op])
!             else:
!                 emit(OPCODES[CATEGORY])
!                 emit(CHCODES[CATEGORY_NOT_LINEBREAK])
!         elif op in (SUCCESS, FAILURE):
!             emit(OPCODES[op])
!         elif op is AT:
!             emit(OPCODES[op])
!             if flags & SRE_FLAG_MULTILINE:
!                 emit(ATCODES[AT_MULTILINE[av]])
!             else:
!                 emit(ATCODES[av])
!         elif op is BRANCH:
!             emit(OPCODES[op])
!             tail = []
!             for av in av[1]:
!                 skip = len(code); emit(0)
!                 _compile(code, av, flags)
!                 emit(OPCODES[JUMP])
!                 tail.append(len(code)); emit(0)
!                 code[skip] = len(code) - skip
!             emit(0) # end of branch
!             for tail in tail:
!                 code[tail] = len(code) - tail
!         elif op is CALL:
!             emit(OPCODES[op])
!             skip = len(code); emit(0)
!             _compile(code, av, flags)
!             emit(OPCODES[SUCCESS])
!             code[skip] = len(code) - skip
!         elif op is CATEGORY:
!             emit(OPCODES[op])
!             if flags & SRE_FLAG_LOCALE:
!                 emit(CHCODES[CH_LOCALE[av]])
!             elif flags & SRE_FLAG_UNICODE:
!                 emit(CHCODES[CH_UNICODE[av]])
!             else:
!                 emit(CHCODES[av])
!         elif op is GROUP:
!             if flags & SRE_FLAG_IGNORECASE:
!                 emit(OPCODES[OP_IGNORE[op]])
!             else:
!                 emit(OPCODES[op])
!             emit(av-1)
!         elif op is IN:
!             if flags & SRE_FLAG_IGNORECASE:
!                 emit(OPCODES[OP_IGNORE[op]])
!                 def fixup(literal, flags=flags):
!                     return _sre.getlower(ord(literal), flags)
!             else:
!                 emit(OPCODES[op])
!                 fixup = ord
!             skip = len(code); emit(0)
!             for op, av in av:
!                 emit(OPCODES[op])
!                 if op is NEGATE:
!                     pass
!                 elif op is LITERAL:
!                     emit(fixup(av))
!                 elif op is RANGE:
!                     emit(fixup(av[0]))
!                     emit(fixup(av[1]))
!                 elif op is CATEGORY:
!                     if flags & SRE_FLAG_LOCALE:
!                         emit(CHCODES[CH_LOCALE[av]])
!                     elif flags & SRE_FLAG_UNICODE:
!                         emit(CHCODES[CH_UNICODE[av]])
!                     else:
!                         emit(CHCODES[av])
!                 else:
!                     raise error, "internal: unsupported set operator"
!             emit(OPCODES[FAILURE])
!             code[skip] = len(code) - skip
!         elif op in (LITERAL, NOT_LITERAL):
!             if flags & SRE_FLAG_IGNORECASE:
!                 emit(OPCODES[OP_IGNORE[op]])
!             else:
!                 emit(OPCODES[op])
!             emit(ord(av))
!         elif op is MARK:
!             emit(OPCODES[op])
!             emit(av)
!         elif op in (REPEAT, MIN_REPEAT, MAX_REPEAT):
!             if flags & SRE_FLAG_TEMPLATE:
!                 emit(OPCODES[REPEAT])
!                 skip = len(code); emit(0)
!                 emit(av[0])
!                 emit(av[1])
!                 _compile(code, av[2], flags)
!                 emit(OPCODES[SUCCESS])
!                 code[skip] = len(code) - skip
!             else:
!                 lo, hi = av[2].getwidth()
!                 if lo == 0:
!                     raise error, "nothing to repeat"
!                 if 0 and lo == hi == 1 and op is MAX_REPEAT:
!                     # FIXME: <fl> need a better way to figure out when
!                     # it's safe to use this one (in the parser, probably)
!                     emit(OPCODES[MAX_REPEAT_ONE])
!                     skip = len(code); emit(0)
!                     emit(av[0])
!                     emit(av[1])
!                     _compile(code, av[2], flags)
!                     emit(OPCODES[SUCCESS])
!                     code[skip] = len(code) - skip
!                 else:
!                     emit(OPCODES[op])
!                     skip = len(code); emit(0)
!                     emit(av[0])
!                     emit(av[1])
!                     _compile(code, av[2], flags)
!                     emit(OPCODES[SUCCESS])
!                     code[skip] = len(code) - skip
!         elif op is SUBPATTERN:
!             group = av[0]
!             if group:
!                 emit(OPCODES[MARK])
!                 emit((group-1)*2)
!             _compile(code, av[1], flags)
!             if group:
!                 emit(OPCODES[MARK])
!                 emit((group-1)*2+1)
!         else:
!             raise ValueError, ("unsupported operand type", op)
  
  def _compile_info(code, pattern, flags):
***************
*** 160,172 ****
      lo, hi = pattern.getwidth()
      if lo == 0:
! 	return # not worth it
      # look for a literal prefix
      prefix = []
      if not (flags & SRE_FLAG_IGNORECASE):
! 	for op, av in pattern.data:
! 	    if op is LITERAL:
! 		prefix.append(ord(av))
! 	    else:
! 		break
      # add an info block
      emit = code.append
--- 160,172 ----
      lo, hi = pattern.getwidth()
      if lo == 0:
!         return # not worth it
      # look for a literal prefix
      prefix = []
      if not (flags & SRE_FLAG_IGNORECASE):
!         for op, av in pattern.data:
!             if op is LITERAL:
!                 prefix.append(ord(av))
!             else:
!                 break
      # add an info block
      emit = code.append
***************
*** 176,198 ****
      mask = 0
      if len(prefix) == len(pattern.data):
! 	mask = 1
      emit(mask)
      # pattern length
      emit(lo)
      if hi < 32768:
! 	emit(hi)
      else:
! 	emit(0)
      # add literal prefix
      emit(len(prefix))
      if prefix:
! 	code.extend(prefix)
! 	# generate overlap table
! 	table = [-1] + ([0]*len(prefix))
! 	for i in range(len(prefix)):
! 	    table[i+1] = table[i]+1
! 	    while table[i+1] > 0 and prefix[i] != prefix[table[i+1]-1]:
! 		table[i+1] = table[table[i+1]-1]+1
! 	code.extend(table[1:]) # don't store first entry
      code[skip] = len(code) - skip
  
--- 176,198 ----
      mask = 0
      if len(prefix) == len(pattern.data):
!         mask = 1
      emit(mask)
      # pattern length
      emit(lo)
      if hi < 32768:
!         emit(hi)
      else:
!         emit(0)
      # add literal prefix
      emit(len(prefix))
      if prefix:
!         code.extend(prefix)
!         # generate overlap table
!         table = [-1] + ([0]*len(prefix))
!         for i in range(len(prefix)):
!             table[i+1] = table[i]+1
!             while table[i+1] > 0 and prefix[i] != prefix[table[i+1]-1]:
!                 table[i+1] = table[table[i+1]-1]+1
!         code.extend(table[1:]) # don't store first entry
      code[skip] = len(code) - skip
  
***************
*** 202,210 ****
      # compile, as necessary
      if type(p) in (type(""), type(u"")):
! 	import sre_parse
! 	pattern = p
! 	p = sre_parse.parse(p)
      else:
! 	pattern = None
  
      flags = p.pattern.flags | flags
--- 202,210 ----
      # compile, as necessary
      if type(p) in (type(""), type(u"")):
!         import sre_parse
!         pattern = p
!         p = sre_parse.parse(p)
      else:
!         pattern = None
  
      flags = p.pattern.flags | flags
***************
*** 221,229 ****
      # FIXME: <fl> get rid of this limitation!
      assert p.pattern.groups <= 100,\
! 	   "sorry, but this version only supports 100 named groups"
  
      return _sre.compile(
! 	pattern, flags,
! 	array.array(WORDSIZE, code).tostring(),
! 	p.pattern.groups-1, p.pattern.groupdict
! 	)
--- 221,229 ----
      # FIXME: <fl> get rid of this limitation!
      assert p.pattern.groups <= 100,\
!            "sorry, but this version only supports 100 named groups"
  
      return _sre.compile(
!         pattern, flags,
!         array.array(WORDSIZE, code).tostring(),
!         p.pattern.groups-1, p.pattern.groupdict
!         )

Index: sre_parse.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/sre_parse.py,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -r1.12 -r1.13
*** sre_parse.py	2000/06/30 00:27:45	1.12
--- sre_parse.py	2000/06/30 07:50:59	1.13
***************
*** 68,171 ****
  class State:
      def __init__(self):
! 	self.flags = 0
! 	self.groups = 1
! 	self.groupdict = {}
      def getgroup(self, name=None):
! 	gid = self.groups
! 	self.groups = gid + 1
! 	if name:
! 	    self.groupdict[name] = gid
[...982 lines suppressed...]
      for c, s in template:
! 	if c is LITERAL:
! 	    a(s)
! 	elif c is MARK:
! 	    s = match.group(s)
! 	    if s is None:
! 		raise error, "empty group"
! 	    a(s)
      return match.string[:0].join(p)
--- 593,602 ----
      a = p.append
      for c, s in template:
!         if c is LITERAL:
!             a(s)
!         elif c is MARK:
!             s = match.group(s)
!             if s is None:
!                 raise error, "empty group"
!             a(s)
      return match.string[:0].join(p)