| //===-- flang/runtime/non-tbp-dio.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 |
| // |
| //===----------------------------------------------------------------------===// |
| |
| // Defines a structure used to identify the non-type-bound defined I/O |
| // generic interfaces that are accessible in a particular scope. This |
| // table is used by some I/O APIs and is also part of the NAMELIST |
| // group table. |
| // |
| // A specific procedure for a particular derived type must appear in |
| // this table if it (a) is a dummy procedure or procedure pointer, |
| // (b) is part of the defined I/O generic definition in a scope other |
| // than the one that contains the derived type definition, or (c) |
| // is a null pointer signifying that some specific procedure from |
| // a containing scope has become inaccessible in a nested scope due |
| // to the use of "IMPORT, NONE" or "IMPORT, ONLY:". |
| |
| #ifndef FORTRAN_RUNTIME_NON_TBP_DIO_H_ |
| #define FORTRAN_RUNTIME_NON_TBP_DIO_H_ |
| |
| #include "flang/Common/Fortran.h" |
| #include <cstddef> |
| |
| namespace Fortran::runtime::typeInfo { |
| class DerivedType; |
| } // namespace Fortran::runtime::typeInfo |
| |
| namespace Fortran::runtime::io { |
| |
| struct NonTbpDefinedIo { |
| const typeInfo::DerivedType &derivedType; |
| void (*subroutine)(); // null means no non-TBP defined I/O here |
| common::DefinedIo definedIo; |
| bool isDtvArgPolymorphic; // first dummy arg is CLASS(T) |
| }; |
| |
| struct NonTbpDefinedIoTable { |
| RT_API_ATTRS const NonTbpDefinedIo *Find( |
| const typeInfo::DerivedType &, common::DefinedIo) const; |
| std::size_t items{0}; |
| const NonTbpDefinedIo *item{nullptr}; |
| // True when the only procedures to be used are the type-bound special |
| // procedures in the type information tables and any non-null procedures |
| // in this table. When false, the entries in this table override whatever |
| // non-type-bound specific procedures might be in the type information, |
| // but the remaining specifics remain visible. |
| bool ignoreNonTbpEntries{false}; |
| }; |
| |
| } // namespace Fortran::runtime::io |
| #endif // FORTRAN_RUNTIME_NON_TBP_DIO_H_ |