Author: Maciej Fijalkowski <[email protected]>
Branch: kill-someobject
Changeset: r57989:c7b80d289313
Date: 2012-10-10 22:17 +0200
http://bitbucket.org/pypy/pypy/changeset/c7b80d289313/
Log: fix some more stuff
diff --git a/pypy/interpreter/function.py b/pypy/interpreter/function.py
--- a/pypy/interpreter/function.py
+++ b/pypy/interpreter/function.py
@@ -205,11 +205,11 @@
code = space.interp_w(Code, w_code)
if not space.is_true(space.isinstance(w_globals, space.w_dict)):
raise OperationError(space.w_TypeError, space.wrap("expected
dict"))
- if not space.is_w(w_name, space.w_None):
+ if not space.is_none(w_name):
name = space.str_w(w_name)
else:
name = None
- if not space.is_w(w_argdefs, space.w_None):
+ if not space.is_none(w_argdefs):
defs_w = space.fixedview(w_argdefs)
else:
defs_w = []
@@ -217,7 +217,7 @@
from pypy.interpreter.pycode import PyCode
if isinstance(code, PyCode):
nfreevars = len(code.co_freevars)
- if space.is_w(w_closure, space.w_None) and nfreevars == 0:
+ if space.is_none(w_closure) and nfreevars == 0:
closure = None
elif not space.is_w(space.type(w_closure), space.w_tuple):
raise OperationError(space.w_TypeError, space.wrap("invalid
closure"))
@@ -428,8 +428,8 @@
"""functionobject.__get__(obj[, type]) -> method"""
# this is not defined as a method on Function because it's generally
# useful logic: w_function can be any callable. It is used by Method too.
- asking_for_bound = (space.is_w(w_cls, space.w_None) or
- not space.is_w(w_obj, space.w_None) or
+ asking_for_bound = (space.is_none(w_cls) or
+ not space.is_none(w_obj) or
space.is_w(w_cls, space.type(space.w_None)))
if asking_for_bound:
return space.wrap(Method(space, w_function, w_obj, w_cls))
@@ -445,12 +445,15 @@
self.space = space
self.w_function = w_function
self.w_instance = w_instance # or None
+ if w_class is None:
+ w_class = space.w_None
self.w_class = w_class # possibly space.w_None
- def descr_method__new__(space, w_subtype, w_function, w_instance,
w_class=None):
+ def descr_method__new__(space, w_subtype, w_function, w_instance,
+ w_class=None):
if space.is_w(w_instance, space.w_None):
w_instance = None
- if w_instance is None and space.is_w(w_class, space.w_None):
+ if w_instance is None and space.is_none(w_class):
raise OperationError(space.w_TypeError,
space.wrap("unbound methods must have class"))
method = space.allocate_instance(Method, w_subtype)
diff --git a/pypy/interpreter/generator.py b/pypy/interpreter/generator.py
--- a/pypy/interpreter/generator.py
+++ b/pypy/interpreter/generator.py
@@ -91,6 +91,8 @@
def descr_throw(self, w_type, w_val=None, w_tb=None):
"""x.throw(typ[,val[,tb]]) -> raise exception in generator,
return next yielded value or raise StopIteration."""
+ if w_val is None:
+ w_val = self.space.w_None
return self.throw(w_type, w_val, w_tb)
@@ -99,7 +101,7 @@
space = self.space
msg = "throw() third argument must be a traceback object"
- if space.is_w(w_tb, space.w_None):
+ if space.is_none(w_tb):
tb = None
else:
tb = check_traceback(space, w_tb, msg)
diff --git a/pypy/interpreter/typedef.py b/pypy/interpreter/typedef.py
--- a/pypy/interpreter/typedef.py
+++ b/pypy/interpreter/typedef.py
@@ -3,7 +3,8 @@
"""
import py
-from pypy.interpreter.gateway import interp2app, BuiltinCode
+from pypy.interpreter.gateway import interp2app, BuiltinCode, unwrap_spec,\
+ W_Root
from pypy.interpreter.argument import Arguments
from pypy.interpreter.baseobjspace import Wrappable, DescrMismatch
from pypy.interpreter.error import OperationError, operationerrfmt
@@ -456,6 +457,7 @@
self.objclass_getter = objclass_getter
self.use_closure = use_closure
+ @unwrap_spec(w_cls = (W_Root, 'space.w_None'))
def descr_property_get(self, space, w_obj, w_cls=None):
"""property.__get__(obj[, type]) -> value
Read the value of the property of the given obj."""
@@ -553,7 +555,7 @@
self.w_cls.name,
space.type(w_obj).getname(space))
- def descr_member_get(self, space, w_obj, w_w_cls=None):
+ def descr_member_get(self, space, w_obj, w_cls=None):
"""member.__get__(obj[, type]) -> value
Read the slot 'member' of the given 'obj'."""
if space.is_w(w_obj, space.w_None):
diff --git a/pypy/module/__builtin__/operation.py
b/pypy/module/__builtin__/operation.py
--- a/pypy/module/__builtin__/operation.py
+++ b/pypy/module/__builtin__/operation.py
@@ -124,8 +124,8 @@
NDIGITS_MAX = int((rfloat.DBL_MANT_DIG - rfloat.DBL_MIN_EXP) * 0.30103)
NDIGITS_MIN = -int((rfloat.DBL_MAX_EXP + 1) * 0.30103)
-@unwrap_spec(number=float)
-def round(space, number, w_ndigits=0):
+@unwrap_spec(number=float, w_ndigits = (W_Root, 'space.wrap(0)'))
+def round(space, number, w_ndigits):
"""round(number[, ndigits]) -> floating point number
Round a number to a given precision in decimal digits (default 0 digits).
@@ -234,6 +234,7 @@
function). Note that classes are callable."""
return space.callable(w_object)
-def format(space, w_obj, w_format_spec=""):
+@unwrap_spec(w_format_spec = (W_Root, 'space.wrap("")'))
+def format(space, w_obj, w_format_spec):
"""Format a obj according to format_spec"""
return space.format(w_obj, w_format_spec)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit