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); } }
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"); }