digitalmars.D.bugs - [Issue 3938] New: semantics of casting arrays need to be reworked
- d-bugmail puremagic.com (56/56) Mar 12 2010 http://d.puremagic.com/issues/show_bug.cgi?id=3938
- d-bugmail puremagic.com (13/13) Jan 23 2012 http://d.puremagic.com/issues/show_bug.cgi?id=3938
http://d.puremagic.com/issues/show_bug.cgi?id=3938 Summary: semantics of casting arrays need to be reworked Product: D Version: 2.000 Platform: All URL: http://www.digitalmars.com/d/arrays.html OS/Version: All Status: NEW Keywords: rejects-valid, spec Severity: major Priority: P2 Component: www.digitalmars.com AssignedTo: nobody puremagic.com ReportedBy: mrmocool gmx.de Blocks: 2494 It needs to be clarified when a reinterpret_cast is done and when the elements are converted to the new type depending on whether it is an array literal, another array expression, an array of structs, classes or interfaces AND whether it is a constant array or not. A sane and consistent solution is required. The only information at all is hidden deep inside the huge expressions documentation: http://www.digitalmars.com/d/2.0/expression.html#ArrayLiteral What is the rationale for this inconsistency? (Also, is this information correct? For example I thought array literals are dynamic arrays now ("The AssignExpressions form the elements of a static array")? Additionally: "The type of the first element is taken to be the type of all the elements" -> http://www.digitalmars.com/d/archives/digitalmars/D/casting_array_literals_doesn_t_work_as_stated_in_the_docs_104333.html#N104334) We already had several discussions about it here: http://www.digitalmars.com/d/archives/digitalmars/D/learn/converting_a_byte_array_to_a_struct_array_18526.html followed by http://www.digitalmars.com/d/archives/digitalmars/D/casting_array_literals_doesn_t_work_as_stated_in_the_docs_104333.html For example, I want a byte array to be saved in the executable file which is reinterpreted in the code as RGB structs: RGB[256] PALETTE = cast(RGB[256]) [ 0x00, 0x00, 0x00, 0xE3, 0x53, 0x00, 0xCF, 0x4B, 0x07, 0xBF, 0x43, 0x0F, ... doesn't work cause of "non-constant expression" RGB[256] PALETTE = (cast(RGB[]) [ 0x00, 0x00, 0x00, 0xE3, 0x53, 0x00, 0xCF, 0x4B, 0x07, 0xBF, 0x43, 0x0F, ... ]) (0 .. 256); compiles, but yields empty structs (cause it tries to cast each element to a struct instance if I'm not mistaken) RGB[] PALETTE = (cast(RGB*) cast(ubyte[]) [...])[0..256]; makes it work, but of course it's a bit hacky. Also see: http://codepad.org/OGjXADdu and my answer: http://codepad.org/bvk63OPw -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Mar 12 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3938 Walter Bright <bugzilla digitalmars.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED CC| |bugzilla digitalmars.com Resolution| |WORKSFORME 15:46:01 PST --- Already done, dlang.org/expression.html#CastExpression -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jan 23 2012