Author: Ronan Lamy <ronan.l...@gmail.com> Branch: desc-specialize Changeset: r82327:f979a9068595 Date: 2016-02-19 17:16 +0000 http://bitbucket.org/pypy/pypy/changeset/f979a9068595/
Log: Create annotator.using_policy() context manager diff --git a/rpython/annotator/annrpython.py b/rpython/annotator/annrpython.py --- a/rpython/annotator/annrpython.py +++ b/rpython/annotator/annrpython.py @@ -2,6 +2,7 @@ import types from collections import defaultdict +from contextlib import contextmanager from rpython.tool.ansi_print import ansi_log from rpython.tool.pairtype import pair @@ -89,14 +90,9 @@ def get_call_parameters(self, function, args_s, policy): desc = self.bookkeeper.getdesc(function) - prevpolicy = self.policy - self.policy = policy - self.bookkeeper.enter(None) - try: - return desc.get_call_parameters(args_s) - finally: - self.bookkeeper.leave() - self.policy = prevpolicy + with self.using_policy(policy): + with self.bookkeeper.at_position(None): + return desc.get_call_parameters(args_s) def annotate_helper(self, function, args_s, policy=None): if policy is None: @@ -111,15 +107,23 @@ return graph def complete_helpers(self, policy): - saved = self.policy, self.added_blocks + saved = self.added_blocks + self.added_blocks = {} + with self.using_policy(policy): + try: + self.complete() + # invoke annotation simplifications for the new blocks + self.simplify(block_subset=self.added_blocks) + finally: + self.added_blocks = saved + + @contextmanager + def using_policy(self, policy): + """A context manager that temporarily replaces the annotator policy""" + old_policy = self.policy self.policy = policy - try: - self.added_blocks = {} - self.complete() - # invoke annotation simplifications for the new blocks - self.simplify(block_subset=self.added_blocks) - finally: - self.policy, self.added_blocks = saved + yield + self.policy = old_policy def build_graph_types(self, flowgraph, inputcells, complete_now=True): checkgraph(flowgraph) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit