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

Reply via email to