diff options
author | John Wiegley <johnw@newartisans.com> | 2012-03-05 05:02:11 -0600 |
---|---|---|
committer | John Wiegley <johnw@newartisans.com> | 2012-03-05 05:03:53 -0600 |
commit | 5abbf445833f985f2aa22bde57d47cd9f83d0c92 (patch) | |
tree | 083f3520a68edd1ec7445bd74dc16f42aa1eef9c | |
parent | 3ea5d88eb3ddfd8cac248fe96fdaa293e3b5bf70 (diff) | |
download | fork-ledger-5abbf445833f985f2aa22bde57d47cd9f83d0c92.tar.gz fork-ledger-5abbf445833f985f2aa22bde57d47cd9f83d0c92.tar.bz2 fork-ledger-5abbf445833f985f2aa22bde57d47cd9f83d0c92.zip |
Corrected copy of format_t objects
Copying of sub-elements was causing pointer overlap.
-rw-r--r-- | src/format.cc | 11 | ||||
-rw-r--r-- | src/format.h | 5 |
2 files changed, 13 insertions, 3 deletions
diff --git a/src/format.cc b/src/format.cc index 4ff1fc19..97dcfb22 100644 --- a/src/format.cc +++ b/src/format.cc @@ -40,6 +40,17 @@ namespace ledger { format_t::elision_style_t format_t::default_style = TRUNCATE_TRAILING; bool format_t::default_style_changed = false; +format_t::element_t::element_t(const element_t& elem) + : supports_flags<>(), + type(elem.type), + min_width(elem.min_width), + max_width(elem.max_width), + data(elem.data), + next(elem.next ? new element_t(*elem.next) : NULL) +{ + TRACE_CTOR(element_t, "copy"); +} + void format_t::element_t::dump(std::ostream& out) const { out << "Element: "; diff --git a/src/format.h b/src/format.h index 74d77768..0073b427 100644 --- a/src/format.h +++ b/src/format.h @@ -71,12 +71,11 @@ class format_t : public expr_base_t<string> : supports_flags<>(), type(STRING), min_width(0), max_width(0) { TRACE_CTOR(element_t, ""); } + element_t(const element_t& elem); + ~element_t() throw() { TRACE_DTOR(element_t); } - element_t(const element_t& elem) : supports_flags<>() { - *this = elem; - } element_t& operator=(const element_t& elem) { if (this != &elem) { |