Author: Ronan Lamy <ronan.l...@gmail.com>
Branch: exctrans
Changeset: r81773:98af64007405
Date: 2016-01-14 19:20 +0000
http://bitbucket.org/pypy/pypy/changeset/98af64007405/

Log:    Do the sandbox transform slightly earlier

diff --git a/rpython/translator/c/node.py b/rpython/translator/c/node.py
--- a/rpython/translator/c/node.py
+++ b/rpython/translator/c/node.py
@@ -903,6 +903,20 @@
         funcgen.implementation_end()
 
 def new_funcnode(db, T, obj, forcename=None):
+    sandbox = db.sandbox and need_sandboxing(obj)
+    if sandbox:
+        if hasattr(obj, 'graph') and sandbox != 'if_external':
+            graph = rsandbox.get_external_function_sandbox_graph(
+                obj, db.translator.rtyper)
+            obj.__dict__['graph'] = graph
+            obj.__dict__.pop('_safe_not_sandboxed', None)
+            obj.__dict__.pop('external', None)
+        elif getattr(obj, 'external', None) is not None:
+            obj.__dict__['graph'] = rsandbox.get_sandbox_stub(
+                obj, db.translator.rtyper)
+            obj.__dict__.pop('_safe_not_sandboxed', None)
+            obj.__dict__.pop('external', None)
+
     if forcename:
         name = forcename
     else:
@@ -919,16 +933,6 @@
         return "if_external"
 
 def select_function_code_generators(fnobj, db, functionname):
-    sandbox = db.sandbox and need_sandboxing(fnobj)
-    if sandbox:
-        if hasattr(fnobj, 'graph') and sandbox != 'if_external':
-            graph = rsandbox.get_external_function_sandbox_graph(
-                fnobj, db.translator.rtyper)
-            fnobj.__dict__['graph'] = graph
-        elif getattr(fnobj, 'external', None) is not None:
-            fnobj.__dict__['graph'] = rsandbox.get_sandbox_stub(
-                fnobj, db.translator.rtyper)
-
     if hasattr(fnobj, 'graph'):
         exception_policy = getattr(fnobj, 'exception_policy', None)
         return make_funcgen(fnobj.graph, db, exception_policy, functionname)
@@ -947,8 +951,7 @@
         return obj._callable.c_name
     except AttributeError:
         pass
-    if (getattr(obj, 'external', None) == 'C' and
-            (not db.sandbox or not need_sandboxing(obj))):
+    if getattr(obj, 'external', None) == 'C':
         return obj._name
     return db.namespace.uniquename('g_' + obj._name)
 
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to