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