summaryrefslogtreecommitdiff
path: root/textual.cc
diff options
context:
space:
mode:
Diffstat (limited to 'textual.cc')
-rw-r--r--textual.cc36
1 files changed, 21 insertions, 15 deletions
diff --git a/textual.cc b/textual.cc
index 2d3bff0a..f89da45f 100644
--- a/textual.cc
+++ b/textual.cc
@@ -62,21 +62,23 @@ namespace {
}
#endif
- if (! expr::compute_amount(expr, amount, xact))
- throw new parse_error("Amount expression failed to compute");
+ if (expr) {
+ if (! expr::compute_amount(expr, amount, xact))
+ throw new parse_error("Amount expression failed to compute");
#if 0
- if (expr->kind == expr::node_t::VALUE) {
- expr = NULL;
- } else {
- DEBUG_IF("ledger.textual.parse") {
- std::cout << "Value expression tree:" << std::endl;
- ledger::dump_value_expr(std::cout, expr.get());
+ if (expr->kind == expr::node_t::VALUE) {
+ expr = NULL;
+ } else {
+ DEBUG_IF("ledger.textual.parse") {
+ std::cout << "Value expression tree:" << std::endl;
+ ledger::dump_value_expr(std::cout, expr.get());
+ }
}
- }
#else
- expr = value_expr();
+ expr = value_expr();
#endif
+ }
DEBUG("ledger.textual.parse", "line " << linenum << ": " <<
"The transaction amount is " << xact->amount);
@@ -178,12 +180,16 @@ transaction_t * parse_transaction(char * line, account_t * account,
EXPR_PARSE_NO_REDUCE);
saw_amount = true;
- xact->amount.reduce();
- DEBUG("ledger.textual.parse", "line " << linenum << ": " <<
- "Reduced amount is " << xact->amount);
+ if (! xact->amount.is_null()) {
+ xact->amount.reduce();
+ DEBUG("ledger.textual.parse", "line " << linenum << ": " <<
+ "Reduced amount is " << xact->amount);
+ }
- unsigned long end = (long)in.tellg();
- xact->amount_expr.expr_str = string(line, beg, end - beg);
+ if (xact->amount_expr) {
+ unsigned long end = (long)in.tellg();
+ xact->amount_expr.expr_str = string(line, beg, end - beg);
+ }
}
catch (error * err) {
err_desc = "While parsing transaction amount:";