コード例 #1
0
ファイル: ClassManager.cs プロジェクト: shravanrn/Cleps
        public void AddNewMember(string className, string memberName, bool isStatic, ClepsType memberType)
        {
            Debug.Assert(LoadedClassesAndMembers.ContainsKey(className));
            LoadedClassesAndMembers[className].AddNewMember(memberName, isStatic, memberType);

            if (memberType.IsFunctionType && isStatic &&
                (
                    memberType.FunctionReturnType == ClepsType.GetBasicType("System.Types.Int32", new List <uint>() /* array dims */, 0 /* ptrIndirectionLevel */) ||
                    memberType.FunctionReturnType == ClepsType.GetBasicType("System.LLVMTypes.I32", new List <uint>() /* array dims */, 0 /* ptrIndirectionLevel */)
                ) &&
                memberType.FunctionParameters.Count == 0 && memberName == "Main")
            {
                string fullyQualifiedName = className + "." + memberName;
                MainFunctionFullNames.Add(fullyQualifiedName);
            }
        }
コード例 #2
0
        public ClepsType GetClepsNativeLLVMType(LLVMTypeRef llvmType)
        {
            if (llvmType.TypeKind == LLVMTypeKind.LLVMIntegerTypeKind)
            {
                if (llvmType.GetIntTypeWidth() == 1)
                {
                    return(ClepsType.GetBasicType("System.LLVMTypes.I1", 0 /* ptr indirection level */));
                }
                else if (llvmType.GetIntTypeWidth() == 32)
                {
                    return(ClepsType.GetBasicType("System.LLVMTypes.I32", 0 /* ptr indirection level */));
                }
            }
            else if (llvmType.TypeKind == LLVMTypeKind.LLVMVoidTypeKind)
            {
                //void type does not have a special implementation in Cleps - use the same thing for LLVM or cleps native types
                return(ClepsType.GetVoidType());
            }

            throw new Exception("Unknown llvm type - cannot convert to cleps native type");
        }