[pypy-svn] r20364 - in pypy/branch/somepbc-refactoring/pypy/translator/c: . test

mwh at codespeak.net mwh at codespeak.net
Mon Nov 28 18:27:41 CET 2005


Author: mwh
Date: Mon Nov 28 18:27:39 2005
New Revision: 20364

Modified:
   pypy/branch/somepbc-refactoring/pypy/translator/c/extfunc.py
   pypy/branch/somepbc-refactoring/pypy/translator/c/genc.py
   pypy/branch/somepbc-refactoring/pypy/translator/c/pyobj.py
   pypy/branch/somepbc-refactoring/pypy/translator/c/test/test_annotated.py
   pypy/branch/somepbc-refactoring/pypy/translator/c/wrapper.py
Log:
test_annotated passes again, though this is pretty much a 'hack-until-it-
passes' approach.


Modified: pypy/branch/somepbc-refactoring/pypy/translator/c/extfunc.py
==============================================================================
--- pypy/branch/somepbc-refactoring/pypy/translator/c/extfunc.py	(original)
+++ pypy/branch/somepbc-refactoring/pypy/translator/c/extfunc.py	Mon Nov 28 18:27:39 2005
@@ -1,7 +1,6 @@
 import types
 from pypy.rpython.lltypesystem import lltype
 from pypy.translator.c.support import cdecl
-from pypy.rpython.rmodel import getfunctionptr
 from pypy.rpython.rstr import STR
 from pypy.rpython import rlist
 from pypy.rpython.module import ll_os, ll_time, ll_math, ll_strtod
@@ -9,7 +8,6 @@
 from pypy.module.thread.rpython import ll_thread
 from pypy.module._socket.rpython import ll__socket
 
-
 # table of functions hand-written in src/ll_*.h
 EXTERNALS = {
     ll_os  .ll_os_open:    'LL_os_open',

Modified: pypy/branch/somepbc-refactoring/pypy/translator/c/genc.py
==============================================================================
--- pypy/branch/somepbc-refactoring/pypy/translator/c/genc.py	(original)
+++ pypy/branch/somepbc-refactoring/pypy/translator/c/genc.py	Mon Nov 28 18:27:39 2005
@@ -7,7 +7,6 @@
 from pypy.translator.tool.cbuild import compile_c_module
 from pypy.translator.tool.cbuild import build_executable, CCompiler
 from pypy.translator.tool.cbuild import import_module_from_directory
-from pypy.rpython.rmodel import getfunctionptr
 from pypy.rpython.lltypesystem import lltype
 from pypy.tool.udir import udir
 from pypy.translator.locality.calltree import CallTree
@@ -19,8 +18,9 @@
     symboltable = None
     stackless = False
     
-    def __init__(self, translator, gcpolicy=None, libraries=None, thread_enabled=False):
+    def __init__(self, translator, entrypoint, gcpolicy=None, libraries=None, thread_enabled=False):
         self.translator = translator
+        self.entrypoint = entrypoint
         self.gcpolicy = gcpolicy
         self.thread_enabled = thread_enabled
 
@@ -67,7 +67,7 @@
             self.symboltable = SymbolTable()
             cfile, extra = gen_source(db, modulename, targetdir,
                                       defines = defines,
-                                      exports = {translator.entrypoint.func_name: pf},
+                                      exports = {self.entrypoint.func_name: pf},
                                       symboltable = self.symboltable)
         else:
             if self.stackless:
@@ -87,7 +87,7 @@
     c_ext_module = None 
 
     def getentrypointptr(self):
-        return lltype.pyobjectptr(self.translator.entrypoint)
+        return lltype.pyobjectptr(self.entrypoint)
 
     def compile(self):
         assert self.c_source_filename 
@@ -111,7 +111,7 @@
     def get_entry_point(self):
         assert self.c_ext_module 
         return getattr(self.c_ext_module, 
-                       self.translator.entrypoint.func_name)
+                       self.entrypoint.func_name)
 
 
 class CStandaloneBuilder(CBuilder):
@@ -121,7 +121,7 @@
     def getentrypointptr(self):
         # XXX check that the entrypoint has the correct
         # signature:  list-of-strings -> int
-        return getfunctionptr(self.translator, self.translator.entrypoint)
+        return getfunctionptr(self.translator, self.entrypoint)
 
     def getccompiler(self, extra_includes):
         # XXX for now, we always include Python.h
@@ -186,8 +186,8 @@
         f.close()
 
 
-def translator2database(translator):
-    pf = lltype.pyobjectptr(translator.entrypoint)
+def translator2database(translator, entrypoint):
+    pf = lltype.pyobjectptr(entrypoint)
     db = LowLevelDatabase(translator)
     db.get(pf)
     db.complete()

Modified: pypy/branch/somepbc-refactoring/pypy/translator/c/pyobj.py
==============================================================================
--- pypy/branch/somepbc-refactoring/pypy/translator/c/pyobj.py	(original)
+++ pypy/branch/somepbc-refactoring/pypy/translator/c/pyobj.py	Mon Nov 28 18:27:39 2005
@@ -165,13 +165,11 @@
             "the Translator must be specified to build a PyObject "
             "wrapper for %r" % (func,))
         # look for skipped functions
