|  | //===-- runtime/type-code.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 | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #ifndef FORTRAN_RUNTIME_TYPE_CODE_H_ | 
|  | #define FORTRAN_RUNTIME_TYPE_CODE_H_ | 
|  |  | 
|  | #include "flang/Common/Fortran.h" | 
|  | #include "flang/ISO_Fortran_binding.h" | 
|  |  | 
|  | namespace Fortran::runtime { | 
|  |  | 
|  | using common::TypeCategory; | 
|  |  | 
|  | class TypeCode { | 
|  | public: | 
|  | TypeCode() {} | 
|  | explicit TypeCode(ISO::CFI_type_t t) : raw_{t} {} | 
|  | TypeCode(TypeCategory, int kind); | 
|  |  | 
|  | int raw() const { return raw_; } | 
|  |  | 
|  | constexpr bool IsValid() const { | 
|  | return raw_ >= CFI_type_signed_char && raw_ <= CFI_TYPE_LAST; | 
|  | } | 
|  | constexpr bool IsInteger() const { | 
|  | return raw_ >= CFI_type_signed_char && raw_ <= CFI_type_ptrdiff_t; | 
|  | } | 
|  | constexpr bool IsReal() const { | 
|  | return raw_ >= CFI_type_float && raw_ <= CFI_type_long_double; | 
|  | } | 
|  | constexpr bool IsComplex() const { | 
|  | return raw_ >= CFI_type_float_Complex && | 
|  | raw_ <= CFI_type_long_double_Complex; | 
|  | } | 
|  | constexpr bool IsCharacter() const { | 
|  | return raw_ == CFI_type_char || raw_ == CFI_type_char16_t || | 
|  | raw_ == CFI_type_char32_t; | 
|  | } | 
|  | constexpr bool IsLogical() const { return raw_ == CFI_type_Bool; } | 
|  | constexpr bool IsDerived() const { return raw_ == CFI_type_struct; } | 
|  | constexpr bool IsIntrinsic() const { return IsValid() && !IsDerived(); } | 
|  |  | 
|  | private: | 
|  | ISO::CFI_type_t raw_{CFI_type_other}; | 
|  | }; | 
|  | } // namespace Fortran::runtime | 
|  | #endif // FORTRAN_RUNTIME_TYPE_CODE_H_ |