55 lines
2.2 KiB
C++
55 lines
2.2 KiB
C++
//===-- 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 {
|
|
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_
|