diff options
author | Ben Longbons <b.r.longbons@gmail.com> | 2014-10-19 22:22:08 -0700 |
---|---|---|
committer | Ben Longbons <b.r.longbons@gmail.com> | 2014-10-26 14:21:48 -0700 |
commit | 6800761863dd45b6055768febc6ace6a20120dc7 (patch) | |
tree | 73b416ca6507d9bb4f950252d55ead8e8cda34b5 /src/strings/rstring.cpp | |
parent | 0edf563dfc14a2b9db33a92f0eced28950bdf1aa (diff) | |
download | tmwa-6800761863dd45b6055768febc6ace6a20120dc7.tar.gz tmwa-6800761863dd45b6055768febc6ace6a20120dc7.tar.bz2 tmwa-6800761863dd45b6055768febc6ace6a20120dc7.tar.xz tmwa-6800761863dd45b6055768febc6ace6a20120dc7.zip |
New ast module for for npc parsing
Will eventually put most/all parsers there.
Diffstat (limited to 'src/strings/rstring.cpp')
-rw-r--r-- | src/strings/rstring.cpp | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/strings/rstring.cpp b/src/strings/rstring.cpp index e74d1d5..5675935 100644 --- a/src/strings/rstring.cpp +++ b/src/strings/rstring.cpp @@ -58,13 +58,18 @@ namespace strings } RString& RString::operator = (const RString& r) { - // order important for self-assign - if (!r.maybe_end) - r.u.owned->count++; - if (!maybe_end && !u.owned->count--) - ::operator delete(u.owned); - u = r.u; - maybe_end = r.maybe_end; + // this turns out to be a win + // certain callers end up needing to do self-assignment a *lot*, + // leading to pointless ++,--s + if (this->u.owned != r.u.owned) + { + if (!r.maybe_end) + r.u.owned->count++; + if (!maybe_end && !u.owned->count--) + ::operator delete(u.owned); + u = r.u; + maybe_end = r.maybe_end; + } return *this; } RString& RString::operator = (RString&& r) |