diff options
author | John Wiegley <johnw@newartisans.com> | 2012-03-07 05:19:21 -0600 |
---|---|---|
committer | John Wiegley <johnw@newartisans.com> | 2012-03-07 05:19:21 -0600 |
commit | 3ae4a38e4df38ed857dac8ffa26dfb1387f2b62d (patch) | |
tree | c18105de208ce38874b9c10a102a710b178db404 | |
parent | 7eb1eddcf6a0454a68af8650ab9194da829aa41f (diff) | |
download | fork-ledger-3ae4a38e4df38ed857dac8ffa26dfb1387f2b62d.tar.gz fork-ledger-3ae4a38e4df38ed857dac8ffa26dfb1387f2b62d.tar.bz2 fork-ledger-3ae4a38e4df38ed857dac8ffa26dfb1387f2b62d.zip |
Fixed parsing of "deferred notes" in auto xacts
-rw-r--r-- | src/textual.cc | 7 | ||||
-rw-r--r-- | src/xact.h | 14 |
2 files changed, 9 insertions, 12 deletions
diff --git a/src/textual.cc b/src/textual.cc index 866a99d6..fa416d06 100644 --- a/src/textual.cc +++ b/src/textual.cc @@ -559,11 +559,6 @@ void instance_t::automated_xact_directive(char * line) item->add_flags(ITEM_NOTE_ON_NEXT_LINE); item->pos->end_pos = context.curr_pos; item->pos->end_line++; - - // If there was no last_post yet, then deferred notes get applied to - // the matched posting. Other notes get applied to the auto-generated - // posting. - ae->deferred_notes->back().apply_to_post = last_post; } else if ((remlen > 7 && *p == 'a' && std::strncmp(p, "assert", 6) == 0 && std::isspace(p[6])) || @@ -591,7 +586,7 @@ void instance_t::automated_xact_directive(char * line) parse_post(p, len - (p - line), top_account(), NULL, true)) { reveal_context = true; ae->add_post(post); - last_post = post; + ae->active_post = last_post = post; } reveal_context = true; } @@ -173,17 +173,19 @@ public: typedef std::list<deferred_tag_data_t> deferred_notes_list; optional<deferred_notes_list> deferred_notes; + post_t * active_post; - auto_xact_t() : try_quick_match(true) { + auto_xact_t() : try_quick_match(true), active_post(NULL) { TRACE_CTOR(auto_xact_t, ""); } auto_xact_t(const auto_xact_t& other) : xact_base_t(), predicate(other.predicate), - try_quick_match(other.try_quick_match) { + try_quick_match(other.try_quick_match), + active_post(other.active_post) { TRACE_CTOR(auto_xact_t, "copy"); } auto_xact_t(const predicate_t& _predicate) - : predicate(_predicate), try_quick_match(true) + : predicate(_predicate), try_quick_match(true), active_post(NULL) { TRACE_CTOR(auto_xact_t, "const predicate_t&"); } @@ -202,12 +204,12 @@ public: } } - virtual void parse_tags(const char * p, - scope_t&, - bool overwrite_existing = true) { + virtual void parse_tags(const char * p, scope_t&, + bool overwrite_existing = true) { if (! deferred_notes) deferred_notes = deferred_notes_list(); deferred_notes->push_back(deferred_tag_data_t(p, overwrite_existing)); + deferred_notes->back().apply_to_post = active_post; } virtual void extend_xact(xact_base_t& xact, parse_context_t& context); |