Add functions to ClangASTContext to get integer types of a given byte size

llvm-svn: 215783
diff --git a/lldb/source/Symbol/ClangASTContext.cpp b/lldb/source/Symbol/ClangASTContext.cpp
index 36a0aec..f2d8bd8 100644
--- a/lldb/source/Symbol/ClangASTContext.cpp
+++ b/lldb/source/Symbol/ClangASTContext.cpp
@@ -1910,6 +1910,63 @@
 //  return false;
 //}
 
+ClangASTType
+ClangASTContext::GetIntTypeFromBitSize (clang::ASTContext *ast,
+                                        size_t bit_size, bool is_signed)
+{
+    if (ast)
+    {
+        if (is_signed)
+        {
+            if (bit_size == ast->getTypeSize(ast->SignedCharTy))
+                return ClangASTType(ast, ast->SignedCharTy.getAsOpaquePtr());
+            
+            if (bit_size == ast->getTypeSize(ast->ShortTy))
+                return ClangASTType(ast, ast->ShortTy.getAsOpaquePtr());
+            
+            if (bit_size == ast->getTypeSize(ast->IntTy))
+                return ClangASTType(ast, ast->IntTy.getAsOpaquePtr());
+            
+            if (bit_size == ast->getTypeSize(ast->LongTy))
+                return ClangASTType(ast, ast->LongTy.getAsOpaquePtr());
+            
+            if (bit_size == ast->getTypeSize(ast->LongLongTy))
+                return ClangASTType(ast, ast->LongLongTy.getAsOpaquePtr());
+            
+            if (bit_size == ast->getTypeSize(ast->Int128Ty))
+                return ClangASTType(ast, ast->Int128Ty.getAsOpaquePtr());
+        }
+        else
+        {
+            if (bit_size == ast->getTypeSize(ast->UnsignedCharTy))
+                return ClangASTType(ast, ast->UnsignedCharTy.getAsOpaquePtr());
+            
+            if (bit_size == ast->getTypeSize(ast->UnsignedShortTy))
+                return ClangASTType(ast, ast->UnsignedShortTy.getAsOpaquePtr());
+            
+            if (bit_size == ast->getTypeSize(ast->UnsignedIntTy))
+                return ClangASTType(ast, ast->UnsignedIntTy.getAsOpaquePtr());
+            
+            if (bit_size == ast->getTypeSize(ast->UnsignedLongTy))
+                return ClangASTType(ast, ast->UnsignedLongTy.getAsOpaquePtr());
+            
+            if (bit_size == ast->getTypeSize(ast->UnsignedLongLongTy))
+                return ClangASTType(ast, ast->UnsignedLongLongTy.getAsOpaquePtr());
+            
+            if (bit_size == ast->getTypeSize(ast->UnsignedInt128Ty))
+                return ClangASTType(ast, ast->UnsignedInt128Ty.getAsOpaquePtr());
+        }
+    }
+    return ClangASTType();
+}
+
+ClangASTType
+ClangASTContext::GetPointerSizedIntType (clang::ASTContext *ast, bool is_signed)
+{
+    if (ast)
+        return GetIntTypeFromBitSize(ast, ast->getTypeSize(ast->VoidPtrTy), is_signed);
+    return ClangASTType();
+}
 
 ClangASTType
 ClangASTContext::GetFloatTypeFromBitSize (clang::ASTContext *ast,