FLANG
non-tbp-dio.h
1//===-- flang/runtime/non-tbp-dio.h -----------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9// Defines a structure used to identify the non-type-bound defined I/O
10// generic interfaces that are accessible in a particular scope. This
11// table is used by some I/O APIs and is also part of the NAMELIST
12// group table.
13//
14// A specific procedure for a particular derived type must appear in
15// this table if it (a) is a dummy procedure or procedure pointer,
16// (b) is part of the defined I/O generic definition in a scope other
17// than the one that contains the derived type definition, or (c)
18// is a null pointer signifying that some specific procedure from
19// a containing scope has become inaccessible in a nested scope due
20// to the use of "IMPORT, NONE" or "IMPORT, ONLY:".
21
22#ifndef FORTRAN_RUNTIME_NON_TBP_DIO_H_
23#define FORTRAN_RUNTIME_NON_TBP_DIO_H_
24
25#include "flang/Common/Fortran-consts.h"
26#include "flang/Common/api-attrs.h"
27#include <cstddef>
28
29namespace Fortran::runtime::typeInfo {
30class DerivedType;
31} // namespace Fortran::runtime::typeInfo
32
33namespace Fortran::runtime::io {
34
36 const typeInfo::DerivedType &derivedType;
37 void (*subroutine)(); // null means no non-TBP defined I/O here
38 common::DefinedIo definedIo;
39 bool isDtvArgPolymorphic; // first dummy arg is CLASS(T)
40};
41
43 RT_API_ATTRS const NonTbpDefinedIo *Find(
44 const typeInfo::DerivedType &, common::DefinedIo) const;
45 std::size_t items{0};
46 const NonTbpDefinedIo *item{nullptr};
47 // True when the only procedures to be used are the type-bound special
48 // procedures in the type information tables and any non-null procedures
49 // in this table. When false, the entries in this table override whatever
50 // non-type-bound specific procedures might be in the type information,
51 // but the remaining specifics remain visible.
52 bool ignoreNonTbpEntries{false};
53};
54
55} // namespace Fortran::runtime::io
56#endif // FORTRAN_RUNTIME_NON_TBP_DIO_H_
Definition: type-info.h:204
Definition: non-tbp-dio.h:42
Definition: non-tbp-dio.h:35