本文整理汇总了C#中IMethod.WriteFunctionCallAttributes方法的典型用法代码示例。如果您正苦于以下问题:C# IMethod.WriteFunctionCallAttributes方法的具体用法?C# IMethod.WriteFunctionCallAttributes怎么用?C# IMethod.WriteFunctionCallAttributes使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IMethod
的用法示例。
在下文中一共展示了IMethod.WriteFunctionCallAttributes方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: WriteCall
/// <summary>
/// </summary>
/// <param name="llvmWriter">
/// </param>
/// <param name="opCodeMethodInfo">
/// </param>
/// <param name="methodInfo">
/// </param>
/// <param name="isVirtual">
/// </param>
/// <param name="hasThis">
/// </param>
/// <param name="isCtor">
/// </param>
/// <param name="thisResultNumber">
/// </param>
/// <param name="tryClause">
/// </param>
public static void WriteCall(
this LlvmWriter llvmWriter,
OpCodePart opCodeMethodInfo,
IMethod methodInfo,
bool isVirtual,
bool hasThis,
bool isCtor,
FullyDefinedReference thisResultNumber,
TryClause tryClause)
{
var writer = llvmWriter.Output;
IType thisType;
bool hasThisArgument;
OpCodePart opCodeFirstOperand;
BaseWriter.ReturnResult resultOfFirstOperand;
bool isIndirectMethodCall;
IType ownerOfExplicitInterface;
IType requiredType;
methodInfo.WriteFunctionCallProlog(
opCodeMethodInfo,
isVirtual,
hasThis,
llvmWriter,
out thisType,
out hasThisArgument,
out opCodeFirstOperand,
out resultOfFirstOperand,
out isIndirectMethodCall,
out ownerOfExplicitInterface,
out requiredType);
llvmWriter.CheckIfMethodExternalDeclarationIsRequired(methodInfo, ownerOfExplicitInterface);
llvmWriter.CheckIfExternalDeclarationIsRequired(methodInfo.DeclaringType);
if (hasThisArgument)
{
opCodeMethodInfo.WriteFunctionCallPrepareThisExpression(
thisType,
opCodeFirstOperand,
resultOfFirstOperand,
llvmWriter);
}
FullyDefinedReference methodAddressResultNumber = null;
if (isIndirectMethodCall)
{
methodAddressResultNumber = llvmWriter.GenerateVirtualCall(
opCodeMethodInfo,
methodInfo,
thisType,
opCodeFirstOperand,
resultOfFirstOperand,
ref requiredType);
}
methodInfo.WriteFunctionCallLoadFunctionAddress(
opCodeMethodInfo,
thisType,
ref methodAddressResultNumber,
llvmWriter);
methodInfo.PreProcessCallParameters(opCodeMethodInfo, llvmWriter);
if (llvmWriter.ProcessPluggableMethodCall(opCodeMethodInfo, methodInfo))
{
return;
}
var returnFullyDefinedReference = methodInfo.WriteFunctionCallResult(opCodeMethodInfo, llvmWriter);
writer.WriteFunctionCall(tryClause);
methodInfo.WriteFunctionCallAttributes(writer);
if (methodInfo.CallingConvention.HasFlag(CallingConventions.VarArgs))
{
llvmWriter.WriteMethodPointerType(writer, methodInfo);
writer.Write(" ");
}
else
{
//.........这里部分代码省略.........