def __init__(self, builder, sigtoken, gv_fnptr, args_gv): from pypy.jit.codegen.cli.rgenop import class2type self.builder = builder self.sigtoken = sigtoken self.gv_fnptr = gv_fnptr self.args_gv = args_gv self._restype = class2type(sigtoken.res)
def emit(self): from pypy.jit.codegen.cli.rgenop import class2type delegate_type = class2type(self.sigtoken.funcclass) meth_invoke = delegate_type.GetMethod('Invoke') self.gv_fnptr.load(self.builder) self.builder.il.Emit(OpCodes.Castclass, delegate_type) for gv_arg in self.args_gv: gv_arg.load(self.builder) self.builder.il.EmitCall(OpCodes.Callvirt, meth_invoke, None) self.storeResult()