added error checking

This commit is contained in:
John Wiegley 2004-08-12 20:57:44 -04:00
parent 0f2ed1f5e3
commit b20ddba1d5
2 changed files with 58 additions and 15 deletions

40
main.cc
View file

@ -581,13 +581,45 @@ int main(int argc, char * argv[])
// Compile the sorting string
if (! sort_string.empty())
sort_order.reset(parse_value_expr(sort_string));
if (! sort_string.empty()) {
try {
std::istringstream stream(sort_string);
sort_order.reset(parse_value_expr(stream));
if (! stream.eof()) {
std::ostringstream err;
err << "Unexpected character '" << char(stream.peek()) << "'";
throw value_expr_error(err.str());
}
else if (! sort_order.get()) {
std::cerr << "Failed to parse sort criteria!" << std::endl;
return 1;
}
}
catch (const value_expr_error& err) {
std::cerr << "Error in sort criteria: " << err.what() << std::endl;
return 1;
}
}
// Setup the meaning of %t and %T, used in format strings
format_t::value_expr.reset(parse_value_expr(value_expr));
format_t::total_expr.reset(parse_value_expr(total_expr));
try {
format_t::value_expr.reset(parse_value_expr(value_expr));
}
catch (const value_expr_error& err) {
std::cerr << "Error in amount (-t) specifier: " << err.what()
<< std::endl;
return 1;
}
try {
format_t::total_expr.reset(parse_value_expr(total_expr));
}
catch (const value_expr_error& err) {
std::cerr << "Error in total (-T) specifier: " << err.what()
<< std::endl;
return 1;
}
// Now handle the command that was identified above.

View file

@ -2,6 +2,7 @@
#define _EXPR_H
#include "ledger.h"
#include "error.h"
namespace ledger {
@ -128,19 +129,29 @@ class item_predicate
const value_expr_t * predicate;
public:
item_predicate(const std::string& _predicate)
: predicate(_predicate.empty() ?
NULL : parse_value_expr(_predicate)) {
#ifdef DEBUG_ENABLED
DEBUG_CLASS("valexpr.predicate.parse");
item_predicate(const std::string& _predicate) {
predicate = NULL;
if (! _predicate.empty()) {
try {
DEBUG_CLASS("valexpr.predicate.parse");
DEBUG_PRINT_("parsing: '" << _predicate << "'");
if (DEBUG_() && ledger::debug_stream) {
*ledger::debug_stream << "dump: ";
dump_value_expr(*ledger::debug_stream, predicate);
*ledger::debug_stream << std::endl;
}
DEBUG_PRINT_("parsing: '" << _predicate << "'");
predicate = parse_value_expr(_predicate);
#ifdef DEBUG_ENABLED
if (DEBUG_() && ledger::debug_stream) {
*ledger::debug_stream << "dump: ";
dump_value_expr(*ledger::debug_stream, predicate);
*ledger::debug_stream << std::endl;
}
#endif
}
catch (const value_expr_error& err) {
std::cerr << "Error in predicate '" << _predicate << "': "
<< err.what() << std::endl;
std::exit(1);
}
}
}
item_predicate(const value_expr_t * _predicate)
: predicate(_predicate) {}