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 # This file contains the keys expected to be in MSE locales
# It was automatically generated by tools/locale/locale.pl # 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: action:
add control point: 0 add control point: 0
...@@ -84,10 +84,10 @@ button: ...@@ -84,10 +84,10 @@ button:
select all: 0 select all: 0
select cards: 0 select cards: 0
select none: 0 select none: 0
spellcheck enabled: 0
show: 0 show: 0
show editing hints: 0 show editing hints: 0
show lines: 0 show lines: 0
spellcheck enabled: 0
symbol gallery: optional, 0 symbol gallery: optional, 0
upgrade group: optional, 0 upgrade group: optional, 0
upgrade package: 0 upgrade package: 0
...@@ -137,7 +137,7 @@ error: ...@@ -137,7 +137,7 @@ error:
successful install: optional, 2 successful install: optional, 2
unable to open output file: 0 unable to open output file: 0
unable to store file: 0 unable to store file: 0
unrecognized value: 1 unrecognized value: 2
unsupported field type: 1 unsupported field type: 1
unsupported fill type: 1 unsupported fill type: 1
unsupported format: 1 unsupported format: 1
......
...@@ -429,14 +429,20 @@ template <> void Reader::handle(FileName& f) { ...@@ -429,14 +429,20 @@ template <> void Reader::handle(FileName& f) {
// ----------------------------------------------------------------------------- : EnumReader // ----------------------------------------------------------------------------- : 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) { void EnumReader::warnIfNotDone(Reader* errors_to) {
if (!done) { if (!done) {
// warning: unknown value // warning: unknown value
errors_to->warning(_ERROR_1_("unrecognized value", read)); errors_to->warning(notDoneErrorMessage());
} }
} }
void EnumReader::errorIfNotDone() { void EnumReader::errorIfNotDone() {
if (!done) { if (!done) {
throw ParseError(_ERROR_1_("unrecognized value", read)); throw ParseError(notDoneErrorMessage());
} }
} }
...@@ -268,20 +268,21 @@ void Reader::handle(IndexMap<K,V>& m) { ...@@ -268,20 +268,21 @@ void Reader::handle(IndexMap<K,V>& m) {
class EnumReader { class EnumReader {
public: public:
inline EnumReader(String read) 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 /// Handle a possible value for the enum, if the name matches the name in the input
template <typename Enum> template <typename Enum>
inline void handle(const Char* name, Enum value, Enum& enum_) { inline void handle(const Char* name, Enum value, Enum& enum_) {
if (!done && read == name) { if (!done) {
if (read == name) {
done = true; done = true;
first = false;
enum_ = value; enum_ = value;
} else if (first) { } else if (!first) {
first = false; first = name;
enum_ = value; enum_ = value;
} }
} }
}
inline bool isDone() const { return done; } inline bool isDone() const { return done; }
void warnIfNotDone(Reader* errors_to); void warnIfNotDone(Reader* errors_to);
...@@ -289,8 +290,10 @@ class EnumReader { ...@@ -289,8 +290,10 @@ class EnumReader {
private: private:
String read; ///< The string to match to a value name 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? bool done; ///< Was anything matched?
String notDoneErrorMessage() const;
}; };
// ----------------------------------------------------------------------------- : EOF // ----------------------------------------------------------------------------- : 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