Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r63447:88e2ae515e01 Date: 2013-04-17 15:51 +0200 http://bitbucket.org/pypy/pypy/changeset/88e2ae515e01/
Log: Extract a big portion of the __init__() into its own method, _declare_functions(). This is useful for the stm branch, which overrides the function. (The diff of this commit is confusing: what really occurs is that I moved down a lot of code, not that I moved up one page.) diff --git a/rpython/memory/gctransform/framework.py b/rpython/memory/gctransform/framework.py --- a/rpython/memory/gctransform/framework.py +++ b/rpython/memory/gctransform/framework.py @@ -129,8 +129,6 @@ def __init__(self, translator): from rpython.memory.gc.base import choose_gc_from_config - from rpython.memory.gc.base import ARRAY_TYPEID_MAP - from rpython.memory.gc import inspector super(BaseFrameworkGCTransformer, self).__init__(translator, inline=True) @@ -232,7 +230,51 @@ classdef = bk.getuniqueclassdef(GCClass) s_gc = annmodel.SomeInstance(classdef) + + self._declare_functions(GCClass, getfn, s_gc, s_typeid16) + + # thread support + if translator.config.translation.continuation: + root_walker.stacklet_support = True + root_walker.need_stacklet_support(self, getfn) + if translator.config.translation.thread: + root_walker.need_thread_support(self, getfn) + + self.layoutbuilder.encode_type_shapes_now() + + annhelper.finish() # at this point, annotate all mix-level helpers + annhelper.backend_optimize() + + self.collect_analyzer = CollectAnalyzer(self.translator) + self.collect_analyzer.analyze_all() + + s_gc = self.translator.annotator.bookkeeper.valueoftype(GCClass) + r_gc = self.translator.rtyper.getrepr(s_gc) + self.c_const_gc = rmodel.inputconst(r_gc, self.gcdata.gc) + s_gc_data = self.translator.annotator.bookkeeper.valueoftype( + gctypelayout.GCData) + r_gc_data = self.translator.rtyper.getrepr(s_gc_data) + self.c_const_gcdata = rmodel.inputconst(r_gc_data, self.gcdata) + self.malloc_zero_filled = GCClass.malloc_zero_filled + + HDR = self.HDR = self.gcdata.gc.gcheaderbuilder.HDR + + size_gc_header = self.gcdata.gc.gcheaderbuilder.size_gc_header + vtableinfo = (HDR, size_gc_header, self.gcdata.gc.typeid_is_in_field) + self.c_vtableinfo = rmodel.inputconst(lltype.Void, vtableinfo) + tig = self.layoutbuilder.type_info_group._as_ptr() + self.c_type_info_group = rmodel.inputconst(lltype.typeOf(tig), tig) + sko = llmemory.sizeof(gcdata.TYPE_INFO) + self.c_vtinfo_skip_offset = rmodel.inputconst(lltype.typeOf(sko), sko) + + + def _declare_functions(self, GCClass, getfn, s_gc, s_typeid16): + from rpython.memory.gc.base import ARRAY_TYPEID_MAP + from rpython.memory.gc import inspector + s_gcref = annmodel.SomePtr(llmemory.GCREF) + gcdata = self.gcdata + translator = self.translator malloc_fixedsize_clear_meth = GCClass.malloc_fixedsize_clear.im_func self.malloc_fixedsize_clear_ptr = getfn( @@ -466,39 +508,6 @@ [annmodel.SomeAddress()], annmodel.s_None) - # thread support - if translator.config.translation.continuation: - root_walker.stacklet_support = True - root_walker.need_stacklet_support(self, getfn) - if translator.config.translation.thread: - root_walker.need_thread_support(self, getfn) - - self.layoutbuilder.encode_type_shapes_now() - - annhelper.finish() # at this point, annotate all mix-level helpers - annhelper.backend_optimize() - - self.collect_analyzer = CollectAnalyzer(self.translator) - self.collect_analyzer.analyze_all() - - s_gc = self.translator.annotator.bookkeeper.valueoftype(GCClass) - r_gc = self.translator.rtyper.getrepr(s_gc) - self.c_const_gc = rmodel.inputconst(r_gc, self.gcdata.gc) - s_gc_data = self.translator.annotator.bookkeeper.valueoftype( - gctypelayout.GCData) - r_gc_data = self.translator.rtyper.getrepr(s_gc_data) - self.c_const_gcdata = rmodel.inputconst(r_gc_data, self.gcdata) - self.malloc_zero_filled = GCClass.malloc_zero_filled - - HDR = self.HDR = self.gcdata.gc.gcheaderbuilder.HDR - - size_gc_header = self.gcdata.gc.gcheaderbuilder.size_gc_header - vtableinfo = (HDR, size_gc_header, self.gcdata.gc.typeid_is_in_field) - self.c_vtableinfo = rmodel.inputconst(lltype.Void, vtableinfo) - tig = self.layoutbuilder.type_info_group._as_ptr() - self.c_type_info_group = rmodel.inputconst(lltype.typeOf(tig), tig) - sko = llmemory.sizeof(gcdata.TYPE_INFO) - self.c_vtinfo_skip_offset = rmodel.inputconst(lltype.typeOf(sko), sko) def consider_constant(self, TYPE, value): self.layoutbuilder.consider_constant(TYPE, value, self.gcdata.gc) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit