9#ifndef FORTRAN_EVALUATE_INTRINSICS_H_
10#define FORTRAN_EVALUATE_INTRINSICS_H_
13#include "characteristics.h"
14#include "flang/Parser/char-block.h"
15#include "flang/Parser/message.h"
16#include "flang/Support/default-kinds.h"
25namespace Fortran::semantics {
35bool CheckAndRearrangeArguments(ActualArguments &, parser::ContextualMessages &,
36 const char *
const dummyKeywords[] ,
37 std::size_t trailingOptionals = 0);
41 bool isSubroutineCall{
false};
46 : specificIntrinsic{std::move(si)}, arguments{std::move(as)} {}
48 ActualArguments arguments;
52 SpecificIntrinsicFunctionInterface(
55 isRestrictedSpecific{isRestrictedSpecific} {}
56 std::string genericName;
57 bool isRestrictedSpecific;
63ENUM_CLASS(IntrinsicClass, atomicSubroutine, collectiveSubroutine,
64 elementalFunction, elementalSubroutine, inquiryFunction, pureSubroutine,
65 impureFunction, impureSubroutine, transformationalFunction, noClass)
67class IntrinsicProcTable {
71 IntrinsicProcTable() =
default;
74 ~IntrinsicProcTable();
75 IntrinsicProcTable(IntrinsicProcTable &&) =
default;
77 static IntrinsicProcTable Configure(
85 bool IsIntrinsic(
const std::string &)
const;
86 bool IsIntrinsicFunction(
const std::string &)
const;
87 bool IsIntrinsicSubroutine(
const std::string &)
const;
88 bool IsDualIntrinsic(
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)"};
118 static inline const char *
const BuiltinIntName{
"__builtin_int"};
120 llvm::raw_ostream &Dump(llvm::raw_ostream &)
const;
123 std::unique_ptr<Implementation> impl_;
128bool AcceptsIntentOutAllocatableCoarray(
const std::string &);
Definition default-kinds.h:26
Definition intrinsics.h:39
Definition characteristics.h:367