[pypy-svn] r5613 - pypy/trunk/src/pypy/objspace/std

mwh at codespeak.net mwh at codespeak.net
Thu Jul 22 17:51:59 CEST 2004


Author: mwh
Date: Thu Jul 22 17:51:59 2004
New Revision: 5613

Modified:
   pypy/trunk/src/pypy/objspace/std/longtype.py
Log:
# XXX implement long("str", base)

ok.  steals implementation from CPython; in fact this is all 
copy-paste-changed from stringtype.py...



Modified: pypy/trunk/src/pypy/objspace/std/longtype.py
==============================================================================
--- pypy/trunk/src/pypy/objspace/std/longtype.py	(original)
+++ pypy/trunk/src/pypy/objspace/std/longtype.py	Thu Jul 22 17:51:59 2004
@@ -1,18 +1,14 @@
 from pypy.objspace.std.stdtypedef import *
+from pypy.interpreter.error import OperationError
 from pypy.objspace.std.inttype import int_typedef
 
-def descr__new__(space, w_longtype, w_value=None):
+def descr__new__(space, w_longtype, w_value=None, w_base=None):
     from pypy.objspace.std.longobject import W_LongObject
+    if w_base is None:
+        w_base = space.w_None
     if w_value is None:
         value = 0L
-    elif space.is_true(space.isinstance(w_value, space.w_str)):
-        # XXX implement long("str", base)
-        try:
-            value = long(space.unwrap(w_value))
-        except ValueError, e:
-            raise OperationError(space.w_ValueError,
-                                 space.wrap(str(e)))
-    else:
+    elif w_base == space.w_None and not space.is_true(space.isinstance(w_value, space.w_str)):
         w_obj = space.long(w_value)
         if space.is_true(space.is_(w_longtype, space.w_long)):
             return w_obj  # 'long(x)' should return
@@ -23,6 +19,24 @@
         if not isinstance(value, long):   # XXX typechecking in unwrap!
             raise OperationError(space.w_ValueError,
                              space.wrap("value can't be converted to long"))
+
+    else:
+        if w_base == space.w_None:
+            base = -909 # don't blame us!!
+        else:
+            base = space.unwrap(w_base)
+        s = space.unwrap(w_value)            
+        try:
+            value = long(s, base)
+        except TypeError, e:
+            raise OperationError(space.w_TypeError,
+                         space.wrap(str(e)))
+        except ValueError, e:
+            raise OperationError(space.w_ValueError,
+                         space.wrap(str(e)))
+        except OverflowError, e:
+            raise OperationError(space.w_OverflowError,
+                         space.wrap(str(e)))
     w_obj = space.allocate_instance(W_LongObject, w_longtype)
     w_obj.__init__(space, value)
     return w_obj



More information about the Pypy-commit mailing list