[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