[pypy-svn] r35394 - in pypy/dist/pypy: annotation config objspace/flow objspace/flow/test rpython tool translator translator/c translator/c/test translator/tool

arigo at codespeak.net arigo at codespeak.net
Wed Dec 6 15:10:05 CET 2006


Author: arigo
Date: Wed Dec  6 15:09:59 2006
New Revision: 35394

Modified:
   pypy/dist/pypy/annotation/policy.py
   pypy/dist/pypy/config/translationoption.py
   pypy/dist/pypy/objspace/flow/flowcontext.py
   pypy/dist/pypy/objspace/flow/objspace.py
   pypy/dist/pypy/objspace/flow/specialcase.py
   pypy/dist/pypy/objspace/flow/test/test_objspace.py
   pypy/dist/pypy/rpython/annlowlevel.py
   pypy/dist/pypy/tool/error.py
   pypy/dist/pypy/translator/c/support.py
   pypy/dist/pypy/translator/c/test/test_wrapping.py
   pypy/dist/pypy/translator/c/wrapper.py
   pypy/dist/pypy/translator/geninterplevel.py
   pypy/dist/pypy/translator/tool/raymond.py
   pypy/dist/pypy/translator/translator.py
Log:
(pedronis, arigo)

Whack whack whack.  'do_imports_immediately' makes no sense as a
translation config, because sub-annotations with different policies
(e.g. the annlowlevel ones) must use the default True, or they crash.
So move it as an annotator policy flag.  But then geninterp has no
annotator policy, so hack a bit more for that case.

Fun fun fun.

Fix some more stuff in test_wrapping and raymond.  Fix c/wrapper to cope
with the extra genop checks.  Fix something that broke because of that.
It also seems that our default gcpolicy is not refcounting any more, not
sure why.  Show the space operation in the "annotation degenerated to
SomeObject()" message.



Modified: pypy/dist/pypy/annotation/policy.py
==============================================================================
--- pypy/dist/pypy/annotation/policy.py	(original)
+++ pypy/dist/pypy/annotation/policy.py	Wed Dec  6 15:09:59 2006
@@ -29,8 +29,8 @@
 
     def _adjust_space_config(self, space):
         # allow to override space options.
-        if getattr(self, 'override_do_imports_immediately', None) is not None:
-            space.do_imports_immediately = self.override_do_imports_immediately
+        if getattr(self, 'do_imports_immediately', None) is not None:
+            space.do_imports_immediately = self.do_imports_immediately
 
 class AnnotatorPolicy(BasicAnnotatorPolicy):
     """

Modified: pypy/dist/pypy/config/translationoption.py
==============================================================================
--- pypy/dist/pypy/config/translationoption.py	(original)
+++ pypy/dist/pypy/config/translationoption.py	Wed Dec  6 15:09:59 2006
@@ -68,8 +68,6 @@
 
     # Flags of the TranslationContext:
     BoolOption("simplifying", "Simplify flow graphs", default=True),
-    BoolOption("do_imports_immediately", "XXX", default=True,
-               cmdline=None),
     BoolOption("builtins_can_raise_exceptions", "XXX", default=False,
                cmdline=None),
     BoolOption("list_comprehension_operations", "XXX", default=False,

Modified: pypy/dist/pypy/objspace/flow/flowcontext.py
==============================================================================
--- pypy/dist/pypy/objspace/flow/flowcontext.py	(original)
+++ pypy/dist/pypy/objspace/flow/flowcontext.py	Wed Dec  6 15:09:59 2006
@@ -281,7 +281,7 @@
 
             except OperationError, e:
                 #print "OE", e.w_type, e.w_value
-                if (self.space.config.translation.do_imports_immediately and
+                if (self.space.do_imports_immediately and
                     e.w_type is self.space.w_ImportError):
                     raise ImportError('import statement always raises %s' % (
                         e,))

Modified: pypy/dist/pypy/objspace/flow/objspace.py
==============================================================================
--- pypy/dist/pypy/objspace/flow/objspace.py	(original)
+++ pypy/dist/pypy/objspace/flow/objspace.py	Wed Dec  6 15:09:59 2006
@@ -33,6 +33,7 @@
     """
     
     full_exceptions = False
+    do_imports_immediately = True
 
     def initialize(self):
         import __builtin__

Modified: pypy/dist/pypy/objspace/flow/specialcase.py
==============================================================================
--- pypy/dist/pypy/objspace/flow/specialcase.py	(original)
+++ pypy/dist/pypy/objspace/flow/specialcase.py	Wed Dec  6 15:09:59 2006
@@ -11,7 +11,7 @@
         # import * in a function gives us the locals as Variable
         # we always forbid it as a SyntaxError
         raise SyntaxError, "RPython: import * is not allowed in functions"
