Author: Ronan Lamy <ronan.l...@gmail.com> Branch: reflowing Changeset: r88664:4b2aca8c3977 Date: 2016-11-25 06:55 +0000 http://bitbucket.org/pypy/pypy/changeset/4b2aca8c3977/
Log: Attach notifications to variables rather than blocks diff --git a/rpython/annotator/annrpython.py b/rpython/annotator/annrpython.py --- a/rpython/annotator/annrpython.py +++ b/rpython/annotator/annrpython.py @@ -294,6 +294,10 @@ self.var_def[v_result] = position_key return v_result + def add_notification(self, v_src, v_target): + successors = self.notify.setdefault(v_src, set()) + successors.add(v_target) + def update_var(self, v): position_key = self.var_def[v] self.reflowfromposition(position_key) @@ -449,6 +453,10 @@ return repr(graph) + blk + opid def flowin(self, graph, block): + for v in block.inputargs: + if v in self.notify: + for v2 in self.notify[v]: + self.update_var(v2) try: i = 0 while i < len(block.operations): @@ -534,10 +542,6 @@ constraints = knowntypedata.get(link.exitcase, {}) self.follow_link(graph, link, constraints) - if block in self.notify: - for v in self.notify[block]: - self.update_var(v) - def follow_link(self, graph, link, constraints): assert not (isinstance(link.exitcase, (types.ClassType, type)) and issubclass(link.exitcase, BaseException)) diff --git a/rpython/annotator/description.py b/rpython/annotator/description.py --- a/rpython/annotator/description.py +++ b/rpython/annotator/description.py @@ -293,10 +293,7 @@ if whence is not None: annotator.record_call(graph, whence) if v_result is not None: - # annotator.notify[graph.returnblock] is a set of variables to update - # whenever the return block of this graph has been analysed. - returnvars = annotator.notify.setdefault(graph.returnblock, set()) - returnvars.add(v_result) + annotator.add_notification(graph.getreturnvar(), v_result) # generalize the function's input arguments annotator.addpendinggraph(graph, inputcells) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit