[pypy-svn] r4769 - pypy/trunk/src/pypy/translator

ale at codespeak.net ale at codespeak.net
Mon May 31 17:51:46 CEST 2004


Author: ale
Date: Mon May 31 17:51:46 2004
New Revision: 4769

Modified:
   pypy/trunk/src/pypy/translator/genpyrex.py
Log:
Methods maybe works

Modified: pypy/trunk/src/pypy/translator/genpyrex.py
==============================================================================
--- pypy/trunk/src/pypy/translator/genpyrex.py	(original)
+++ pypy/trunk/src/pypy/translator/genpyrex.py	Mon May 31 17:51:46 2004
@@ -6,6 +6,7 @@
 from pypy.objspace.flow.model import Variable, Constant, UndefinedConstant
 from pypy.objspace.flow.model import mkentrymap
 from pypy.translator.annrpython import RPythonAnnotator
+from pypy.annotation.model import SomeMethod
 
 class Op:
     def __init__(self, operation, gen, block):
@@ -330,11 +331,12 @@
 
         self.gen_block(block)
 
-    def globaldeclarations(self):
+    def globaldeclarations(self,):
         """Generate the global class declaration for a group of functions."""
         if self.annotator:
             self.lines = []
             self.indent = 0
+            delay_methods={}
             for cls in self.annotator.getuserclassdefinitions():
                 if cls.basedef:
                     bdef="(%s)" % (self.get_classname(cls.basedef.cls))
@@ -344,12 +346,21 @@
                 self.indent += 1
                 empty = True
                 for attr,s_value in cls.attrs.items():
-                    vartype=self._gettypename(s_value.knowntype)
-                    self.putline("cdef public %s %s" % (vartype, attr))
+                    if isinstance(s_value,SomeMethod):
+                        for py_fun,fun_class in s_value.meths.items():
+                            delay_methods.setdefault(fun_class,[]).append(py_fun)                          
+                    else:
+                        vartype=self._gettypename(s_value.knowntype)
+                        self.putline("cdef public %s %s" % (vartype, attr))
                     empty = False
-                else:
-                    if empty:
-                        self.putline("pass")
+                list_methods=delay_methods.get(cls,[])
+                for py_fun in list_methods:
+                    self.putline("def %s(*args):" % (self._str(py_fun,'XXX')))
+                    self.indent += 1
+                    self.putline("return %s(*args)" %(self._str(py_fun,'XXX')))
+                    self.indent -= 1
+                if empty:
+                    self.putline("pass")
                 self.indent -= 1
                 self.putline("")
             return '\n'.join(self.lines)



More information about the Pypy-commit mailing list