-        if self.translator.frozen:
-            if func not in self.translator.flowgraphs:
-                return self.skipped_function(func)
-        else:
-            if (func.func_doc and
-                func.func_doc.lstrip().startswith('NOT_RPYTHON')):
-                return self.skipped_function(func)
+        if not self.translator.annotator.bookkeeper.getdesc(func).querycallfamily():
+            return self.skipped_function(func)
+        if (func.func_doc and
+            func.func_doc.lstrip().startswith('NOT_RPYTHON')):
+            return self.skipped_function(func)
 
         from pypy.translator.c.wrapper import gen_wrapper
         fwrapper = gen_wrapper(func, self.translator)
@@ -210,7 +208,7 @@
                 return False
             else:
                 return "probably"   # True
-        classdef = ann.getuserclasses().get(pbc.__class__)
+        classdef = ann.bookkeeper.immutablevalue(pbc).classdef
         if classdef and classdef.about_attribute(attr) is not None:
             return True
         return False
@@ -320,7 +318,8 @@
                     doc = value.__get__(cls).__doc__
                     if doc and doc.lstrip().startswith("NOT_RPYTHON"):
                         continue
-                if isinstance(value, FunctionType) and value not in self.translator.flowgraphs and self.translator.frozen:
+                bk = self.translator.annotator.bookkeeper
+                if isinstance(value, FunctionType) and not bk.getdesc(value).querycallfamily():
                     log.WARNING("skipped class function: %s" % value)
                     continue
                 if key in ignore:

Modified: pypy/branch/somepbc-refactoring/pypy/translator/c/test/test_annotated.py
==============================================================================
--- pypy/branch/somepbc-refactoring/pypy/translator/c/test/test_annotated.py	(original)
+++ pypy/branch/somepbc-refactoring/pypy/translator/c/test/test_annotated.py	Mon Nov 28 18:27:39 2005
@@ -1,7 +1,7 @@
 import autopath
 import py, sys
 from pypy.translator.tool.cbuild import skip_missing_compiler
-from pypy.translator.translator import Translator
+from pypy.translator.translator import TranslationContext
 
 from pypy.translator.test import snippet 
 
@@ -12,7 +12,7 @@
 class TestAnnotatedTestCase:
 
     def getcompiled(self, func):
-        t = Translator(func, simplifying=True)
+        t = TranslationContext(simplifying=True)
         # builds starting-types from func_defs 
         argstypelist = []
         if func.func_defaults:
@@ -20,9 +20,15 @@
                 if isinstance(spec, tuple):
                     spec = spec[0] # use the first type only for the tests
                 argstypelist.append(spec)
-        a = t.annotate(argstypelist)
+        a = t.buildannotator()
+        a.build_types(func, argstypelist)
         a.simplify()
-        return skip_missing_compiler(t.ccompile)
+        from pypy.translator.c import genc
+        builder = genc.CExtModuleBuilder(t, func)
+        builder.generate_source()
+        skip_missing_compiler(builder.compile)
+        builder.import_module()
+        return builder.get_entry_point()
 
     def test_set_attr(self):
         set_attr = self.getcompiled(snippet.set_attr)

Modified: pypy/branch/somepbc-refactoring/pypy/translator/c/wrapper.py
==============================================================================
--- pypy/branch/somepbc-refactoring/pypy/translator/c/wrapper.py	(original)
+++ pypy/branch/somepbc-refactoring/pypy/translator/c/wrapper.py	Mon Nov 28 18:27:39 2005
@@ -3,11 +3,15 @@
 from pypy.rpython.lltypesystem.lltype import \
      Ptr, PyObject, typeOf, Signed, FuncType, functionptr
 from pypy.rpython.rtyper import LowLevelOpList
-from pypy.rpython.rmodel import inputconst, getfunctionptr, PyObjPtr
+from pypy.rpython.rmodel import inputconst, PyObjPtr
 from pypy.rpython.robject import pyobj_repr
 from pypy.interpreter.pycode import CO_VARARGS
 
 
+from pypy.rpython.typesystem import LowLevelTypeSystem
+getfunctionptr = LowLevelTypeSystem.instance.getcallable
+
+
 def gen_wrapper(func, translator):
     """generate a wrapper function for 'func' that can be put in a
     PyCFunction object.  The wrapper has signature
@@ -22,7 +26,9 @@
     nb_positional_args = func.func_code.co_argcount
     vararg = bool(func.func_code.co_flags & CO_VARARGS)
 
-    f = getfunctionptr(translator, func)
+    bk = translator.annotator.bookkeeper
+
+    f = getfunctionptr(bk.getdesc(func).cachedgraph(None))
     FUNCTYPE = typeOf(f).TO
     assert len(FUNCTYPE.ARGS) == nb_positional_args + vararg
 



More information about the Pypy-commit mailing list