@@ -451,9 +451,6 @@ public struct Set<Element : Hashable> :
451451  internal typealias _VariantBuffer = _VariantSetBuffer<Element>
452452  internal typealias _NativeBuffer = _NativeSetBuffer<Element>
453453
454-   /// The index type for subscripting the set.
455-   public typealias Index = SetIndex<Element>
456- 
457454  internal var _variantBuffer: _VariantBuffer
458455
459456  /// Creates a new, empty set with at least the specified number of elements'
@@ -1642,9 +1639,6 @@ public struct Dictionary<Key : Hashable, Value> :
16421639  /// key-value pair.
16431640  public typealias Element = (key: Key, value: Value)
16441641
1645-   /// The index type of a dictionary.
1646-   public typealias Index = DictionaryIndex<Key, Value>
1647- 
16481642  internal var _variantBuffer: _VariantBuffer
16491643
16501644  /// Creates an empty dictionary.
@@ -4705,6 +4699,7 @@ internal enum ${Self}IndexRepresentation<${TypeParametersDecl}> {
47054699  case _cocoa(_CocoaIndex)
47064700}
47074701
4702+ extension ${Self} {
47084703%{
47094704if Self == 'Set':
47104705  SubscriptingWithIndexDoc = """\
@@ -4726,12 +4721,7 @@ elif Self == 'Dictionary':
47264721}%
47274722
47284723${SubscriptingWithIndexDoc}
4729- public struct ${Self}Index<${TypeParametersDecl}> :
4730-   Comparable {
4731-   // FIXME(ABI)#34 (Nesting types in generics): `DictionaryIndex` and `SetIndex` should
4732-   // be nested types (Dictionary.Index and Set.Index).
4733-   // rdar://problem/17002096
4734- 
4724+ public struct Index : Comparable {
47354725  // Index for native buffer is efficient.  Index for bridged NS${Self} is
47364726  // not, because neither NSEnumerator nor fast enumeration support moving
47374727  // backwards.  Even if they did, there is another issue: NSEnumerator does
@@ -4750,12 +4740,12 @@ public struct ${Self}Index<${TypeParametersDecl}> :
47504740  internal var _value: ${Self}IndexRepresentation<${TypeParameters}>
47514741
47524742  @_versioned
4753-   internal static func _native(_ index: _NativeIndex) -> ${Self} Index {
4743+   internal static func _native(_ index: _NativeIndex) -> Index {
47544744    return ${Self}Index(_value: ._native(index))
47554745  }
47564746#if _runtime(_ObjC)
47574747  @_versioned
4758-   internal static func _cocoa(_ index: _CocoaIndex) -> ${Self} Index {
4748+   internal static func _cocoa(_ index: _CocoaIndex) -> Index {
47594749    return ${Self}Index(_value: ._cocoa(index))
47604750  }
47614751#endif
@@ -4789,10 +4779,15 @@ public struct ${Self}Index<${TypeParametersDecl}> :
47894779#endif
47904780}
47914781
4792- extension ${Self}Index {
4782+ }
4783+ 
4784+ public typealias ${Self}Index<${TypeParametersDecl}> =
4785+     ${Self}<${TypeParameters}>.Index
4786+ 
4787+ extension ${Self}.Index {
47934788  public static func == (
4794-     lhs: ${Self}Index <${TypeParameters}>,
4795-     rhs: ${Self}Index <${TypeParameters}>
4789+     lhs: ${Self}<${TypeParameters}>.Index ,
4790+     rhs: ${Self}<${TypeParameters}>.Index 
47964791  ) -> Bool {
47974792    if _fastPath(lhs._guaranteedNative) {
47984793      return lhs._nativeIndex == rhs._nativeIndex
@@ -4813,8 +4808,8 @@ extension ${Self}Index {
48134808  }
48144809
48154810  public static func < (
4816-     lhs: ${Self}Index <${TypeParameters}>,
4817-     rhs: ${Self}Index <${TypeParameters}>
4811+     lhs: ${Self}<${TypeParameters}>.Index ,
4812+     rhs: ${Self}<${TypeParameters}>.Index 
48184813  ) -> Bool {
48194814    if _fastPath(lhs._guaranteedNative) {
48204815      return lhs._nativeIndex < rhs._nativeIndex
0 commit comments