[Python-checkins] CVS: python/dist/src/Lib sre.py,1.37,1.38 sre_parse.py,1.47,1.48

Fredrik Lundh effbot@users.sourceforge.net
2001年9月18日 13:55:27 -0700


Update of /cvsroot/python/python/dist/src/Lib
In directory usw-pr-cvs1:/tmp/cvs-serv30223/Lib
Modified Files:
	sre.py sre_parse.py 
Log Message:
fixed #449964: sre.sub raises an exception if the template contains a
\g<x> group reference followed by a character escape
(also restructured a few things on the way to fixing #449000)
Index: sre.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/sre.py,v
retrieving revision 1.37
retrieving revision 1.38
diff -C2 -d -r1.37 -r1.38
*** sre.py	2001年09月18日 18:47:09	1.37
--- sre.py	2001年09月18日 20:55:24	1.38
***************
*** 252,260 ****
 template = _compile_repl(template, pattern)
 literals = template[1]
! sub = 0 # temporarly disabled, see bug #449000
! if (sub and not count and pattern._isliteral() and
! len(literals) == 1 and literals[0]):
! # shortcut: both pattern and string are literals
! return string.replace(text, pattern.pattern, literals[0]), 0
 def filter(match, template=template):
 return sre_parse.expand_template(template, match)
--- 252,262 ----
 template = _compile_repl(template, pattern)
 literals = template[1]
! if sub and not count:
! literal = pattern._getliteral()
! if literal and "\\" in literal:
! literal = None # may contain untranslated escapes
! if literal is not None and len(literals) == 1 and literals[0]:
! # shortcut: both pattern and string are literals
! return string.replace(text, pattern.pattern, literals[0]), 0
 def filter(match, template=template):
 return sre_parse.expand_template(template, match)
Index: sre_parse.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/sre_parse.py,v
retrieving revision 1.47
retrieving revision 1.48
diff -C2 -d -r1.47 -r1.48
*** sre_parse.py	2001年09月04日 19:10:20	1.47
--- sre_parse.py	2001年09月18日 20:55:24	1.48
***************
*** 648,654 ****
 sep = source[:0]
 if type(sep) is type(""):
! char = chr
 else:
! char = unichr
 while 1:
 this = s.get()
--- 648,654 ----
 sep = source[:0]
 if type(sep) is type(""):
! makechar = chr
 else:
! makechar = unichr
 while 1:
 this = s.get()
***************
*** 694,698 ****
 if not code:
 this = this[1:]
! code = LITERAL, char(atoi(this[-6:], 8) & 0xff)
 if code[0] is LITERAL:
 literal(code[1])
--- 694,698 ----
 if not code:
 this = this[1:]
! code = LITERAL, makechar(atoi(this[-6:], 8) & 0xff)
 if code[0] is LITERAL:
 literal(code[1])
***************
*** 701,705 ****
 else:
 try:
! this = char(ESCAPES[this][1])
 except KeyError:
 pass
--- 701,705 ----
 else:
 try:
! this = makechar(ESCAPES[this][1])
 except KeyError:
 pass

AltStyle によって変換されたページ (->オリジナル) /