[pypy-commit] pypy faster-rstruct-2: we cannot use the fastpath for '<f' or '>f', because we need to check for overflow in that case. It is fine to use the fastpath for doubles though, because there is no risk of overflow
antocuni
pypy.commits at gmail.com
Sun May 14 19:05:07 EDT 2017
Author: Antonio Cuni <anto.cuni at gmail.com>
Branch: faster-rstruct-2
Changeset: r91286:6c228d591ce8
Date: 2017-05-15 00:06 +0200
http://bitbucket.org/pypy/pypy/changeset/6c228d591ce8/
Log: we cannot use the fastpath for '<f' or '>f', because we need to
check for overflow in that case. It is fine to use the fastpath for
doubles though, because there is no risk of overflow
diff --git a/rpython/rlib/rstruct/standardfmttable.py b/rpython/rlib/rstruct/standardfmttable.py
--- a/rpython/rlib/rstruct/standardfmttable.py
+++ b/rpython/rlib/rstruct/standardfmttable.py
@@ -106,7 +106,7 @@
size = rffi.sizeof(TYPE)
def packer(fmtiter):
fl = fmtiter.accept_float_arg()
- if pack_fastpath(TYPE)(fmtiter, fl):
+ if TYPE is not rffi.FLOAT and pack_fastpath(TYPE)(fmtiter, fl):
return
# slow path
try:
diff --git a/rpython/rlib/rstruct/test/test_pack.py b/rpython/rlib/rstruct/test/test_pack.py
--- a/rpython/rlib/rstruct/test/test_pack.py
+++ b/rpython/rlib/rstruct/test/test_pack.py
@@ -1,6 +1,7 @@
import pytest
from rpython.rlib.rarithmetic import r_ulonglong
from rpython.rlib.rstruct import standardfmttable, nativefmttable
+from rpython.rlib.rstruct.error import StructOverflowError
from rpython.rlib.mutbuffer import MutableStringBuffer
import struct
@@ -93,6 +94,14 @@
self.check('f', 123.456)
self.check('d', 123.456789)
+ def test_float_overflow(self):
+ if self.fmt_prefix == '@':
+ # native packing, no overflow
+ self.check('f', 10e100)
+ else:
+ # non-native packing, should raise
+ pytest.raises(StructOverflowError, "self.mypack('f', 10e100)")
+
def test_pack_char(self):
self.check('c', 'a')
More information about the pypy-commit
mailing list