File: non-tbp-dio.h

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (55 lines) | stat: -rw-r--r-- 2,206 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//===-- 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_