Ticket Created
over 3 years ago

CIQQA-1327

Can't define 2 dimensional Array in strict mode

I'd like to draw a small black rectangle and I'd like to do it in strict mode, but it looks like there's a bug in the compiler:

dc.fillPolygon([[hrx - 3, y + 2], [hrx, y], [hrx + 3, y + 2], [hrx - 3, y + 2]]);

Invalid '$.Toybox.Lang.Array<Any>' passed as parameter 1 of type '$.Toybox.Lang.Array<$.Toybox.Lang.Array<$.Toybox.Lang.Double or $.Toybox.Lang.Float or $.Toybox.Lang.Long or $.Toybox.Lang.Number>>'
dc.fillPolygon([[hrx - 3, y + 2], [hrx, y], [hrx + 3, y + 2], [hrx - 3, y + 2]] as Array<Array<Number>>);
no viable alternative at input 'dc.fillPolygon([[hrx-3,y+2],[hrx,y],[hrx+3,y+2],[hrx-3,y+2]]asArray<Array<Number>>)'
no viable alternative at input '[[hrx-3,y+2],[hrx,y],[hrx+3,y+2],[hrx-3,y+2]]asArray<Array<Number>>)'

dc.fillPolygon([[hrx - 3, y + 2], [hrx, y], [hrx + 3, y + 2], [hrx - 3, y + 2]] as Array<Array<Numeric>>);
same as above, just with Numeric instead of Number in he error message

dc.fillPolygon([[hrx - 3, y + 2] as Array<Number>, [hrx, y] as Array<Number>, [hrx + 3, y + 2] as Array<Number>, [hrx - 3, y + 2] as Array<Number>] as Array<Array<Number>>);
no viable alternative at input 'dc.fillPolygon([[hrx-3,y+2]asArray<Number>,[hrx,y]asArray<Number>,[hrx+3,y+2]asArray<Number>,[hrx-3,y+2]asArray<Number>]asArray<Array<Number>>)'
no viable alternative at input '[[hrx-3,y+2]asArray<Number>,[hrx,y]asArray<Number>,[hrx+3,y+2]asArray<Number>,[hrx-3,y+2]asArray<Number>]asArray<Array<Number>>)'
Parents
  • Here's the workaround:

        typedef ArrayOfNumbers as Array<Number>;
        function testFill(dc as Dc) {
            var hrx = 5;
            var y = 2;
            dc.fillPolygon(
                [
                    [hrx - 3, y + 2] as Array<Number>,
                    [hrx, y] as Array<Number>,
                    [hrx + 3, y + 2] as Array<Number>,
                    [hrx - 3, y + 2] as Array<Number>
                ] as Array<ArrayOfNumbers>
            );
        }

Comment
  • Here's the workaround:

        typedef ArrayOfNumbers as Array<Number>;
        function testFill(dc as Dc) {
            var hrx = 5;
            var y = 2;
            dc.fillPolygon(
                [
                    [hrx - 3, y + 2] as Array<Number>,
                    [hrx, y] as Array<Number>,
                    [hrx + 3, y + 2] as Array<Number>,
                    [hrx - 3, y + 2] as Array<Number>
                ] as Array<ArrayOfNumbers>
            );
        }

Children
No Data