本文整理汇总了Python中pypy.annotation.policy.AnnotatorPolicy.no_more_blocks_to_annotate方法的典型用法代码示例。如果您正苦于以下问题:Python AnnotatorPolicy.no_more_blocks_to_annotate方法的具体用法?Python AnnotatorPolicy.no_more_blocks_to_annotate怎么用?Python AnnotatorPolicy.no_more_blocks_to_annotate使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类pypy.annotation.policy.AnnotatorPolicy
的用法示例。
在下文中一共展示了AnnotatorPolicy.no_more_blocks_to_annotate方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: RPythonAnnotator
# 需要导入模块: from pypy.annotation.policy import AnnotatorPolicy [as 别名]
# 或者: from pypy.annotation.policy.AnnotatorPolicy import no_more_blocks_to_annotate [as 别名]
#.........这里部分代码省略.........
def addpendinggraph(self, flowgraph, inputcells):
self._register_returnvar(flowgraph)
self.addpendingblock(flowgraph, flowgraph.startblock, inputcells)
def addpendingblock(self, graph, block, cells, called_from_graph=None):
"""Register an entry point into block with the given input cells."""
if graph in self.fixed_graphs:
# special case for annotating/rtyping in several phases: calling
# a graph that has already been rtyped. Safety-check the new
# annotations that are passed in, and don't annotate the old
# graph -- it's already low-level operations!
for a, s_newarg in zip(graph.getargs(), cells):
s_oldarg = self.binding(a)
assert annmodel.unionof(s_oldarg, s_newarg) == s_oldarg
else:
assert not self.frozen
for a in cells:
assert isinstance(a, annmodel.SomeObject)
if block not in self.annotated:
self.bindinputargs(graph, block, cells, called_from_graph)
else:
self.mergeinputargs(graph, block, cells, called_from_graph)
if not self.annotated[block]:
self.pendingblocks[block] = graph
def complete(self):
"""Process pending blocks until none is left."""
while True:
while self.pendingblocks:
block, graph = self.pendingblocks.popitem()
if annmodel.DEBUG:
self.flowin_block = block # we need to keep track of block
self.processblock(graph, block)
self.policy.no_more_blocks_to_annotate(self)
if not self.pendingblocks:
break # finished
# make sure that the return variables of all graphs is annotated
if self.added_blocks is not None:
newgraphs = [self.annotated[block] for block in self.added_blocks]
newgraphs = dict.fromkeys(newgraphs)
got_blocked_blocks = False in newgraphs
else:
newgraphs = self.translator.graphs #all of them
got_blocked_blocks = False in self.annotated.values()
if got_blocked_blocks:
for graph in self.blocked_graphs.values():
self.blocked_graphs[graph] = True
blocked_blocks = [block for block, done in self.annotated.items()
if done is False]
assert len(blocked_blocks) == len(self.blocked_blocks)
text = format_blocked_annotation_error(self, self.blocked_blocks)
#raise SystemExit()
raise AnnotatorError(text)
for graph in newgraphs:
v = graph.getreturnvar()
if v not in self.bindings:
self.setbinding(v, annmodel.s_ImpossibleValue)
# policy-dependent computation
self.bookkeeper.compute_at_fixpoint()
def binding(self, arg, default=FAIL):
"Gives the SomeValue corresponding to the given Variable or Constant."
if isinstance(arg, Variable):
try: