Author: Ronan Lamy <ronan.l...@gmail.com>
Branch: 
Changeset: r73899:adb060f6288a
Date: 2014-10-11 02:04 +0100
http://bitbucket.org/pypy/pypy/changeset/adb060f6288a/

Log:    merge ClassesPBCRepr and AbstractClassesPBCRepr

diff --git a/rpython/rtyper/lltypesystem/rpbc.py 
b/rpython/rtyper/lltypesystem/rpbc.py
--- a/rpython/rtyper/lltypesystem/rpbc.py
+++ b/rpython/rtyper/lltypesystem/rpbc.py
@@ -4,12 +4,12 @@
 from rpython.rlib.debug import ll_assert
 from rpython.rlib.unroll import unrolling_iterable
 from rpython.rtyper import callparse
-from rpython.rtyper.lltypesystem import rclass, llmemory
+from rpython.rtyper.lltypesystem import llmemory
 from rpython.rtyper.lltypesystem.lltype import (typeOf, Void, ForwardReference,
     Struct, Bool, Char, Ptr, malloc, nullptr, Array, Signed)
 from rpython.rtyper.rmodel import Repr, inputconst
 from rpython.rtyper.rpbc import (
-    AbstractClassesPBCRepr, AbstractMultipleFrozenPBCRepr,
+    AbstractMultipleFrozenPBCRepr,
     AbstractFunctionsPBCRepr, AbstractMultipleUnrelatedFrozenPBCRepr,
     SingleFrozenPBCRepr, get_concrete_calltable)
 from rpython.rtyper.typesystem import getfunctionptr
@@ -301,45 +301,3 @@
                                resulttype=Char)
         else:
             return v
-
-# ____________________________________________________________
-
-class ClassesPBCRepr(AbstractClassesPBCRepr):
-    """Representation selected for a PBC of class(es)."""
-
-    # no __init__ here, AbstractClassesPBCRepr.__init__ is good enough
-
-    def _instantiate_runtime_class(self, hop, vtypeptr, r_instance):
-        graphs = []
-        for desc in self.s_pbc.descriptions:
-            classdef = desc.getclassdef(None)
-            assert hasattr(classdef, 'my_instantiate_graph')
-            graphs.append(classdef.my_instantiate_graph)
-        c_graphs = hop.inputconst(Void, graphs)
-        #
-        # "my_instantiate = typeptr.instantiate"
-        c_name = hop.inputconst(Void, 'instantiate')
-        v_instantiate = hop.genop('getfield', [vtypeptr, c_name],
-                                 resulttype=rclass.OBJECT_VTABLE.instantiate)
-        # "my_instantiate()"
-        v_inst = hop.genop('indirect_call', [v_instantiate, c_graphs],
-                           resulttype=rclass.OBJECTPTR)
-        return hop.genop('cast_pointer', [v_inst], resulttype=r_instance)
-
-    def getlowleveltype(self):
-        return rclass.CLASSTYPE
-
-    def get_ll_hash_function(self):
-        return ll_cls_hash
-
-    get_ll_fasthash_function = get_ll_hash_function
-
-    def get_ll_eq_function(self):
-        return None
-
-
-def ll_cls_hash(cls):
-    if not cls:
-        return 0
-    else:
-        return cls.hash
diff --git a/rpython/rtyper/rpbc.py b/rpython/rtyper/rpbc.py
--- a/rpython/rtyper/rpbc.py
+++ b/rpython/rtyper/rpbc.py
@@ -4,6 +4,8 @@
 from rpython.flowspace.model import Constant
 from rpython.annotator.argument import simple_args
 from rpython.rtyper import rclass, callparse
+from rpython.rtyper.lltypesystem.rclass import (
+    CLASSTYPE, OBJECT_VTABLE, OBJECTPTR)
 from rpython.rtyper.error import TyperError
 from rpython.rtyper.lltypesystem import lltype
 from rpython.rtyper.rmodel import (Repr, inputconst, CanBeNull, mangle,
@@ -22,7 +24,7 @@
 class __extend__(annmodel.SomePBC):
     def rtyper_makerepr(self, rtyper):
         from rpython.rtyper.lltypesystem.rpbc import (
-            FunctionsPBCRepr, SmallFunctionSetPBCRepr, ClassesPBCRepr)
+            FunctionsPBCRepr, SmallFunctionSetPBCRepr)
         kind = self.getKind()
         if issubclass(kind, description.FunctionDesc):
             sample = self.any_description()
@@ -584,7 +586,7 @@
 
 # ____________________________________________________________
 
-class AbstractClassesPBCRepr(Repr):
+class ClassesPBCRepr(Repr):
     """Representation selected for a PBC of class(es)."""
 
     def __init__(self, rtyper, s_pbc):
@@ -727,8 +729,42 @@
             hop2.dispatch()
         return v_instance
 
+    def _instantiate_runtime_class(self, hop, vtypeptr, r_instance):
+        graphs = []
+        for desc in self.s_pbc.descriptions:
+            classdef = desc.getclassdef(None)
+            assert hasattr(classdef, 'my_instantiate_graph')
+            graphs.append(classdef.my_instantiate_graph)
+        c_graphs = hop.inputconst(lltype.Void, graphs)
+        #
+        # "my_instantiate = typeptr.instantiate"
+        c_name = hop.inputconst(lltype.Void, 'instantiate')
+        v_instantiate = hop.genop('getfield', [vtypeptr, c_name],
+                                 resulttype=OBJECT_VTABLE.instantiate)
+        # "my_instantiate()"
+        v_inst = hop.genop('indirect_call', [v_instantiate, c_graphs],
+                           resulttype=OBJECTPTR)
+        return hop.genop('cast_pointer', [v_inst], resulttype=r_instance)
 
-class __extend__(pairtype(AbstractClassesPBCRepr, rclass.AbstractClassRepr)):
+    def getlowleveltype(self):
+        return CLASSTYPE
+
+    def get_ll_hash_function(self):
+        return ll_cls_hash
+
+    get_ll_fasthash_function = get_ll_hash_function
+
+    def get_ll_eq_function(self):
+        return None
+
+
+def ll_cls_hash(cls):
+    if not cls:
+        return 0
+    else:
+        return cls.hash
+
+class __extend__(pairtype(ClassesPBCRepr, rclass.AbstractClassRepr)):
     def convert_from_to((r_clspbc, r_cls), v, llops):
         # turn a PBC of classes to a standard pointer-to-vtable class repr
         if r_clspbc.lowleveltype == r_cls.lowleveltype:
@@ -738,7 +774,7 @@
         # convert from ptr-to-object-vtable to ptr-to-more-precise-vtable
         return r_cls.fromclasstype(v, llops)
 
-class __extend__(pairtype(AbstractClassesPBCRepr, AbstractClassesPBCRepr)):
+class __extend__(pairtype(ClassesPBCRepr, ClassesPBCRepr)):
     def convert_from_to((r_clspbc1, r_clspbc2), v, llops):
         # this check makes sense because both source and dest repr are 
ClassesPBCRepr
         if r_clspbc1.lowleveltype == r_clspbc2.lowleveltype:
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to