@@ -13,6 +13,8 @@ public static void Sink<T>(T t) { }
13
13
14
14
public static void SinkElem < T > ( T [ ] ts ) => Sink ( ts [ 0 ] ) ;
15
15
16
+ public static void SinkLastElem < T > ( T [ ] ts ) => Sink ( ts [ ^ 1 ] ) ;
17
+
16
18
public static void SinkListElem < T > ( IList < T > list ) => Sink ( list [ 0 ] ) ;
17
19
18
20
public static void SinkDictValue < T > ( IDictionary < int , T > dict ) => Sink ( dict [ 0 ] ) ;
@@ -21,6 +23,8 @@ public static void Sink<T>(T t) { }
21
23
22
24
public static T First < T > ( T [ ] ts ) => ts [ 0 ] ;
23
25
26
+ public static T Last < T > ( T [ ] ts ) => ts [ ^ 1 ] ;
27
+
24
28
public static T ListFirst < T > ( IList < T > list ) => list [ 0 ] ;
25
29
26
30
public static T DictIndexZero < T > ( IDictionary < int , T > dict ) => dict [ 0 ] ;
@@ -73,6 +77,15 @@ public void ArrayInitializerCSharp6NoFlow(A other)
73
77
Sink ( First ( c . As ) ) ; // no flow
74
78
}
75
79
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
+
76
89
public void ArrayAssignmentFlow ( )
77
90
{
78
91
var a = new A ( ) ;
@@ -93,6 +106,16 @@ public void ArrayAssignmentNoFlow(A other)
93
106
Sink ( First ( @as ) ) ; // no flow
94
107
}
95
108
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
+
96
119
public void ListAssignmentFlow ( )
97
120
{
98
121
var a = new A ( ) ;
0 commit comments