[pypy-commit] pypy gc-hooks: this seems to fix annotation; however, it still cannot translated because AsyncAction.fire() can allocate, and so we cannot call it directly from the GC hook
antocuni
pypy.commits at gmail.com
Sat Mar 31 14:04:58 EDT 2018
Author: Antonio Cuni <anto.cuni at gmail.com>
Branch: gc-hooks
Changeset: r94204:f261ec7406c6
Date: 2018-03-31 19:04 +0100
http://bitbucket.org/pypy/pypy/changeset/f261ec7406c6/
Log: this seems to fix annotation; however, it still cannot translated
because AsyncAction.fire() can allocate, and so we cannot call it
directly from the GC hook
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
@@ -1,5 +1,6 @@
from rpython.memory.gc.hook import GcHooks
from rpython.rlib.nonconst import NonConstant
+from rpython.rlib.rarithmetic import r_uint
from pypy.interpreter.gateway import interp2app, unwrap_spec
from pypy.interpreter.baseobjspace import W_Root
from pypy.interpreter.typedef import TypeDef, interp_attrproperty
@@ -41,6 +42,7 @@
def set_hooks(self, space, w_on_gc_minor):
self.gc_minor_enabled = not space.is_none(w_on_gc_minor)
self.gc_minor.w_callable = w_on_gc_minor
+ self.gc_minor.fix_annotation()
class GcMinorHookAction(AsyncAction):
@@ -49,13 +51,15 @@
pinned_objects = 0
def fix_annotation(self):
- # XXX write comment
+ # the annotation of the class and its attributes must be completed
+ # BEFORE we do the gc transform; this makes sure that everything is
+ # annotated with the correct types
if NonConstant(False):
- self.total_memory_used += 42
- self.pinned_objects += 42
+ self.total_memory_used = NonConstant(r_uint(42))
+ self.pinned_objects = NonConstant(-42)
+ self.fire()
def perform(self, ec, frame):
- self.fix_annotation()
w_stats = W_GcMinorStats(self.total_memory_used, self.pinned_objects)
self.space.call_function(self.w_callable, w_stats)
More information about the pypy-commit
mailing list