}
if (result.has_value()) {
expr.typedExpr.reset(new GenericExprWrapper{common::Clone(*result)});
+ } else if (!fatalErrors_) {
+ CHECK(context_.AnyFatalError()); // somewhat expensive
+ fatalErrors_ = true;
}
return result;
}
auto save{analyzer.GetContextualMessages().SetLocation(*context.location())};
return analyzer.AnalyzeKindSelector(category, selector);
}
+
bool ExprChecker::Walk(const parser::Program &program) {
parser::Walk(program, *this);
return !context_.AnyFatalError();
semantics::SemanticsContext &context_;
std::map<parser::CharBlock, int> acImpliedDos_; // values are INTEGER kinds
+ bool fatalErrors_{false};
};
template<typename L, typename R>
AnalyzeExpr(context_, x);
return false;
}
+
template<typename A> bool Pre(const parser::Scalar<A> &x) {
AnalyzeExpr(context_, x);
return false;