//===-- 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_