[pypy-commit] lang-smalltalk default: added guards for float-primitives to return NaN and Infinity, according to Smalltalk requirements when the math module raises the according errors

lwassermann noreply at buildbot.pypy.org
Wed Jun 26 14:54:38 CEST 2013


Author: Lars Wassermann <lars.wassermann at gmail.com>
Branch: 
Changeset: r480:ee08c90d63b5
Date: 2013-06-26 14:54 +0200
http://bitbucket.org/pypy/lang-smalltalk/changeset/ee08c90d63b5/

Log:	added guards for float-primitives to return NaN and Infinity,
	according to Smalltalk requirements when the math module raises the
	according errors

diff --git a/spyvm/primitives.py b/spyvm/primitives.py
--- a/spyvm/primitives.py
+++ b/spyvm/primitives.py
@@ -319,8 +319,10 @@
 
 @expose_primitive(FLOAT_SIN, unwrap_spec=[float])
 def func(interp, s_frame, f):
-    w_res = interp.space.wrap_float(math.sin(f))
-    return w_res
+    try:
+        return interp.space.wrap_float(math.sin(f))
+    except ValueError:
+        return interp.space.wrap_float(rfloat.NAN)
 
 @expose_primitive(FLOAT_ARCTAN, unwrap_spec=[float])
 def func(interp, s_frame, f):
@@ -339,8 +341,10 @@
 
 @expose_primitive(FLOAT_EXP, unwrap_spec=[float])
 def func(interp, s_frame, f):
-    w_res = interp.space.wrap_float(math.exp(f))
-    return w_res
+    try:
+        return interp.space.wrap_float(math.exp(f))
+    except OverflowError:
+        return interp.space.wrap_float(rfloat.INFINITY)
 
 MAKE_POINT = 18
 


More information about the pypy-commit mailing list