summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/annotate.cc6
-rw-r--r--src/annotate.h9
-rw-r--r--src/pool.cc37
-rw-r--r--test/regress/96A8E4A1.test10
4 files changed, 35 insertions, 27 deletions
diff --git a/src/annotate.cc b/src/annotate.cc
index 2b118e76..25f0e582 100644
--- a/src/annotate.cc
+++ b/src/annotate.cc
@@ -56,6 +56,7 @@ bool annotation_t::operator<(const annotation_t& rhs) const
return true;
if (price->commodity().symbol() > rhs.price->commodity().symbol())
return false;
+
if (*price < *rhs.price) return true;
if (*price > *rhs.price) return false;
}
@@ -68,9 +69,12 @@ bool annotation_t::operator<(const annotation_t& rhs) const
if (*tag > *rhs.tag) return false;
}
if (value_expr) {
+ DEBUG("annotate.less", "Comparing (" << value_expr->text()
+ << ") < (" << rhs.value_expr->text());
if (value_expr->text() < rhs.value_expr->text()) return true;
- if (value_expr->text() > rhs.value_expr->text()) return false;
+ //if (value_expr->text() > rhs.value_expr->text()) return false;
}
+
return false;
}
diff --git a/src/annotate.h b/src/annotate.h
index 044ebc4d..163ffac5 100644
--- a/src/annotate.h
+++ b/src/annotate.h
@@ -72,7 +72,7 @@ struct annotation_t : public supports_flags<>,
: supports_flags<>(), price(_price), date(_date), tag(_tag),
value_expr(_value_expr) {
TRACE_CTOR(annotation_t,
- "const optional<amount_t>& + date_t + string + expr_t");
+ "optional<amount_t> + date_t + string + expr_t");
}
annotation_t(const annotation_t& other)
: supports_flags<>(other.flags()),
@@ -91,9 +91,9 @@ struct annotation_t : public supports_flags<>,
bool operator<(const annotation_t& rhs) const;
bool operator==(const annotation_t& rhs) const {
- return (price == rhs.price &&
- date == rhs.date &&
- tag == rhs.tag &&
+ return (price == rhs.price &&
+ date == rhs.date &&
+ tag == rhs.tag &&
(value_expr && rhs.value_expr ?
value_expr->text() == rhs.value_expr->text() :
value_expr == rhs.value_expr));
@@ -228,6 +228,7 @@ protected:
: commodity_t(_ptr->parent_, _ptr->base), ptr(_ptr), details(_details) {
TRACE_CTOR(annotated_commodity_t, "commodity_t *, annotation_t");
annotated = true;
+ qualified_symbol = _ptr->qualified_symbol;
}
public:
diff --git a/src/pool.cc b/src/pool.cc
index 5813c0f6..be26de3b 100644
--- a/src/pool.cc
+++ b/src/pool.cc
@@ -102,7 +102,7 @@ commodity_t * commodity_pool_t::find_or_create(const string& symbol)
commodity_t * commodity_pool_t::alias(const string& name, commodity_t& referent)
{
- commodities_map::const_iterator i = commodities.find(referent.symbol());
+ commodities_map::const_iterator i = commodities.find(referent.base_symbol());
assert(i != commodities.end());
std::pair<commodities_map::iterator, bool> result
@@ -130,20 +130,16 @@ commodity_pool_t::find(const string& symbol, const annotation_t& details)
DEBUG("pool.commodities", "commodity_pool_t::find[ann] "
<< "symbol " << symbol << std::endl << details);
- if (details) {
- annotated_commodities_map::const_iterator i =
- annotated_commodities.find
- (annotated_commodities_map::key_type(symbol, details));
- if (i != annotated_commodities.end()) {
- DEBUG("pool.commodities", "commodity_pool_t::find[ann] found "
- << "symbol " << (*i).second->symbol() << std::endl
- << as_annotated_commodity(*(*i).second.get()).details);
- return (*i).second.get();
- } else {
- return NULL;
- }
+ annotated_commodities_map::const_iterator i =
+ annotated_commodities.find
+ (annotated_commodities_map::key_type(symbol, details));
+ if (i != annotated_commodities.end()) {
+ DEBUG("pool.commodities", "commodity_pool_t::find[ann] found "
+ << "symbol " << (*i).second->base_symbol() << std::endl
+ << as_annotated_commodity(*(*i).second.get()).details);
+ return (*i).second.get();
} else {
- return find(symbol);
+ return NULL;
}
}
@@ -170,10 +166,10 @@ commodity_t *
commodity_pool_t::find_or_create(commodity_t& comm, const annotation_t& details)
{
DEBUG("pool.commodities", "commodity_pool_t::find_or_create[ann:comm] "
- << "symbol " << comm.symbol() << std::endl << details);
+ << "symbol " << comm.base_symbol() << std::endl << details);
if (details) {
- if (commodity_t * ann_comm = find(comm.symbol(), details)) {
+ if (commodity_t * ann_comm = find(comm.base_symbol(), details)) {
assert(ann_comm->annotated && as_annotated_commodity(*ann_comm).details);
return ann_comm;
} else {
@@ -189,7 +185,7 @@ commodity_pool_t::create(commodity_t& comm,
const annotation_t& details)
{
DEBUG("pool.commodities", "commodity_pool_t::create[ann:comm] "
- << "symbol " << comm.symbol() << std::endl << details);
+ << "symbol " << comm.base_symbol() << std::endl << details);
assert(comm);
assert(! comm.has_annotation());
@@ -206,11 +202,8 @@ commodity_pool_t::create(commodity_t& comm,
comm.add_flags(COMMODITY_SAW_ANN_PRICE_FLOAT);
}
- commodity->qualified_symbol = comm.symbol();
- assert(! commodity->qualified_symbol->empty());
-
DEBUG("pool.commodities", "Creating annotated commodity "
- << "symbol " << commodity->symbol()
+ << "symbol " << commodity->base_symbol()
<< std::endl << details);
#if defined(DEBUG_ON)
@@ -218,7 +211,7 @@ commodity_pool_t::create(commodity_t& comm,
#endif
annotated_commodities.insert(annotated_commodities_map::value_type
(annotated_commodities_map::key_type
- (comm.symbol(), details), commodity));
+ (comm.base_symbol(), details), commodity));
#if defined(DEBUG_ON)
assert(result.second);
#endif
diff --git a/test/regress/96A8E4A1.test b/test/regress/96A8E4A1.test
new file mode 100644
index 00000000..93fb55d2
--- /dev/null
+++ b/test/regress/96A8E4A1.test
@@ -0,0 +1,10 @@
+2011-01-31 * Test
+ Expenses:Travel 1 "Spr MegaBonus"
+ Assets:Voucher
+
+test -X EUR -H bal
+ -1 "Spr MegaBonus" Assets:Voucher
+ 1 "Spr MegaBonus" Expenses:Travel
+--------------------
+ 0
+end test