9#ifndef FORTRAN_PARSER_FORMAT_SPECIFICATION_H_
10#define FORTRAN_PARSER_FORMAT_SPECIFICATION_H_
21#include "flang/Common/idioms.h"
28namespace Fortran::format {
39 enum class Kind { I, B, O, Z, F, E, EN, ES, EX, G, L, A, D };
44 std::optional<int> &&d, std::optional<int> &&e)
45 : kind{k}, width{std::move(w)}, digits{std::move(d)}, exponentWidth{
48 std::optional<int> width;
49 std::optional<int> digits;
50 std::optional<int> exponentWidth;
61 : type{std::move(t)}, parameters{std::move(p)} {}
63 std::list<std::int64_t> parameters;
108 std::int64_t count{1};
120 template <
typename A,
typename = common::NoLvalue<A>>
121 FormatItem(std::optional<std::uint64_t> &&r, A &&x)
122 : repeatCount{std::move(r)}, u{std::move(x)} {}
123 template <
typename A,
typename = common::NoLvalue<A>>
124 explicit FormatItem(A &&x) : u{std::move(x)} {}
125 std::optional<std::uint64_t> repeatCount;
140 : items(std::move(is)) {}
142 : items(std::move(is)), unlimitedItems(std::move(us)) {}
143 std::list<FormatItem> items, unlimitedItems;