本文整理汇总了Python中pypy.translator.unsimplify.varoftype函数的典型用法代码示例。如果您正苦于以下问题:Python varoftype函数的具体用法?Python varoftype怎么用?Python varoftype使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了varoftype函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_nongc_ptr_eq
def test_nongc_ptr_eq():
v1 = varoftype(rclass.NONGCOBJECTPTR)
v2 = varoftype(rclass.NONGCOBJECTPTR)
v3 = varoftype(lltype.Bool)
c0 = const(lltype.nullptr(rclass.NONGCOBJECT))
#
for opname, reducedname in [('ptr_eq', 'int_is_zero'),
('ptr_ne', 'int_is_true')]:
op = SpaceOperation(opname, [v1, v2], v3)
op1 = Transformer().rewrite_operation(op)
assert op1.opname == opname.replace('ptr_', 'int_')
assert op1.args == [v1, v2]
#
op = SpaceOperation(opname, [v1, c0], v3)
op1 = Transformer().rewrite_operation(op)
assert op1.opname == reducedname
assert op1.args == [v1]
#
op = SpaceOperation(opname, [c0, v2], v3)
op1 = Transformer().rewrite_operation(op)
assert op1.opname == reducedname
assert op1.args == [v2]
#
op = SpaceOperation('ptr_iszero', [v1], v3)
op1 = Transformer().rewrite_operation(op)
assert op1.opname == 'int_is_zero'
assert op1.args == [v1]
#
op = SpaceOperation('ptr_nonzero', [v1], v3)
op1 = Transformer().rewrite_operation(op)
assert op1.opname == 'int_is_true'
assert op1.args == [v1]
示例2: test_is_true
def test_is_true(self):
for opname, T in [('llong_is_true', lltype.SignedLongLong),
('ullong_is_true', lltype.UnsignedLongLong)]:
v = varoftype(T)
v_result = varoftype(lltype.Bool)
op = SpaceOperation(opname, [v], v_result)
tr = Transformer(FakeCPU(), FakeBuiltinCallControl())
oplist = tr.rewrite_operation(op)
assert len(oplist) == 2
assert oplist[0].opname == 'residual_call_irf_f'
assert oplist[0].args[0].value == 'llong_from_int'
assert oplist[0].args[1] == 'calldescr-84'
assert list(oplist[0].args[2]) == [const(0)]
assert list(oplist[0].args[3]) == []
assert list(oplist[0].args[4]) == []
v_x = oplist[0].result
assert isinstance(v_x, Variable)
assert v_x.concretetype is T
assert oplist[1].opname == 'residual_call_irf_i'
assert oplist[1].args[0].value == 'llong_ne'
assert oplist[1].args[1] == 'calldescr-76'
assert list(oplist[1].args[2]) == []
assert list(oplist[1].args[3]) == []
assert list(oplist[1].args[4]) == [v, v_x]
assert oplist[1].result == v_result
示例3: do_check
def do_check(self, opname, oopspecindex, ARGS, RESULT):
vlist = [varoftype(ARG) for ARG in ARGS]
v_result = varoftype(RESULT)
op = SpaceOperation(opname, vlist, v_result)
tr = Transformer(FakeCPU(), FakeBuiltinCallControl())
op1 = tr.rewrite_operation(op)
if isinstance(op1, list):
[op1] = op1
#
def is_llf(TYPE):
return (TYPE == lltype.SignedLongLong or
TYPE == lltype.UnsignedLongLong or
TYPE == lltype.Float)
if is_llf(RESULT):
assert op1.opname == 'residual_call_irf_f'
else:
assert op1.opname == 'residual_call_irf_i'
gotindex = getattr(EffectInfo, 'OS_' + op1.args[0].value.upper())
assert gotindex == oopspecindex
assert op1.args[1] == 'calldescr-%d' % oopspecindex
assert list(op1.args[2]) == [v for v in vlist
if not is_llf(v.concretetype)]
assert list(op1.args[3]) == []
assert list(op1.args[4]) == [v for v in vlist
if is_llf(v.concretetype)]
assert op1.result == v_result
示例4: test_setfield
def test_setfield():
# XXX a more compact encoding would be possible; see test_getfield()
S1 = lltype.Struct('S1')
S2 = lltype.GcStruct('S2')
S = lltype.GcStruct('S', ('int', lltype.Signed),
('ps1', lltype.Ptr(S1)),
('ps2', lltype.Ptr(S2)),
('flt', lltype.Float),
('boo', lltype.Bool),
('chr', lltype.Char),
('unc', lltype.UniChar))
for name, suffix in [('int', 'i'),
('ps1', 'i'),
('ps2', 'r'),
('flt', 'f'),
('boo', 'i'),
('chr', 'i'),
('unc', 'i')]:
v_parent = varoftype(lltype.Ptr(S))
c_name = Constant(name, lltype.Void)
v_newvalue = varoftype(getattr(S, name))
op = SpaceOperation('setfield', [v_parent, c_name, v_newvalue],
varoftype(lltype.Void))
op1 = Transformer(FakeCPU()).rewrite_operation(op)
assert op1.opname == 'setfield_gc_' + suffix
fielddescr = ('fielddescr', S, name)
assert op1.args == [v_parent, fielddescr, v_newvalue]
assert op1.result is None
示例5: test_resizable_getitem
def test_resizable_getitem():
builtin_test('list.getitem/NONNEG',
[varoftype(VARLIST), varoftype(lltype.Signed)],
lltype.Void, "")
builtin_test('list.getitem/NEG',
[varoftype(VARLIST), varoftype(lltype.Signed)],
lltype.Void, "")
示例6: test_symmetric
def test_symmetric():
ops = {'int_add': 'int_add',
'int_or': 'int_or',
'int_gt': ('int_gt', 'int_lt'),
'uint_eq': 'int_eq',
'uint_le': ('uint_le', 'uint_ge'),
'char_ne': 'int_ne',
'char_lt': ('int_lt', 'int_gt'),
'uint_xor': 'int_xor',
'float_mul': 'float_mul',
'float_gt': ('float_gt', 'float_lt'),
}
v3 = varoftype(lltype.Signed)
for v1 in [varoftype(lltype.Signed), const(42)]:
for v2 in [varoftype(lltype.Signed), const(43)]:
for name1, name2 in ops.items():
op = SpaceOperation(name1, [v1, v2], v3)
op1 = Transformer(FakeCPU()).rewrite_operation(op)
if isinstance(name2, str):
name2 = name2, name2
if isinstance(v1, Constant) and isinstance(v2, Variable):
assert op1.args == [v2, v1]
assert op1.result == v3
assert op1.opname == name2[1]
else:
assert op1.args == [v1, v2]
assert op1.result == v3
assert op1.opname == name2[0]
示例7: test_getfield
def test_getfield():
# XXX a more compact encoding would be possible, something along
# the lines of getfield_gc_r %r0, $offset, %r1
# which would not need a Descr at all.
S1 = lltype.Struct('S1')
S2 = lltype.GcStruct('S2')
S = lltype.GcStruct('S', ('int', lltype.Signed),
('ps1', lltype.Ptr(S1)),
('ps2', lltype.Ptr(S2)),
('flt', lltype.Float),
('boo', lltype.Bool),
('chr', lltype.Char),
('unc', lltype.UniChar))
for name, suffix in [('int', 'i'),
('ps1', 'i'),
('ps2', 'r'),
('flt', 'f'),
('boo', 'i'),
('chr', 'i'),
('unc', 'i')]:
v_parent = varoftype(lltype.Ptr(S))
c_name = Constant(name, lltype.Void)
v_result = varoftype(getattr(S, name))
op = SpaceOperation('getfield', [v_parent, c_name], v_result)
op1 = Transformer(FakeCPU()).rewrite_operation(op)
assert op1.opname == 'getfield_gc_' + suffix
fielddescr = ('fielddescr', S, name)
assert op1.args == [v_parent, fielddescr]
assert op1.result == v_result
示例8: 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
示例9: test_fixed_getitem_foldable
def test_fixed_getitem_foldable():
builtin_test('list.getitem_foldable/NONNEG',
[varoftype(FIXEDLIST), varoftype(lltype.Signed)],
lltype.Void, "")
builtin_test('list.getitem_foldable/NEG',
[varoftype(FIXEDLIST), varoftype(lltype.Signed)],
lltype.Void, "")
示例10: test_casts
def test_casts(self):
self.do_check('cast_int_to_longlong', EffectInfo.OS_LLONG_FROM_INT,
[lltype.Signed], lltype.SignedLongLong)
self.do_check('cast_uint_to_longlong', EffectInfo.OS_LLONG_FROM_UINT,
[lltype.Unsigned], lltype.SignedLongLong)
self.do_check('truncate_longlong_to_int', EffectInfo.OS_LLONG_TO_INT,
[lltype.SignedLongLong], lltype.Signed)
self.do_check('cast_float_to_longlong', EffectInfo.OS_LLONG_FROM_FLOAT,
[lltype.Float], lltype.SignedLongLong)
self.do_check('cast_longlong_to_float', EffectInfo.OS_LLONG_TO_FLOAT,
[lltype.SignedLongLong], lltype.Float)
for T1 in [lltype.SignedLongLong, lltype.UnsignedLongLong]:
for T2 in [lltype.Signed, lltype.Unsigned]:
self.do_check('cast_primitive', EffectInfo.OS_LLONG_TO_INT,
[T1], T2)
self.do_check('force_cast', EffectInfo.OS_LLONG_TO_INT,
[T1], T2)
if T2 == lltype.Signed:
expected = EffectInfo.OS_LLONG_FROM_INT
else:
expected = EffectInfo.OS_LLONG_FROM_UINT
self.do_check('cast_primitive', expected, [T2], T1)
self.do_check('force_cast', expected, [T2], T1)
#
for T1 in [lltype.SignedLongLong, lltype.UnsignedLongLong]:
for T2 in [lltype.SignedLongLong, lltype.UnsignedLongLong]:
vlist = [varoftype(T1)]
v_result = varoftype(T2)
op = SpaceOperation('force_cast', vlist, v_result)
tr = Transformer(FakeCPU(), FakeBuiltinCallControl())
op1 = tr.rewrite_operation(op)
assert op1 is None
示例11: test_graphs_from_no_target
def test_graphs_from_no_target():
cc = CallControl()
F = lltype.FuncType([], lltype.Signed)
v = varoftype(lltype.Signed)
op = SpaceOperation("indirect_call", [varoftype(lltype.Ptr(F)), Constant(None, lltype.Void)], v)
lst = cc.graphs_from(op, {}.__contains__)
assert lst is None
示例12: get_direct_call_op
def get_direct_call_op(argtypes, restype):
FUNC = lltype.FuncType(argtypes, restype)
fnptr = lltype.functionptr(FUNC, "g") # no graph
c_fnptr = const(fnptr)
vars = [varoftype(TYPE) for TYPE in argtypes]
v_result = varoftype(restype)
op = SpaceOperation('direct_call', [c_fnptr] + vars, v_result)
return op
示例13: test_write_barrier_support_setarrayitem
def test_write_barrier_support_setarrayitem():
PTR_TYPE2 = lltype.Ptr(lltype.GcStruct('T', ('y', lltype.Signed)))
ARRAYPTR = lltype.Ptr(lltype.GcArray(PTR_TYPE2))
write_barrier_check(SpaceOperation(
"setarrayitem",
[varoftype(ARRAYPTR), varoftype(lltype.Signed),
varoftype(PTR_TYPE2)],
varoftype(lltype.Void)))
示例14: test_write_barrier_support_setfield
def test_write_barrier_support_setfield():
PTR_TYPE2 = lltype.Ptr(lltype.GcStruct('T', ('y', lltype.Signed)))
PTR_TYPE = lltype.Ptr(lltype.GcStruct('S', ('x', PTR_TYPE2)))
write_barrier_check(SpaceOperation(
"setfield",
[varoftype(PTR_TYPE), Constant('x', lltype.Void),
varoftype(PTR_TYPE2)],
varoftype(lltype.Void)))
示例15: test_dont_add_write_barrier_for_constant_new_value
def test_dont_add_write_barrier_for_constant_new_value():
PTR_TYPE2 = lltype.Ptr(lltype.GcStruct('T', ('y', lltype.Signed)))
PTR_TYPE = lltype.Ptr(lltype.GcStruct('S', ('x', PTR_TYPE2)))
write_barrier_check(SpaceOperation(
"setfield",
[varoftype(PTR_TYPE), Constant('x', lltype.Void),
Constant('foo', varoftype(PTR_TYPE2))],
varoftype(lltype.Void)), needs_write_barrier=False)