llvm/llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h

//===- MicrosoftDemangleNodes.h ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// This file defines the AST nodes used in the MSVC demangler.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_DEMANGLE_MICROSOFTDEMANGLENODES_H
#define LLVM_DEMANGLE_MICROSOFTDEMANGLENODES_H

#include <array>
#include <cstdint>
#include <string>
#include <string_view>

namespace llvm {
namespace itanium_demangle {
class OutputBuffer;
}
}

OutputBuffer;

namespace llvm {
namespace ms_demangle {

// Storage classes
enum Qualifiers : uint8_t {};

enum class StorageClass : uint8_t {};

enum class PointerAffinity {};
enum class FunctionRefQualifier {};

// Calling conventions
enum class CallingConv : uint8_t {};

enum class ReferenceKind : uint8_t {};

enum OutputFlags {};

// Types
enum class PrimitiveKind {};

enum class CharKind {};

enum class IntrinsicFunctionKind : uint8_t {};

enum class SpecialIntrinsicKind {};

// Function classes
enum FuncClass : uint16_t {};

enum class TagKind {};

enum class NodeKind {};

struct Node {};

struct TypeNode;
struct PrimitiveTypeNode;
struct FunctionSignatureNode;
struct IdentifierNode;
struct NamedIdentifierNode;
struct VcallThunkIdentifierNode;
struct IntrinsicFunctionIdentifierNode;
struct LiteralOperatorIdentifierNode;
struct ConversionOperatorIdentifierNode;
struct StructorIdentifierNode;
struct ThunkSignatureNode;
struct PointerTypeNode;
struct ArrayTypeNode;
struct TagTypeNode;
struct NodeArrayNode;
struct QualifiedNameNode;
struct TemplateParameterReferenceNode;
struct EncodedStringLiteralNode;
struct IntegerLiteralNode;
struct RttiBaseClassDescriptorNode;
struct LocalStaticGuardVariableNode;
struct SymbolNode;
struct FunctionSymbolNode;
struct VariableSymbolNode;
struct SpecialTableSymbolNode;

struct TypeNode : public Node {};

struct PrimitiveTypeNode : public TypeNode {};

struct FunctionSignatureNode : public TypeNode {};

struct IdentifierNode : public Node {};

struct VcallThunkIdentifierNode : public IdentifierNode {};

struct DynamicStructorIdentifierNode : public IdentifierNode {};

struct NamedIdentifierNode : public IdentifierNode {};

struct IntrinsicFunctionIdentifierNode : public IdentifierNode {};

struct LiteralOperatorIdentifierNode : public IdentifierNode {};

struct LocalStaticGuardIdentifierNode : public IdentifierNode {};

struct ConversionOperatorIdentifierNode : public IdentifierNode {};

struct StructorIdentifierNode : public IdentifierNode {};

struct ThunkSignatureNode : public FunctionSignatureNode {};

struct PointerTypeNode : public TypeNode {};

struct TagTypeNode : public TypeNode {};

struct ArrayTypeNode : public TypeNode {};

struct IntrinsicNode : public TypeNode {};

struct CustomTypeNode : public TypeNode {};

struct NodeArrayNode : public Node {};

struct QualifiedNameNode : public Node {};

struct TemplateParameterReferenceNode : public Node {};

struct IntegerLiteralNode : public Node {};

struct RttiBaseClassDescriptorNode : public IdentifierNode {};

struct SymbolNode : public Node {};

struct SpecialTableSymbolNode : public SymbolNode {};

struct LocalStaticGuardVariableNode : public SymbolNode {};

struct EncodedStringLiteralNode : public SymbolNode {};

struct VariableSymbolNode : public SymbolNode {};

struct FunctionSymbolNode : public SymbolNode {};

} // namespace ms_demangle
} // namespace llvm

#endif