9#ifndef FORTRAN_EVALUATE_INTRINSICS_H_
10#define FORTRAN_EVALUATE_INTRINSICS_H_
13#include "characteristics.h"
15#include "flang/Common/default-kinds.h"
16#include "flang/Parser/char-block.h"
17#include "flang/Parser/message.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;
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;
91 IntrinsicClass GetIntrinsicClass(
const std::string &)
const;
96 std::string GetGenericIntrinsicName(
const std::string &)
const;
105 std::optional<SpecificCall> Probe(
109 std::optional<SpecificIntrinsicFunctionInterface> IsSpecificIntrinsicFunction(
110 const std::string &)
const;
114 static const inline std::string InvalidName{
115 "(invalid intrinsic function call)"};
117 llvm::raw_ostream &Dump(llvm::raw_ostream &)
const;
120 std::unique_ptr<Implementation> impl_;
125bool AcceptsIntentOutAllocatableCoarray(
const std::string &);
Definition: default-kinds.h:26
Definition: intrinsics.h:40
Definition: intrinsics.h:45
Definition: intrinsics.h:52
Definition: characteristics.h:355