[pypy-svn] r14746 - in pypy/dist/pypy/rpython: . test
pedronis at codespeak.net
pedronis at codespeak.net
Mon Jul 18 20:45:17 CEST 2005
Author: pedronis
Date: Mon Jul 18 20:45:14 2005
New Revision: 14746
Modified:
pypy/dist/pypy/rpython/rbuiltin.py
pypy/dist/pypy/rpython/rclass.py
pypy/dist/pypy/rpython/test/test_rclass.py
Log:
fix isinstance(None, cls) behavior.
Modified: pypy/dist/pypy/rpython/rbuiltin.py
==============================================================================
--- pypy/dist/pypy/rpython/rbuiltin.py (original)
+++ pypy/dist/pypy/rpython/rbuiltin.py Mon Jul 18 20:45:14 2005
@@ -124,9 +124,7 @@
v_obj, v_cls = hop.inputargs(instance_repr, class_repr)
- v_objcls = hop.gendirectcall(rclass.ll_type, v_obj)
- return hop.gendirectcall(rclass.ll_issubclass, v_objcls, v_cls)
-
+ return hop.gendirectcall(rclass.ll_isinstance, v_obj, v_cls)
#def rtype_builtin_range(hop): see rrange.py
Modified: pypy/dist/pypy/rpython/rclass.py
==============================================================================
--- pypy/dist/pypy/rpython/rclass.py (original)
+++ pypy/dist/pypy/rpython/rclass.py Mon Jul 18 20:45:14 2005
@@ -637,5 +637,11 @@
subcls = subcls.parenttypeptr
return True
+def ll_isinstance(obj, cls):
+ if not obj:
+ return False
+ obj_cls = ll_type(obj)
+ return ll_issubclass(obj_cls, cls)
+
def ll_runtime_type_info(obj):
return obj.typeptr.rtti
Modified: pypy/dist/pypy/rpython/test/test_rclass.py
==============================================================================
--- pypy/dist/pypy/rpython/test/test_rclass.py (original)
+++ pypy/dist/pypy/rpython/test/test_rclass.py Mon Jul 18 20:45:14 2005
@@ -101,24 +101,26 @@
assert res == 1
def test_isinstance():
- def a():
- b = B()
- return isinstance(b, A)
- def b():
- b = B()
- return isinstance(b, B)
- def c():
- b = B()
- return isinstance(b, C)
-
- res = interpret(a, [])
- assert res is True
+ def f(i):
+ if i == 0:
+ o = None
+ elif i == 1:
+ o = A()
+ elif i == 2:
+ o = B()
+ else:
+ o = C()
+ return 100*isinstance(o, A)+10*isinstance(o, B)+1*isinstance(o ,C)
- res = interpret(b, [])
- assert res is True
+ res = interpret(f, [1])
+ assert res == 100
+ res = interpret(f, [2])
+ assert res == 110
+ res = interpret(f, [3])
+ assert res == 111
- res = interpret(c, [])
- assert res is False
+ res = interpret(f, [0])
+ assert res == 0
def test_method_used_in_subclasses_only():
class A:
More information about the Pypy-commit
mailing list