[flang] Resolve an old TODO by flattening a std::optional<std::optional<>>.

Original-commit: flang-compiler/f18@05f47831fc
Reviewed-on: https://github.com/flang-compiler/f18/pull/73
Tree-same-pre-rewrite: false
This commit is contained in:
peter klausler 2018-04-24 15:46:16 -07:00
parent 69e3842d60
commit 66c98ee4ca
3 changed files with 4 additions and 4 deletions

View file

@ -1253,7 +1253,7 @@ TYPE_PARSER(construct<EquivalenceObject>(indirect(designator)))
// R873 common-stmt ->
// COMMON [/ [common-block-name] /] common-block-object-list
// [[,] / [common-block-name] / common-block-object-list]...
TYPE_PARSER(construct<CommonStmt>("COMMON" >> maybe("/" >> maybe(name) / "/"),
TYPE_PARSER(construct<CommonStmt>("COMMON" >> defaulted("/" >> maybe(name) / "/"),
nonemptyList(Parser<CommonBlockObject>{}),
many(
maybe(","_tok) >> construct<CommonStmt::Block>("/" >> maybe(name) / "/",

View file

@ -1500,8 +1500,8 @@ struct CommonStmt {
std::tuple<std::optional<Name>, std::list<CommonBlockObject>> t;
};
TUPLE_CLASS_BOILERPLATE(CommonStmt);
std::tuple<std::optional<std::optional<Name>>, // TODO: flatten
std::list<CommonBlockObject>, std::list<Block>>
std::tuple<std::optional<Name>, std::list<CommonBlockObject>,
std::list<Block>>
t;
};

View file

@ -653,7 +653,7 @@ public:
}
void Unparse(const CommonStmt &x) { // R873
Word("COMMON ");
Walk("/", std::get<std::optional<std::optional<Name>>>(x.t), "/");
Walk("/", std::get<std::optional<Name>>(x.t), "/");
Walk(std::get<std::list<CommonBlockObject>>(x.t), ", ");
Walk(", ", std::get<std::list<CommonStmt::Block>>(x.t), ", ");
}