示例#1
0
        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;
        }
示例#2
0
        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);
        }