public IMethodRegister CreateMethod(string className, bool isStatic, ClepsType functionType, string functionName) { string fullFunctionName = className + "." + functionName; FunctionClepsType functionClepsType = functionType as FunctionClepsType; LLVMTypeRef returnLLVMType = GetLLVMType(functionClepsType.ReturnType); LLVMTypeRef[] parameterLLVMTypes = functionClepsType.ParameterTypes.Select(c => GetLLVMType(c)).ToArray(); LLVMTypeRef functionLLVMType = LLVM.FunctionType(returnLLVMType, parameterLLVMTypes, false /* var args */); LLVMValueRef functionRef = LLVM.AddFunction(Module, fullFunctionName, functionLLVMType); LLVMBasicBlockRef block = LLVM.AppendBasicBlockInContext(Context, functionRef, "entry"); LLVM.PositionBuilderAtEnd(Builder, block); var ret = new LLVMMethod(block); return ret; }
public IMethodRegister CreateMethod(string className, bool isStatic, ClepsType functionType, string functionName) { string fullFunctionName = className + "." + functionName; FunctionClepsType functionClepsType = functionType as FunctionClepsType; LLVMTypeRef returnLLVMType = GetLLVMType(functionClepsType.ReturnType); LLVMTypeRef[] parameterLLVMTypes = functionClepsType.ParameterTypes.Select(c => GetLLVMType(c)).ToArray(); LLVMTypeRef functionLLVMType = LLVM.FunctionType(returnLLVMType, parameterLLVMTypes, false /* var args */); LLVMValueRef functionRef = LLVM.AddFunction(Module, fullFunctionName, functionLLVMType); LLVMBasicBlockRef block = LLVM.AppendBasicBlockInContext(Context, functionRef, "entry"); LLVM.PositionBuilderAtEnd(Builder, block); var ret = new LLVMMethod(block); return(ret); }