6#ifndef MIMICPP_PRINTING_TYPE_PARSER_STATE_HPP
7#define MIMICPP_PRINTING_TYPE_PARSER_STATE_HPP
16#ifndef MIMICPP_DETAIL_IS_MODULE
41 : m_inner{std::move(value)}
106 return !std::exchange(
isConst,
true);
156 std::array<lexing::operator_or_punctuator, 2u>>;
162 if (
auto const*
const doubleOp = std::get_if<std::array<lexing::operator_or_punctuator, 2u>>(&
symbol))
226 using TypeKey = std::variant<ClassKey, EnumKey>;
241 std::optional<ConstantExpression>
size{};
282 std::optional<Recursive<Layer>>
nested{};
298 std::optional<lexing::keyword>
base{};
320 return try_apply_size_spec(keyword)
321 || try_apply_signed_spec(keyword)
322 || try_apply_base(keyword);
345 std::optional
const spec = std::invoke([&]() -> std::optional<SignedSpec> {
372 std::optional
const spec = std::invoke([&]() -> std::optional<SizeSpec> {
373 if (lexing::keyword{
"long"} == keyword)
378 if (lexing::keyword{
"short"} == keyword)
384 if (lexing::keyword{
"__int64"} == keyword)
436 template <
typename T>
438 template <
typename T>
440 template <
typename T>
442 template <
typename T>
444 template <typename T>
446 template <typename T>
#define MIMICPP_DETAIL_CONSTEXPR_PRETTY_TYPES
Definition Config.hpp:93
Definition ParserState.hpp:31
constexpr Recursive(Recursive const &)
constexpr T const & operator*() const noexcept
Definition ParserState.hpp:52
constexpr T & operator*() noexcept
Definition ParserState.hpp:46
constexpr bool operator==(Recursive const &) const
explicit(false) const expr Recursive(T value)
Definition ParserState.hpp:40
constexpr Recursive & operator=(Recursive const &)
constexpr Recursive(Recursive &&) noexcept
Simple copyable value type, which owns a heap-allocated value.
Definition CopyableBox.hpp:31
Definition ParserState.hpp:26
EnumKey
Definition ParserState.hpp:80
@ id_enum_class
Definition ParserState.hpp:82
@ id_enum
Definition ParserState.hpp:81
@ id_enum_struct
Definition ParserState.hpp:83
lexing::literal ConstantExpression
Definition ParserState.hpp:123
std::vector< TemplateArgument > TemplateArgumentList
Definition ParserState.hpp:149
std::variant< ReferenceDeclarator, PointerDeclarator > PtrOperator
Definition ParserState.hpp:273
std::variant< ClassKey, EnumKey > TypeKey
Definition ParserState.hpp:226
RefQualifier
Definition ParserState.hpp:118
@ id_ref
Definition ParserState.hpp:119
@ id_refref
Definition ParserState.hpp:120
std::variant< QualifiedId, BuiltinType > BaseType
Definition ParserState.hpp:412
ClassKey
Definition ParserState.hpp:72
@ id_union
Definition ParserState.hpp:75
@ id_struct
Definition ParserState.hpp:74
@ id_class
Definition ParserState.hpp:73
std::variant< ConstantExpression, Recursive< TypeId > > TemplateArgument
Definition ParserState.hpp:145
CVQualifier
Definition ParserState.hpp:87
@ id_volatile
Definition ParserState.hpp:89
@ id_const
Definition ParserState.hpp:88
void unreachable()
Invokes undefined behavior.
Definition C++23Backports.hpp:40
Definition ParserState.hpp:280
std::optional< Recursive< Layer > > nested
Definition ParserState.hpp:282
std::vector< PtrOperator > decorations
Definition ParserState.hpp:281
std::optional< FunctionDeclarator > function
Definition ParserState.hpp:283
bool operator==(Layer const &) const =default
std::vector< ArrayDeclarator > arrays
Definition ParserState.hpp:284
Definition ParserState.hpp:278
Layer root
Definition ParserState.hpp:290
bool operator==(AbstractDeclarator const &) const =default
Definition ParserState.hpp:240
bool operator==(ArrayDeclarator const &) const =default
std::optional< ConstantExpression > size
Definition ParserState.hpp:241
Definition ParserState.hpp:297
std::optional< SignedSpec > signedSpec
Definition ParserState.hpp:315
MIMICPP_DETAIL_CONSTEXPR_PRETTY_TYPES bool try_apply(lexing::keyword const &keyword)
Definition ParserState.hpp:318
SizeSpec
Definition ParserState.hpp:301
@ id_short
Definition ParserState.hpp:302
@ id_longlong
Definition ParserState.hpp:304
@ id_long
Definition ParserState.hpp:303
std::optional< SizeSpec > sizeSpec
Definition ParserState.hpp:307
std::optional< lexing::keyword > base
Definition ParserState.hpp:298
SignedSpec
Definition ParserState.hpp:310
@ id_signed
Definition ParserState.hpp:311
@ id_unsigned
Definition ParserState.hpp:312
bool operator==(BuiltinType const &) const =default
Definition ParserState.hpp:93
constexpr bool apply(CVQualifier const qualifier) noexcept
Definition ParserState.hpp:101
bool isVolatile
Definition ParserState.hpp:95
bool isConst
Definition ParserState.hpp:94
bool operator==(CVQualifierSeq const &) const =default
Definition ParserState.hpp:248
bool operator==(CallConvention const &) const =default
lexing::identifier name
Definition ParserState.hpp:249
Definition ParserState.hpp:176
Recursive< TypeId > target
Definition ParserState.hpp:177
bool operator==(ConversionFunctionId const &) const =default
Definition ParserState.hpp:193
bool operator==(DestructorFunctionId const &) const =default
Identifier name
Definition ParserState.hpp:194
Definition ParserState.hpp:135
CVQualifierSeq qualifiers
Definition ParserState.hpp:137
bool isNoexcept
Definition ParserState.hpp:139
bool operator==(FunctionDeclarator const &) const =default
std::vector< Recursive< TypeId > > params
Definition ParserState.hpp:136
std::optional< RefQualifier > refQualifier
Definition ParserState.hpp:138
Definition ParserState.hpp:427
bool operator==(FunctionId const &) const =default
QualifiedId identifier
Definition ParserState.hpp:430
std::optional< TypeId > returnType
Definition ParserState.hpp:428
std::optional< CallConvention > callConvention
Definition ParserState.hpp:429
Definition ParserState.hpp:126
std::string_view content
Definition ParserState.hpp:127
bool operator==(Identifier const &) const =default
bool isSynthetic
Definition ParserState.hpp:128
Definition ParserState.hpp:184
bool isMutable
Definition ParserState.hpp:186
bool operator==(LambdaFunctionId const &) const =default
std::string_view content
Definition ParserState.hpp:185
Definition ParserState.hpp:152
constexpr bool is_call() const noexcept
Definition ParserState.hpp:160
bool operator==(OperatorFunctionId const &) const =default
std::variant< lexing::operator_or_punctuator, std::pair< lexing::keyword, bool >, std::array< lexing::operator_or_punctuator, 2u > > Symbol
Definition ParserState.hpp:153
Symbol symbol
Definition ParserState.hpp:157
Definition ParserState.hpp:256
std::optional< ScopeSequence > scopes
Definition ParserState.hpp:258
std::optional< CVQualifierSeq > qualifiers
Definition ParserState.hpp:257
bool operator==(PointerDeclarator const &) const =default
std::optional< CallConvention > callConvention
Definition ParserState.hpp:259
Definition ParserState.hpp:230
UnqualifiedId identifier
Definition ParserState.hpp:232
bool operator==(QualifiedId const &) const =default
std::optional< TypeKey > typeKey
Definition ParserState.hpp:233
ScopeSequence scopes
Definition ParserState.hpp:231
Definition ParserState.hpp:266
RefQualifier qualifier
Definition ParserState.hpp:267
bool operator==(ReferenceDeclarator const &) const =default
Definition ParserState.hpp:218
bool explicitRoot
Definition ParserState.hpp:219
bool operator==(ScopeSequence const &) const =default
std::vector< UnqualifiedId > scopes
Definition ParserState.hpp:220
Definition ParserState.hpp:417
CVQualifierSeq qualifications
Definition ParserState.hpp:418
AbstractDeclarator declarator
Definition ParserState.hpp:420
bool operator==(TypeId const &) const =default
BaseType base
Definition ParserState.hpp:419
Definition ParserState.hpp:201
bool operator==(UnqualifiedId const &) const =default
std::variant< Identifier, OperatorFunctionId, ConversionFunctionId, LambdaFunctionId, DestructorFunctionId > Name
Definition ParserState.hpp:202
Name name
Definition ParserState.hpp:208
std::optional< FunctionDeclarator > functionDeclarator
Definition ParserState.hpp:210
std::optional< TemplateArgumentList > templateArgs
Definition ParserState.hpp:209