Commit d7f6c320 authored by twanvl's avatar twanvl

slightly better error messages when reading an enum value fails: also report the default used

parent a642b71a
# This file contains the keys expected to be in MSE locales
# It was automatically generated by tools/locale/locale.pl
# Generated on Sun Jan 11 17:40:25 2009
# Generated on Mon Aug 2 23:18:19 2010
action:
add control point: 0
......@@ -84,10 +84,10 @@ button:
select all: 0
select cards: 0
select none: 0
spellcheck enabled: 0
show: 0
show editing hints: 0
show lines: 0
spellcheck enabled: 0
symbol gallery: optional, 0
upgrade group: optional, 0
upgrade package: 0
......@@ -137,7 +137,7 @@ error:
successful install: optional, 2
unable to open output file: 0
unable to store file: 0
unrecognized value: 1
unrecognized value: 2
unsupported field type: 1
unsupported fill type: 1
unsupported format: 1
......
......@@ -429,14 +429,20 @@ template <> void Reader::handle(FileName& f) {
// ----------------------------------------------------------------------------- : EnumReader
String EnumReader::notDoneErrorMessage() const {
if (!first) throw InternalError(_("No first value in EnumReader"));
return _ERROR_2_("unrecognized value", read, first);
}
void EnumReader::warnIfNotDone(Reader* errors_to) {
if (!done) {
// warning: unknown value
errors_to->warning(_ERROR_1_("unrecognized value", read));
errors_to->warning(notDoneErrorMessage());
}
}
void EnumReader::errorIfNotDone() {
if (!done) {
throw ParseError(_ERROR_1_("unrecognized value", read));
throw ParseError(notDoneErrorMessage());
}
}
......@@ -268,20 +268,21 @@ void Reader::handle(IndexMap<K,V>& m) {
class EnumReader {
public:
inline EnumReader(String read)
: read(read), first(true), done(false) {}
: read(read), first(nullptr), done(false) {}
/// Handle a possible value for the enum, if the name matches the name in the input
template <typename Enum>
inline void handle(const Char* name, Enum value, Enum& enum_) {
if (!done && read == name) {
if (!done) {
if (read == name) {
done = true;
first = false;
enum_ = value;
} else if (first) {
first = false;
} else if (!first) {
first = name;
enum_ = value;
}
}
}
inline bool isDone() const { return done; }
void warnIfNotDone(Reader* errors_to);
......@@ -289,8 +290,10 @@ class EnumReader {
private:
String read; ///< The string to match to a value name
bool first; ///< Has the first (default) value been matched?
Char const* first; ///< Has the first (default) value been handled? If so, what is its name.
bool done; ///< Was anything matched?
String notDoneErrorMessage() const;
};
// ----------------------------------------------------------------------------- : EOF
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment