Report errors in string escape sequences more verbosely

This commit is contained in:
Thomas Krijnen
2016-07-19 16:41:36 +02:00
parent cd2b0c3a05
commit fd4086aa8d
3 changed files with 21 additions and 4 deletions
+2 -2
View File
@@ -218,7 +218,7 @@ IfcCharacterDecoder::operator std::string() {
(current_char == '\'' && parse_state == APOSTROPHE)
) ) {
if ( parse_state == APOSTROPHE && current_char != '\'' ) break;
throw IfcException("Invalid character encountered");
throw IfcInvalidTokenException(file->Tell(), current_char);
} else {
parse_state = hex = hex_count = 0;
// NOTE: this is in fact wrong, this ought to be the representation of the character.
@@ -286,7 +286,7 @@ void IfcCharacterDecoder::dryRun() {
(current_char == '\'' && parse_state == APOSTROPHE)
) ) {
if ( parse_state == APOSTROPHE && current_char != '\'' ) break;
throw IfcException("Invalid character encountered");
throw IfcInvalidTokenException(file->Tell(), current_char);
} else {
parse_state = hex_count = 0;
}
+10
View File
@@ -67,8 +67,18 @@ namespace IfcParse {
" invalid " + expected_type
)
{}
IfcInvalidTokenException(
int token_start,
char c
)
: IfcException(
std::string("Unexpected '") + std::string(1, c) + "' at " +
boost::lexical_cast<std::string>(token_start)
)
{}
~IfcInvalidTokenException() throw () {}
};
}
#ifdef _MSC_VER
+9 -2
View File
@@ -1098,8 +1098,15 @@ bool IfcFile::Init(IfcParse::IfcSpfStream* s) {
MaxId = (std::max)(MaxId,currentId);
currentId = 0;
} else {
try { token = tokens->Next(); }
catch (... ) { token = NoneTokenPtr(); }
try {
token = tokens->Next();
} catch (const IfcException& e) {
Logger::Message(Logger::LOG_ERROR, std::string(e.what()) + ". Parsing terminated");
token = NoneTokenPtr();
} catch (...) {
Logger::Message(Logger::LOG_ERROR, "Parsing terminated");
token = NoneTokenPtr();
}
}
if ( ! (token.startPos || token.lexer) ) break;