Author: Justin Peel <notmuchtot...@gmail.com> Branch: Changeset: r46841:824c34520e40 Date: 2011-08-27 22:34 -0600 http://bitbucket.org/pypy/pypy/changeset/824c34520e40/
Log: speed up unpacking of integers diff --git a/pypy/module/struct/formatiterator.py b/pypy/module/struct/formatiterator.py --- a/pypy/module/struct/formatiterator.py +++ b/pypy/module/struct/formatiterator.py @@ -154,6 +154,13 @@ self.inputpos = end return s + def get_pos_and_advance(self, count): + pos = self.inputpos + self.inputpos += count + if self.inputpos > len(self.input): + raise StructError("unpack str size too short for format") + return pos + def appendobj(self, value): self.result_w.append(self.space.wrap(value)) appendobj._annspecialcase_ = 'specialize:argtype(1)' diff --git a/pypy/rlib/rstruct/standardfmttable.py b/pypy/rlib/rstruct/standardfmttable.py --- a/pypy/rlib/rstruct/standardfmttable.py +++ b/pypy/rlib/rstruct/standardfmttable.py @@ -198,8 +198,8 @@ @specialize.argtype(0) def unpack_int(fmtiter): intvalue = inttype(0) - s = fmtiter.read(size) - idx = 0 + s = fmtiter.input + idx = fmtiter.get_pos_and_advance(size) if fmtiter.bigendian: for i in unroll_range_size: x = ord(s[idx]) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit