@@ -13,6 +13,8 @@ public static void Sink<T>(T t) { }
1313
1414 public static void SinkElem < T > ( T [ ] ts ) => Sink ( ts [ 0 ] ) ;
1515
16+ public static void SinkLastElem < T > ( T [ ] ts ) => Sink ( ts [ ^ 1 ] ) ;
17+
1618 public static void SinkListElem < T > ( IList < T > list ) => Sink ( list [ 0 ] ) ;
1719
1820 public static void SinkDictValue < T > ( IDictionary < int , T > dict ) => Sink ( dict [ 0 ] ) ;
@@ -21,6 +23,8 @@ public static void Sink<T>(T t) { }
2123
2224 public static T First < T > ( T [ ] ts ) => ts [ 0 ] ;
2325
26+ public static T Last < T > ( T [ ] ts ) => ts [ ^ 1 ] ;
27+
2428 public static T ListFirst < T > ( IList < T > list ) => list [ 0 ] ;
2529
2630 public static T DictIndexZero < T > ( IDictionary < int , T > dict ) => dict [ 0 ] ;
@@ -73,6 +77,15 @@ public void ArrayInitializerCSharp6NoFlow(A other)
7377 Sink ( First ( c . As ) ) ; // no flow
7478 }
7579
80+ public void ArrayInitializerImplicitIndexFlow ( )
81+ {
82+ var a = new A ( ) ;
83+ var c = new CollectionFlow ( ) { As = { [ ^ 1 ] = a } } ;
84+ Sink ( c . As [ ^ 1 ] ) ; // flow
85+ SinkLastElem ( c . As ) ; // flow
86+ Sink ( Last ( c . As ) ) ; // flow
87+ }
88+
7689 public void ArrayAssignmentFlow ( )
7790 {
7891 var a = new A ( ) ;
@@ -93,6 +106,16 @@ public void ArrayAssignmentNoFlow(A other)
93106 Sink ( First ( @as ) ) ; // no flow
94107 }
95108
109+ public void ArrayAssignmentImplicitIndexFlow ( )
110+ {
111+ var a = new A ( ) ;
112+ var @as = new A [ 1 ] ;
113+ @as [ ^ 1 ] = a ;
114+ Sink ( @as [ ^ 1 ] ) ; // flow
115+ SinkLastElem ( @as ) ; // flow
116+ Sink ( Last ( @as ) ) ; // flow
117+ }
118+
96119 public void ListAssignmentFlow ( )
97120 {
98121 var a = new A ( ) ;
0 commit comments