[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