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