/// <summary> /// </summary> /// <param name="other"> /// </param> /// <returns> /// </returns> public int CompareTo(TryClause other) { var cmp = this.Offset.CompareTo(other.Offset); if (cmp != 0) { return cmp; } return this.Length.CompareTo(other.Length); }
/// <summary> /// </summary> /// <param name="other"> /// </param> /// <returns> /// </returns> public int CompareTo(TryClause other) { var cmp = this.Offset.CompareTo(other.Offset); if (cmp != 0) { return(cmp); } return(this.Length.CompareTo(other.Length)); }
/// <summary> /// </summary> /// <param name="writer"> /// </param> /// <param name="tryClause"> /// </param> public static void WriteFunctionCall(this LlvmIndentedTextWriter writer, TryClause tryClause) { if (tryClause != null) { writer.Write("invoke "); } else { writer.Write("call "); } }
/// <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; llvmWriter.CheckIfExternalDeclarationIsRequired(methodInfo); llvmWriter.CheckIfExternalDeclarationIsRequired(methodInfo.DeclaringType); 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); 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 { methodInfo.WriteFunctionCallReturnType(llvmWriter); writer.Write(' '); // extra support if (methodInfo.IsExternalLibraryMethod()) { writer.Write("(...)* "); } } methodInfo.WriteFunctionNameExpression(methodAddressResultNumber, ownerOfExplicitInterface, llvmWriter); methodInfo.GetParameters() .WriteFunctionCallArguments( opCodeMethodInfo.OpCodeOperands, isVirtual, hasThis, isCtor, thisResultNumber, thisType, returnFullyDefinedReference, methodInfo != null ? methodInfo.ReturnType : null, llvmWriter, methodInfo.CallingConvention.HasFlag(CallingConventions.VarArgs)); tryClause.WriteFunctionCallUnwind(opCodeMethodInfo, llvmWriter); }