xref: /freebsd-src/contrib/llvm-project/clang/include/clang/AST/ASTImportError.h (revision 753f127f3ace09432b2baeffd71a308760641a62)
1*81ad6265SDimitry Andric //===- ASTImportError.h - Define errors while importing AST -----*- C++ -*-===//
2*81ad6265SDimitry Andric //
3*81ad6265SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*81ad6265SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*81ad6265SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*81ad6265SDimitry Andric //
7*81ad6265SDimitry Andric //===----------------------------------------------------------------------===//
8*81ad6265SDimitry Andric //
9*81ad6265SDimitry Andric //  This file defines the ASTImportError class which basically defines the kind
10*81ad6265SDimitry Andric //  of error while importing AST .
11*81ad6265SDimitry Andric //
12*81ad6265SDimitry Andric //===----------------------------------------------------------------------===//
13*81ad6265SDimitry Andric 
14*81ad6265SDimitry Andric #ifndef LLVM_CLANG_AST_ASTIMPORTERROR_H
15*81ad6265SDimitry Andric #define LLVM_CLANG_AST_ASTIMPORTERROR_H
16*81ad6265SDimitry Andric 
17*81ad6265SDimitry Andric #include "llvm/Support/Error.h"
18*81ad6265SDimitry Andric 
19*81ad6265SDimitry Andric namespace clang {
20*81ad6265SDimitry Andric 
21*81ad6265SDimitry Andric class ASTImportError : public llvm::ErrorInfo<ASTImportError> {
22*81ad6265SDimitry Andric public:
23*81ad6265SDimitry Andric   /// \brief Kind of error when importing an AST component.
24*81ad6265SDimitry Andric   enum ErrorKind {
25*81ad6265SDimitry Andric     NameConflict,         /// Naming ambiguity (likely ODR violation).
26*81ad6265SDimitry Andric     UnsupportedConstruct, /// Not supported node or case.
27*81ad6265SDimitry Andric     Unknown               /// Other error.
28*81ad6265SDimitry Andric   };
29*81ad6265SDimitry Andric 
30*81ad6265SDimitry Andric   ErrorKind Error;
31*81ad6265SDimitry Andric 
32*81ad6265SDimitry Andric   static char ID;
33*81ad6265SDimitry Andric 
ASTImportError()34*81ad6265SDimitry Andric   ASTImportError() : Error(Unknown) {}
ASTImportError(const ASTImportError & Other)35*81ad6265SDimitry Andric   ASTImportError(const ASTImportError &Other) : Error(Other.Error) {}
36*81ad6265SDimitry Andric   ASTImportError &operator=(const ASTImportError &Other) {
37*81ad6265SDimitry Andric     Error = Other.Error;
38*81ad6265SDimitry Andric     return *this;
39*81ad6265SDimitry Andric   }
ASTImportError(ErrorKind Error)40*81ad6265SDimitry Andric   ASTImportError(ErrorKind Error) : Error(Error) {}
41*81ad6265SDimitry Andric 
42*81ad6265SDimitry Andric   std::string toString() const;
43*81ad6265SDimitry Andric 
44*81ad6265SDimitry Andric   void log(llvm::raw_ostream &OS) const override;
45*81ad6265SDimitry Andric   std::error_code convertToErrorCode() const override;
46*81ad6265SDimitry Andric };
47*81ad6265SDimitry Andric 
48*81ad6265SDimitry Andric } // namespace clang
49*81ad6265SDimitry Andric 
50*81ad6265SDimitry Andric #endif // LLVM_CLANG_AST_ASTIMPORTERROR_H
51