[pypy-svn] r53337 - in pypy/branch/less-meta-instances/pypy/rpython: ootypesystem test
arigo at codespeak.net
arigo at codespeak.net
Fri Apr 4 18:39:35 CEST 2008
Author: arigo
Date: Fri Apr 4 18:39:34 2008
New Revision: 53337
Modified:
pypy/branch/less-meta-instances/pypy/rpython/ootypesystem/rbuiltin.py
pypy/branch/less-meta-instances/pypy/rpython/ootypesystem/rclass.py
pypy/branch/less-meta-instances/pypy/rpython/test/test_rclass.py
Log:
(antocuni, arigo) More small fixes; test_class passes!
Modified: pypy/branch/less-meta-instances/pypy/rpython/ootypesystem/rbuiltin.py
==============================================================================
--- pypy/branch/less-meta-instances/pypy/rpython/ootypesystem/rbuiltin.py (original)
+++ pypy/branch/less-meta-instances/pypy/rpython/ootypesystem/rbuiltin.py Fri Apr 4 18:39:34 2008
@@ -75,15 +75,14 @@
v_obj, v_cls = hop.inputargs(instance_repr, class_repr)
if isinstance(v_cls, Constant):
- c_cls = hop.inputconst(ootype.Void, v_cls.value.class_._INSTANCE)
+ c_cls = hop.inputconst(ootype.Void, v_cls.value._INSTANCE)
return hop.genop('instanceof', [v_obj, c_cls], resulttype=ootype.Bool)
else:
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)
+def ll_isinstance(inst, class_):
+ c1 = ootype.classof(inst)
+ return ootype.subclassof(c1, class_)
def rtype_instantiate(hop):
if hop.args_s[0].is_constant():
Modified: pypy/branch/less-meta-instances/pypy/rpython/ootypesystem/rclass.py
==============================================================================
--- pypy/branch/less-meta-instances/pypy/rpython/ootypesystem/rclass.py (original)
+++ pypy/branch/less-meta-instances/pypy/rpython/ootypesystem/rclass.py Fri Apr 4 18:39:34 2008
@@ -423,14 +423,21 @@
return hop.genop("oosend", [cname, v_inst],
resulttype = hop.r_result.lowleveltype)
elif attr == '__class__':
- if hop.r_result.lowleveltype is ootype.Void:
+ expected_type = hop.r_result.lowleveltype
+ if expected_type is ootype.Void:
# special case for when the result of '.__class__' is constant
[desc] = hop.s_result.descriptions
return hop.inputconst(ootype.Void, desc.pyobj)
+ elif expected_type == ootype.Class:
+ return hop.genop('classof', [v_inst],
+ resulttype = ootype.Class)
else:
- cmeta = inputconst(ootype.Void, "meta")
- return hop.genop('oogetfield', [v_inst, cmeta],
- resulttype=CLASSTYPE)
+ assert expected_type == META
+ _, meth = v_inst.concretetype._lookup('getmeta')
+ assert meth
+ c_getmeta = hop.inputconst(ootype.Void, 'getmeta')
+ return hop.genop('oosend', [c_getmeta, v_inst],
+ resulttype = META)
else:
raise TyperError("no attribute %r on %r" % (attr, self))
Modified: pypy/branch/less-meta-instances/pypy/rpython/test/test_rclass.py
==============================================================================
--- pypy/branch/less-meta-instances/pypy/rpython/test/test_rclass.py (original)
+++ pypy/branch/less-meta-instances/pypy/rpython/test/test_rclass.py Fri Apr 4 18:39:34 2008
@@ -816,8 +816,8 @@
t.buildrtyper(type_system=self.type_system).specialize()
graph = graphof(t, f)
TYPEA = graph.startblock.operations[0].args[0].value
- TYPEB = graph.startblock.operations[2].args[0].value
- TYPEC = graph.startblock.operations[4].args[0].value
+ TYPEB = graph.startblock.operations[1].args[0].value
+ TYPEC = graph.startblock.operations[2].args[0].value
_, destra = TYPEA._lookup("o__del__")
_, destrb = TYPEB._lookup("o__del__")
_, destrc = TYPEC._lookup("o__del__")
More information about the pypy-svn
mailing list