Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-10 08:43:44

0001 //===- MSFError.h - Error extensions for MSF Files --------------*- C++ -*-===//
0002 //
0003 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
0004 // See https://llvm.org/LICENSE.txt for license information.
0005 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0006 //
0007 //===----------------------------------------------------------------------===//
0008 
0009 #ifndef LLVM_DEBUGINFO_MSF_MSFERROR_H
0010 #define LLVM_DEBUGINFO_MSF_MSFERROR_H
0011 
0012 #include "llvm/Support/Error.h"
0013 
0014 namespace llvm {
0015 namespace msf {
0016 enum class msf_error_code {
0017   unspecified = 1,
0018   insufficient_buffer,
0019   not_writable,
0020   no_stream,
0021   invalid_format,
0022   block_in_use,
0023   size_overflow_4096,
0024   size_overflow_8192,
0025   size_overflow_16384,
0026   size_overflow_32768,
0027   stream_directory_overflow,
0028 };
0029 } // namespace msf
0030 } // namespace llvm
0031 
0032 namespace std {
0033 template <>
0034 struct is_error_code_enum<llvm::msf::msf_error_code> : std::true_type {};
0035 } // namespace std
0036 
0037 namespace llvm {
0038 namespace msf {
0039 const std::error_category &MSFErrCategory();
0040 
0041 inline std::error_code make_error_code(msf_error_code E) {
0042   return std::error_code(static_cast<int>(E), MSFErrCategory());
0043 }
0044 
0045 /// Base class for errors originating when parsing raw PDB files
0046 class MSFError : public ErrorInfo<MSFError, StringError> {
0047 public:
0048   using ErrorInfo<MSFError, StringError>::ErrorInfo; // inherit constructors
0049   MSFError(const Twine &S) : ErrorInfo(S, msf_error_code::unspecified) {}
0050 
0051   bool isPageOverflow() const {
0052     switch (static_cast<msf_error_code>(convertToErrorCode().value())) {
0053     case msf_error_code::unspecified:
0054     case msf_error_code::insufficient_buffer:
0055     case msf_error_code::not_writable:
0056     case msf_error_code::no_stream:
0057     case msf_error_code::invalid_format:
0058     case msf_error_code::block_in_use:
0059       return false;
0060     case msf_error_code::size_overflow_4096:
0061     case msf_error_code::size_overflow_8192:
0062     case msf_error_code::size_overflow_16384:
0063     case msf_error_code::size_overflow_32768:
0064     case msf_error_code::stream_directory_overflow:
0065       return true;
0066     }
0067     llvm_unreachable("msf error code not implemented");
0068   }
0069 
0070   static char ID;
0071 };
0072 } // namespace msf
0073 } // namespace llvm
0074 
0075 #endif // LLVM_DEBUGINFO_MSF_MSFERROR_H