/// <summary> /// </summary> /// <param name="type"> /// </param> /// <param name="llvmWriter"> /// </param> /// <param name="opCode"> /// </param> public static void WriteCallNewObjectMethod(this IType type, LlvmWriter llvmWriter, OpCodePart opCode) { var writer = llvmWriter.Output; var method = new SynthesizedNewMethod(type, llvmWriter); writer.WriteLine(string.Empty); writer.WriteLine("; call New Object method"); var opCodeNope = OpCodePart.CreateNop; opCodeNope.UsedBy = new UsedByInfo(opCode); llvmWriter.WriteCall(opCodeNope, method, false, false, false, opCode.Result, llvmWriter.tryScopes.Count > 0 ? llvmWriter.tryScopes.Peek() : null); opCode.Result = opCodeNope.Result; }
/// <summary> /// </summary> /// <param name="type"> /// </param> /// <param name="llvmWriter"> /// </param> public static void WriteNewObjectMethod(this IType type, LlvmWriter llvmWriter) { var writer = llvmWriter.Output; var method = new SynthesizedNewMethod(type, llvmWriter); writer.WriteLine("; New Object method"); var opCode = OpCodePart.CreateNop; llvmWriter.WriteMethodStart(method, null); llvmWriter.WriteNewMethodBody(opCode, type); writer.WriteLine(string.Empty); writer.Write("ret "); type.WriteTypePrefix(llvmWriter); writer.Write(" "); llvmWriter.WriteResult(opCode.Result); writer.WriteLine(string.Empty); llvmWriter.WriteMethodEnd(method, null); }