Author: Antonio Cuni <[email protected]>
Branch: gc-hooks
Changeset: r94224:b853aac49cd8
Date: 2018-04-04 01:11 +0200
http://bitbucket.org/pypy/pypy/changeset/b853aac49cd8/

Log:    refactor to avoid the ugly 'gchooks' global prebuilt variable. Now
        we can simply use space.fromcache to get the singleton

diff --git a/pypy/goal/targetpypystandalone.py 
b/pypy/goal/targetpypystandalone.py
--- a/pypy/goal/targetpypystandalone.py
+++ b/pypy/goal/targetpypystandalone.py
@@ -215,6 +215,7 @@
     usage = SUPPRESS_USAGE
 
     take_options = True
+    space = None
 
     def opt_parser(self, config):
         parser = to_optparse(config, useoptions=["objspace.*"],
@@ -365,18 +366,20 @@
         return PyPyJitPolicy(pypy_hooks)
 
     def get_gchooks(self):
-        from pypy.module.gc.hook import gchooks
-        return gchooks
+        from pypy.module.gc.hook import LowLevelGcHooks
+        if self.space is None:
+            raise Exception("get_gchooks must be called afeter 
get_entry_point")
+        return self.space.fromcache(LowLevelGcHooks)
 
     def get_entry_point(self, config):
-        space = make_objspace(config)
+        self.space = make_objspace(config)
 
         # manually imports app_main.py
         filename = os.path.join(pypydir, 'interpreter', 'app_main.py')
         app = gateway.applevel(open(filename).read(), 'app_main.py', 
'app_main')
         app.hidden_applevel = False
-        w_dict = app.getwdict(space)
-        entry_point, _ = create_entry_point(space, w_dict)
+        w_dict = app.getwdict(self.space)
+        entry_point, _ = create_entry_point(self.space, w_dict)
 
         return entry_point, None, PyPyAnnotatorPolicy()
 
@@ -385,7 +388,7 @@
                      'jitpolicy', 'get_entry_point',
                      'get_additional_config_options']:
             ns[name] = getattr(self, name)
-        ns['gchooks'] = self.get_gchooks()
+        ns['get_gchooks'] = self.get_gchooks
 
 PyPyTarget().interface(globals())
 
diff --git a/pypy/module/gc/__init__.py b/pypy/module/gc/__init__.py
--- a/pypy/module/gc/__init__.py
+++ b/pypy/module/gc/__init__.py
@@ -37,7 +37,3 @@
                 'set_hooks': 'hook.set_hooks',
                 })
         MixedModule.__init__(self, space, w_name)
-
-    def setup_after_space_initialization(self):
-        from pypy.module.gc.hook import gchooks
-        gchooks.setspace(self.space)
diff --git a/pypy/module/gc/hook.py b/pypy/module/gc/hook.py
--- a/pypy/module/gc/hook.py
+++ b/pypy/module/gc/hook.py
@@ -8,7 +8,7 @@
 
 class LowLevelGcHooks(GcHooks):
 
-    def setspace(self, space):
+    def __init__(self, space):
         self.space = space
         self.hooks = space.fromcache(AppLevelHooks)
 
@@ -30,8 +30,6 @@
         pass
 
 
-gchooks = LowLevelGcHooks()
-
 class AppLevelHooks(object):
 
     def __init__(self, space):
diff --git a/pypy/module/gc/test/test_hook.py b/pypy/module/gc/test/test_hook.py
--- a/pypy/module/gc/test/test_hook.py
+++ b/pypy/module/gc/test/test_hook.py
@@ -1,5 +1,5 @@
 from rpython.rlib.rarithmetic import r_uint
-from pypy.module.gc.hook import gchooks
+from pypy.module.gc.hook import LowLevelGcHooks
 from pypy.interpreter.baseobjspace import ObjSpace
 from pypy.interpreter.gateway import interp2app, unwrap_spec
 
@@ -7,6 +7,7 @@
 
     def setup_class(cls):
         space = cls.space
+        gchooks = space.fromcache(LowLevelGcHooks)
 
         @unwrap_spec(ObjSpace, r_uint, int)
         def fire_gc_minor(space, total_memory_used, pinned_objects):
diff --git a/rpython/memory/test/test_transformed_gc.py 
b/rpython/memory/test/test_transformed_gc.py
--- a/rpython/memory/test/test_transformed_gc.py
+++ b/rpython/memory/test/test_transformed_gc.py
@@ -1409,8 +1409,8 @@
 
 class MyGcHooks(GcHooks):
 
-    def __init__(self):
-        self.stats = GcHooksStats()
+    def __init__(self, stats=None):
+        self.stats = stats or GcHooksStats()
 
     def is_gc_minor_enabled(self):
         return True
diff --git a/rpython/translator/driver.py b/rpython/translator/driver.py
--- a/rpython/translator/driver.py
+++ b/rpython/translator/driver.py
@@ -413,7 +413,8 @@
             translator.frozen = True
 
         standalone = self.standalone
-        gchooks = self.extra.get('gchooks', None)
+        get_gchooks = self.extra.get('get_gchooks', lambda: None)
+        gchooks = get_gchooks()
 
         if standalone:
             from rpython.translator.c.genc import CStandaloneBuilder
diff --git a/rpython/translator/goal/targetgcbench.py 
b/rpython/translator/goal/targetgcbench.py
--- a/rpython/translator/goal/targetgcbench.py
+++ b/rpython/translator/goal/targetgcbench.py
@@ -1,8 +1,10 @@
 from rpython.translator.goal import gcbench
-from rpython.memory.test.test_transformed_gc import MyGcHooks
+from rpython.memory.test.test_transformed_gc import MyGcHooks, GcHooksStats
 
 # _____ Define and setup target ___
 
+GC_HOOKS_STATS = GcHooksStats()
+
 def entry_point(argv):
     GC_HOOKS_STATS.reset()
     ret = gcbench.entry_point(argv)
@@ -15,10 +17,9 @@
     print '    gc-collect:      ', collects
     return ret
 
-gchooks = MyGcHooks()
-GC_HOOKS_STATS = gchooks.stats
+def get_gchooks():
+    return MyGcHooks(GC_HOOKS_STATS)
 
 def target(*args):
     gcbench.ENABLE_THREADS = False    # not RPython
     return entry_point, None
-
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to