[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