[pypy-commit] pypy desc-specialize: Create annotator.using_policy() context manager
rlamy
pypy.commits at gmail.com
Fri Feb 19 12:18:44 EST 2016
Author: Ronan Lamy <ronan.lamy at 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)
More information about the pypy-commit
mailing list