Author: Carl Friedrich Bolz <[email protected]>
Branch: 
Changeset: r78417:cadcfc72e119
Date: 2015-07-02 18:34 +0200
http://bitbucket.org/pypy/pypy/changeset/cadcfc72e119/

Log:    add get_translation_config function to get at the (implicitly anyway
        global) translation config object

diff --git a/rpython/config/test/test_translationoption.py 
b/rpython/config/test/test_translationoption.py
--- a/rpython/config/test/test_translationoption.py
+++ b/rpython/config/test/test_translationoption.py
@@ -2,6 +2,8 @@
 import py
 from rpython.config.translationoption import get_combined_translation_config
 from rpython.config.translationoption import set_opt_level
+from rpython.config.translationoption import get_translation_config
+from rpython.config import translationoption
 from rpython.config.config import ConflictConfigError, ConfigError
 from rpython.translator.platform import platform as compiler
 
@@ -16,3 +18,23 @@
         config = get_combined_translation_config()
         config.translation.gcrootfinder = "asmgcc"
         py.test.raises(ConfigError, set_opt_level, config, 'jit') 
+
+
+def test_get_translation_config():
+    from rpython.translator.interactive import Translation
+    from rpython.config import config
+    def f(x):
+        config = get_translation_config()
+        if config is not None:
+            return config.translating
+        return False
+
+    t = Translation(f, [int])
+    config = t.config
+
+    # do the patching
+    t.annotate()
+    retvar = t.context.graphs[0].returnblock.inputargs[0]
+    assert t.context.annotator.binding(retvar).const
+
+    assert get_translation_config() is config # check during import time
diff --git a/rpython/config/translationoption.py 
b/rpython/config/translationoption.py
--- a/rpython/config/translationoption.py
+++ b/rpython/config/translationoption.py
@@ -6,6 +6,7 @@
 from rpython.config.support import detect_number_of_processors
 from rpython.translator.platform import platform as compiler
 
+
 DEFL_INLINE_THRESHOLD = 32.4    # just enough to inline add__Int_Int()
 # and just small enough to prevend inlining of some rlist functions.
 
@@ -392,3 +393,16 @@
     opt = config.translation.platform
     cc = config.translation.cc
     return pick_platform(opt, cc)
+
+
+
+# when running a translation, this is patched
+# XXX evil global variable
+_GLOBAL_TRANSLATIONCONFIG = None
+
+
+def get_translation_config():
+    """ Return the translation config when translating. When running
+    un-translated returns None """
+    return _GLOBAL_TRANSLATIONCONFIG
+
diff --git a/rpython/translator/driver.py b/rpython/translator/driver.py
--- a/rpython/translator/driver.py
+++ b/rpython/translator/driver.py
@@ -67,14 +67,16 @@
                  disable=[],
                  exe_name=None, extmod_name=None,
                  config=None, overrides=None):
+        from rpython.config import translationoption
         self.timer = Timer()
         SimpleTaskEngine.__init__(self)
 
         self.log = log
 
         if config is None:
-            from rpython.config.translationoption import 
get_combined_translation_config
-            config = get_combined_translation_config(translating=True)
+            config = 
translationoption.get_combined_translation_config(translating=True)
+        # XXX patch global variable with translation config
+        translationoption._GLOBAL_TRANSLATIONCONFIG = config
         self.config = config
         if overrides is not None:
             self.config.override(overrides)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to