Merge pull request #4623 from apple/stdlib-split-reflectable.swift
stdlib: move non-legacy parts of Reflection.swift into separate files
diff --git a/lib/AST/ASTPrinter.cpp b/lib/AST/ASTPrinter.cpp
index 88d5310..5d8c62d 100644
--- a/lib/AST/ASTPrinter.cpp
+++ b/lib/AST/ASTPrinter.cpp
@@ -1198,7 +1198,7 @@
public:
void printPattern(const Pattern *pattern);
- void printGenericParams(GenericParamList *params);
+ void printGenericParams(GenericParamList *params, bool IncludeRequirements);
void printWhereClause(ArrayRef<RequirementRepr> requirements);
private:
@@ -1211,6 +1211,7 @@
void printMembers(ArrayRef<Decl *> members, bool needComma = false,
bool openBracket = true, bool closeBracket = true);
void printNominalDeclGenericParams(NominalTypeDecl *decl);
+ void printNominalDeclGenericRequirements(NominalTypeDecl *decl);
void printInherited(const Decl *decl,
ArrayRef<TypeLoc> inherited,
ArrayRef<ProtocolDecl *> protos,
@@ -1413,7 +1414,8 @@
}
}
-void PrintAST::printGenericParams(GenericParamList *Params) {
+void PrintAST::printGenericParams(GenericParamList *Params,
+ bool IncludeRequirements) {
if (!Params)
return;
@@ -1448,7 +1450,9 @@
printInherited(GP);
Printer.printStructurePost(PrintStructureKind::GenericParameter, GP);
}
- printWhereClause(Params->getRequirements());
+ if (IncludeRequirements) {
+ printWhereClause(Params->getRequirements());
+ }
}
Printer << ">";
}
@@ -1986,16 +1990,14 @@
}
void PrintAST::printNominalDeclGenericParams(NominalTypeDecl *decl) {
- if (auto gp = decl->getGenericParams()) {
- if (!isa<ProtocolDecl>(decl)) {
- // For a protocol extension, print only the where clause; the
- // generic parameter list is implicit. For other nominal types,
- // print the generic parameters.
- if (decl->getAsProtocolOrProtocolExtensionContext())
- printWhereClause(gp->getRequirements());
- else
- printGenericParams(gp);
- }
+ if (auto GPs = decl->getGenericParams()) {
+ printGenericParams(GPs, /* IncludeRequirements */false);
+ }
+}
+
+void PrintAST::printNominalDeclGenericRequirements(NominalTypeDecl *decl) {
+ if (auto GPs = decl->getGenericParams()) {
+ printWhereClause(GPs->getRequirements());
}
}
@@ -2344,7 +2346,8 @@
[&]{
Printer.printName(decl->getName());
}, [&]{ // Signature
- printGenericParams(decl->getGenericParams());
+ printGenericParams(decl->getGenericParams(),
+ /* IncludeRequirements */false);
});
bool ShouldPrint = true;
Type Ty;
@@ -2405,6 +2408,7 @@
printNominalDeclGenericParams(decl);
});
printInherited(decl);
+ printNominalDeclGenericRequirements(decl);
}
if (Options.TypeDefinitions) {
printMembersOfDecl(decl, false, true,
@@ -2431,6 +2435,7 @@
printNominalDeclGenericParams(decl);
});
printInherited(decl);
+ printNominalDeclGenericRequirements(decl);
}
if (Options.TypeDefinitions) {
printMembersOfDecl(decl, false, true,
@@ -2458,6 +2463,7 @@
});
printInherited(decl);
+ printNominalDeclGenericRequirements(decl);
}
if (Options.TypeDefinitions) {
@@ -2481,8 +2487,6 @@
recordDeclLoc(decl,
[&]{
Printer.printName(decl->getName());
- }, [&]{ // Signature
- printNominalDeclGenericParams(decl);
});
// Figure out whether we need an explicit 'class' in the inheritance.
@@ -2790,7 +2794,8 @@
Printer.printName(decl->getName());
}, [&] { // Parameters
if (decl->isGeneric()) {
- printGenericParams(decl->getGenericParams());
+ printGenericParams(decl->getGenericParams(),
+ /* IncludeRequirements */false);
}
printFunctionParameters(decl);
@@ -2813,6 +2818,11 @@
printTypeLoc(ResultTyLoc);
Printer.printStructurePost(PrintStructureKind::FunctionReturnType);
}
+ if (decl->isGeneric()) {
+ if (auto GPs = decl->getGenericParams()) {
+ printWhereClause(GPs->getRequirements());
+ }
+ }
}
if (auto BodyFunc = Options.FunctionBody) {
@@ -2949,10 +2959,17 @@
}
if (decl->isGeneric())
- printGenericParams(decl->getGenericParams());
+ printGenericParams(decl->getGenericParams(),
+ /* IncludeRequirements */false);
printFunctionParameters(decl);
});
+ if (decl->isGeneric()) {
+ if (auto GPs = decl->getGenericParams()) {
+ printWhereClause(GPs->getRequirements());
+ }
+ }
+
if (auto BodyFunc = Options.FunctionBody) {
Printer << " {";
@@ -3452,7 +3469,8 @@
}
void printGenericParams(GenericParamList *Params) {
- PrintAST(Printer, Options).printGenericParams(Params);
+ PrintAST(Printer, Options).printGenericParams(Params,
+ /*IncludeRequirements*/true);
}
template <typename T>
diff --git a/stdlib/public/SwiftShims/UnicodeShims.h b/stdlib/public/SwiftShims/UnicodeShims.h
index f53bb92..57ae017 100644
--- a/stdlib/public/SwiftShims/UnicodeShims.h
+++ b/stdlib/public/SwiftShims/UnicodeShims.h
@@ -20,6 +20,10 @@
#include "SwiftStdint.h"
#include "Visibility.h"
+#if __has_feature(nullability)
+#pragma clang assume_nonnull begin
+#endif
+
#ifdef __cplusplus
namespace swift { extern "C" {
#endif
@@ -101,4 +105,8 @@
}} // extern "C", namespace swift
#endif
+#if __has_feature(nullability)
+#pragma clang assume_nonnull end
+#endif
+
#endif
diff --git a/test/IDE/print_ast_tc_decls.swift b/test/IDE/print_ast_tc_decls.swift
index 0430f3f..aaf749f 100644
--- a/test/IDE/print_ast_tc_decls.swift
+++ b/test/IDE/print_ast_tc_decls.swift
@@ -608,7 +608,7 @@
func `func`<`let`: `protocol`, `where`>(
class: Int, struct: `protocol`, foo: `let`, bar: `where`) where `where` : `protocol` {}
-// PASS_COMMON-NEXT: {{^}} func `func`<`let` : {{(d0200_EscapedIdentifiers.)?}}`protocol`, `where` where `where` : {{(d0200_EscapedIdentifiers.)?}}`protocol`>(class: Int, struct: {{(d0200_EscapedIdentifiers.)?}}`protocol`, foo: `let`, bar: `where`){{$}}
+// PASS_COMMON-NEXT: {{^}} func `func`<`let` : {{(d0200_EscapedIdentifiers.)?}}`protocol`, `where`>(class: Int, struct: {{(d0200_EscapedIdentifiers.)?}}`protocol`, foo: `let`, bar: `where`) where `where` : {{(d0200_EscapedIdentifiers.)?}}`protocol`{{$}}
var `var`: `struct` = `struct`()
// PASS_COMMON-NEXT: {{^}} var `var`: {{(d0200_EscapedIdentifiers.)?}}`struct`{{$}}
@@ -1206,31 +1206,31 @@
}
struct GenericParams2<T : FooProtocol> where T : BarProtocol {}
-// PASS_ONE_LINE-DAG: {{^}}struct GenericParams2<T : FooProtocol where T : BarProtocol> {{{$}}
+// PASS_ONE_LINE-DAG: {{^}}struct GenericParams2<T : FooProtocol> where T : BarProtocol {{{$}}
struct GenericParams3<T : FooProtocol> where T : BarProtocol, T : QuxProtocol {}
-// PASS_ONE_LINE-DAG: {{^}}struct GenericParams3<T : FooProtocol where T : BarProtocol, T : QuxProtocol> {{{$}}
+// PASS_ONE_LINE-DAG: {{^}}struct GenericParams3<T : FooProtocol> where T : BarProtocol, T : QuxProtocol {{{$}}
struct GenericParams4<T : QuxProtocol> where T.Qux : FooProtocol {}
-// PASS_ONE_LINE-DAG: {{^}}struct GenericParams4<T : QuxProtocol where T.Qux : FooProtocol> {{{$}}
+// PASS_ONE_LINE-DAG: {{^}}struct GenericParams4<T : QuxProtocol> where T.Qux : FooProtocol {{{$}}
struct GenericParams5<T : QuxProtocol> where T.Qux : FooProtocol & BarProtocol {}
-// PREFER_TYPE_PRINTING: {{^}}struct GenericParams5<T : QuxProtocol where T.Qux : BarProtocol & FooProtocol> {{{$}}
+// PREFER_TYPE_PRINTING: {{^}}struct GenericParams5<T : QuxProtocol> where T.Qux : BarProtocol & FooProtocol {{{$}}
// FIXME: in protocol compositions protocols are listed in reverse order.
//
-// PREFER_TYPE_REPR_PRINTING: {{^}}struct GenericParams5<T : QuxProtocol where T.Qux : FooProtocol & BarProtocol> {{{$}}
+// PREFER_TYPE_REPR_PRINTING: {{^}}struct GenericParams5<T : QuxProtocol> where T.Qux : FooProtocol & BarProtocol {{{$}}
struct GenericParams6<T : QuxProtocol, U : QuxProtocol> where T.Qux == U.Qux {}
// Because of the same type conformance, 'T.Qux' and 'U.Qux' types are
// identical, so they are printed exactly the same way. Printing a TypeRepr
// allows us to recover the original spelling.
//
-// PREFER_TYPE_PRINTING: {{^}}struct GenericParams6<T : QuxProtocol, U : QuxProtocol where T.Qux == T.Qux> {{{$}}
-// PREFER_TYPE_REPR_PRINTING: {{^}}struct GenericParams6<T : QuxProtocol, U : QuxProtocol where T.Qux == U.Qux> {{{$}}
+// PREFER_TYPE_PRINTING: {{^}}struct GenericParams6<T : QuxProtocol, U : QuxProtocol> where T.Qux == T.Qux {{{$}}
+// PREFER_TYPE_REPR_PRINTING: {{^}}struct GenericParams6<T : QuxProtocol, U : QuxProtocol> where T.Qux == U.Qux {{{$}}
struct GenericParams7<T : QuxProtocol, U : QuxProtocol> where T.Qux : QuxProtocol, U.Qux : QuxProtocol, T.Qux.Qux == U.Qux.Qux {}
-// PREFER_TYPE_PRINTING: {{^}}struct GenericParams7<T : QuxProtocol, U : QuxProtocol where T.Qux : QuxProtocol, U.Qux : QuxProtocol, T.Qux.Qux == T.Qux.Qux> {{{$}}
-// PREFER_TYPE_REPR_PRINTING: {{^}}struct GenericParams7<T : QuxProtocol, U : QuxProtocol where T.Qux : QuxProtocol, U.Qux : QuxProtocol, T.Qux.Qux == U.Qux.Qux> {{{$}}
+// PREFER_TYPE_PRINTING: {{^}}struct GenericParams7<T : QuxProtocol, U : QuxProtocol> where T.Qux : QuxProtocol, U.Qux : QuxProtocol, T.Qux.Qux == T.Qux.Qux {{{$}}
+// PREFER_TYPE_REPR_PRINTING: {{^}}struct GenericParams7<T : QuxProtocol, U : QuxProtocol> where T.Qux : QuxProtocol, U.Qux : QuxProtocol, T.Qux.Qux == U.Qux.Qux {{{$}}
//===---
//===--- Tupe sugar for library types.
diff --git a/test/SILOptimizer/eager_specialize.sil b/test/SILOptimizer/eager_specialize.sil
index a67cee4..8c8d4fc 100644
--- a/test/SILOptimizer/eager_specialize.sil
+++ b/test/SILOptimizer/eager_specialize.sil
@@ -31,9 +31,9 @@
}
// CHECK: @_specialize(S)
-// CHECK: public func getGenericContainer<T where T : HasElt, T.Elt : AnElt>(g: G<T>, e: T.Elt) -> T
+// CHECK: public func getGenericContainer<T>(g: G<T>, e: T.Elt) -> T where T : HasElt, T.Elt : AnElt
@_specialize(S)
-public func getGenericContainer<T where T : HasElt, T.Elt : AnElt>(g: G<T>, e: T.Elt) -> T
+public func getGenericContainer<T>(g: G<T>, e: T.Elt) -> T where T : HasElt, T.Elt : AnElt
enum ArithmeticError : Error {
case DivByZero
diff --git a/test/SourceKit/CursorInfo/cursor_info.swift b/test/SourceKit/CursorInfo/cursor_info.swift
index d5f797f..63e3849 100644
--- a/test/SourceKit/CursorInfo/cursor_info.swift
+++ b/test/SourceKit/CursorInfo/cursor_info.swift
@@ -114,7 +114,7 @@
associatedtype T
}
-func genReq<U, V: P1 where V.T == U>(_ u: U, v: V) {}
+func genReq<U, V: P1>(_ u: U, v: V) where V.T == U {}
@objc class C5 {
@@ -541,9 +541,9 @@
// CHECK51: <decl.function.method.class><syntaxtype.keyword>final</syntaxtype.keyword> <syntaxtype.keyword>class</syntaxtype.keyword> <syntaxtype.keyword>func</syntaxtype.keyword>
// RUN: %sourcekitd-test -req=cursor -pos=117:6 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck %s -check-prefix=CHECK52
-// CHECK52: source.lang.swift.decl.function.free (117:6-117:51)
+// CHECK52: source.lang.swift.decl.function.free (117:6-117:36)
// CHECK52: <U, V : P1 where V.T == U> (U, v: V) -> ()
-// CHECK52: <<decl.generic_type_param usr="{{.*}}"><decl.generic_type_param.name>U</decl.generic_type_param.name></decl.generic_type_param>, <decl.generic_type_param usr="{{.*}}"><decl.generic_type_param.name>V</decl.generic_type_param.name> : <decl.generic_type_param.constraint><ref.protocol usr="{{.*}}">P1</ref.protocol></decl.generic_type_param.constraint></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr="{{.*}}">V</ref.generic_type_param>.<ref.associatedtype usr="{{.*}}">T</ref.associatedtype> == <ref.generic_type_param usr="{{.*}}">U</ref.generic_type_param></decl.generic_type_requirement>>
+// CHECK52: <<decl.generic_type_param usr="{{.*}}"><decl.generic_type_param.name>U</decl.generic_type_param.name></decl.generic_type_param>, <decl.generic_type_param usr="{{.*}}"><decl.generic_type_param.name>V</decl.generic_type_param.name> : <decl.generic_type_param.constraint><ref.protocol usr="{{.*}}">P1</ref.protocol></decl.generic_type_param.constraint></decl.generic_type_param>>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>u</decl.var.parameter.name>: <decl.var.parameter.type><ref.generic_type_param usr="{{.*}}">U</ref.generic_type_param></decl.var.parameter.type></decl.var.parameter>, <decl.var.parameter><decl.var.parameter.argument_label>v</decl.var.parameter.argument_label>: <decl.var.parameter.type><ref.generic_type_param usr="{{.*}}">V</ref.generic_type_param></decl.var.parameter.type></decl.var.parameter>) <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr="{{.*}}">V</ref.generic_type_param>.<ref.associatedtype usr="{{.*}}">T</ref.associatedtype> == <ref.generic_type_param usr="{{.*}}">U</ref.generic_type_param></decl.generic_type_requirement>
// RUN: %sourcekitd-test -req=cursor -pos=117:16 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck %s -check-prefix=CHECK53
// CHECK53: source.lang.swift.decl.generic_type_param (117:16-117:17)
diff --git a/test/SourceKit/DocSupport/Inputs/cake.swift b/test/SourceKit/DocSupport/Inputs/cake.swift
index 5a8b404..1ecbb85 100644
--- a/test/SourceKit/DocSupport/Inputs/cake.swift
+++ b/test/SourceKit/DocSupport/Inputs/cake.swift
@@ -14,7 +14,7 @@
public subscript(index i: Float) -> Int { return 0 }
}
-public func genfoo<T1 : Prot, T2 : C1 where T1.Element == Int, T2.Element == T1.Element>(x ix: T1, y iy: T2) {}
+public func genfoo<T1 : Prot, T2 : C1>(x ix: T1, y iy: T2) where T1.Element == Int, T2.Element == T1.Element {}
public extension Prot where Self.Element == Int {
final func extfoo() {}
diff --git a/test/SourceKit/DocSupport/doc_clang_module.swift.response b/test/SourceKit/DocSupport/doc_clang_module.swift.response
index e2f6735..1e793ff 100644
--- a/test/SourceKit/DocSupport/doc_clang_module.swift.response
+++ b/test/SourceKit/DocSupport/doc_clang_module.swift.response
@@ -102,7 +102,7 @@
extension FooRuncingOptions {
- convenience init<S : Sequence where S.Iterator.Element == FooRuncingOptions>(_ sequence: S)
+ convenience init<S : Sequence>(_ sequence: S) where S.Iterator.Element == FooRuncingOptions
convenience init(arrayLiteral arrayLiteral: FooRuncingOptions...)
@@ -1856,50 +1856,55 @@
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 2550,
- key.length: 5
- },
- {
- key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 2556,
+ key.offset: 2551,
key.length: 1
},
{
- key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 2558,
- key.length: 8
- },
- {
- key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 2567,
- key.length: 7
- },
- {
- key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 2578,
- key.length: 17
- },
- {
- key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 2597,
- key.length: 1
- },
- {
- key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 2599,
+ key.kind: source.lang.swift.syntaxtype.identifier,
+ key.offset: 2553,
key.length: 8
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 2599,
+ key.offset: 2563,
+ key.length: 1
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.keyword,
+ key.offset: 2566,
+ key.length: 5
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.typeidentifier,
+ key.offset: 2572,
+ key.length: 1
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.typeidentifier,
+ key.offset: 2574,
key.length: 8
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 2609,
+ key.offset: 2583,
+ key.length: 7
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.typeidentifier,
+ key.offset: 2594,
+ key.length: 17
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.argument,
+ key.offset: 2551,
key.length: 1
},
{
+ key.kind: source.lang.swift.syntaxtype.parameter,
+ key.offset: 2553,
+ key.length: 8
+ },
+ {
key.kind: source.lang.swift.syntaxtype.attribute.builtin,
key.offset: 2617,
key.length: 11
@@ -5653,16 +5658,16 @@
key.description: "S.Iterator.Element == Element"
}
],
- key.doc.full_as_xml: "<Function><Name>init(_:)</Name><USR>s:FEsPs10SetAlgebracuRd__s8Sequencewx7ElementzWd__8Iterator7Element_rFqd__x</USR><Declaration>convenience init<S : Sequence where S.Iterator.Element == Element>(_ sequence: S)</Declaration><Abstract><Para>Creates a new set from a finite sequence of items.</Para></Abstract><Parameters><Parameter><Name>sequence</Name><Direction isExplicit=\"0\">in</Direction><Discussion><Para>The elements to use as members of the new set.</Para></Discussion></Parameter></Parameters><Discussion><Para>Use this initializer to create a new set from an existing sequence, like an array or a range:</Para><CodeListing language=\"swift\"><zCodeLineNumbered><![CDATA[let validIndices = Set(0..<7).subtracting([2, 4, 5])]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[print(validIndices)]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[// Prints \"[6, 0, 1, 3]\"]]></zCodeLineNumbered><zCodeLineNumbered></zCodeLineNumbered></CodeListing></Discussion></Function>",
+ key.doc.full_as_xml: "<Function><Name>init(_:)</Name><USR>s:FEsPs10SetAlgebracuRd__s8Sequencewx7ElementzWd__8Iterator7Element_rFqd__x</USR><Declaration>convenience init<S : Sequence>(_ sequence: S) where S.Iterator.Element == Element</Declaration><Abstract><Para>Creates a new set from a finite sequence of items.</Para></Abstract><Parameters><Parameter><Name>sequence</Name><Direction isExplicit=\"0\">in</Direction><Discussion><Para>The elements to use as members of the new set.</Para></Discussion></Parameter></Parameters><Discussion><Para>Use this initializer to create a new set from an existing sequence, like an array or a range:</Para><CodeListing language=\"swift\"><zCodeLineNumbered><![CDATA[let validIndices = Set(0..<7).subtracting([2, 4, 5])]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[print(validIndices)]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[// Prints \"[6, 0, 1, 3]\"]]></zCodeLineNumbered><zCodeLineNumbered></zCodeLineNumbered></CodeListing></Discussion></Function>",
key.offset: 2520,
key.length: 91,
- key.fully_annotated_decl: "<decl.function.constructor><syntaxtype.keyword>convenience</syntaxtype.keyword> <syntaxtype.keyword>init</syntaxtype.keyword><<decl.generic_type_param usr=\"s:tFEsPs10SetAlgebracuRd__s8Sequencewx7ElementzWd__8Iterator7Element_rFqd__xL_1SMqd__\"><decl.generic_type_param.name>S</decl.generic_type_param.name> : <decl.generic_type_param.constraint><ref.protocol usr=\"s:Ps8Sequence\">Sequence</ref.protocol></decl.generic_type_param.constraint></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement>S.Iterator.Element == FooRuncingOptions</decl.generic_type_requirement>>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>sequence</decl.var.parameter.name>: <decl.var.parameter.type>S</decl.var.parameter.type></decl.var.parameter>)</decl.function.constructor>",
+ key.fully_annotated_decl: "<decl.function.constructor><syntaxtype.keyword>convenience</syntaxtype.keyword> <syntaxtype.keyword>init</syntaxtype.keyword><<decl.generic_type_param usr=\"s:tFEsPs10SetAlgebracuRd__s8Sequencewx7ElementzWd__8Iterator7Element_rFqd__xL_1SMqd__\"><decl.generic_type_param.name>S</decl.generic_type_param.name> : <decl.generic_type_param.constraint><ref.protocol usr=\"s:Ps8Sequence\">Sequence</ref.protocol></decl.generic_type_param.constraint></decl.generic_type_param>>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>sequence</decl.var.parameter.name>: <decl.var.parameter.type>S</decl.var.parameter.type></decl.var.parameter>) <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement>S.Iterator.Element == FooRuncingOptions</decl.generic_type_requirement></decl.function.constructor>",
key.entities: [
{
key.kind: source.lang.swift.decl.var.local,
key.keyword: "_",
key.name: "sequence",
- key.offset: 2609,
+ key.offset: 2563,
key.length: 1
}
]
diff --git a/test/SourceKit/DocSupport/doc_source_file.swift.response b/test/SourceKit/DocSupport/doc_source_file.swift.response
index b3c1efc..a9ad022 100644
--- a/test/SourceKit/DocSupport/doc_source_file.swift.response
+++ b/test/SourceKit/DocSupport/doc_source_file.swift.response
@@ -2664,7 +2664,7 @@
],
key.offset: 1896,
key.length: 55,
- key.fully_annotated_decl: "<decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>genfoo</decl.name><<decl.generic_type_param usr=\"s:tF8__main__6genfoouRxS_5Prot2wx7ElementzSirFxT_L_1TMx\"><decl.generic_type_param.name>T</decl.generic_type_param.name> : <decl.generic_type_param.constraint><ref.protocol usr=\"s:P8__main__5Prot2\">Prot2</ref.protocol></decl.generic_type_param.constraint></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:tF8__main__6genfoouRxS_5Prot2wx7ElementzSirFxT_L_1TMx\">T</ref.generic_type_param>.<ref.associatedtype usr=\"s:P8__main__5Prot27Element\">Element</ref.associatedtype> == <ref.struct usr=\"s:Si\">Int</ref.struct></decl.generic_type_requirement>>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>x</decl.var.parameter.name>: <decl.var.parameter.type><ref.generic_type_param usr=\"s:tF8__main__6genfoouRxS_5Prot2wx7ElementzSirFxT_L_1TMx\">T</ref.generic_type_param></decl.var.parameter.type></decl.var.parameter>)</decl.function.free>",
+ key.fully_annotated_decl: "<decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>genfoo</decl.name><<decl.generic_type_param usr=\"s:tF8__main__6genfoouRxS_5Prot2wx7ElementzSirFxT_L_1TMx\"><decl.generic_type_param.name>T</decl.generic_type_param.name> : <decl.generic_type_param.constraint><ref.protocol usr=\"s:P8__main__5Prot2\">Prot2</ref.protocol></decl.generic_type_param.constraint></decl.generic_type_param>>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>x</decl.var.parameter.name>: <decl.var.parameter.type><ref.generic_type_param usr=\"s:tF8__main__6genfoouRxS_5Prot2wx7ElementzSirFxT_L_1TMx\">T</ref.generic_type_param></decl.var.parameter.type></decl.var.parameter>) <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:tF8__main__6genfoouRxS_5Prot2wx7ElementzSirFxT_L_1TMx\">T</ref.generic_type_param>.<ref.associatedtype usr=\"s:P8__main__5Prot27Element\">Element</ref.associatedtype> == <ref.struct usr=\"s:Si\">Int</ref.struct></decl.generic_type_requirement></decl.function.free>",
key.entities: [
{
key.kind: source.lang.swift.decl.var.local,
diff --git a/test/SourceKit/DocSupport/doc_swift_module.swift.response b/test/SourceKit/DocSupport/doc_swift_module.swift.response
index 3d6c816..022e524 100644
--- a/test/SourceKit/DocSupport/doc_swift_module.swift.response
+++ b/test/SourceKit/DocSupport/doc_swift_module.swift.response
@@ -76,7 +76,7 @@
typealias T = cake.S2
}
-func genfoo<T1 : Prot, T2 : cake.C1 where T1.Element == Int, T2.Element == T1.Element>(x ix: T1, y iy: T2)
+func genfoo<T1 : Prot, T2 : cake.C1>(x ix: T1, y iy: T2) where T1.Element == Int, T2.Element == T1.Element
[
@@ -618,93 +618,93 @@
key.length: 2
},
{
+ key.kind: source.lang.swift.syntaxtype.identifier,
+ key.offset: 775,
+ key.length: 1
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.identifier,
+ key.offset: 777,
+ key.length: 2
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.identifier,
+ key.offset: 781,
+ key.length: 2
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.identifier,
+ key.offset: 785,
+ key.length: 1
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.identifier,
+ key.offset: 787,
+ key.length: 2
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.identifier,
+ key.offset: 791,
+ key.length: 2
+ },
+ {
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 774,
+ key.offset: 795,
key.length: 5
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 780,
+ key.offset: 801,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 783,
+ key.offset: 804,
key.length: 7
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 794,
+ key.offset: 815,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 799,
+ key.offset: 820,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 802,
+ key.offset: 823,
key.length: 7
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 813,
+ key.offset: 834,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 816,
+ key.offset: 837,
key.length: 7
},
{
key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 825,
+ key.offset: 775,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 827,
- key.length: 2
- },
- {
- key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 825,
- key.length: 1
- },
- {
- key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 827,
- key.length: 2
- },
- {
- key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 831,
+ key.offset: 777,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 835,
+ key.offset: 785,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 837,
- key.length: 2
- },
- {
- key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 835,
- key.length: 1
- },
- {
- key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 837,
- key.length: 2
- },
- {
- key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 841,
+ key.offset: 787,
key.length: 2
}
]
@@ -1119,20 +1119,20 @@
],
key.offset: 738,
key.length: 106,
- key.fully_annotated_decl: "<decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>genfoo</decl.name><<decl.generic_type_param usr=\"s:tF4cake6genfoou0_RxS_4Prot_CS_2C1wx7ElementzSirFT1xx1yq__T_L_2T1Mx\"><decl.generic_type_param.name>T1</decl.generic_type_param.name> : <decl.generic_type_param.constraint><ref.protocol usr=\"s:P4cake4Prot\">Prot</ref.protocol></decl.generic_type_param.constraint></decl.generic_type_param>, <decl.generic_type_param usr=\"s:tF4cake6genfoou0_RxS_4Prot_CS_2C1wx7ElementzSirFT1xx1yq__T_L_2T2Mq_\"><decl.generic_type_param.name>T2</decl.generic_type_param.name> : <decl.generic_type_param.constraint><ref.class usr=\"s:C4cake2C1\">C1</ref.class></decl.generic_type_param.constraint></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement>T1.Element == Int</decl.generic_type_requirement>, <decl.generic_type_requirement>T2.Element == T1.Element</decl.generic_type_requirement>>(<decl.var.parameter><decl.var.parameter.argument_label>x</decl.var.parameter.argument_label> <decl.var.parameter.name>ix</decl.var.parameter.name>: <decl.var.parameter.type>T1</decl.var.parameter.type></decl.var.parameter>, <decl.var.parameter><decl.var.parameter.argument_label>y</decl.var.parameter.argument_label> <decl.var.parameter.name>iy</decl.var.parameter.name>: <decl.var.parameter.type>T2</decl.var.parameter.type></decl.var.parameter>)</decl.function.free>",
+ key.fully_annotated_decl: "<decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>genfoo</decl.name><<decl.generic_type_param usr=\"s:tF4cake6genfoou0_RxS_4Prot_CS_2C1wx7ElementzSirFT1xx1yq__T_L_2T1Mx\"><decl.generic_type_param.name>T1</decl.generic_type_param.name> : <decl.generic_type_param.constraint><ref.protocol usr=\"s:P4cake4Prot\">Prot</ref.protocol></decl.generic_type_param.constraint></decl.generic_type_param>, <decl.generic_type_param usr=\"s:tF4cake6genfoou0_RxS_4Prot_CS_2C1wx7ElementzSirFT1xx1yq__T_L_2T2Mq_\"><decl.generic_type_param.name>T2</decl.generic_type_param.name> : <decl.generic_type_param.constraint><ref.class usr=\"s:C4cake2C1\">C1</ref.class></decl.generic_type_param.constraint></decl.generic_type_param>>(<decl.var.parameter><decl.var.parameter.argument_label>x</decl.var.parameter.argument_label> <decl.var.parameter.name>ix</decl.var.parameter.name>: <decl.var.parameter.type>T1</decl.var.parameter.type></decl.var.parameter>, <decl.var.parameter><decl.var.parameter.argument_label>y</decl.var.parameter.argument_label> <decl.var.parameter.name>iy</decl.var.parameter.name>: <decl.var.parameter.type>T2</decl.var.parameter.type></decl.var.parameter>) <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement>T1.Element == Int</decl.generic_type_requirement>, <decl.generic_type_requirement>T2.Element == T1.Element</decl.generic_type_requirement></decl.function.free>",
key.entities: [
{
key.kind: source.lang.swift.decl.var.local,
key.keyword: "x",
key.name: "ix",
- key.offset: 831,
+ key.offset: 781,
key.length: 2
},
{
key.kind: source.lang.swift.decl.var.local,
key.keyword: "y",
key.name: "iy",
- key.offset: 841,
+ key.offset: 791,
key.length: 2
}
]