-    if space.config.translation.do_imports_immediately:
+    if space.do_imports_immediately:
         name, glob, loc, frm = (space.unwrap(w_name), space.unwrap(w_glob),
                                 space.unwrap(w_loc), space.unwrap(w_frm))
         try:

Modified: pypy/dist/pypy/objspace/flow/test/test_objspace.py
==============================================================================
--- pypy/dist/pypy/objspace/flow/test/test_objspace.py	(original)
+++ pypy/dist/pypy/objspace/flow/test/test_objspace.py	Wed Dec  6 15:09:59 2006
@@ -715,7 +715,7 @@
 class TestFlowObjSpaceDelay(Base):
     def setup_class(cls):
         cls.space = FlowObjSpace()
-        cls.space.config.translation.do_imports_immediately = False
+        cls.space.do_imports_immediately = False
 
     def test_import_something(self):
         def f():

Modified: pypy/dist/pypy/rpython/annlowlevel.py
==============================================================================
--- pypy/dist/pypy/rpython/annlowlevel.py	(original)
+++ pypy/dist/pypy/rpython/annlowlevel.py	Wed Dec  6 15:09:59 2006
@@ -34,8 +34,6 @@
 
 class LowLevelAnnotatorPolicy(AnnotatorPolicy):
     allow_someobjects = False
-    # if this exists and is boolean, then it always wins:
-    override_do_imports_immediately = True
 
     def __init__(pol, rtyper=None):
         pol.rtyper = rtyper

Modified: pypy/dist/pypy/tool/error.py
==============================================================================
--- pypy/dist/pypy/tool/error.py	(original)
+++ pypy/dist/pypy/tool/error.py	Wed Dec  6 15:09:59 2006
@@ -104,6 +104,9 @@
     msg = ["annotation of %r degenerated to SomeObject()" % (what,)]
     if position_key is not None:
         graph, block, operindex = position_key
+        oper = block.operations[operindex]
+        msg.append(str(oper))
+        msg.append('')
         msg += source_lines(graph, block, operindex, long=True)
         
     if called_from_graph is not None:

Modified: pypy/dist/pypy/translator/c/support.py
==============================================================================
--- pypy/dist/pypy/translator/c/support.py	(original)
+++ pypy/dist/pypy/translator/c/support.py	Wed Dec  6 15:09:59 2006
@@ -7,6 +7,8 @@
 #
 USESLOTS = True
 
+PyObjPtr = lltype.Ptr(lltype.PyObject)
+
 
 class ErrorValue:
     def __init__(self, TYPE):
@@ -48,6 +50,8 @@
     try:
         T = c.concretetype
     except AttributeError:
+        T = PyObjPtr
+    if T == PyObjPtr and not isinstance(c.value, lltype._ptr):
         return lltype.pyobjectptr(c.value)
     else:
         if T == lltype.Void:

Modified: pypy/dist/pypy/translator/c/test/test_wrapping.py
==============================================================================

Modified: pypy/dist/pypy/translator/c/wrapper.py
==============================================================================
--- pypy/dist/pypy/translator/c/wrapper.py	(original)
+++ pypy/dist/pypy/translator/c/wrapper.py	Wed Dec  6 15:09:59 2006
@@ -54,7 +54,7 @@
     vself = Variable('self')
     vargs = Variable('args')
     vkwds = Variable('kwds')
-    vfname = Constant(func.func_name)
+    vfname = Constant(func.func_name, PyObjPtr)
     # avoid incref/decref on the arguments: 'self' and 'kwds' can be NULL
     vself.concretetype = PyObjPtr
     vargs.concretetype = PyObjPtr
@@ -71,7 +71,7 @@
         # "argument_i = decode_arg_def(fname, i, name, vargs, vkwds, default)"
         vlist = [vfname,
                  inputconst(Signed, i),
-                 Constant(varnames[i]),
+                 Constant(varnames[i], PyObjPtr),
                  vargs,
                  vkwds]
         try:
@@ -80,19 +80,19 @@
             opname = 'decode_arg'
         else:
             opname = 'decode_arg_def'
-            vlist.append(Constant(default_value))
+            vlist.append(Constant(default_value, PyObjPtr))
 
-        v = newops.genop(opname, vlist, resulttype=Ptr(PyObject))
+        v = newops.genop(opname, vlist, resulttype=PyObjPtr)
         #v.set_name('a', i)
         varguments.append(v)
 
     if vararg:
         # "vararg = vargs[n:]"
         vlist = [vargs,
-                 Constant(nb_positional_args),
-                 Constant(None),
+                 Constant(nb_positional_args, PyObjPtr),
+                 Constant(None, PyObjPtr),
                  ]
