Add functions to ClangASTContext to get integer types of a given byte size
llvm-svn: 215783
diff --git a/lldb/include/lldb/Symbol/ClangASTContext.h b/lldb/include/lldb/Symbol/ClangASTContext.h
index b533976..18cdb6c 100644
--- a/lldb/include/lldb/Symbol/ClangASTContext.h
+++ b/lldb/include/lldb/Symbol/ClangASTContext.h
@@ -393,6 +393,29 @@
const ClangASTType &integer_qual_type);
//------------------------------------------------------------------
+ // Integer type functions
+ //------------------------------------------------------------------
+
+ ClangASTType
+ GetIntTypeFromBitSize (size_t bit_size, bool is_signed)
+ {
+ return GetIntTypeFromBitSize (getASTContext(), bit_size, is_signed);
+ }
+
+ static ClangASTType
+ GetIntTypeFromBitSize (clang::ASTContext *ast,
+ size_t bit_size, bool is_signed);
+
+ ClangASTType
+ GetPointerSizedIntType (bool is_signed)
+ {
+ return GetPointerSizedIntType (getASTContext(), is_signed);
+ }
+
+ static ClangASTType
+ GetPointerSizedIntType (clang::ASTContext *ast, bool is_signed);
+
+ //------------------------------------------------------------------
// Floating point functions
//------------------------------------------------------------------
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,