本文整理汇总了Python中pypy.objspace.flow.model.Block类的典型用法代码示例。如果您正苦于以下问题:Python Block类的具体用法?Python Block怎么用?Python Block使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Block类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。
示例1: test_optimize_goto_if_not__unknownop
def test_optimize_goto_if_not__unknownop():
v3 = Variable(); v3.concretetype = lltype.Bool
block = Block([])
block.operations = [SpaceOperation('foobar', [], v3)]
block.exitswitch = v3
block.exits = [FakeLink(False), FakeLink(True)]
assert not Transformer().optimize_goto_if_not(block)
开发者ID:gorakhargosh,项目名称:pypy,代码行数:7,代码来源:test_jtransform.py
示例2: test_regalloc_exitswitch_2
def test_regalloc_exitswitch_2(self):
v1 = Variable(); v1.concretetype = rclass.CLASSTYPE
v2 = Variable(); v2.concretetype = rclass.CLASSTYPE
v3 = Variable(); v3.concretetype = rclass.CLASSTYPE
v4 = Variable(); v4.concretetype = rclass.CLASSTYPE
block = Block([])
block.operations = [
SpaceOperation('res_call', [], v1),
SpaceOperation('-live-', [], None),
]
graph = FunctionGraph('f', block, v4)
exclink = Link([v2], graph.returnblock)
exclink.llexitcase = 123 # normally an exception class
exclink.last_exception = v2
exclink.last_exc_value = "unused"
block.exitswitch = c_last_exception
block.closeblock(Link([v1], graph.returnblock),
exclink)
#
self.check_assembler(graph, """
res_call -> %i0
-live-
catch_exception L1
int_return %i0
---
L1:
goto_if_exception_mismatch $123, L2
last_exception -> %i0
int_return %i0
---
L2:
reraise
""")
开发者ID:Debug-Orz,项目名称:Sypy,代码行数:33,代码来源:test_regalloc.py
示例3: test_func_simple
def test_func_simple():
# -------------------- flowgraph building --------------------
# def f(x):
# return x+1
x = Variable("x")
x.concretetype = Signed
result = Variable("result")
result.concretetype = Signed
one = Constant(1)
one.concretetype = Signed
op = SpaceOperation("int_add", [x, one], result)
block = Block([x])
graph = FunctionGraph("f", block)
block.operations.append(op)
block.closeblock(Link([result], graph.returnblock))
graph.getreturnvar().concretetype = Signed
# -------------------- end --------------------
F = FuncType([Signed], Signed)
f = functionptr(F, "f", graph=graph)
db = LowLevelDatabase()
db.get(f)
db.complete()
dump_on_stdout(db)
S = GcStruct('testing', ('fptr', Ptr(F)))
s = malloc(S)
s.fptr = f
db = LowLevelDatabase()
db.get(s)
db.complete()
dump_on_stdout(db)
开发者ID:ieure,项目名称:pypy,代码行数:32,代码来源:test_database.py
示例4: get_resume_point_link
def get_resume_point_link(self, block):
try:
return self.resumepoints[block]
except KeyError:
resumeblock = Block([])
redcount = 0
greencount = 0
newvars = []
for v in block.inputargs:
if v.concretetype is lltype.Void:
v1 = self.c_dummy
elif self.hannotator.binding(v).is_green():
c = inputconst(lltype.Signed, greencount)
v1 = self.genop(resumeblock, 'restore_green', [c],
result_like = v)
greencount += 1
else:
c = inputconst(lltype.Signed, redcount)
v1 = self.genop(resumeblock, 'restore_local', [c],
result_like = v)
redcount += 1
newvars.append(v1)
resumeblock.closeblock(Link(newvars, block))
reenter_link = Link([], resumeblock)
N = len(self.resumepoints)
reenter_link.exitcase = N
self.resumepoints[block] = reenter_link
return reenter_link
开发者ID:TheDunn,项目名称:flex-pypy,代码行数:29,代码来源:transform.py
示例5: handle_oopspec_call
def handle_oopspec_call(self, block, pos, withexc):
op = block.operations[pos]
assert op.opname == 'direct_call'
if withexc:
op.opname = 'oopspec_call'
else:
op.opname = 'oopspec_call_noexc'
if withexc:
link = split_block(self.hannotator, block, pos+1)
nextblock = link.target
linkargs = link.args
v_residual =self.genop(block, 'oopspec_was_residual', [],
resulttype = lltype.Bool)
residualblock = Block([])
self.genswitch(block, v_residual, true = residualblock,
false = None)
link_f = block.exits[0]
link_f.args = linkargs
link_f.target = nextblock
residualblock.closeblock(Link(linkargs, nextblock))
blockset = { block: True,
nextblock: False,
residualblock: False }
self.handle_after_residual_call_details(
residualblock, 0, [], blockset, oop=True,
withexc=True)
SSA_to_SSI(blockset, self.hannotator)
开发者ID:TheDunn,项目名称:flex-pypy,代码行数:28,代码来源:transform.py
示例6: new_block_before
def new_block_before(self, block):
newinputargs = [copyvar(self.hannotator, var)
for var in block.inputargs]
newblock = Block(newinputargs)
bridge = Link(newinputargs, block)
newblock.closeblock(bridge)
return newblock
开发者ID:TheDunn,项目名称:flex-pypy,代码行数:7,代码来源:transform.py
示例7: builder
def builder(translator, func):
# build a hacked graph that doesn't take a *arg any more, but
# individual extra arguments
graph = translator.buildflowgraph(func)
argnames, vararg, kwarg = graph.signature
assert vararg, "graph should have a *arg at this point"
assert not kwarg, "where does this **arg come from??"
argscopy = [Variable(v) for v in graph.getargs()]
starargs = [Variable('stararg%d'%i) for i in range(nb_extra_args)]
newstartblock = Block(argscopy[:-1] + starargs)
newtup = SpaceOperation('newtuple', starargs, argscopy[-1])
newstartblock.operations.append(newtup)
newstartblock.closeblock(Link(argscopy, graph.startblock))
graph.startblock.isstartblock = False
graph.startblock = newstartblock
newstartblock.isstartblock = True
argnames += tuple(['.star%d' % i for i in range(nb_extra_args)])
graph.signature = argnames, None, None
# note that we can mostly ignore defaults: if nb_extra_args > 0,
# then defaults aren't applied. if nb_extra_args == 0, then this
# just removes the *arg and the defaults keep their meaning.
if nb_extra_args > 0:
graph.defaults = None # shouldn't be used in this case
checkgraph(graph)
return graph
开发者ID:AishwaryaKM,项目名称:python-tutorial,代码行数:25,代码来源:specialize.py
示例8: naive_split_block
def naive_split_block(self, block, position):
newblock = Block([])
newblock.operations = block.operations[position:]
del block.operations[position:]
newblock.exitswitch = block.exitswitch
block.exitswitch = None
newblock.recloseblock(*block.exits)
block.recloseblock(Link([], newblock))
return newblock
开发者ID:TheDunn,项目名称:flex-pypy,代码行数:9,代码来源:transform.py
示例9: copy_block
def copy_block(self, block):
if block in self._copied_blocks:
return self._copied_blocks[block]
args = ([self.get_new_name(var) for var in block.inputargs] +
self.passon_vars(block))
newblock = Block(args)
self._copied_blocks[block] = newblock
newblock.operations = [self.copy_operation(op) for op in block.operations]
newblock.closeblock(*[self.copy_link(link, block) for link in block.exits])
newblock.exitswitch = self.get_new_name(block.exitswitch)
self.search_for_calls(newblock)
return newblock
开发者ID:TheDunn,项目名称:flex-pypy,代码行数:12,代码来源:inline.py
示例10: handle_after_residual_call_details
def handle_after_residual_call_details(self, block, pos, newops, blockset,
withexc, oop = False):
dopts = {'withexc': withexc, 'oop': oop }
copts = Constant(dopts, lltype.Void)
v_flags = self.genop(newops, 'after_residual_call', [copts],
resulttype=lltype.Signed, red=True)
residual_fetch_index = len(newops)
self.genop(newops, 'residual_fetch', [v_flags, copts])
residual_fetch_pos = pos+residual_fetch_index
block.operations[pos:pos+1] = newops
link_t = split_block(self.hannotator, block, residual_fetch_pos)
nextblock = link_t.target
blockset[nextblock] = False
i_flags = link_t.args.index(v_flags)
reds, greens = self.sort_by_color(link_t.args)
self.genop(block, 'save_locals', reds)
SPLIT_FOR_ZERO = False
if SPLIT_FOR_ZERO:
promoteblock = Block([copyvar(self.hannotator, v)
for v in link_t.args])
link_f = Link(link_t.args, promoteblock)
promoteblock.recloseblock(Link(promoteblock.inputargs, nextblock))
blockset[promoteblock] = False
v_flags2 = promoteblock.inputargs[i_flags]
else:
promoteblock = block
v_flags2 = v_flags
# if there is no global merge point, this 'promote' will actually
# always see a constant red box
v_finished_flag = self.genop(promoteblock, 'promote', [v_flags2],
resulttype = lltype.Bool)
self.go_to_dispatcher_if(promoteblock, v_finished_flag)
if SPLIT_FOR_ZERO:
c_zero = inputconst(lltype.Signed, 0)
link_t.args = link_t.args[:]
link_t.args[i_flags] = c_zero
resumepoint = self.get_resume_point(promoteblock)
c_resumepoint = inputconst(lltype.Signed, resumepoint)
v_is_zero = self.genop(block, 'int_eq', [v_flags, c_zero],
resulttype=lltype.Bool, red=True)
v_is_zero = self.genop(block, 'split',
[v_is_zero, c_resumepoint] + greens,
resulttype = lltype.Bool)
block.exitswitch = v_is_zero
link_t.exitcase = True
link_f.exitcase = False
block.recloseblock(link_f, link_t)
开发者ID:TheDunn,项目名称:flex-pypy,代码行数:53,代码来源:transform.py
示例11: test_optimize_goto_if_not__ptr_iszero
def test_optimize_goto_if_not__ptr_iszero():
for opname in ['ptr_iszero', 'ptr_nonzero']:
v1 = Variable()
v3 = Variable(); v3.concretetype = lltype.Bool
block = Block([v1])
block.operations = [SpaceOperation(opname, [v1], v3)]
block.exitswitch = v3
block.exits = exits = [FakeLink(False), FakeLink(True)]
res = Transformer().optimize_goto_if_not(block)
assert res == True
assert block.operations == []
assert block.exitswitch == (opname, v1, '-live-before')
assert block.exits == exits
开发者ID:gorakhargosh,项目名称:pypy,代码行数:13,代码来源:test_jtransform.py
示例12: test_rename_on_links
def test_rename_on_links():
v1 = Variable()
v2 = Variable()
v3 = Variable()
block = Block([v1])
block.operations = [SpaceOperation('cast_pointer', [v1], v2)]
block2 = Block([v3])
block.closeblock(Link([v2], block2))
Transformer().optimize_block(block)
assert block.inputargs == [v1]
assert block.operations == []
assert block.exits[0].target is block2
assert block.exits[0].args == [v1]
开发者ID:gorakhargosh,项目名称:pypy,代码行数:13,代码来源:test_jtransform.py
示例13: normalize_calltable_row_annotation
def normalize_calltable_row_annotation(annotator, graphs):
if len(graphs) <= 1:
return False # nothing to do
graph_bindings = {}
for graph in graphs:
graph_bindings[graph] = [annotator.binding(v)
for v in graph.getargs()]
iterbindings = graph_bindings.itervalues()
nbargs = len(iterbindings.next())
for binding in iterbindings:
assert len(binding) == nbargs
generalizedargs = []
for i in range(nbargs):
args_s = []
for graph, bindings in graph_bindings.items():
args_s.append(bindings[i])
s_value = annmodel.unionof(*args_s)
generalizedargs.append(s_value)
result_s = [annotator.binding(graph.getreturnvar())
for graph in graph_bindings]
generalizedresult = annmodel.unionof(*result_s)
conversion = False
for graph in graphs:
bindings = graph_bindings[graph]
need_conversion = (generalizedargs != bindings)
if need_conversion:
conversion = True
oldblock = graph.startblock
inlist = []
for j, s_value in enumerate(generalizedargs):
v = Variable(graph.getargs()[j])
annotator.setbinding(v, s_value)
inlist.append(v)
newblock = Block(inlist)
# prepare the output args of newblock and link
outlist = inlist[:]
newblock.closeblock(Link(outlist, oldblock))
oldblock.isstartblock = False
newblock.isstartblock = True
graph.startblock = newblock
# finished
checkgraph(graph)
annotator.annotated[newblock] = annotator.annotated[oldblock]
# convert the return value too
if annotator.binding(graph.getreturnvar()) != generalizedresult:
conversion = True
annotator.setbinding(graph.getreturnvar(), generalizedresult)
return conversion
开发者ID:ieure,项目名称:pypy,代码行数:51,代码来源:normalizecalls.py
示例14: test_optimize_goto_if_not
def test_optimize_goto_if_not():
v1 = Variable()
v2 = Variable()
v3 = Variable(); v3.concretetype = lltype.Bool
sp1 = SpaceOperation('foobar', [], None)
sp2 = SpaceOperation('foobaz', [], None)
block = Block([v1, v2])
block.operations = [sp1, SpaceOperation('int_gt', [v1, v2], v3), sp2]
block.exitswitch = v3
block.exits = exits = [FakeLink(False), FakeLink(True)]
res = Transformer().optimize_goto_if_not(block)
assert res == True
assert block.operations == [sp1, sp2]
assert block.exitswitch == ('int_gt', v1, v2)
assert block.exits == exits
开发者ID:gorakhargosh,项目名称:pypy,代码行数:15,代码来源:test_jtransform.py
示例15: transform_jump_to_except_block
def transform_jump_to_except_block(self, graph, entrymap, link):
reraise = self.comes_from_last_exception(entrymap, link)
result = Variable()
result.concretetype = lltype.Void
block = Block([copyvar(None, v) for v in graph.exceptblock.inputargs])
if reraise:
block.operations = [SpaceOperation("direct_call", [self.rpyexc_reraise_ptr] + block.inputargs, result)]
else:
block.operations = [
SpaceOperation("direct_call", [self.rpyexc_raise_ptr] + block.inputargs, result),
SpaceOperation("debug_record_traceback", [], varoftype(lltype.Void)),
]
link.target = block
RETTYPE = graph.returnblock.inputargs[0].concretetype
l = Link([error_constant(RETTYPE)], graph.returnblock)
block.recloseblock(l)
开发者ID:junion,项目名称:butlerbot-unstable,代码行数:16,代码来源:exceptiontransform.py
示例16: replace_graph_with_bootstrap
def replace_graph_with_bootstrap(GeneratorIterator, graph):
Entry = GeneratorIterator.Entry
newblock = Block(graph.startblock.inputargs)
v_generator = Variable('generator')
v_entry = Variable('entry')
newblock.operations.append(
SpaceOperation('simple_call', [Constant(Entry)], v_entry))
assert len(graph.startblock.inputargs) == len(Entry.varnames)
for v, name in zip(graph.startblock.inputargs, Entry.varnames):
newblock.operations.append(
SpaceOperation('setattr', [v_entry, Constant(name), v],
Variable()))
newblock.operations.append(
SpaceOperation('simple_call', [Constant(GeneratorIterator), v_entry],
v_generator))
newblock.closeblock(Link([v_generator], graph.returnblock))
graph.startblock = newblock
开发者ID:Debug-Orz,项目名称:Sypy,代码行数:17,代码来源:generator.py
示例17: test_optimize_goto_if_not__exit
def test_optimize_goto_if_not__exit():
# this case occurs in practice, e.g. with RPython code like:
# return bool(p) and p.somefield > 0
v1 = Variable()
v2 = Variable()
v3 = Variable(); v3.concretetype = lltype.Bool
block = Block([v1, v2])
block.operations = [SpaceOperation('int_gt', [v1, v2], v3)]
block.exitswitch = v3
block.exits = exits = [FakeLink(False), FakeLink(True)]
block.exits[1].args = [v3]
res = Transformer().optimize_goto_if_not(block)
assert res == True
assert block.operations == []
assert block.exitswitch == ('int_gt', v1, v2)
assert block.exits == exits
assert exits[1].args == [const(True)]
开发者ID:gorakhargosh,项目名称:pypy,代码行数:17,代码来源:test_jtransform.py
示例18: get_exc_reconstruction_block
def get_exc_reconstruction_block(self, typedesc):
exceptblock = self.graph.exceptblock
self.mallocv.fixup_except_block(exceptblock)
TEXC = exceptblock.inputargs[0].concretetype
TVAL = exceptblock.inputargs[1].concretetype
#
v_ignored_type = varoftype(TEXC)
v_incoming_value = varoftype(TVAL)
block = Block([v_ignored_type, v_incoming_value])
#
c_EXCTYPE = Constant(typedesc.MALLOCTYPE, lltype.Void)
v = varoftype(lltype.Ptr(typedesc.MALLOCTYPE))
c_flavor = Constant({'flavor': 'gc'}, lltype.Void)
op = SpaceOperation('malloc', [c_EXCTYPE, c_flavor], v)
block.operations.append(op)
#
for name, FIELDTYPE in typedesc.names_and_types:
EXACTPTR = lltype.Ptr(typedesc.name2subtype[name])
c_name = Constant(name)
c_name.concretetype = lltype.Void
#
v_in = varoftype(EXACTPTR)
op = SpaceOperation('cast_pointer', [v_incoming_value], v_in)
block.operations.append(op)
#
v_field = varoftype(FIELDTYPE)
op = SpaceOperation('getfield', [v_in, c_name], v_field)
block.operations.append(op)
#
v_out = varoftype(EXACTPTR)
op = SpaceOperation('cast_pointer', [v], v_out)
block.operations.append(op)
#
v0 = varoftype(lltype.Void)
op = SpaceOperation('setfield', [v_out, c_name, v_field], v0)
block.operations.append(op)
#
v_exc_value = varoftype(TVAL)
op = SpaceOperation('cast_pointer', [v], v_exc_value)
block.operations.append(op)
#
exc_type = self.mallocv.EXCTYPE_to_vtable[typedesc.MALLOCTYPE]
c_exc_type = Constant(exc_type, TEXC)
block.closeblock(Link([c_exc_type, v_exc_value], exceptblock))
return block
开发者ID:ieure,项目名称:pypy,代码行数:45,代码来源:mallocv.py
示例19: dispatcher
def dispatcher(self, shape, index, argtypes, resulttype):
key = shape, index, tuple(argtypes), resulttype
if key in self._dispatch_cache:
return self._dispatch_cache[key]
from pypy.translator.unsimplify import varoftype
from pypy.objspace.flow.model import FunctionGraph, Link, Block, SpaceOperation
inputargs = [varoftype(t) for t in [Char] + argtypes]
startblock = Block(inputargs)
startblock.exitswitch = inputargs[0]
graph = FunctionGraph("dispatcher", startblock, varoftype(resulttype))
row_of_graphs = self.callfamily.calltables[shape][index]
links = []
descs = list(self.s_pbc.descriptions)
if self.s_pbc.can_be_None:
descs.insert(0, None)
for desc in descs:
if desc is None:
continue
args_v = [varoftype(t) for t in argtypes]
b = Block(args_v)
llfn = self.rtyper.getcallable(row_of_graphs[desc])
v_fn = inputconst(typeOf(llfn), llfn)
v_result = varoftype(resulttype)
b.operations.append(
SpaceOperation("direct_call", [v_fn] + args_v, v_result))
b.closeblock(Link([v_result], graph.returnblock))
i = self.descriptions.index(desc)
links.append(Link(inputargs[1:], b, chr(i)))
links[-1].llexitcase = chr(i)
startblock.closeblock(*links)
self.rtyper.annotator.translator.graphs.append(graph)
ll_ret = self.rtyper.type_system.getcallable(graph)
#FTYPE = FuncType
c_ret = self._dispatch_cache[key] = inputconst(typeOf(ll_ret), ll_ret)
return c_ret
开发者ID:ieure,项目名称:pypy,代码行数:35,代码来源:rpbc.py
示例20: test_switch_no_default
def test_switch_no_default():
from pypy.objspace.flow.model import FunctionGraph, Block, Constant, Link
from pypy.rpython.lltypesystem.lltype import FuncType, Signed, functionptr
from pypy.translator.unsimplify import varoftype
block = Block([varoftype(Signed)])
block.exitswitch = block.inputargs[0]
graph = FunctionGraph("t", block, varoftype(Signed))
links = []
for i in range(10):
links.append(Link([Constant(i*i, Signed)], graph.returnblock, i))
links[-1].llexitcase = i
block.closeblock(*links)
fptr = functionptr(FuncType([Signed], Signed), "t", graph=graph)
def func(x):
return fptr(x)
f = compile_function(func, [int])
res = f(4)
assert res == 16
开发者ID:antoine1fr,项目名称:pygirl,代码行数:18,代码来源:test_genllvm.py
注:本文中的pypy.objspace.flow.model.Block类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论