public void OutputCodeForDelegateCtorInit(LLVMBuilderRef builder, LLVMValueRef helperFunc, MethodDesc constructor, LLVMValueRef fatFunction) { StackEntry[] argValues = new StackEntry [constructor.Signature.Length + 1]; // for delegate this var shadowStack = helperFunc.GetParam(0); argValues[0] = new LoadExpressionEntry(StackValueKind.ObjRef, "this", shadowStack, GetWellKnownType(WellKnownType.Object)); for (var i = 0; i < constructor.Signature.Length; i++) { if (i == 1) { argValues[i + 1] = new ExpressionEntry(StackValueKind.Int32, "arg" + (i + 1), builder.BuildIntToPtr(fatFunction, LLVMTypeRef.CreatePointer(LLVMTypeRef.Int8, 0), "toPtr"), GetWellKnownType(WellKnownType.IntPtr)); } else { var argRef = LoadVarAddress(i + 1, LocalVarKind.Argument, out TypeDesc type); var ptrPtr = builder.BuildPointerCast(argRef, LLVMTypeRef.CreatePointer(LLVMTypeRef.CreatePointer(LLVMTypeRef.Int8, 0), 0), "ptrPtr"); var loadArg = builder.BuildLoad(ptrPtr, "arg" + (i + 1)); argValues[i + 1] = new ExpressionEntry(GetStackValueKind(constructor.Signature[i]), "arg" + i + 1, loadArg, constructor.Signature[i]); } } HandleCall(constructor, constructor.Signature, constructor, argValues, null); }