Switch ignores case (?)
Steven Schveighoffer via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Nov 23 09:33:04 PST 2016
On 11/23/16 11:28 AM, Chris wrote:
> Only one of the two cases is considered. What am I doing wrong?
>
> `
> import std.array;
> import std.conv;
> import std.stdio;
>
> void main()
> {
> auto tokens = to!(dchar[][])(["D"d, "’"d, "Addario"d, "'"d]);
> // Or use this below:
> //~ dstring[] tokens = ["D"d, "’"d, "Addario"d, "'"d];
> while (!tokens.empty)
> {
> switch (tokens[0])
> {
> case "\u2019"d:
> writeln("Apostrophe smart " ~ tokens[0]);
> break;
> case "\u0027"d:
> writeln("Apostrophe straight " ~ tokens[0]);
> break;
> default:
> writeln("Other " ~ tokens[0]);
> break;
> }
> tokens = tokens[1..$];
> }
> }
> `
> Prints:
>
> Other D
> Apostrophe smart ’
> Other Addario
> Other '
>
> I would have expected:
>
> Other D
> Apostrophe smart ’
> Other Addario
> Apostrophe straight ' <== expected
I tested this locally with different ideas. This definitely looks like a
codegen bug.
I was able to reduce it to:
void main()
{
switch("'"d)
{
case "'"d:
writeln("a");
break;
case "’"d:
writeln("b");
break;
default:
writeln("default");
}
}
prints "default"
What seems to fix it is removing the case statement for the "smart
apostrophe". So I'd look there for where the bug is triggering.
-Steve
More information about the Digitalmars-d-learn
mailing list