Author: Tyler Wade <[email protected]>
Branch: utf8-unicode2
Changeset: r72785:0016d703c625
Date: 2014-08-13 02:28 -0500
http://bitbucket.org/pypy/pypy/changeset/0016d703c625/
Log: Using byte-strings 8f5d79d24198 causes wierd rtyper errors. Try
something else.
diff --git a/pypy/module/_io/interp_stringio.py
b/pypy/module/_io/interp_stringio.py
--- a/pypy/module/_io/interp_stringio.py
+++ b/pypy/module/_io/interp_stringio.py
@@ -27,23 +27,24 @@
newline = None
else:
newline = space.unicode_w(w_newline)
- newline = newline.bytes
- if (newline and newline != '\n' and newline != '\r\n' and
- newline != '\r'):
- # Not using oefmt() because I don't know how to ues it
+ if (newline is not None and len(newline) and
+ not (utf8.EQ(newline, Utf8Str('\n')) or
+ utf8.EQ(newline, Utf8Str('\r\n')) or
+ utf8.EQ(newline, Utf8Str('\r')))):
+ # Not using oefmt() because I don't know how to use it
# with unicode
raise OperationError(space.w_ValueError,
space.mod(
space.wrap("illegal newline value: %s"),
space.wrap(newline)
)
)
-
if newline is not None:
self.readnl = newline
- self.readuniversal = not newline
+ self.readuniversal = newline is None or not len(newline)
self.readtranslate = newline is None
- if newline and newline[0] == '\r':
+ if (newline is not None and len(newline) and
+ utf8ord(newline) == ord("\r")):
self.writenl = newline
if self.readuniversal:
self.w_decoder = space.call_function(
@@ -143,10 +144,9 @@
else:
w_decoded = w_obj
- if self.writenl:
+ if self.writenl is not None and len(self.writenl):
w_decoded = space.call_method(
- w_decoded, "replace", space.wrap("\n"),
- space.wrap(Utf8Str(self.writenl))
+ w_decoded, "replace", space.wrap("\n"),
space.wrap(self.writenl)
)
string = space.unicode_w(w_decoded)
diff --git a/pypy/module/_io/interp_textio.py b/pypy/module/_io/interp_textio.py
--- a/pypy/module/_io/interp_textio.py
+++ b/pypy/module/_io/interp_textio.py
@@ -372,28 +372,28 @@
newline = None
else:
newline = space.unicode_w(w_newline)
- # newline is guaranteed to be either empty or ascii
- newline = newline.bytes
- if (newline and newline != '\n' and newline != '\r\n' and
- newline != '\r'):
+ if (newline is not None and len(newline) and
+ not (utf8.EQ(newline, Utf8Str('\n')) or
+ utf8.EQ(newline, Utf8Str('\r\n')) or
+ utf8.EQ(newline, Utf8Str('\r')))):
r = space.str_w(space.repr(w_newline))
raise OperationError(space.w_ValueError, space.wrap(
"illegal newline value: %s" % (r,)))
self.line_buffering = line_buffering
- self.readuniversal = not newline
+ self.readuniversal = newline is None or not len(newline)
self.readtranslate = newline is None
self.readnl = newline
- self.writetranslate = (newline is not None and newline != '')
+ self.writetranslate = (newline is not None and len(newline))
if not self.readuniversal:
self.writenl = self.readnl
- if self.writenl == '\n':
+ if utf8.EQ(self.writenl, Utf8Str('\n')):
self.writenl = None
elif _WINDOWS:
- self.writenl = "\r\n"
+ self.writenl = Utf8Str("\r\n")
else:
self.writenl = None
@@ -663,7 +663,7 @@
start = endpos = offset_to_buffer = 0
break
- if not remaining:
+ if remaining is None or not len(remaining):
line = self.decoded_chars
start = self.decoded_chars_used
offset_to_buffer = 0
@@ -705,22 +705,22 @@
# We have consumed the buffer
self._set_decoded_chars(None)
- if line:
+ if line is not None and len(line):
# Our line ends in the current buffer
decoded_chars_used = endpos - offset_to_buffer
assert decoded_chars_used >= 0
self.decoded_chars_used = decoded_chars_used
if start > 0 or endpos < len(line):
line = line[start:endpos]
- if remaining:
+ if remaining is not None and len(remaining):
chunks.append(remaining)
remaining = None
if chunks:
- if line:
+ if line is not None and len(line):
chunks.append(line)
line = Utf8Str('').join(chunks)
- if line:
+ if line is not None and len(line):
return space.wrap(line)
else:
return space.wrap(Utf8Str(''))
@@ -743,10 +743,12 @@
textlen = len(text)
haslf = False
- if (self.writetranslate and self.writenl) or self.line_buffering:
+ if (self.writetranslate and self.writenl is not None and
+ len(self.writenl)) or self.line_buffering:
if text.find('\n') >= 0:
haslf = True
- if haslf and self.writetranslate and self.writenl:
+ if (haslf and self.writetranslate and
+ self.writenl is not None and len(self.writenl)):
w_text = space.call_method(w_text, "replace",
space.wrap(Utf8Str('\n')),
space.wrap(self.writenl))
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit