Skip to content

Commit 94925ac

Browse files
committed
fallback: do not use dynamic format strings for struct.(un)pack
Increases performance on PyPy.
1 parent af9c9ca commit 94925ac

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

msgpack/fallback.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ def _fb_unpack(self, execute=EX_CONSTRUCT, write_bytes=None):
258258
obj = struct.unpack("b", chr(b))[0]
259259
elif b & 0b11100000 == 0b10100000:
260260
n = b & 0b00011111
261-
obj = struct.unpack("%ds" % n, self._fb_read(n, write_bytes))[0]
261+
obj = self._fb_read(n, write_bytes)
262262
typ = TYPE_RAW
263263
elif b & 0b11110000 == 0b10010000:
264264
n = b & 0b00001111
@@ -294,11 +294,11 @@ def _fb_unpack(self, execute=EX_CONSTRUCT, write_bytes=None):
294294
obj = struct.unpack(">q", self._fb_read(8, write_bytes))[0]
295295
elif b == 0xda:
296296
n = struct.unpack(">H", self._fb_read(2, write_bytes))[0]
297-
obj = struct.unpack("%ds" % n, self._fb_read(n, write_bytes))[0]
297+
obj = self._fb_read(n, write_bytes)
298298
typ = TYPE_RAW
299299
elif b == 0xdb:
300300
n = struct.unpack(">I", self._fb_read(4, write_bytes))[0]
301-
obj = struct.unpack("%ds" % n, self._fb_read(n, write_bytes))[0]
301+
obj = self._fb_read(n, write_bytes)
302302
typ = TYPE_RAW
303303
elif b == 0xdc:
304304
n = struct.unpack(">H", self._fb_read(2, write_bytes))[0]
@@ -433,9 +433,11 @@ def _pack(self, obj, nest_limit=DEFAULT_RECURSE_LIMIT):
433433
self.buffer.write(chr(0xa0 + n))
434434
return self.buffer.write(obj)
435435
if n <= 0xffff:
436-
return self.buffer.write(struct.pack(">BH%ds" % n,0xda, n, obj))
436+
self.buffer.write(struct.pack(">BH", 0xda, n))
437+
return self.buffer.write(obj)
437438
if n <= 0xffffffff:
438-
return self.buffer.write(struct.pack(">BI%ds" % n,0xdb, n, obj))
439+
self.buffer.write(struct.pack(">BI", 0xdb, n))
440+
return self.buffer.write(obj)
439441
raise PackValueError("String is too large")
440442
if isinstance(obj, float):
441443
if self.use_float:

0 commit comments

Comments
 (0)