summaryrefslogtreecommitdiff
path: root/textual.cc
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2008-07-29 05:10:16 -0400
committerJohn Wiegley <johnw@newartisans.com>2008-07-29 05:59:38 -0400
commit4518ea95408e2d5fe90a87159b88bb41734ec1dc (patch)
tree3026169803aaea580d8b452cb9bb8a569c92fb2a /textual.cc
parent63039ade9209bced70b3e4dbb673ad90286d310a (diff)
downloadledger-4518ea95408e2d5fe90a87159b88bb41734ec1dc.tar.gz
ledger-4518ea95408e2d5fe90a87159b88bb41734ec1dc.tar.bz2
ledger-4518ea95408e2d5fe90a87159b88bb41734ec1dc.zip
Value expression architecture is now rewritten, but the functionality of the
old system (for example, the meaning of 'a') has yet to be restored. In the new scheme, this will be done by definition a function outside of the value expression logic, rather than the tight coupling between journal innards and value expressions that occurred in 2.x.
Diffstat (limited to 'textual.cc')
-rw-r--r--textual.cc40
1 files changed, 20 insertions, 20 deletions
diff --git a/textual.cc b/textual.cc
index 1027814b..c309801e 100644
--- a/textual.cc
+++ b/textual.cc
@@ -2,11 +2,9 @@
#define _XOPEN_SOURCE
#endif
-#include "journal.h"
#include "textual.h"
-#include "valexpr.h"
-#include "parsexp.h"
-#include "utils.h"
+#include "expr.h"
+#include "parser.h"
#include "acconf.h"
#define TIMELOG_SUPPORT 1
@@ -50,14 +48,12 @@ struct time_entry_t
#endif
namespace {
- value_expr parse_amount_expr(std::istream& in,
- amount_t& amount,
- transaction_t * xact,
- unsigned short flags = 0)
+ expr_t parse_amount_expr(std::istream& in,
+ amount_t& amount,
+ transaction_t * xact,
+ unsigned short flags = 0)
{
- value_expr expr =
- value_expr::parser->parse(in, flags |
- EXPR_PARSE_RELAXED | EXPR_PARSE_PARTIAL);
+ expr_t expr(in, flags | EXPR_PARSE_PARTIAL);
DEBUG("ledger.textual.parse", "line " << linenum << ": " <<
"Parsed an amount expression");
@@ -71,12 +67,13 @@ namespace {
}
#endif
+#if 0
if (expr) {
- if (! expr::compute_amount(expr, amount, xact))
+ if (! expr_t::compute_amount(expr, amount, xact))
throw new parse_error("Amount expression failed to compute");
#if 0
- if (expr->kind == expr::node_t::VALUE) {
+ if (expr->kind == expr_t::node_t::VALUE) {
expr = NULL;
} else {
DEBUG_IF("ledger.textual.parse") {
@@ -88,6 +85,7 @@ namespace {
expr = value_expr();
#endif
}
+#endif
DEBUG("ledger.textual.parse", "line " << linenum << ": " <<
"The transaction amount is " << xact->amount);
@@ -201,7 +199,7 @@ transaction_t * parse_transaction(char * line, account_t * account,
// always NULL right now
if (xact->amount_expr) {
unsigned long end = (long)in.tellg();
- xact->amount_expr.expr_str = string(line, beg, end - beg);
+ xact->amount_expr.set_text(string(line, beg, end - beg));
}
}
catch (error * err) {
@@ -247,11 +245,11 @@ transaction_t * parse_transaction(char * line, account_t * account,
if (xact->cost_expr) {
unsigned long end = (long)in.tellg();
if (per_unit)
- xact->cost_expr->expr_str = (string("@") +
- string(line, beg, end - beg));
+ xact->cost_expr->set_text(string("@") +
+ string(line, beg, end - beg));
else
- xact->cost_expr->expr_str = (string("@@") +
- string(line, beg, end - beg));
+ xact->cost_expr->set_text(string("@@") +
+ string(line, beg, end - beg));
}
}
catch (error * err) {
@@ -951,7 +949,7 @@ unsigned int textual_parser_t::parse(std::istream& in,
}
else if (word == "def") {
#if 0
- if (! expr::global_scope.get())
+ if (! expr_t::global_scope.get())
init_value_expr();
parse_value_definition(p);
#endif
@@ -1088,11 +1086,13 @@ void write_textual_journal(journal_t& journal, path pathname,
while (! in.eof()) {
entry_base_t * base = NULL;
if (el != journal.entries.end() && pos == (*el)->beg_pos) {
+#if 0
hdr_fmt.format(out, details_t(**el));
+#endif
base = *el++;
}
else if (al != journal.auto_entries.end() && pos == (*al)->beg_pos) {
- out << "= " << (*al)->predicate.predicate.expr_str << '\n';
+ out << "= " << (*al)->predicate.predicate.text() << '\n';
base = *al++;
}
else if (pl != journal.period_entries.end() && pos == (*pl)->beg_pos) {