Commit 4fae60c4 authored by Diana Picus's avatar Diana Picus
Browse files

[flang] Add runtime interface for GET_COMMAND_ARGUMENT

GET_COMMAND_ARGUMENT takes a lot of optional arguments: VALUE, LENGTH,
STATUS and ERRMSG. This patch breaks up the interface into 2 different
functions:

* One for getting the LENGTH of an argument.

* One for getting the VALUE and the ERRMSG of an argument. This returns
the STATUS, which can be easily ignored by lowering if it is missing in
the invocation.

Differential Revision: https://reviews.llvm.org/D108688
parent cc4d2869
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -13,12 +13,29 @@
#include "entry-names.h"

namespace Fortran::runtime {
class Descriptor;

extern "C" {
// 16.9.51 COMMAND_ARGUMENT_COUNT
//
// Lowering may need to cast the result to match the precision of the default
// integer kind.
CppTypeFor<TypeCategory::Integer, 4> RTNAME(ArgumentCount)();

// 16.9.83 GET_COMMAND_ARGUMENT
// We're breaking up the interface into several different functions, since most
// of the parameters are optional.

// Try to get the value of the n'th argument.
// Returns a STATUS as described in the standard.
CppTypeFor<TypeCategory::Integer, 4> RTNAME(ArgumentValue)(
    CppTypeFor<TypeCategory::Integer, 4> n, const Descriptor *value,
    const Descriptor *errmsg);

// Try to get the significant length of the n'th argument.
// Returns 0 if it doesn't manage.
CppTypeFor<TypeCategory::Integer, 4> RTNAME(ArgumentLength)(
    CppTypeFor<TypeCategory::Integer, 4> n);
}
} // namespace Fortran::runtime