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