本文整理汇总了Python中pykit.ir.Builder.call方法的典型用法代码示例。如果您正苦于以下问题:Python Builder.call方法的具体用法?Python Builder.call怎么用?Python Builder.call使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类pykit.ir.Builder
的用法示例。
在下文中一共展示了Builder.call方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: rewrite_setattr
# 需要导入模块: from pykit.ir import Builder [as 别名]
# 或者: from pykit.ir.Builder import call [as 别名]
def rewrite_setattr(func, env):
"""
Resolve missing attributes through __setattr__
"""
context = env['flypy.typing.context']
b = Builder(func)
for op in func.ops:
if op.opcode == 'setfield':
obj, attr, value = op.args
obj_type = context[obj]
attr_type = types.String[()]
if attr not in obj_type.fields and attr not in obj_type.layout:
assert SETATTR in obj_type.fields, attr
b.position_after(op)
# Construct attribute string
attr_string = OConst(attr)
# call(getfield(obj, '__setattr__'), ['attr', value])
method_type = make_method(obj_type, SETATTR)
method = b.getfield(ptypes.Opaque, obj, SETATTR)
call = b.call(ptypes.Opaque, method, [attr_string, value])
op.delete()
# Update context
del context[op]
context[method] = method_type
context[call] = types.Void[()]
context[attr_string] = attr_type
示例2: rewrite_raise_exc_type
# 需要导入模块: from pykit.ir import Builder [as 别名]
# 或者: from pykit.ir.Builder import call [as 别名]
def rewrite_raise_exc_type(func, env):
"""
Rewrite 'raise Exception' to 'raise Exception()'
"""
context = env['numba.typing.context']
b = Builder(func)
for op in func.ops:
if op.opcode == 'exc_throw':
[exc_type] = op.args
if isinstance(exc_type, Const):
ty = context[exc_type]
if ty.impl == Type: # Type[Exception[]]
# Generate constructor application
b.position_before(op)
exc_obj = b.call(ptypes.Opaque, exc_type, [])
op.set_args([exc_obj])
type = ty.parameters[0]
context[exc_obj] = type
示例3: PykitIRVisitor
# 需要导入模块: from pykit.ir import Builder [as 别名]
# 或者: from pykit.ir.Builder import call [as 别名]
class PykitIRVisitor(c_ast.NodeVisitor):
"""
Map pykit IR in the form of polymorphic C to in-memory pykit IR.
int function(float x) {
int i = 0; /* I am a comment */
while (i < 10) { /*: { "unroll": true } :*/
x = call_external("sqrt", x * x);
}
return (int) x;
}
Attributes:
"""
in_function = False
def __init__(self, type_env=None):
self.mod = Module()
self.type_env = type_env or {}
self.func = None
self.builder = None
self.local_vars = None
self.allocas = None
self.global_vars = {}
self.functions = {}
# ______________________________________________________________________
@property
def vars(self):
if self.in_function:
return self.local_vars
else:
return self.global_vars
def enter_func(self):
self.in_function = True
self.local_vars = {}
self.allocas = {}
def leave_func(self):
self.in_function = False
self.mod.add_function(self.func)
self.local_vars = None
self.allocas = None
self.func = None
def visit(self, node, type=None):
"""
Visit a node.
:type: Whether we have a type for this opcode, which is an LHS type
or a cast. E.g.:
(Int) call(...) // cast
result = call(...) // assmnt, assuming 'result' is declared
result = call(..., call(...)) // second 'call' isn't typed
"""
self.type = type
method = 'visit_' + node.__class__.__name__
visitor = getattr(self, method, self.generic_visit)
# if visitor is None:
# raise SyntaxError(
# "Node %s not supported in %s:%s" % (node, node.coord.file,
# node.coord.line))
return visitor(node)
def visitif(self, node):
if node:
return self.visit(node)
def visits(self, node):
return list(map(self.visit, node))
# ______________________________________________________________________
def alloca(self, varname):
if varname not in self.allocas:
# Allocate variable with alloca
with self.builder.at_front(self.func.startblock):
type = types.Pointer(self.local_vars[varname])
result = self.func.temp(varname)
self.allocas[varname] = self.builder.alloca(type, [], result)
return self.allocas[varname]
def assignvar(self, varname, rhs):
self.builder.store(rhs, self.alloca(varname))
def assign(self, varname, rhs):
if self.in_function:
# Local variable
type = self.local_vars[varname]
self.assignvar(varname, self.visit(rhs, type=type))
else:
# Global variable
#.........这里部分代码省略.........