[pypy-svn] r23081 - pypy/dist/pypy/rpython/memory

cfbolz at codespeak.net cfbolz at codespeak.net
Tue Feb 7 02:01:10 CET 2006


Author: cfbolz
Date: Tue Feb  7 02:01:08 2006
New Revision: 23081

Modified:
   pypy/dist/pypy/rpython/memory/gctransform.py
Log:
some cleanups


Modified: pypy/dist/pypy/rpython/memory/gctransform.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/gctransform.py	(original)
+++ pypy/dist/pypy/rpython/memory/gctransform.py	Tue Feb  7 02:01:08 2006
@@ -237,6 +237,14 @@
         result.append(op)
         return result
 
+    def get_rtti(self, TYPE):
+        if isinstance(TYPE, lltype.Struct):
+            try:
+                return lltype.getRuntimeTypeInfo(TYPE)
+            except ValueError:
+                pass
+        return None
+
     def _static_deallocator_body_for_type(self, v, TYPE, depth=1):
         if isinstance(TYPE, lltype.Array):
             
@@ -278,17 +286,11 @@
         destroy.compute_ll_ops = compute_destroy_ll_ops
         destroy.llresult = lltype.Void
 
-        destrptr = None
-        
-        if isinstance(TYPE, lltype.Struct):
-            rtti = None
-            try:
-                rtti = lltype.getRuntimeTypeInfo(TYPE)
-            except ValueError:
-                pass
-            if rtti is not None:
-                if hasattr(rtti._obj, 'destructor_funcptr'):
-                    destrptr = rtti._obj.destructor_funcptr
+        rtti = self.get_rtti(TYPE) 
+        if rtti is not None and hasattr(rtti._obj, 'destructor_funcptr'):
+            destrptr = rtti._obj.destructor_funcptr
+        else:
+            destrptr = None
 
         if destrptr is not None:
             const_destrptr = Constant(destrptr)
@@ -346,29 +348,20 @@
         else:
             self.static_deallocator_graphs[TYPE] = g
             return g
-            
+    
     def decref_graph_for_type(self, TYPE):
         if TYPE in self.decref_graphs:
             return self.decref_graphs[TYPE]
-        if isinstance(TYPE, lltype.GcArray):
+        need_dynamic_destructor = False
+        rtti = self.get_rtti(TYPE)
+        if rtti is None:
             need_dynamic_destructor = False
-        if isinstance(TYPE, lltype.GcStruct):
-            rtti = None
-            try:
-                rtti = lltype.getRuntimeTypeInfo(TYPE)
-            except ValueError:
-                pass
-            if rtti is None:
-                need_dynamic_destructor = False
-            else:
-                need_dynamic_destructor = True
+        else:
+            need_dynamic_destructor = True
         if not need_dynamic_destructor:
-            return self._decref_graph_for_type_static(TYPE)
+            graph = self.static_deallocation_graph_for_type(TYPE)
         else:
-            return self._decref_graph_for_type_dynamic(TYPE)
-
-    def _decref_graph_for_type_static(self, TYPE):
-        graph = self.static_deallocation_graph_for_type(TYPE)
+            graph = self.dynamic_deallocation_graph_for_type(TYPE)
         def compute_destructor_ll_ops(hop):
             assert hop.args_v[1].concretetype.TO == TYPE
             return hop.genop("direct_call",
@@ -392,9 +385,6 @@
         self.decref_graphs[TYPE] = g
         return g
 
-    def _decref_graph_for_type_dynamic(self, TYPE):
-        pass
-
 def varoftype(concretetype):
     var = Variable()
     var.concretetype = concretetype



More information about the Pypy-commit mailing list