[Issue 5722] Regression(2.052): Appending code-unit from multi-unit code-point at compile-time gives wrong result.
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Fri Mar 11 05:01:42 PST 2011
http://d.puremagic.com/issues/show_bug.cgi?id=5722
Don <clugdbug at yahoo.com.au> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |clugdbug at yahoo.com.au
--- Comment #2 from Don <clugdbug at yahoo.com.au> 2011-03-11 04:58:38 PST ---
Like bug 5717, this was caused by the fix to bug 4389 (char[]~dchar and
wchar[]~dchar *never* worked).
The problem is in constfold.c, Cat().
It erroneously assumes that all concatenation is equivalent to string ~ dchar.
But this isn't true for char[]~char, wchar[]~wchar, (this happens during
constant-folding optimization, which is how it manifests in the test case). In
such cases the dchar encoding should not occur - it should just give an
encoding length of 1, and do a simple memcpy.
It applies to everything of the form (e2->op == TOKint64) in that function.
(1) size_t len = es1->len + utf_codeLength(sz, v);
s = mem.malloc((len + 1) * sz);
memcpy(s, es1->string, es1->len * sz);
(2) utf_encode(sz, (unsigned char *)s + , v);
Lines (1) and (2) are valid for hetero concatenation, but when both types are
the same the lines should be:
(1) size_t len = es1->len + 1;
(2) memcpy((unsigned char *)s + (sz * es1->len), &v, sz);
This should definitely be factored out into a helper function -- it's far too
repetitive already.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list