diff options
| author | Enrico Granata <egranata@apple.com> | 2014-08-15 23:00:02 +0000 |
|---|---|---|
| committer | Enrico Granata <egranata@apple.com> | 2014-08-15 23:00:02 +0000 |
| commit | e8bf7496531a08f3fc8dbef64dc4c5245f788d65 (patch) | |
| tree | a1ef57b666eb76eea66b7bab345d01a6206e52d0 | |
| parent | 3c19a6ac48d5660f1d1172ddc3d1999c788b2e50 (diff) | |
| download | bcm5719-llvm-e8bf7496531a08f3fc8dbef64dc4c5245f788d65.tar.gz bcm5719-llvm-e8bf7496531a08f3fc8dbef64dc4c5245f788d65.zip | |
Add functions to ClangASTContext to get integer types of a given byte size
llvm-svn: 215783
| -rw-r--r-- | lldb/include/lldb/Symbol/ClangASTContext.h | 23 | ||||
| -rw-r--r-- | lldb/source/Symbol/ClangASTContext.cpp | 57 |
2 files changed, 80 insertions, 0 deletions
diff --git a/lldb/include/lldb/Symbol/ClangASTContext.h b/lldb/include/lldb/Symbol/ClangASTContext.h index b533976178f..18cdb6cae07 100644 --- a/lldb/include/lldb/Symbol/ClangASTContext.h +++ b/lldb/include/lldb/Symbol/ClangASTContext.h @@ -393,6 +393,29 @@ public: 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 36a0aec53f4..f2d8bd8fbc6 100644 --- a/lldb/source/Symbol/ClangASTContext.cpp +++ b/lldb/source/Symbol/ClangASTContext.cpp @@ -1910,6 +1910,63 @@ ClangASTContext::CreateEnumerationType // 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, |

