www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 12544] New: Differences in ubyte/char enum printing

reply d-bugmail puremagic.com writes:
https://d.puremagic.com/issues/show_bug.cgi?id=12544

           Summary: Differences in ubyte/char enum printing
           Product: D
           Version: D2
          Platform: x86
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Phobos
        AssignedTo: nobody puremagic.com
        ReportedBy: bearophile_hugs eml.cc


--- Comment #0 from bearophile_hugs eml.cc 2014-04-08 03:24:22 PDT ---
I am not sure if this is a bug, a regression, or it's working as designed.
Currently this code shows a difference in the outputs that perhaps should not
exist:


void main() {
   import std.stdio;
   enum E1 : ubyte { A='a' }
   E1[10] v1;
   writeln(v1);
   enum E2 : char { A='a' }
   E2[10] v2;
   writeln(v2);
   writefln("%-(%c%)", v2);
}



DMD 2.066alpha output:

[A, A, A, A, A, A, A, A, A, A]
aaaaaaaaaa
aaaaaaaaaa


Expected output:

[A, A, A, A, A, A, A, A, A, A]
[A, A, A, A, A, A, A, A, A, A]
aaaaaaaaaa

-- 
Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Apr 08 2014
parent d-bugmail puremagic.com writes:
https://d.puremagic.com/issues/show_bug.cgi?id=12544


monarchdodra gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |monarchdodra gmail.com


--- Comment #1 from monarchdodra gmail.com 2014-04-08 06:54:41 PDT ---
The code goes through the "formatRange" branch of `std.format`.

In format range, the code checks if it is a range of chars:
- range of chars => print string (eg: aaaaaaa...)
- range of non-chars => print array (eg: [A, A, A, A, A...

The issue is one of determining "what is a char"?

Currently, the code uses:
is(CharTypeOf!(ElementType!T))

Which mean any type that implicitly casts to char is fair game (including
structs with "alias this").

*Arguably*, I think `isSomeChar` would be better, as it only accepts *actual*
chars.

But even then, it would still accept enums whose base type is char, as
technically, they *are* chars.

Unfortunately, there is always ambiguity when asking to print an enum of a char
or string.

I don't know either if this is bug or working as designed. (I don't think it's
a regression though... did you test other versions?)

-- 
Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Apr 08 2014