9#ifndef FORTRAN_EVALUATE_INTRINSICS_H_
10#define FORTRAN_EVALUATE_INTRINSICS_H_
13#include "characteristics.h"
15#include "flang/Parser/char-block.h"
16#include "flang/Parser/message.h"
17#include "flang/Support/default-kinds.h"
26namespace Fortran::semantics {
36bool CheckAndRearrangeArguments(ActualArguments &, parser::ContextualMessages &,
37 const char *
const dummyKeywords[] ,
38 std::size_t trailingOptionals = 0);
42 bool isSubroutineCall{
false};
47 : specificIntrinsic{std::move(si)}, arguments{std::move(as)} {}
49 ActualArguments arguments;
53 SpecificIntrinsicFunctionInterface(
56 isRestrictedSpecific{isRestrictedSpecific} {}
57 std::string genericName;
58 bool isRestrictedSpecific;
64ENUM_CLASS(IntrinsicClass, atomicSubroutine, collectiveSubroutine,
65 elementalFunction, elementalSubroutine, inquiryFunction, pureSubroutine,
66 impureSubroutine, transformationalFunction, noClass)
68class IntrinsicProcTable {
72 IntrinsicProcTable() =
default;
75 ~IntrinsicProcTable();
76 IntrinsicProcTable(IntrinsicProcTable &&) =
default;
78 static IntrinsicProcTable Configure(
86 bool IsIntrinsic(
const std::string &)
const;
87 bool IsIntrinsicFunction(
const std::string &)
const;
88 bool IsIntrinsicSubroutine(
const std::string &)
const;
89 bool IsDualIntrinsic(
const std::string &)
const;
92 IntrinsicClass GetIntrinsicClass(
const std::string &)
const;
97 std::string GetGenericIntrinsicName(
const std::string &)
const;
106 std::optional<SpecificCall> Probe(
110 std::optional<SpecificIntrinsicFunctionInterface> IsSpecificIntrinsicFunction(
111 const std::string &)
const;
115 static const inline std::string InvalidName{
116 "(invalid intrinsic function call)"};
118 llvm::raw_ostream &Dump(llvm::raw_ostream &)
const;
121 std::unique_ptr<Implementation> impl_;
126bool AcceptsIntentOutAllocatableCoarray(
const std::string &);
Definition default-kinds.h:26
Definition intrinsics.h:40
Definition characteristics.h:365