Author: Manuel Jacob <[email protected]>
Branch:
Changeset: r81662:dd0391f9a590
Date: 2016-01-11 06:16 +0100
http://bitbucket.org/pypy/pypy/changeset/dd0391f9a590/
Log: Let GraphAnalyzer's analyze_external_call() method take a function
object instead of the call operation.
diff --git a/rpython/jit/codewriter/effectinfo.py
b/rpython/jit/codewriter/effectinfo.py
--- a/rpython/jit/codewriter/effectinfo.py
+++ b/rpython/jit/codewriter/effectinfo.py
@@ -330,15 +330,14 @@
return op.opname == 'jit_force_quasi_immutable'
class RandomEffectsAnalyzer(BoolGraphAnalyzer):
- def analyze_external_call(self, op, seen=None):
+ def analyze_external_call(self, funcobj, seen=None):
try:
- funcobj = op.args[0].value._obj
if funcobj.random_effects_on_gcobjs:
return True
except AttributeError:
return True # better safe than sorry
return super(RandomEffectsAnalyzer, self).analyze_external_call(
- op, seen)
+ funcobj, seen)
def analyze_simple_operation(self, op, graphinfo):
return False
diff --git a/rpython/memory/gctransform/framework.py
b/rpython/memory/gctransform/framework.py
--- a/rpython/memory/gctransform/framework.py
+++ b/rpython/memory/gctransform/framework.py
@@ -35,12 +35,11 @@
return True
return graphanalyze.BoolGraphAnalyzer.analyze_direct_call(self, graph,
seen)
- def analyze_external_call(self, op, seen=None):
- funcobj = op.args[0].value._obj
+ def analyze_external_call(self, funcobj, seen=None):
if getattr(funcobj, 'random_effects_on_gcobjs', False):
return True
- return graphanalyze.BoolGraphAnalyzer.analyze_external_call(self, op,
- seen)
+ return graphanalyze.BoolGraphAnalyzer.analyze_external_call(
+ self, funcobj, seen)
def analyze_simple_operation(self, op, graphinfo):
if op.opname in ('malloc', 'malloc_varsize'):
flags = op.args[1].value
diff --git a/rpython/translator/backendopt/canraise.py
b/rpython/translator/backendopt/canraise.py
--- a/rpython/translator/backendopt/canraise.py
+++ b/rpython/translator/backendopt/canraise.py
@@ -22,8 +22,7 @@
log.WARNING("Unknown operation: %s" % op.opname)
return True
- def analyze_external_call(self, op, seen=None):
- fnobj = op.args[0].value._obj
+ def analyze_external_call(self, fnobj, seen=None):
return getattr(fnobj, 'canraise', True)
analyze_exceptblock = None # don't call this
diff --git a/rpython/translator/backendopt/graphanalyze.py
b/rpython/translator/backendopt/graphanalyze.py
--- a/rpython/translator/backendopt/graphanalyze.py
+++ b/rpython/translator/backendopt/graphanalyze.py
@@ -55,8 +55,7 @@
def analyze_startblock(self, block, seen=None):
return self.bottom_result()
- def analyze_external_call(self, op, seen=None):
- funcobj = op.args[0].value._obj
+ def analyze_external_call(self, funcobj, seen=None):
result = self.bottom_result()
if hasattr(funcobj, '_callbacks'):
bk = self.translator.annotator.bookkeeper
@@ -82,7 +81,7 @@
except DelayedPointer:
return self.top_result()
if getattr(funcobj, 'external', None) is not None:
- x = self.analyze_external_call(op, seen)
+ x = self.analyze_external_call(funcobj, seen)
if self.verbose and x:
self.dump_info('analyze_external_call %s: %r' % (op, x))
return x
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit