www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 2333] New: Hash initializer does not work

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

           Summary: Hash initializer does not work
           Product: D
           Version: unspecified
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: bugzilla digitalmars.com
        ReportedBy: andrei metalanguage.com


The assertion in this program fails:

void main()
{
    int[string] stopWords = [ "abc"[]:1 ];
    assert("abc" in stopWords);
}

This is so bad I must in fact be doing something wrong...


-- 
Sep 02 2008
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2333





------- Comment #1 from snake.scaly gmail.com  2008-09-03 02:32 -------
Even more: this program:

import std.stdio;
void main()
{
        int[string] foo = ["aaa":1, "bbb":2];
        foo["ccc"] = 3;
        writeln(foo);
        writeln("aaa" in foo);
        writeln("ccc" in foo);
}

prints this:

        [aaa:1,bbb:2,ccc:3]
        0
        8F4FB4

when compiled using Windows DMD 2.018.


-- 
Sep 03 2008
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2333


gide nwawudu.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |accepts-invalid




------- Comment #2 from gide nwawudu.com  2008-09-03 06:41 -------
The docs says 'An AssocArrayLiteral cannot be used to statically initialize
anything', so the code should be rejected by the compiler. Changed keyword to
acepts-invalid.
http://www.digitalmars.com/d/2.0/expression.html#AssocArrayLiteral

BTW I've made the same mistake, see BUG 1727.


-- 
Sep 03 2008
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2333





------- Comment #3 from andrei metalanguage.com  2008-09-03 07:14 -------
(In reply to comment #1)
 Even more: this program:
 
 import std.stdio;
 void main()
 {
         int[string] foo = ["aaa":1, "bbb":2];
         foo["ccc"] = 3;
         writeln(foo);
         writeln("aaa" in foo);
         writeln("ccc" in foo);
 }
 
 prints this:
 
         [aaa:1,bbb:2,ccc:3]
         0
         8F4FB4
 
 when compiled using Windows DMD 2.018.

The last line is fine. "in" returns a pointer. --
Sep 03 2008
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2333





------- Comment #4 from andrei metalanguage.com  2008-09-03 07:14 -------
(In reply to comment #2)
 The docs says 'An AssocArrayLiteral cannot be used to statically initialize
 anything', so the code should be rejected by the compiler. Changed keyword to
 acepts-invalid.
 http://www.digitalmars.com/d/2.0/expression.html#AssocArrayLiteral
 
 BTW I've made the same mistake, see BUG 1727.

Notice that I'm using straight initialization, not static initialization. --
Sep 03 2008
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2333


gide nwawudu.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|accepts-invalid             |wrong-code




------- Comment #5 from gide nwawudu.com  2008-09-03 07:57 -------
In that case my comment on bug 1727 was valid, I'll repeat it here. The
following code compiles on both GDC and DMD, but DMD compiled code throws an
array bounds exception when executed.

test.d
------
import std.stdio;

void main() {
        int[char[]] aa =  ["aa":1, "bb":2, "cc":3]; // Fails later
        //int[char[]] aa; aa =  ["aa":1, "bb":2, "cc":3]; // Fails later 
        //int[char[]] aa; aa["aa"] = 1; aa["bb"] = 2; aa["cc"] = 3; // OK

        assert(aa.length == 3);
        assert(aa["aa"]==1); // DMD fails here. Error: ArrayBoundsError test(9)
        writefln(aa["aa"],aa["bb"],aa["cc"]); // On GDC output -> 123
}


-- 
Sep 03 2008
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2333





------- Comment #6 from snake.scaly gmail.com  2008-09-03 10:33 -------
(In reply to comment #3)
 (In reply to comment #1)
         [aaa:1,bbb:2,ccc:3]
         0
         8F4FB4

The last line is fine. "in" returns a pointer.

I know. I posted this to maybe help to narrow down the issue. The printed array contents are correct. The explicitly added key ("ccc") is found correctly. But, at the same time, the key "aaa" is not found even though it seems to be present in the AA. --
Sep 03 2008
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2333


bugzilla digitalmars.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |FIXED




------- Comment #7 from bugzilla digitalmars.com  2008-10-20 22:22 -------
Fixed dmd 2.020


-- 
Oct 20 2008
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2333


gide nwawudu.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |lutger.blijdestijn gmail.com




------- Comment #8 from gide nwawudu.com  2008-11-18 18:43 -------
*** Bug 2265 has been marked as a duplicate of this bug. ***


-- 
Nov 18 2008