AppleObjCTypeEncodingParser.h revision 353358
117651Speter//===-- AppleObjCTypeEncodingParser.h ---------------------------*- C++ -*-===// 2205471Sdelphij// 3131380Stjr// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 417651Speter// See https://llvm.org/LICENSE.txt for license information. 517651Speter// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 617651Speter// 717651Speter//===----------------------------------------------------------------------===// 817651Speter 9131380Stjr#ifndef liblldb_AppleObjCTypeEncodingParser_h_ 1042468Speter#define liblldb_AppleObjCTypeEncodingParser_h_ 1133904Ssteve 12205471Sdelphij#include "clang/AST/ASTContext.h" 1317651Speter 1417651Speter#include "lldb/lldb-private.h" 1517651Speter 1617651Speter#include "Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.h" 1717651Speter 1817651Speternamespace lldb_utility { 1917651Speterclass StringLexer; 20131380Stjr} 21131380Stjr 22131380Stjrnamespace lldb_private { 23131380Stjr 24131380Stjrclass AppleObjCTypeEncodingParser : public ObjCLanguageRuntime::EncodingToType { 25131380Stjrpublic: 26131380Stjr AppleObjCTypeEncodingParser(ObjCLanguageRuntime &runtime); 27131380Stjr ~AppleObjCTypeEncodingParser() override = default; 28131380Stjr 29131380Stjr CompilerType RealizeType(clang::ASTContext &ast_ctx, const char *name, 30131380Stjr bool for_expression) override; 31131380Stjr 32131380Stjrprivate: 33131380Stjr struct StructElement { 34131380Stjr std::string name; 35131380Stjr clang::QualType type; 36131380Stjr uint32_t bitfield; 37131380Stjr 38131380Stjr StructElement(); 39131380Stjr ~StructElement() = default; 40131380Stjr }; 41131380Stjr 42131380Stjr clang::QualType BuildType(clang::ASTContext &ast_ctx, 43131380Stjr lldb_utility::StringLexer &type, 44131380Stjr bool for_expression, 45131380Stjr uint32_t *bitfield_bit_size = nullptr); 46131380Stjr 47131380Stjr clang::QualType BuildStruct(clang::ASTContext &ast_ctx, 48131380Stjr lldb_utility::StringLexer &type, 49131380Stjr bool for_expression); 50131380Stjr 51131380Stjr clang::QualType BuildAggregate(clang::ASTContext &ast_ctx, 52131380Stjr lldb_utility::StringLexer &type, 53205471Sdelphij bool for_expression, char opener, char closer, 54131380Stjr uint32_t kind); 55131380Stjr 56131380Stjr clang::QualType BuildUnion(clang::ASTContext &ast_ctx, 57131380Stjr lldb_utility::StringLexer &type, 58131380Stjr bool for_expression); 59131380Stjr 60131380Stjr clang::QualType BuildArray(clang::ASTContext &ast_ctx, 6117651Speter lldb_utility::StringLexer &type, 6217651Speter bool for_expression); 63131380Stjr 64131380Stjr std::string ReadStructName(lldb_utility::StringLexer &type); 65205471Sdelphij 66131380Stjr StructElement ReadStructElement(clang::ASTContext &ast_ctx, 6717651Speter lldb_utility::StringLexer &type, 6817651Speter bool for_expression); 69131380Stjr 70131380Stjr clang::QualType BuildObjCObjectPointerType(clang::ASTContext &ast_ctx, 71131380Stjr lldb_utility::StringLexer &type, 72131380Stjr bool for_expression); 73131380Stjr 7417651Speter uint32_t ReadNumber(lldb_utility::StringLexer &type); 75131380Stjr 76131380Stjr std::string ReadQuotedString(lldb_utility::StringLexer &type); 77131380Stjr 78131380Stjr ObjCLanguageRuntime &m_runtime; 79131380Stjr}; 80131380Stjr 81131380Stjr} // namespace lldb_private 82131380Stjr 83131380Stjr#endif // liblldb_AppleObjCTypeEncodingParser_h_ 84131380Stjr