9#ifndef FORTRAN_PARSER_INSTRUMENTED_PARSER_H_
10#define FORTRAN_PARSER_INSTRUMENTED_PARSER_H_
12#include "parse-state.h"
13#include "user-state.h"
14#include "flang/Parser/message.h"
15#include "flang/Parser/provenance.h"
37 struct LogForPosition {
45 std::map<MessageFixedText, Entry> perTag;
47 std::map<std::size_t, LogForPosition> perPos_;
52 using resultType =
typename PA::resultType;
55 : tag_{tag}, parser_{parser} {}
56 std::optional<resultType> Parse(
ParseState &state)
const {
57 if (
UserState * ustate{state.userState()}) {
59 const char *at{state.GetLocation()};
60 if (log->Fails(at, tag_, state)) {
63 Messages messages{std::move(state.messages())};
64 std::optional<resultType> result{parser_.Parse(state)};
65 log->Note(at, tag_, result.has_value(), state);
66 state.messages().Annex(std::move(messages));
70 return parser_.Parse(state);
79inline constexpr auto instrumented(
Definition: provenance.h:281
Definition: instrumented-parser.h:50
Definition: message.h:319
Definition: parse-state.h:35
Definition: instrumented-parser.h:25
Definition: user-state.h:35
Definition: check-expression.h:19
Definition: instrumented-parser.h:38