[Issue 8557] AA error with string[string][]

d-bugmail at puremagic.com d-bugmail at puremagic.com
Mon Nov 25 00:24:15 PST 2013


https://d.puremagic.com/issues/show_bug.cgi?id=8557



--- Comment #10 from yebblies <yebblies at gmail.com> 2013-11-25 19:24:11 EST ---
(In reply to comment #9)
> (In reply to comment #8)
> > Ok I added those cases too.
> 
> Thank you, such small things improve the usability of D a lot.

It's actually turned out worse than I thought.

I think we should change the rules a little.  These test cases should all
compile, and the ones that don't currently work are commented out.

- If the type is given try and match it
- Else if each element has a key, default is AA
  otherwise is array
- Vectors and pointers are treated the same as dynamic arrays
- For static array inits with keys, the length is given by the static array
- For dynamic array inits with keys, the length is given by the largest key

void main()
{
    { // normal array literal
        int[] a = [1, 2, 3];
        int[3] b = [1, 2, 3];
        static assert(!is(typeof({ int[int] c = [1, 2, 3]; }))); // need key
for each element
        auto d = [1, 2, 3];
        static assert(is(typeof(d) == int[])); // default is dynamic array
    }
    { // some keys, no gaps
        int[] a = [1 : 2, 3, 0 : 1];
        int[3] b = [1 : 2, 3, 0 : 1];
        static assert(!is(typeof({ int[int] c = [1 : 2, 3, 0 : 1]; }))); //
need key for each element
        // auto d = [1 : 2, 3, 0 : 1];
        // static assert(is(typeof(d) == int[])); // default to array when not
enough keys
    }
    { // all keys, no gaps
        int[] a = [1 : 2, 2 : 3, 0 : 1];
        int[3] b = [1 : 2, 2 : 3, 0 : 1];
        int[int] c = [1 : 2, 2 : 3, 0 : 1];
        auto d = [1 : 2, 2 : 3, 0 : 1];
        static assert(is(typeof(d) == int[int])); // default to AA when has all
keys
    }
    { // some keys, gap
        int[] a = [1 : 2, 3];
        int[3] b = [1 : 2, 3];
        // auto c = [1 : 2, 3];
        // static assert(is(typeof(c) == int[])); // should fill in gaps with
int.init
    }
    { // value is AA
        // int[int][int] a = [0 : [0 : 3]];
        int[][int] b = [0 : [0 : 3]];
        int[1][int] c = [0 : [0 : 3]];
        // int[int][] d = [0 : [0 : 3]];
        // int[int][1] e = [0 : [0 : 3]];
        auto f = [0 : [0 : 3]];
        // static assert(is(typeof(f) == int[int][int])); // default to AA when
has all keys
    }
    { // key is AA
        int[int[int]] a = [[0 : 0] : 0];
        // int[int[]] b = [[0 : 0] : 0];
        // int[int[1]] c = [[0 : 0] : 0];
        auto d = [[0 : 0] : 0];
        static assert(is(typeof(d) == int[int[int]]));
    }
    { // value is array
        int[][int] a = [0 : [2, 3]];
        int[][] b = [0 : [2, 3]];
        int[2][int] c = [0 : [2, 3]];
        int[2][] d = [0 : [2, 3]];
        auto e = [0 : [2, 3]];
        static assert(is(typeof(e) == int[][int]));
    }
    { // key is array
        int[int[]] a = [[2, 3] : 0];
        int[int[2]] b = [[2, 3] : 0];
        auto c = [[2, 3] : 0];
        static assert(is(typeof(c) == int[int[]]));
    }
    { // value has gap
        // int[][int] a = [0 : [1 : 2, 3]];
        int[][] b = [0 : [1 : 2, 3]];
        // int[3][int] c = [0 : [1 : 2, 3]];
        int[3][] d = [0 : [1 : 2, 3]];
        // auto e = [0 : [1 : 2, 3]];
        // static assert(is(typeof(e) == int[][int]));
    }
    { // key has gap
        // int[int[]] a = [[1 : 2, 3] : 0];
        // int[int[3]] b = [[1 : 2, 3] : 0];
        // auto c = [[1 : 2, 3] : 0];
        // static assert(is(typeof(c) == int[int[]]));
    }
}

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


More information about the Digitalmars-d-bugs mailing list