[pypy-svn] r28259 - in pypy/dist/pypy/rpython: ootypesystem test
antocuni at codespeak.net
antocuni at codespeak.net
Sun Jun 4 15:57:29 CEST 2006
Author: antocuni
Date: Sun Jun 4 15:57:28 2006
New Revision: 28259
Modified:
pypy/dist/pypy/rpython/ootypesystem/rbuiltin.py
pypy/dist/pypy/rpython/test/test_rbuiltin.py
Log:
(antocuni, nik)
Implemented isinstance for ootypesystem.
Modified: pypy/dist/pypy/rpython/ootypesystem/rbuiltin.py
==============================================================================
--- pypy/dist/pypy/rpython/ootypesystem/rbuiltin.py (original)
+++ pypy/dist/pypy/rpython/ootypesystem/rbuiltin.py Sun Jun 4 15:57:28 2006
@@ -2,7 +2,7 @@
from pypy.rpython.ootypesystem import ootype
from pypy.rpython.ootypesystem import rclass
from pypy.objspace.flow.model import Constant
-
+from pypy.rpython.error import TyperError
def rtype_new(hop):
assert hop.args_s[0].is_constant()
@@ -44,7 +44,8 @@
if hop.args_s[1].is_constant() and hop.args_s[1].const == list:
if hop.args_s[0].knowntype != list:
raise TyperError("isinstance(x, list) expects x to be known statically to be a list or None")
- raise TyperError("XXX missing impl of isinstance(x, list)")
+ v_list = hop.inputarg(hop.args_r[0], arg=0)
+ return hop.genop('oononnull', [v_list], resulttype=ootype.Bool)
class_repr = rclass.get_type_repr(hop.rtyper)
instance_repr = hop.args_r[0]
@@ -55,7 +56,12 @@
c_cls = hop.inputconst(ootype.Void, v_cls.value.class_._INSTANCE)
return hop.genop('instanceof', [v_obj, c_cls], resulttype=ootype.Bool)
else:
- raise TyperError("XXX missing impl of isinstance(x, variable)")
+ return hop.gendirectcall(ll_isinstance, v_obj, v_cls)
+
+def ll_isinstance(inst, meta):
+ c1 = inst.meta.class_
+ c2 = meta.class_
+ return ootype.subclassof(c1, c2)
BUILTIN_TYPER = {}
BUILTIN_TYPER[ootype.new] = rtype_new
Modified: pypy/dist/pypy/rpython/test/test_rbuiltin.py
==============================================================================
--- pypy/dist/pypy/rpython/test/test_rbuiltin.py (original)
+++ pypy/dist/pypy/rpython/test/test_rbuiltin.py Sun Jun 4 15:57:28 2006
@@ -265,7 +265,6 @@
assert res is True
def test_isinstance(self):
- self._skip_oo('isinstance')
class A(object):
pass
class B(A):
@@ -295,7 +294,6 @@
assert res == isinstance([A(), B(), C()][x-1], [A, B, C][y-1]) * 3
def test_isinstance_list(self):
- self._skip_oo('isinstance')
def f(i):
if i == 0:
l = []
More information about the Pypy-commit
mailing list