-        vararg = newops.genop('getslice', vlist, resulttype=Ptr(PyObject))
+        vararg = newops.genop('getslice', vlist, resulttype=PyObjPtr)
         #vararg.set_name('vararg', 0)
         varguments.append(vararg)
     else:
@@ -172,6 +172,9 @@
     newops = LowLevelOpList(translator.rtyper)
 
     callargs = graph.getargs()[:]
+    for v in callargs:
+        if not hasattr(v, 'concretetype'):
+            v.concretetype = PyObjPtr
     v_self_old = callargs.pop(0)
     v_self = Variable(v_self_old.name)
     binding = SomeInstance(clsdef)

Modified: pypy/dist/pypy/translator/geninterplevel.py
==============================================================================
--- pypy/dist/pypy/translator/geninterplevel.py	(original)
+++ pypy/dist/pypy/translator/geninterplevel.py	Wed Dec  6 15:09:59 2006
@@ -1495,9 +1495,9 @@
 
         entrypoint = dic
         t = TranslationContext(verbose=False, simplifying=True,
-                               do_imports_immediately=do_imports_immediately,
                                builtins_can_raise_exceptions=True,
                                list_comprehension_operations=False)
+        t.no_annotator_but_do_imports_immediately = do_imports_immediately
         gen = GenRpy(t, entrypoint, modname, dic)
 
     finally:

Modified: pypy/dist/pypy/translator/tool/raymond.py
==============================================================================
--- pypy/dist/pypy/translator/tool/raymond.py	(original)
+++ pypy/dist/pypy/translator/tool/raymond.py	Wed Dec  6 15:09:59 2006
@@ -3,6 +3,7 @@
 from py.test import raises
 from pypy.rpython.extregistry import ExtRegistryEntry
 from pypy.annotation import model as annmodel
+from pypy.annotation.policy import AnnotatorPolicy
 from pypy.rpython.lltypesystem import lltype
 from pypy.rpython import robject, rclass, rint
 from pypy.translator.tool.cbuild import enable_fast_compilation
@@ -12,6 +13,10 @@
 
 P = False  # debug printing
 
+class RaymondAnnotatorPolicy(AnnotatorPolicy):
+    allow_someobjects = True
+    do_imports_immediately = False
+
 SPECIAL_METHODS = {}
 
 def setup_special_methods():
@@ -69,7 +74,7 @@
 
     global _t # allow us to view later
     _t = t = TranslationContext(do_imports_immediately=False)
-    ann = t.buildannotator()
+    ann = t.buildannotator(policy=RaymondAnnotatorPolicy())
     rtyper = t.buildrtyper()
     bk = rtyper.annotator.bookkeeper
     if not exports:
@@ -124,7 +129,7 @@
         t.viewcg()
     t.checkgraphs()
 
-    gcpolicy = None
+    gcpolicy = gc.RefcountingGcPolicy
     if use_boehm:
         gcpolicy = gc.BoehmGcPolicy
 
@@ -132,7 +137,7 @@
     if view:
         t.viewcg()
 
-    cbuilder = CExtModuleBuilder(t, func, gcpolicy=gcpolicy)
+    cbuilder = CExtModuleBuilder(t, func, config=t.config, gcpolicy=gcpolicy)
     # explicit build of database
     db = cbuilder.build_database(exports=exports, pyobj_options=pyobj_options)
     cbuilder.generate_source(db)

Modified: pypy/dist/pypy/translator/translator.py
==============================================================================
--- pypy/dist/pypy/translator/translator.py	(original)
+++ pypy/dist/pypy/translator/translator.py	Wed Dec  6 15:09:59 2006
@@ -21,7 +21,6 @@
     FLOWING_FLAGS = {
         'verbose': False,
         'simplifying': True,
-        'do_imports_immediately': True,
         'builtins_can_raise_exceptions': False,
         'list_comprehension_operations': False,   # True, - not super-tested
         }
@@ -31,7 +30,7 @@
             from pypy.config.pypyoption import get_pypy_config
             config = get_pypy_config(translating=True)
         # ZZZ should go away in the end
-        for attr in ['verbose', 'simplifying', 'do_imports_immediately',
+        for attr in ['verbose', 'simplifying',
                      'builtins_can_raise_exceptions',
                      'list_comprehension_operations']:
             if attr in flowing_flags:
@@ -72,6 +71,9 @@
             if self.annotator:
                 # ZZZ
                 self.annotator.policy._adjust_space_config(space)
+            elif hasattr(self, 'no_annotator_but_do_imports_immediately'):
+                space.do_imports_immediately = (
+                    self.no_annotator_but_do_imports_immediately)
             graph = space.build_flow(func)
             if self.config.translation.simplifying:
                 simplify.simplify_graph(graph)



More information about the Pypy-commit mailing list