| //===-- AppleObjCTypeEncodingParser.h ---------------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef liblldb_AppleObjCTypeEncodingParser_h_ |
| #define liblldb_AppleObjCTypeEncodingParser_h_ |
| |
| // C Includes |
| // C++ Includes |
| // Other libraries and framework includes |
| #include "clang/AST/ASTContext.h" |
| |
| // Project includes |
| #include "lldb/Target/ObjCLanguageRuntime.h" |
| #include "lldb/lldb-private.h" |
| |
| namespace lldb_utility { |
| class StringLexer; |
| } |
| |
| namespace lldb_private { |
| |
| class AppleObjCTypeEncodingParser : public ObjCLanguageRuntime::EncodingToType { |
| public: |
| AppleObjCTypeEncodingParser(ObjCLanguageRuntime &runtime); |
| ~AppleObjCTypeEncodingParser() override = default; |
| |
| CompilerType RealizeType(clang::ASTContext &ast_ctx, const char *name, |
| bool for_expression) override; |
| |
| private: |
| struct StructElement { |
| std::string name; |
| clang::QualType type; |
| uint32_t bitfield; |
| |
| StructElement(); |
| ~StructElement() = default; |
| }; |
| |
| clang::QualType BuildType(clang::ASTContext &ast_ctx, |
| lldb_utility::StringLexer &type, |
| bool for_expression, |
| uint32_t *bitfield_bit_size = nullptr); |
| |
| clang::QualType BuildStruct(clang::ASTContext &ast_ctx, |
| lldb_utility::StringLexer &type, |
| bool for_expression); |
| |
| clang::QualType BuildAggregate(clang::ASTContext &ast_ctx, |
| lldb_utility::StringLexer &type, |
| bool for_expression, char opener, char closer, |
| uint32_t kind); |
| |
| clang::QualType BuildUnion(clang::ASTContext &ast_ctx, |
| lldb_utility::StringLexer &type, |
| bool for_expression); |
| |
| clang::QualType BuildArray(clang::ASTContext &ast_ctx, |
| lldb_utility::StringLexer &type, |
| bool for_expression); |
| |
| std::string ReadStructName(lldb_utility::StringLexer &type); |
| |
| StructElement ReadStructElement(clang::ASTContext &ast_ctx, |
| lldb_utility::StringLexer &type, |
| bool for_expression); |
| |
| clang::QualType BuildObjCObjectPointerType(clang::ASTContext &ast_ctx, |
| lldb_utility::StringLexer &type, |
| bool for_expression); |
| |
| uint32_t ReadNumber(lldb_utility::StringLexer &type); |
| |
| std::string ReadQuotedString(lldb_utility::StringLexer &type); |
| |
| ObjCLanguageRuntime &m_runtime; |
| }; |
| |
| } // namespace lldb_private |
| |
| #endif // liblldb_AppleObjCTypeEncodingParser_h_ |