Author: Armin Rigo <[email protected]>
Branch:
Changeset: r47286:1ffcf2cd905f
Date: 2011-09-16 12:43 +0200
http://bitbucket.org/pypy/pypy/changeset/1ffcf2cd905f/
Log: Translation fix
diff --git a/pypy/rpython/memory/gctransform/asmgcroot.py
b/pypy/rpython/memory/gctransform/asmgcroot.py
--- a/pypy/rpython/memory/gctransform/asmgcroot.py
+++ b/pypy/rpython/memory/gctransform/asmgcroot.py
@@ -663,4 +663,5 @@
QSORT_CALLBACK_PTR],
lltype.Void,
sandboxsafe=True,
+ random_effects_on_gcobjs=False, # but has a callback
_nowrapper=True)
diff --git a/pypy/translator/backendopt/graphanalyze.py
b/pypy/translator/backendopt/graphanalyze.py
--- a/pypy/translator/backendopt/graphanalyze.py
+++ b/pypy/translator/backendopt/graphanalyze.py
@@ -3,6 +3,8 @@
from pypy.rpython.lltypesystem import lltype
class GraphAnalyzer(object):
+ verbose = False
+
def __init__(self, translator):
self.translator = translator
self.analyzed_calls = {}
@@ -71,12 +73,24 @@
if op.opname == "direct_call":
graph = get_graph(op.args[0], self.translator)
if graph is None:
- return self.analyze_external_call(op, seen)
- return self.analyze_direct_call(graph, seen)
+ x = self.analyze_external_call(op, seen)
+ if self.verbose and x:
+ print '\tanalyze_external_call %s: %r' % (op, x)
+ return x
+ x = self.analyze_direct_call(graph, seen)
+ if self.verbose and x:
+ print '\tanalyze_direct_call(%s): %r' % (graph, x)
+ return x
elif op.opname == "indirect_call":
- if op.args[-1].value is None:
+ graphs = op.args[-1].value
+ if graphs is None:
+ if self.verbose:
+ print '\t%s to unknown' % (op,)
return self.top_result()
- return self.analyze_indirect_call(op.args[-1].value, seen)
+ x = self.analyze_indirect_call(graphs, seen)
+ if self.verbose and x:
+ print '\tanalyze_indirect_call(%s): %r' % (graphs, x)
+ return x
elif op.opname == "oosend":
name = op.args[0].value
TYPE = op.args[1].concretetype
@@ -85,7 +99,10 @@
if graph is None:
return self.analyze_external_method(op, TYPE, meth)
return self.analyze_oosend(TYPE, name, seen)
- return self.analyze_simple_operation(op, graphinfo)
+ x = self.analyze_simple_operation(op, graphinfo)
+ if self.verbose and x:
+ print '\t%s: %r' % (op, x)
+ return x
def analyze_direct_call(self, graph, seen=None):
if graph in self.analyzed_calls:
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit