Merge pull request #23651 from compnerd/simon-says
test: use the clang definition for UNIT{32,64}_MAX
diff --git a/cmake/modules/SwiftComponents.cmake b/cmake/modules/SwiftComponents.cmake
index fba6e55..a637e31 100644
--- a/cmake/modules/SwiftComponents.cmake
+++ b/cmake/modules/SwiftComponents.cmake
@@ -61,11 +61,12 @@
# Xcode;
# * tools -- tools (other than the compiler) useful for developers writing
# Swift code.
+# * toolchain-tools -- a subset of tools that we will install to the OSS toolchain.
# * testsuite-tools -- extra tools required to run the Swift testsuite.
# * toolchain-dev-tools -- install development tools useful in a shared toolchain
# * dev -- headers and libraries required to use Swift compiler as a library.
set(_SWIFT_DEFINED_COMPONENTS
- "autolink-driver;compiler;clang-builtin-headers;clang-resource-dir-symlink;clang-builtin-headers-in-clang-resource-dir;stdlib;stdlib-experimental;sdk-overlay;parser-lib;editor-integration;tools;testsuite-tools;toolchain-dev-tools;dev;license;sourcekit-xpc-service;sourcekit-inproc;swift-remote-mirror;swift-remote-mirror-headers")
+ "autolink-driver;compiler;clang-builtin-headers;clang-resource-dir-symlink;clang-builtin-headers-in-clang-resource-dir;stdlib;stdlib-experimental;sdk-overlay;parser-lib;editor-integration;tools;testsuite-tools;toolchain-tools;toolchain-dev-tools;dev;license;sourcekit-xpc-service;sourcekit-inproc;swift-remote-mirror;swift-remote-mirror-headers")
# The default install components include all of the defined components, except
# for the following exceptions.
@@ -143,6 +144,24 @@
install(${ARGN})
endfunction()
+# swift_install_in_either_component(<COMPONENT1 NAME> <COMPONENT2 NAME>
+# <same parameters as install()>)
+#
+# Executes the specified installation actions if either one of the named
+# components is requested to be installed.
+#
+# This function accepts the same parameters as install().
+function(swift_install_in_either_component comp1 comp2)
+ foreach(component ${comp1} ${comp2})
+ precondition(component MESSAGE "Component name is required")
+ swift_is_installing_component("${component}" is_installing)
+ if(is_installing)
+ install(${ARGN})
+ return()
+ endif()
+ endforeach(component)
+endfunction()
+
function(swift_install_symlink_component component)
cmake_parse_arguments(
ARG # prefix
diff --git a/include/swift/AST/Attr.def b/include/swift/AST/Attr.def
index b36a01d..28aef75 100644
--- a/include/swift/AST/Attr.def
+++ b/include/swift/AST/Attr.def
@@ -390,6 +390,9 @@
SIMPLE_DECL_ATTR(_alwaysEmitIntoClient, AlwaysEmitIntoClient,
OnVar | OnSubscript | OnAbstractFunction | UserInaccessible,
83)
+SIMPLE_DECL_ATTR(_implementationOnly, ImplementationOnly,
+ OnImport | UserInaccessible,
+ 84)
#undef TYPE_ATTR
#undef DECL_ATTR_ALIAS
diff --git a/include/swift/AST/Decl.h b/include/swift/AST/Decl.h
index a4eeb75..095cf78 100644
--- a/include/swift/AST/Decl.h
+++ b/include/swift/AST/Decl.h
@@ -3647,6 +3647,19 @@
Bits.ClassDecl.Circularity = static_cast<unsigned>(circularity);
}
+ /// Walk this class and all of the superclasses of this class, transitively,
+ /// invoking the callback function for each class.
+ ///
+ /// \param fn The callback function that will be invoked for each superclass.
+ /// It can return \c Continue to continue the traversal. Returning
+ /// \c SkipChildren halts the search and returns \c false, while returning
+ /// \c Stop halts the search and returns \c true.
+ ///
+ /// \returns \c true if \c fn returned \c Stop for any class, \c false
+ /// otherwise.
+ bool walkSuperclasses(
+ llvm::function_ref<TypeWalker::Action(ClassDecl *)> fn) const;
+
//// Whether this class requires all of its stored properties to
//// have initializers in the class definition.
bool requiresStoredPropertyInits() const {
@@ -3975,8 +3988,8 @@
/// a protocol having nested types (ObjC protocols).
llvm::TinyPtrVector<AssociatedTypeDecl *> getAssociatedTypeMembers() const;
- /// Walk all of the protocols inherited by this protocol, transitively,
- /// invoking the callback function for each protocol.
+ /// Walk this protocol and all of the protocols inherited by this protocol,
+ /// transitively, invoking the callback function for each protocol.
///
/// \param fn The callback function that will be invoked for each inherited
/// protocol. It can return \c Continue to continue the traversal,
diff --git a/include/swift/AST/DiagnosticsSema.def b/include/swift/AST/DiagnosticsSema.def
index 56c2d0e..87ea871 100644
--- a/include/swift/AST/DiagnosticsSema.def
+++ b/include/swift/AST/DiagnosticsSema.def
@@ -765,6 +765,9 @@
ERROR(module_not_compiled_for_private_import,none,
"module %0 was not compiled for private import", (Identifier))
+ERROR(import_implementation_cannot_be_exported,none,
+ "module %0 cannot be both exported and implementation-only", (Identifier))
+
// Operator decls
ERROR(ambiguous_operator_decls,none,
diff --git a/include/swift/AST/Module.h b/include/swift/AST/Module.h
index abab16b..35a96b8 100644
--- a/include/swift/AST/Module.h
+++ b/include/swift/AST/Module.h
@@ -419,18 +419,23 @@
SmallVectorImpl<AbstractFunctionDecl *> &results) const;
/// \sa getImportedModules
- enum class ImportFilter {
- All,
- Public,
- Private
+ enum class ImportFilterKind {
+ /// Include imports declared with `@_exported`.
+ Public = 1 << 0,
+ /// Include "regular" imports with no special annotation.
+ Private = 1 << 1,
+ /// Include imports declared with `@_implementationOnly`.
+ ImplementationOnly = 1 << 2
};
+ /// \sa getImportedModules
+ using ImportFilter = OptionSet<ImportFilterKind>;
/// Looks up which modules are imported by this module.
///
/// \p filter controls whether public, private, or any imports are included
/// in this list.
void getImportedModules(SmallVectorImpl<ImportedModule> &imports,
- ImportFilter filter = ImportFilter::Public) const;
+ ImportFilter filter = ImportFilterKind::Public) const;
/// Looks up which modules are imported by this module, ignoring any that
/// won't contain top-level decls.
@@ -758,7 +763,7 @@
/// \see ModuleDecl::getImportedModulesForLookup
virtual void getImportedModulesForLookup(
SmallVectorImpl<ModuleDecl::ImportedModule> &imports) const {
- return getImportedModules(imports, ModuleDecl::ImportFilter::Public);
+ return getImportedModules(imports, ModuleDecl::ImportFilterKind::Public);
}
/// Generates the list of libraries needed to link this file, based on its
@@ -891,23 +896,29 @@
/// This source file has access to private declarations in the imported
/// module.
PrivateImport = 0x4,
+
+ /// The imported module is an implementation detail of this file and should
+ /// not be required to be present if the main module is ever imported
+ /// elsewhere.
+ ///
+ /// Mutually exclusive with Exported.
+ ImplementationOnly = 0x8
};
/// \see ImportFlags
using ImportOptions = OptionSet<ImportFlags>;
- typedef std::pair<ImportOptions, StringRef> ImportOptionsAndFilename;
-
struct ImportedModuleDesc {
ModuleDecl::ImportedModule module;
ImportOptions importOptions;
StringRef filename;
- ImportedModuleDesc(ModuleDecl::ImportedModule module, ImportOptions options)
- : module(module), importOptions(options) {}
ImportedModuleDesc(ModuleDecl::ImportedModule module, ImportOptions options,
- StringRef filename)
- : module(module), importOptions(options), filename(filename) {}
+ StringRef filename = {})
+ : module(module), importOptions(options), filename(filename) {
+ assert(!(importOptions.contains(ImportFlags::Exported) &&
+ importOptions.contains(ImportFlags::ImplementationOnly)));
+ }
};
private:
diff --git a/include/swift/Basic/OptionSet.h b/include/swift/Basic/OptionSet.h
index 69bb319..0edab18 100644
--- a/include/swift/Basic/OptionSet.h
+++ b/include/swift/Basic/OptionSet.h
@@ -87,6 +87,15 @@
return !static_cast<bool>(set - *this);
}
+ /// Check if this option set contains the exact same options as the given set.
+ bool containsOnly(OptionSet set) {
+ return Storage == set.Storage;
+ }
+
+ // '==' and '!=' are deliberately not defined because they provide a pitfall
+ // where someone might use '==' but really want 'contains'. If you actually
+ // want '==' behavior, use 'containsOnly'.
+
/// Produce the union of two option sets.
friend OptionSet operator|(OptionSet lhs, OptionSet rhs) {
return OptionSet(lhs.Storage | rhs.Storage);
@@ -114,7 +123,7 @@
return OptionSet(lhs.Storage & ~rhs.Storage);
}
- /// Produce the intersection of two option sets.
+ /// Produce the difference of two option sets.
friend OptionSet &operator-=(OptionSet &lhs, OptionSet rhs) {
lhs.Storage &= ~rhs.Storage;
return lhs;
diff --git a/include/swift/Serialization/ModuleFile.h b/include/swift/Serialization/ModuleFile.h
index 59febe9..42a3a67 100644
--- a/include/swift/Serialization/ModuleFile.h
+++ b/include/swift/Serialization/ModuleFile.h
@@ -135,27 +135,48 @@
const StringRef RawPath;
private:
- unsigned IsExported : 1;
+ using ImportFilterKind = ModuleDecl::ImportFilterKind;
+ const unsigned RawImportControl : 2;
const unsigned IsHeader : 1;
const unsigned IsScoped : 1;
- Dependency(StringRef path, bool isHeader, bool exported, bool isScoped)
- : RawPath(path), IsExported(exported), IsHeader(isHeader),
- IsScoped(isScoped) {}
+ static unsigned rawControlFromKind(ImportFilterKind importKind) {
+ return llvm::countTrailingZeros(static_cast<unsigned>(importKind));
+ }
+ ImportFilterKind getImportControl() const {
+ return static_cast<ImportFilterKind>(1 << RawImportControl);
+ }
+
+ Dependency(StringRef path, bool isHeader, ImportFilterKind importControl,
+ bool isScoped)
+ : RawPath(path), RawImportControl(rawControlFromKind(importControl)),
+ IsHeader(isHeader), IsScoped(isScoped) {
+ assert(llvm::countPopulation(static_cast<unsigned>(importControl)) == 1 &&
+ "must be a particular filter option, not a bitset");
+ assert(getImportControl() == importControl && "not enough bits");
+ }
public:
- Dependency(StringRef path, bool exported, bool isScoped)
- : Dependency(path, false, exported, isScoped) {}
+ Dependency(StringRef path, ImportFilterKind importControl, bool isScoped)
+ : Dependency(path, false, importControl, isScoped) {}
static Dependency forHeader(StringRef headerPath, bool exported) {
- return Dependency(headerPath, true, exported, false);
+ auto importControl = exported ? ImportFilterKind::Public
+ : ImportFilterKind::Private;
+ return Dependency(headerPath, true, importControl, false);
}
bool isLoaded() const {
return Import.second != nullptr;
}
- bool isExported() const { return IsExported; }
+ bool isExported() const {
+ return getImportControl() == ImportFilterKind::Public;
+ }
+ bool isImplementationOnly() const {
+ return getImportControl() == ImportFilterKind::ImplementationOnly;
+ }
+
bool isHeader() const { return IsHeader; }
bool isScoped() const { return IsScoped; }
@@ -638,11 +659,26 @@
// Out of line to avoid instantiation OnDiskChainedHashTable here.
~ModuleFile();
- /// Associates this module file with an AST module.
+ /// Associates this module file with the AST node representing it.
///
- /// Returns any error that occurred during association, including validation
- /// that the module file is compatible with the module it's being loaded as.
- Status associateWithFileContext(FileUnit *file, SourceLoc diagLoc);
+ /// Checks that the file is compatible with the AST module it's being loaded
+ /// into, loads any dependencies needed to understand the module, and updates
+ /// the ASTContext and ClangImporter with search paths and other information
+ /// from the module.
+ ///
+ /// \param file The FileUnit that represents this file's place in the AST.
+ /// \param diagLoc A location used for diagnostics that occur during loading.
+ /// This does not include diagnostics about \e this file failing to load,
+ /// but rather other things that might be imported as part of bringing the
+ /// file into the AST.
+ /// \param treatAsPartialModule If true, processes implementation-only
+ /// information instead of assuming the client won't need it and shouldn't
+ /// see it.
+ ///
+ /// \returns any error that occurred during association, such as being
+ /// compiled for a different OS.
+ Status associateWithFileContext(FileUnit *file, SourceLoc diagLoc,
+ bool treatAsPartialModule);
/// Checks whether this module can be used.
Status getStatus() const {
diff --git a/include/swift/Serialization/ModuleFormat.h b/include/swift/Serialization/ModuleFormat.h
index 7582501..d8d04cc 100644
--- a/include/swift/Serialization/ModuleFormat.h
+++ b/include/swift/Serialization/ModuleFormat.h
@@ -52,7 +52,7 @@
/// describe what change you made. The content of this comment isn't important;
/// it just ensures a conflict if two people change the module format.
/// Don't worry about adhering to the 80-column limit for this line.
-const uint16_t SWIFTMODULE_VERSION_MINOR = 479; // stored property default arg
+const uint16_t SWIFTMODULE_VERSION_MINOR = 480; // Last change: import control
using DeclIDField = BCFixed<31>;
@@ -452,6 +452,8 @@
/// TODO: Float, string, char, etc.
};
+using EnumElementRawValueKindField = BCFixed<4>;
+
// These IDs must \em not be renumbered or reordered without incrementing
// the module version.
enum class ResilienceExpansion : uint8_t {
@@ -459,7 +461,17 @@
Maximal,
};
-using EnumElementRawValueKindField = BCFixed<4>;
+// These IDs must \em not be renumbered or reordered without incrementing
+// the module version.
+enum class ImportControl : uint8_t {
+ /// `import FooKit`
+ Normal = 0,
+ /// `@_exported import FooKit`
+ Exported,
+ /// `@_uncheckedImplementationOnly import FooKit`
+ ImplementationOnly
+};
+using ImportControlField = BCFixed<2>;
/// The various types of blocks that can occur within a serialized Swift
/// module.
@@ -636,8 +648,8 @@
using ImportedModuleLayout = BCRecordLayout<
IMPORTED_MODULE,
- BCFixed<1>, // exported?
- BCFixed<1>, // scoped?
+ ImportControlField, // import kind
+ BCFixed<1>, // scoped?
BCBlob // module name, with submodule path pieces separated by \0s.
// If the 'scoped' flag is set, the final path piece is an access
// path within the module.
diff --git a/include/swift/Serialization/SerializedModuleLoader.h b/include/swift/Serialization/SerializedModuleLoader.h
index 3af6cfc..65dd96d 100644
--- a/include/swift/Serialization/SerializedModuleLoader.h
+++ b/include/swift/Serialization/SerializedModuleLoader.h
@@ -94,7 +94,7 @@
FileUnit *loadAST(ModuleDecl &M, Optional<SourceLoc> diagLoc,
std::unique_ptr<llvm::MemoryBuffer> moduleInputBuffer,
std::unique_ptr<llvm::MemoryBuffer> moduleDocInputBuffer,
- bool isFramework = false);
+ bool isFramework, bool treatAsPartialModule);
/// Check whether the module with a given name can be imported without
/// importing it.
diff --git a/lib/AST/ASTPrinter.cpp b/lib/AST/ASTPrinter.cpp
index 6a36595..b43538c 100644
--- a/lib/AST/ASTPrinter.cpp
+++ b/lib/AST/ASTPrinter.cpp
@@ -2781,8 +2781,13 @@
->castTo<AnyFunctionType>()
->getParams();
}
+
+ // @escaping is not valid in enum element position, even though the
+ // attribute is implicitly added. Ignore it when printing the parameters.
+ Options.ExcludeAttrList.push_back(TAK_escaping);
printParameterList(PL, params,
/*isAPINameByDefault*/true);
+ Options.ExcludeAttrList.pop_back();
}
auto *raw = elt->getRawValueExpr();
@@ -3375,7 +3380,11 @@
if (!Options.FullyQualifiedTypesIfAmbiguous)
return false;
- Decl *D = T->getAnyGeneric();
+ Decl *D;
+ if (auto *TAT = dyn_cast<TypeAliasType>(T))
+ D = TAT->getDecl();
+ else
+ D = T->getAnyGeneric();
// If we cannot find the declaration, be extra careful and print
// the type qualified.
@@ -3507,6 +3516,8 @@
if (auto parent = T->getParent()) {
visit(parent);
Printer << ".";
+ } else if (shouldPrintFullyQualified(T)) {
+ printModuleContext(T);
}
printTypeDeclName(T);
@@ -4024,6 +4035,10 @@
}
void visitProtocolType(ProtocolType *T) {
+ if (shouldPrintFullyQualified(T)) {
+ printModuleContext(T);
+ }
+
printTypeDeclName(T);
}
diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp
index 1489410..c7696b8 100644
--- a/lib/AST/Decl.cpp
+++ b/lib/AST/Decl.cpp
@@ -3794,6 +3794,27 @@
return nullptr;
}
+bool ClassDecl::walkSuperclasses(
+ llvm::function_ref<TypeWalker::Action(ClassDecl *)> fn) const {
+
+ SmallPtrSet<ClassDecl *, 8> seen;
+ auto *cls = const_cast<ClassDecl *>(this);
+
+ while (cls && seen.insert(cls).second) {
+ switch (fn(cls)) {
+ case TypeWalker::Action::Stop:
+ return true;
+ case TypeWalker::Action::SkipChildren:
+ return false;
+ case TypeWalker::Action::Continue:
+ cls = cls->getSuperclassDecl();
+ continue;
+ }
+ }
+
+ return false;
+}
+
EnumCaseDecl *EnumCaseDecl::create(SourceLoc CaseLoc,
ArrayRef<EnumElementDecl *> Elements,
DeclContext *DC) {
diff --git a/lib/AST/Module.cpp b/lib/AST/Module.cpp
index c138848..2012e41 100644
--- a/lib/AST/Module.cpp
+++ b/lib/AST/Module.cpp
@@ -1020,21 +1020,18 @@
SourceFile::getImportedModules(SmallVectorImpl<ModuleDecl::ImportedModule> &modules,
ModuleDecl::ImportFilter filter) const {
assert(ASTStage >= Parsed || Kind == SourceFileKind::SIL);
+ assert(filter && "no imports requested?");
for (auto desc : Imports) {
- switch (filter) {
- case ModuleDecl::ImportFilter::All:
- break;
- case ModuleDecl::ImportFilter::Public:
- if (!desc.importOptions.contains(ImportFlags::Exported))
- continue;
- break;
- case ModuleDecl::ImportFilter::Private:
- if (desc.importOptions.contains(ImportFlags::Exported))
- continue;
- break;
- }
+ ModuleDecl::ImportFilterKind requiredKind;
+ if (desc.importOptions.contains(ImportFlags::Exported))
+ requiredKind = ModuleDecl::ImportFilterKind::Public;
+ else if (desc.importOptions.contains(ImportFlags::ImplementationOnly))
+ requiredKind = ModuleDecl::ImportFilterKind::ImplementationOnly;
+ else
+ requiredKind = ModuleDecl::ImportFilterKind::Private;
- modules.push_back(desc.module);
+ if (filter.contains(requiredKind))
+ modules.push_back(desc.module);
}
}
@@ -1277,9 +1274,14 @@
llvm::SmallSet<ImportedModule, 32, ModuleDecl::OrderImportedModules> visited;
SmallVector<ImportedModule, 32> stack;
- auto filter = respectVisibility ? ModuleDecl::ImportFilter::Public
- : ModuleDecl::ImportFilter::All;
- topLevel->getImportedModules(stack, filter);
+ ModuleDecl::ImportFilter filter = ModuleDecl::ImportFilterKind::Public;
+ if (!respectVisibility)
+ filter |= ModuleDecl::ImportFilterKind::Private;
+
+ ModuleDecl::ImportFilter topLevelFilter = filter;
+ if (!respectVisibility)
+ topLevelFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
+ topLevel->getImportedModules(stack, topLevelFilter);
// Make sure the top-level module is first; we want pre-order-ish traversal.
AccessPathTy overridingPath;
@@ -1330,9 +1332,11 @@
if (auto SF = dyn_cast<SourceFile>(this)) {
// Handle privately visible modules as well.
- // FIXME: Should this apply to all FileUnits?
+ ModuleDecl::ImportFilter importFilter;
+ importFilter |= ModuleDecl::ImportFilterKind::Private;
+ importFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
SmallVector<ModuleDecl::ImportedModule, 4> imports;
- SF->getImportedModules(imports, ModuleDecl::ImportFilter::Private);
+ SF->getImportedModules(imports, importFilter);
for (auto importPair : imports)
if (!importPair.second->forAllVisibleModules(importPair.first, fn))
return false;
diff --git a/lib/AST/UnqualifiedLookup.cpp b/lib/AST/UnqualifiedLookup.cpp
index f27e670..d18b2ae 100644
--- a/lib/AST/UnqualifiedLookup.cpp
+++ b/lib/AST/UnqualifiedLookup.cpp
@@ -1044,8 +1044,12 @@
void UnqualifiedLookupFactory::addImportedResults(DeclContext *const dc) {
// Add private imports to the extra search list.
SmallVector<ModuleDecl::ImportedModule, 8> extraImports;
- if (auto FU = dyn_cast<FileUnit>(dc))
- FU->getImportedModules(extraImports, ModuleDecl::ImportFilter::Private);
+ if (auto FU = dyn_cast<FileUnit>(dc)) {
+ ModuleDecl::ImportFilter importFilter;
+ importFilter |= ModuleDecl::ImportFilterKind::Private;
+ importFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
+ FU->getImportedModules(extraImports, importFilter);
+ }
using namespace namelookup;
SmallVector<ValueDecl *, 8> CurModuleResults;
diff --git a/lib/ClangImporter/ClangImporter.cpp b/lib/ClangImporter/ClangImporter.cpp
index 2a06586..0d5bb2e 100644
--- a/lib/ClangImporter/ClangImporter.cpp
+++ b/lib/ClangImporter/ClangImporter.cpp
@@ -3203,71 +3203,43 @@
void ClangModuleUnit::getImportedModules(
SmallVectorImpl<ModuleDecl::ImportedModule> &imports,
ModuleDecl::ImportFilter filter) const {
- switch (filter) {
- case ModuleDecl::ImportFilter::All:
- case ModuleDecl::ImportFilter::Private:
+ // Bail out if we /only/ want ImplementationOnly imports; Clang modules never
+ // have any of these.
+ if (filter.containsOnly(ModuleDecl::ImportFilterKind::ImplementationOnly))
+ return;
+
+ if (filter.contains(ModuleDecl::ImportFilterKind::Private))
if (auto stdlib = owner.getStdlibModule())
imports.push_back({ModuleDecl::AccessPathTy(), stdlib});
- break;
- case ModuleDecl::ImportFilter::Public:
- break;
- }
SmallVector<clang::Module *, 8> imported;
if (!clangModule) {
// This is the special "imported headers" module.
- switch (filter) {
- case ModuleDecl::ImportFilter::All:
- case ModuleDecl::ImportFilter::Public:
+ if (filter.contains(ModuleDecl::ImportFilterKind::Public)) {
imported.append(owner.ImportedHeaderExports.begin(),
owner.ImportedHeaderExports.end());
- break;
-
- case ModuleDecl::ImportFilter::Private:
- break;
}
} else {
clangModule->getExportedModules(imported);
- switch (filter) {
- case ModuleDecl::ImportFilter::All: {
- llvm::SmallPtrSet<clang::Module *, 8> knownModules;
- imported.append(clangModule->Imports.begin(), clangModule->Imports.end());
- imported.erase(std::remove_if(imported.begin(), imported.end(),
- [&](clang::Module *mod) -> bool {
- return !knownModules.insert(mod).second;
- }),
- imported.end());
-
- // FIXME: The parent module isn't exactly a private import, but it is
- // needed for link dependencies.
- if (clangModule->Parent)
- imported.push_back(clangModule->Parent);
-
- break;
- }
-
- case ModuleDecl::ImportFilter::Private: {
+ if (filter.contains(ModuleDecl::ImportFilterKind::Private)) {
+ // Copy in any modules that are imported but not exported.
llvm::SmallPtrSet<clang::Module *, 8> knownModules(imported.begin(),
imported.end());
- SmallVector<clang::Module *, 8> privateImports;
- std::copy_if(clangModule->Imports.begin(), clangModule->Imports.end(),
- std::back_inserter(privateImports), [&](clang::Module *mod) {
- return knownModules.count(mod) == 0;
- });
- imported.swap(privateImports);
+ if (!filter.contains(ModuleDecl::ImportFilterKind::Public)) {
+ // Remove the exported ones now that we're done with them.
+ imported.clear();
+ }
+ llvm::copy_if(clangModule->Imports, std::back_inserter(imported),
+ [&](clang::Module *mod) {
+ return !knownModules.insert(mod).second;
+ });
// FIXME: The parent module isn't exactly a private import, but it is
// needed for link dependencies.
if (clangModule->Parent)
imported.push_back(clangModule->Parent);
-
- break;
- }
-
- case ModuleDecl::ImportFilter::Public:
- break;
}
}
diff --git a/lib/Frontend/Frontend.cpp b/lib/Frontend/Frontend.cpp
index 1491031..bf27cae 100644
--- a/lib/Frontend/Frontend.cpp
+++ b/lib/Frontend/Frontend.cpp
@@ -868,7 +868,8 @@
for (auto &PM : PartialModules) {
assert(PM.ModuleBuffer);
if (!SML->loadAST(*MainModule, SourceLoc(), std::move(PM.ModuleBuffer),
- std::move(PM.ModuleDocBuffer)))
+ std::move(PM.ModuleDocBuffer), /*isFramework*/false,
+ /*treatAsPartialModule*/true))
hadLoadError = true;
}
diff --git a/lib/Frontend/ParseableInterfaceSupport.cpp b/lib/Frontend/ParseableInterfaceSupport.cpp
index ce440f9..dd023fa0 100644
--- a/lib/Frontend/ParseableInterfaceSupport.cpp
+++ b/lib/Frontend/ParseableInterfaceSupport.cpp
@@ -86,15 +86,19 @@
static void printImports(raw_ostream &out, ModuleDecl *M) {
// FIXME: This is very similar to what's in Serializer::writeInputBlock, but
// it's not obvious what higher-level optimization would be factored out here.
+ ModuleDecl::ImportFilter allImportFilter;
+ allImportFilter |= ModuleDecl::ImportFilterKind::Public;
+ allImportFilter |= ModuleDecl::ImportFilterKind::Private;
+
SmallVector<ModuleDecl::ImportedModule, 8> allImports;
- M->getImportedModules(allImports, ModuleDecl::ImportFilter::All);
+ M->getImportedModules(allImports, allImportFilter);
ModuleDecl::removeDuplicateImports(allImports);
diagnoseScopedImports(M->getASTContext().Diags, allImports);
// Collect the public imports as a subset so that we can mark them with
// '@_exported'.
SmallVector<ModuleDecl::ImportedModule, 8> publicImports;
- M->getImportedModules(publicImports, ModuleDecl::ImportFilter::Public);
+ M->getImportedModules(publicImports, ModuleDecl::ImportFilterKind::Public);
llvm::SmallSet<ModuleDecl::ImportedModule, 8,
ModuleDecl::OrderImportedModules> publicImportSet;
publicImportSet.insert(publicImports.begin(), publicImports.end());
diff --git a/lib/FrontendTool/ImportedModules.cpp b/lib/FrontendTool/ImportedModules.cpp
index 4a6b8f7..82e3e7d 100644
--- a/lib/FrontendTool/ImportedModules.cpp
+++ b/lib/FrontendTool/ImportedModules.cpp
@@ -79,9 +79,14 @@
StringRef implicitHeaderPath = opts.ImplicitObjCHeaderPath;
if (!implicitHeaderPath.empty()) {
if (!clangImporter->importBridgingHeader(implicitHeaderPath, mainModule)) {
+ ModuleDecl::ImportFilter importFilter;
+ importFilter |= ModuleDecl::ImportFilterKind::Public;
+ importFilter |= ModuleDecl::ImportFilterKind::Private;
+ importFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
+
SmallVector<ModuleDecl::ImportedModule, 16> imported;
clangImporter->getImportedHeaderModule()->getImportedModules(
- imported, ModuleDecl::ImportFilter::All);
+ imported, importFilter);
for (auto IM : imported) {
if (auto clangModule = IM.second->findUnderlyingClangModule())
diff --git a/lib/IDE/CodeCompletion.cpp b/lib/IDE/CodeCompletion.cpp
index 9ec934a..ef9a5eb 100644
--- a/lib/IDE/CodeCompletion.cpp
+++ b/lib/IDE/CodeCompletion.cpp
@@ -1707,17 +1707,23 @@
}
void collectImportedModules(llvm::StringSet<> &ImportedModules) {
+ ModuleDecl::ImportFilter ImportFilter;
+ ImportFilter |= ModuleDecl::ImportFilterKind::Public;
+ ImportFilter |= ModuleDecl::ImportFilterKind::Private;
+ ImportFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
+
SmallVector<ModuleDecl::ImportedModule, 16> Imported;
SmallVector<ModuleDecl::ImportedModule, 16> FurtherImported;
CurrDeclContext->getParentSourceFile()->getImportedModules(Imported,
- ModuleDecl::ImportFilter::All);
+ ImportFilter);
while (!Imported.empty()) {
ModuleDecl *MD = Imported.back().second;
Imported.pop_back();
if (!ImportedModules.insert(MD->getNameStr()).second)
continue;
FurtherImported.clear();
- MD->getImportedModules(FurtherImported, ModuleDecl::ImportFilter::Public);
+ MD->getImportedModules(FurtherImported,
+ ModuleDecl::ImportFilterKind::Public);
Imported.append(FurtherImported.begin(), FurtherImported.end());
for (auto SubMod : FurtherImported) {
Imported.push_back(SubMod);
@@ -5331,9 +5337,13 @@
Lookup.getToplevelCompletions(Request.OnlyTypes);
// Add results for all imported modules.
+ ModuleDecl::ImportFilter ImportFilter;
+ ImportFilter |= ModuleDecl::ImportFilterKind::Public;
+ ImportFilter |= ModuleDecl::ImportFilterKind::Private;
+ ImportFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
SmallVector<ModuleDecl::ImportedModule, 4> Imports;
auto *SF = CurDeclContext->getParentSourceFile();
- SF->getImportedModules(Imports, ModuleDecl::ImportFilter::All);
+ SF->getImportedModules(Imports, ImportFilter);
for (auto Imported : Imports) {
ModuleDecl *TheModule = Imported.second;
diff --git a/lib/IRGen/IRGenDebugInfo.cpp b/lib/IRGen/IRGenDebugInfo.cpp
index 5211d97..f5c745a 100644
--- a/lib/IRGen/IRGenDebugInfo.cpp
+++ b/lib/IRGen/IRGenDebugInfo.cpp
@@ -1741,9 +1741,12 @@
// Get the list of imported modules (which may actually be different
// from all ImportDecls).
+ ModuleDecl::ImportFilter ImportFilter;
+ ImportFilter |= ModuleDecl::ImportFilterKind::Public;
+ ImportFilter |= ModuleDecl::ImportFilterKind::Private;
+ ImportFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
SmallVector<ModuleDecl::ImportedModule, 8> ModuleWideImports;
- IGM.getSwiftModule()->getImportedModules(ModuleWideImports,
- ModuleDecl::ImportFilter::All);
+ IGM.getSwiftModule()->getImportedModules(ModuleWideImports, ImportFilter);
for (auto M : ModuleWideImports)
if (!ImportedModules.count(M.second))
DBuilder.createImportedModule(MainFile, getOrCreateModule(M), MainFile,
diff --git a/lib/Immediate/REPL.cpp b/lib/Immediate/REPL.cpp
index e424e9b..f71baeb 100644
--- a/lib/Immediate/REPL.cpp
+++ b/lib/Immediate/REPL.cpp
@@ -176,7 +176,7 @@
SmallVector<ModuleDecl::ImportedModule, 8> Imports;
MostRecentModule->getImportedModules(Imports,
- ModuleDecl::ImportFilter::Private);
+ ModuleDecl::ImportFilterKind::Private);
if (!Imports.empty()) {
SmallVector<SourceFile::ImportedModuleDesc, 8> ImportsWithOptions;
for (auto Import : Imports) {
diff --git a/lib/Index/Index.cpp b/lib/Index/Index.cpp
index c538059..6b7fbd2 100644
--- a/lib/Index/Index.cpp
+++ b/lib/Index/Index.cpp
@@ -120,11 +120,15 @@
void
getImportedModules(SmallVectorImpl<ModuleDecl::ImportedModule> &Modules) const {
+ ModuleDecl::ImportFilter ImportFilter;
+ ImportFilter |= ModuleDecl::ImportFilterKind::Public;
+ ImportFilter |= ModuleDecl::ImportFilterKind::Private;
+ ImportFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
+
if (auto *SF = SFOrMod.dyn_cast<SourceFile *>()) {
- SF->getImportedModules(Modules, ModuleDecl::ImportFilter::All);
+ SF->getImportedModules(Modules, ImportFilter);
} else {
- SFOrMod.get<ModuleDecl *>()->getImportedModules(Modules,
- ModuleDecl::ImportFilter::All);
+ SFOrMod.get<ModuleDecl *>()->getImportedModules(Modules, ImportFilter);
}
}
};
@@ -1536,8 +1540,11 @@
return;
}
+ ModuleDecl::ImportFilter ImportFilter;
+ ImportFilter |= ModuleDecl::ImportFilterKind::Public;
+ ImportFilter |= ModuleDecl::ImportFilterKind::Private;
SmallVector<ModuleDecl::ImportedModule, 8> Imports;
- TopMod.getImportedModules(Imports, ModuleDecl::ImportFilter::All);
+ TopMod.getImportedModules(Imports);
for (auto Import : Imports) {
collectRecursiveModuleImports(*Import.second, Visited);
diff --git a/lib/Index/IndexRecord.cpp b/lib/Index/IndexRecord.cpp
index fe27519..b2ec3ab 100644
--- a/lib/Index/IndexRecord.cpp
+++ b/lib/Index/IndexRecord.cpp
@@ -562,8 +562,11 @@
unitWriter.addRecordFile(recordFile, FE, isSystemModule, mod);
}
+ ModuleDecl::ImportFilter importFilter;
+ importFilter |= ModuleDecl::ImportFilterKind::Public;
+ importFilter |= ModuleDecl::ImportFilterKind::Private;
SmallVector<ModuleDecl::ImportedModule, 8> imports;
- module->getImportedModules(imports, ModuleDecl::ImportFilter::All);
+ module->getImportedModules(imports, importFilter);
StringScratchSpace moduleNameScratch;
addModuleDependencies(imports, indexStorePath, indexSystemModules,
targetTriple, clangCI, diags, unitWriter, moduleNameScratch);
@@ -597,8 +600,12 @@
targetTriple, sysrootPath, getModuleInfoFromOpaqueModule);
// Module dependencies.
+ ModuleDecl::ImportFilter importFilter;
+ importFilter |= ModuleDecl::ImportFilterKind::Public;
+ importFilter |= ModuleDecl::ImportFilterKind::Private;
+ importFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
SmallVector<ModuleDecl::ImportedModule, 8> imports;
- primarySourceFile->getImportedModules(imports, ModuleDecl::ImportFilter::All);
+ primarySourceFile->getImportedModules(imports, importFilter);
StringScratchSpace moduleNameScratch;
addModuleDependencies(imports, indexStorePath, indexSystemModules,
targetTriple, clangCI, diags, unitWriter, moduleNameScratch);
diff --git a/lib/Index/IndexSymbol.cpp b/lib/Index/IndexSymbol.cpp
index bef0536..c10c28c 100644
--- a/lib/Index/IndexSymbol.cpp
+++ b/lib/Index/IndexSymbol.cpp
@@ -28,12 +28,13 @@
static bool isUnitTestCase(const ClassDecl *D) {
if (!D)
return false;
- while (auto *SuperD = D->getSuperclassDecl()) {
- if (SuperD->getNameStr() == "XCTestCase")
- return true;
- D = SuperD;
- }
- return false;
+
+ return D->walkSuperclasses([D](ClassDecl *SuperD) {
+ if (SuperD != D && // Do not treate XCTestCase itself as a test.
+ SuperD->getNameStr() == "XCTestCase")
+ return TypeWalker::Action::Stop; // Found test; stop and return true.
+ return TypeWalker::Action::Continue;
+ });
}
static bool isUnitTest(const ValueDecl *D) {
diff --git a/lib/SILGen/SILGenApply.cpp b/lib/SILGen/SILGenApply.cpp
index efd687c..af1628f 100644
--- a/lib/SILGen/SILGenApply.cpp
+++ b/lib/SILGen/SILGenApply.cpp
@@ -1668,7 +1668,7 @@
unicode::extractFirstUnicodeScalar(Str));
AnyFunctionType::Param param(Int32Ty.getASTType());
- PreparedArguments args({param});
+ PreparedArguments args(llvm::ArrayRef<AnyFunctionType::Param>{param});
args.add(E, RValue(SGF, E, Int32Ty.getASTType(),
ManagedValue::forUnmanaged(UnicodeScalarValue)));
return args;
@@ -4104,7 +4104,7 @@
ArgumentSource &&selfArg,
AnyFunctionType::Param selfParam,
CanType methodType) {
- PreparedArguments preparedSelf({selfParam});
+ PreparedArguments preparedSelf(llvm::ArrayRef<AnyFunctionType::Param>{selfParam});
preparedSelf.addArbitrary(std::move(selfArg));
addCallSite(loc, std::move(preparedSelf), methodType,
diff --git a/lib/Sema/LookupVisibleDecls.cpp b/lib/Sema/LookupVisibleDecls.cpp
index 9ecfd2b..f0395e7 100644
--- a/lib/Sema/LookupVisibleDecls.cpp
+++ b/lib/Sema/LookupVisibleDecls.cpp
@@ -968,7 +968,10 @@
return;
}
- SF->getImportedModules(extraImports, ModuleDecl::ImportFilter::Private);
+ ModuleDecl::ImportFilter importFilter;
+ importFilter |= ModuleDecl::ImportFilterKind::Private;
+ importFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
+ SF->getImportedModules(extraImports, importFilter);
}
}
diff --git a/lib/Sema/NameBinding.cpp b/lib/Sema/NameBinding.cpp
index 1248f90..e063518 100644
--- a/lib/Sema/NameBinding.cpp
+++ b/lib/Sema/NameBinding.cpp
@@ -252,6 +252,18 @@
if (privateImportAttr)
options |= SourceFile::ImportFlags::PrivateImport;
+ auto *implementationOnlyAttr =
+ ID->getAttrs().getAttribute<ImplementationOnlyAttr>();
+ if (implementationOnlyAttr) {
+ if (options.contains(SourceFile::ImportFlags::Exported)) {
+ diagnose(ID, diag::import_implementation_cannot_be_exported,
+ topLevelModule->getName())
+ .fixItRemove(implementationOnlyAttr->getRangeWithAt());
+ } else {
+ options |= SourceFile::ImportFlags::ImplementationOnly;
+ }
+ }
+
imports.push_back(SourceFile::ImportedModuleDesc(
{ID->getDeclPath(), M}, options, privateImportFileName));
diff --git a/lib/Sema/TypeCheckAttr.cpp b/lib/Sema/TypeCheckAttr.cpp
index 457d14a..be95d33 100644
--- a/lib/Sema/TypeCheckAttr.cpp
+++ b/lib/Sema/TypeCheckAttr.cpp
@@ -87,6 +87,7 @@
IGNORED_ATTR(ForbidSerializingReference)
IGNORED_ATTR(Frozen)
IGNORED_ATTR(HasStorage)
+ IGNORED_ATTR(ImplementationOnly)
IGNORED_ATTR(Implements)
IGNORED_ATTR(ImplicitlyUnwrappedOptional)
IGNORED_ATTR(Infix)
@@ -744,6 +745,7 @@
IGNORED_ATTR(Consuming)
IGNORED_ATTR(Convenience)
IGNORED_ATTR(Dynamic)
+ IGNORED_ATTR(DynamicReplacement)
IGNORED_ATTR(Effects)
IGNORED_ATTR(Exported)
IGNORED_ATTR(ForbidSerializingReference)
@@ -752,6 +754,7 @@
IGNORED_ATTR(IBDesignable)
IGNORED_ATTR(IBInspectable)
IGNORED_ATTR(IBOutlet) // checked early.
+ IGNORED_ATTR(ImplementationOnly)
IGNORED_ATTR(ImplicitlyUnwrappedOptional)
IGNORED_ATTR(Indirect)
IGNORED_ATTR(Inline)
@@ -768,6 +771,7 @@
IGNORED_ATTR(ObjCRuntimeName)
IGNORED_ATTR(Optional)
IGNORED_ATTR(Override)
+ IGNORED_ATTR(PrivateImport)
IGNORED_ATTR(RawDocComment)
IGNORED_ATTR(ReferenceOwnership)
IGNORED_ATTR(RequiresStoredPropertyInits)
@@ -781,8 +785,6 @@
IGNORED_ATTR(Transparent)
IGNORED_ATTR(WarnUnqualifiedAccess)
IGNORED_ATTR(WeakLinked)
- IGNORED_ATTR(DynamicReplacement)
- IGNORED_ATTR(PrivateImport)
#undef IGNORED_ATTR
void visitAvailableAttr(AvailableAttr *attr);
diff --git a/lib/Sema/TypeCheckDeclOverride.cpp b/lib/Sema/TypeCheckDeclOverride.cpp
index d9c6514..1542858 100644
--- a/lib/Sema/TypeCheckDeclOverride.cpp
+++ b/lib/Sema/TypeCheckDeclOverride.cpp
@@ -1320,6 +1320,7 @@
UNINTERESTING_ATTR(WeakLinked)
UNINTERESTING_ATTR(Frozen)
UNINTERESTING_ATTR(HasInitialValue)
+ UNINTERESTING_ATTR(ImplementationOnly)
#undef UNINTERESTING_ATTR
void visitAvailableAttr(AvailableAttr *attr) {
diff --git a/lib/Serialization/ModuleFile.cpp b/lib/Serialization/ModuleFile.cpp
index 431d637..aa33d37 100644
--- a/lib/Serialization/ModuleFile.cpp
+++ b/lib/Serialization/ModuleFile.cpp
@@ -1092,6 +1092,22 @@
return None;
}
+static Optional<ModuleDecl::ImportFilterKind>
+getActualImportControl(unsigned rawValue) {
+ // We switch on the raw value rather than the enum in order to handle future
+ // values.
+ switch (rawValue) {
+ case static_cast<unsigned>(serialization::ImportControl::Normal):
+ return ModuleDecl::ImportFilterKind::Private;
+ case static_cast<unsigned>(serialization::ImportControl::Exported):
+ return ModuleDecl::ImportFilterKind::Public;
+ case static_cast<unsigned>(serialization::ImportControl::ImplementationOnly):
+ return ModuleDecl::ImportFilterKind::ImplementationOnly;
+ default:
+ return None;
+ }
+}
+
static bool areCompatibleArchitectures(const llvm::Triple &moduleTarget,
const llvm::Triple &ctxTarget) {
if (moduleTarget.getArch() == ctxTarget.getArch())
@@ -1266,10 +1282,18 @@
unsigned kind = cursor.readRecord(next.ID, scratch, &blobData);
switch (kind) {
case input_block::IMPORTED_MODULE: {
- bool exported, scoped;
+ unsigned rawImportControl;
+ bool scoped;
input_block::ImportedModuleLayout::readRecord(scratch,
- exported, scoped);
- Dependencies.push_back({blobData, exported, scoped});
+ rawImportControl,
+ scoped);
+ auto importKind = getActualImportControl(rawImportControl);
+ if (!importKind) {
+ // We don't know how to import this dependency.
+ error();
+ return;
+ }
+ Dependencies.push_back({blobData, importKind.getValue(), scoped});
break;
}
case input_block::LINK_LIBRARY: {
@@ -1436,7 +1460,8 @@
}
Status ModuleFile::associateWithFileContext(FileUnit *file,
- SourceLoc diagLoc) {
+ SourceLoc diagLoc,
+ bool treatAsPartialModule) {
PrettyStackTraceModuleFile stackEntry(*this);
assert(getStatus() == Status::Valid && "invalid module file");
@@ -1489,6 +1514,17 @@
continue;
}
+ if (dependency.isImplementationOnly() &&
+ !(treatAsPartialModule || ctx.LangOpts.DebuggerSupport)) {
+ // When building normally (and not merging partial modules), we don't
+ // want to bring in the implementation-only module, because that might
+ // change the set of visible declarations. However, when debugging we
+ // want to allow getting at the internals of this module when possible,
+ // and so we'll try to reference the implementation-only module if it's
+ // available.
+ continue;
+ }
+
StringRef modulePathStr = dependency.RawPath;
StringRef scopePath;
if (dependency.isScoped()) {
@@ -1516,7 +1552,8 @@
// Otherwise, continue trying to load dependencies, so that we can list
// everything that's missing.
- missingDependency = true;
+ if (!(dependency.isImplementationOnly() && ctx.LangOpts.DebuggerSupport))
+ missingDependency = true;
continue;
}
@@ -1695,24 +1732,22 @@
PrettyStackTraceModuleFile stackEntry(*this);
for (auto &dep : Dependencies) {
- switch (filter) {
- case ModuleDecl::ImportFilter::All:
- // We're including all imports.
- break;
-
- case ModuleDecl::ImportFilter::Private:
- // Skip @_exported imports.
- if (dep.isExported())
+ if (dep.isExported()) {
+ if (!filter.contains(ModuleDecl::ImportFilterKind::Public))
continue;
- break;
-
- case ModuleDecl::ImportFilter::Public:
- // Only include @_exported imports.
- if (!dep.isExported())
+ } else if (dep.isImplementationOnly()) {
+ if (!filter.contains(ModuleDecl::ImportFilterKind::ImplementationOnly))
continue;
+ if (!dep.isLoaded()) {
+ // Pretend we didn't have this import if we weren't originally asked to
+ // load it.
+ continue;
+ }
- break;
+ } else {
+ if (!filter.contains(ModuleDecl::ImportFilterKind::Private))
+ continue;
}
assert(dep.isLoaded());
diff --git a/lib/Serialization/Serialization.cpp b/lib/Serialization/Serialization.cpp
index b1db428..bbca78a 100644
--- a/lib/Serialization/Serialization.cpp
+++ b/lib/Serialization/Serialization.cpp
@@ -1040,6 +1040,17 @@
return dep.getModificationTime();
}
+using ImportSet = llvm::SmallSet<ModuleDecl::ImportedModule, 8,
+ ModuleDecl::OrderImportedModules>;
+static ImportSet getImportsAsSet(const ModuleDecl *M,
+ ModuleDecl::ImportFilter filter) {
+ SmallVector<ModuleDecl::ImportedModule, 8> imports;
+ M->getImportedModules(imports, filter);
+ ImportSet importSet;
+ importSet.insert(imports.begin(), imports.end());
+ return importSet;
+}
+
void Serializer::writeInputBlock(const SerializationOptions &options) {
BCBlockRAII restoreBlock(Out, INPUT_BLOCK_ID, 4);
input_block::ImportedModuleLayout ImportedModule(Out);
@@ -1068,17 +1079,20 @@
dep.getPath());
}
+ ModuleDecl::ImportFilter allImportFilter;
+ allImportFilter |= ModuleDecl::ImportFilterKind::Public;
+ allImportFilter |= ModuleDecl::ImportFilterKind::Private;
+ allImportFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
SmallVector<ModuleDecl::ImportedModule, 8> allImports;
- M->getImportedModules(allImports, ModuleDecl::ImportFilter::All);
+ M->getImportedModules(allImports, allImportFilter);
ModuleDecl::removeDuplicateImports(allImports);
- // Collect the public imports as a subset so that we can mark them with an
- // extra flag.
- SmallVector<ModuleDecl::ImportedModule, 8> publicImports;
- M->getImportedModules(publicImports, ModuleDecl::ImportFilter::Public);
- llvm::SmallSet<ModuleDecl::ImportedModule, 8,
- ModuleDecl::OrderImportedModules> publicImportSet;
- publicImportSet.insert(publicImports.begin(), publicImports.end());
+ // Collect the public and private imports as a subset so that we can
+ // distinguish them.
+ ImportSet publicImportSet =
+ getImportsAsSet(M, ModuleDecl::ImportFilterKind::Public);
+ ImportSet privateImportSet =
+ getImportsAsSet(M, ModuleDecl::ImportFilterKind::Private);
auto clangImporter =
static_cast<ClangImporter *>(M->getASTContext().getClangModuleLoader());
@@ -1116,7 +1130,20 @@
ImportPathBlob importPath;
flattenImportPath(import, importPath);
- ImportedModule.emit(ScratchRecord, publicImportSet.count(import),
+
+ serialization::ImportControl stableImportControl;
+ // The order of checks here is important, since a module can be imported
+ // differently in different files, and we need to record the "most visible"
+ // form here.
+ if (publicImportSet.count(import))
+ stableImportControl = ImportControl::Exported;
+ else if (privateImportSet.count(import))
+ stableImportControl = ImportControl::Normal;
+ else
+ stableImportControl = ImportControl::ImplementationOnly;
+
+ ImportedModule.emit(ScratchRecord,
+ static_cast<uint8_t>(stableImportControl),
!import.first.empty(), importPath);
}
diff --git a/lib/Serialization/SerializedModuleLoader.cpp b/lib/Serialization/SerializedModuleLoader.cpp
index 1db71e6..1d35eef 100644
--- a/lib/Serialization/SerializedModuleLoader.cpp
+++ b/lib/Serialization/SerializedModuleLoader.cpp
@@ -366,7 +366,7 @@
ModuleDecl &M, Optional<SourceLoc> diagLoc,
std::unique_ptr<llvm::MemoryBuffer> moduleInputBuffer,
std::unique_ptr<llvm::MemoryBuffer> moduleDocInputBuffer,
- bool isFramework) {
+ bool isFramework, bool treatAsPartialModule) {
assert(moduleInputBuffer);
StringRef moduleBufferID = moduleInputBuffer->getBufferIdentifier();
@@ -402,7 +402,8 @@
auto diagLocOrInvalid = diagLoc.getValueOr(SourceLoc());
loadInfo.status =
- loadedModuleFile->associateWithFileContext(fileUnit, diagLocOrInvalid);
+ loadedModuleFile->associateWithFileContext(fileUnit, diagLocOrInvalid,
+ treatAsPartialModule);
if (loadInfo.status == serialization::Status::Valid) {
Ctx.bumpGeneration();
LoadedModuleFiles.emplace_back(std::move(loadedModuleFile),
@@ -487,8 +488,10 @@
loadedModuleFile->getDependencies().begin(),
loadedModuleFile->getDependencies().end(), std::back_inserter(missing),
[&duplicates](const ModuleFile::Dependency &dependency) -> bool {
- if (dependency.isLoaded() || dependency.isHeader())
+ if (dependency.isLoaded() || dependency.isHeader() ||
+ dependency.isImplementationOnly()) {
return false;
+ }
return duplicates.insert(dependency.RawPath).second;
});
@@ -654,7 +657,8 @@
SWIFT_DEFER { M->setHasResolvedImports(); };
if (!loadAST(*M, moduleID.second, std::move(moduleInputBuffer),
- std::move(moduleDocInputBuffer), isFramework)) {
+ std::move(moduleDocInputBuffer), isFramework,
+ /*treatAsPartialModule*/false)) {
M->setFailedToLoad();
}
@@ -703,8 +707,12 @@
void SerializedASTFile::collectLinkLibrariesFromImports(
ModuleDecl::LinkLibraryCallback callback) const {
+ ModuleDecl::ImportFilter ImportFilter;
+ ImportFilter |= ModuleDecl::ImportFilterKind::Public;
+ ImportFilter |= ModuleDecl::ImportFilterKind::Private;
+
llvm::SmallVector<ModuleDecl::ImportedModule, 8> Imports;
- File.getImportedModules(Imports, ModuleDecl::ImportFilter::All);
+ File.getImportedModules(Imports, ImportFilter);
for (auto Import : Imports)
Import.second->collectLinkLibraries(callback);
diff --git a/stdlib/public/core/DictionaryBuilder.swift b/stdlib/public/core/DictionaryBuilder.swift
index 0178c92..9ede429 100644
--- a/stdlib/public/core/DictionaryBuilder.swift
+++ b/stdlib/public/core/DictionaryBuilder.swift
@@ -71,6 +71,7 @@
/// - body: A closure that can initialize the dictionary's elements. This
/// closure must return the count of the initialized elements, starting at
/// the beginning of the buffer.
+ @_alwaysEmitIntoClient // Introduced in 5.1
@inlinable
public // SPI(Foundation)
init(
@@ -90,6 +91,7 @@
}
extension _NativeDictionary {
+ @_alwaysEmitIntoClient // Introduced in 5.1
@inlinable
internal init(
_unsafeUninitializedCapacity capacity: Int,
diff --git a/test/IDE/print_swift_module.swift b/test/IDE/print_swift_module.swift
index 94d15ca..5be55e3 100644
--- a/test/IDE/print_swift_module.swift
+++ b/test/IDE/print_swift_module.swift
@@ -28,7 +28,7 @@
// CHECK1: /// Alias comment
// CHECK1-NEXT: typealias Alias<T> = (T, T)
-// CHECK1: public class C1 : P1 {
+// CHECK1: public class C1 : print_swift_module.P1 {
// CHECK1-NEXT: /// foo1 comment from P1
// CHECK1-NEXT: public func foo1()
// CHECK1-NEXT: /// foo2 comment from C1
@@ -43,4 +43,4 @@
// CHECK1-NEXT: }
// CHECK1: /// returnsAlias() comment
-// CHECK1-NEXT: func returnsAlias() -> Alias<Int>
+// CHECK1-NEXT: func returnsAlias() -> print_swift_module.Alias<Int>
diff --git a/test/IDE/print_synthesized_extensions.swift b/test/IDE/print_synthesized_extensions.swift
index 2cfc033..55a4267 100644
--- a/test/IDE/print_synthesized_extensions.swift
+++ b/test/IDE/print_synthesized_extensions.swift
@@ -255,7 +255,7 @@
// CHECK4-NEXT: <decl:Func>public func <loc>S9IntFunc()</loc></decl>
// CHECK4-NEXT: }</synthesized>
-// CHECK5: <decl:Struct>public struct <loc>S10</loc> : <ref:Protocol>P1</ref> {
+// CHECK5: <decl:Struct>public struct <loc>S10</loc> : <ref:module>print_synthesized_extensions</ref>.<ref:Protocol>P1</ref> {
// CHECK5-NEXT: <decl:TypeAlias>public typealias <loc>T1</loc> = <ref:module>print_synthesized_extensions</ref>.<ref:Struct>S9</ref><<ref:Struct>Int</ref>></decl>
// CHECK5-NEXT: <decl:TypeAlias>public typealias <loc>T2</loc> = <ref:module>print_synthesized_extensions</ref>.<ref:Struct>S9</ref><<ref:Struct>Int</ref>></decl>
// CHECK5-NEXT: <decl:Func>public func <loc>f1(<decl:Param>t: <ref:module>print_synthesized_extensions</ref>.<ref:Struct>S10</ref>.<ref:TypeAlias>T1</ref></decl>)</loc> -> <ref:module>print_synthesized_extensions</ref>.<ref:Struct>S10</ref>.<ref:TypeAlias>T1</ref></decl>
@@ -275,7 +275,7 @@
// CHECK7-NEXT: <decl:Func>public func <loc>P4Func2()</loc></decl>
// CHECK7-NEXT: }</synthesized>
-// CHECK8: <decl:Struct>public struct <loc>S4<<decl:GenericTypeParam>T</decl>></loc> : <ref:Protocol>P1</ref> {
+// CHECK8: <decl:Struct>public struct <loc>S4<<decl:GenericTypeParam>T</decl>></loc> : <ref:module>print_synthesized_extensions</ref>.<ref:Protocol>P1</ref> {
// CHECK8-NEXT: <decl:TypeAlias>public typealias <loc>T1</loc> = <ref:Struct>Int</ref></decl>
// CHECK8-NEXT: <decl:TypeAlias>public typealias <loc>T2</loc> = <ref:Struct>Int</ref></decl>
// CHECK8-NEXT: <decl:Func>public func <loc>f1(<decl:Param>t: <ref:module>print_synthesized_extensions</ref>.<ref:Struct>S4</ref><T>.<ref:TypeAlias>T1</ref></decl>)</loc> -> <ref:module>print_synthesized_extensions</ref>.<ref:Struct>S4</ref><T>.<ref:TypeAlias>T1</ref></decl>
@@ -283,7 +283,7 @@
// CHECK8-NEXT: <decl:Func>public func <loc>p1IntFunc(<decl:Param>i: <ref:Struct>Int</ref></decl>)</loc> -> <ref:Struct>Int</ref></decl>
// CHECK8-NEXT: }</synthesized>
-// CHECK9: <decl:Struct>public struct <loc>S6<<decl:GenericTypeParam>T</decl>></loc> : <ref:Protocol>P1</ref> {
+// CHECK9: <decl:Struct>public struct <loc>S6<<decl:GenericTypeParam>T</decl>></loc> : <ref:module>print_synthesized_extensions</ref>.<ref:Protocol>P1</ref> {
// CHECK9-NEXT: <decl:TypeAlias>public typealias <loc>T1</loc> = <ref:module>print_synthesized_extensions</ref>.<ref:Struct>S5</ref></decl>
// CHECK9-NEXT: <decl:TypeAlias>public typealias <loc>T2</loc> = <ref:module>print_synthesized_extensions</ref>.<ref:Struct>S5</ref></decl>
// CHECK9-NEXT: <decl:Func>public func <loc>f1(<decl:Param>t: <ref:module>print_synthesized_extensions</ref>.<ref:Struct>S6</ref><T>.<ref:TypeAlias>T1</ref></decl>)</loc> -> <ref:module>print_synthesized_extensions</ref>.<ref:Struct>S6</ref><T>.<ref:TypeAlias>T1</ref></decl>
@@ -300,7 +300,7 @@
// CHECK10-NEXT: <decl:Func>public func <loc>ef5(<decl:Param>t: <ref:Struct>S5</ref></decl>)</loc></decl>
// CHECK10-NEXT: }</synthesized>
-// CHECK11: <decl:Struct>public struct <loc>S12</loc> : <ref:Protocol>P5</ref> {
+// CHECK11: <decl:Struct>public struct <loc>S12</loc> : <ref:module>print_synthesized_extensions</ref>.<ref:Protocol>P5</ref> {
// CHECK11-NEXT: <decl:TypeAlias>public typealias <loc>T1</loc> = <ref:Struct>Int</ref></decl>
// CHECK11-NEXT: <decl:Func>/// This is picked
// CHECK11-NEXT: public func <loc>foo1()</loc></decl></decl>
diff --git a/test/IDE/print_types.swift b/test/IDE/print_types.swift
index 579a32c..b8b7fee 100644
--- a/test/IDE/print_types.swift
+++ b/test/IDE/print_types.swift
@@ -6,7 +6,7 @@
typealias MyInt = Int
// CHECK: TypeAliasDecl '''MyInt''' MyInt.Type{{$}}
-// FULL: TypeAliasDecl '''MyInt''' MyInt.Type{{$}}
+// FULL: TypeAliasDecl '''MyInt''' swift_ide_test.MyInt.Type{{$}}
func testVariableTypes(_ param: Int, param2: inout Double) {
// CHECK: FuncDecl '''testVariableTypes''' (Int, inout Double) -> (){{$}}
@@ -52,7 +52,7 @@
var typealias1 : MyInt = 42
// CHECK: VarDecl '''typealias1''' MyInt{{$}}
// CHECK: IntegerLiteralExpr:[[@LINE-2]] '''42''' Int{{$}}
-// FULL: VarDecl '''typealias1''' MyInt{{$}}
+// FULL: VarDecl '''typealias1''' swift_ide_test.MyInt{{$}}
// FULL: IntegerLiteralExpr:[[@LINE-4]] '''42''' Swift.Int{{$}}
_ = typealias1 ; typealias1 = 1
@@ -77,11 +77,11 @@
func testFuncType3() -> Void {}
// CHECK: FuncDecl '''testFuncType3''' () -> Void{{$}}
-// FULL: FuncDecl '''testFuncType3''' () -> Void{{$}}
+// FULL: FuncDecl '''testFuncType3''' () -> Swift.Void{{$}}
func testFuncType4() -> MyInt {}
// CHECK: FuncDecl '''testFuncType4''' () -> MyInt{{$}}
-// FULL: FuncDecl '''testFuncType4''' () -> MyInt{{$}}
+// FULL: FuncDecl '''testFuncType4''' () -> swift_ide_test.MyInt{{$}}
func testFuncType5() -> (Int) {}
// CHECK: FuncDecl '''testFuncType5''' () -> (Int){{$}}
@@ -111,7 +111,7 @@
func testInGenericFunc1<A, B : FooProtocol, C : FooProtocol & BarProtocol>(_ a: A, b: B, c: C) {
// CHECK: FuncDecl '''testInGenericFunc1''' <A, B, C where B : FooProtocol, C : BarProtocol, C : FooProtocol> (A, b: B, c: C) -> (){{$}}
-// FULL: FuncDecl '''testInGenericFunc1''' <A, B, C where B : FooProtocol, C : BarProtocol, C : FooProtocol> (A, b: B, c: C) -> (){{$}}
+// FULL: FuncDecl '''testInGenericFunc1''' <A, B, C where B : swift_ide_test.FooProtocol, C : swift_ide_test.BarProtocol, C : swift_ide_test.FooProtocol> (A, b: B, c: C) -> (){{$}}
var a1 = a
_ = a1; a1 = a
@@ -136,5 +136,5 @@
func testInGenericFunc2<T : QuxProtocol, U : QuxProtocol>(_: T, _: U) where T.Qux == U.Qux {}
// CHECK: FuncDecl '''testInGenericFunc2''' <T, U where T : QuxProtocol, U : QuxProtocol, T.Qux == U.Qux> (T, U) -> (){{$}}
-// FULL: FuncDecl '''testInGenericFunc2''' <T, U where T : QuxProtocol, U : QuxProtocol, T.Qux == U.Qux> (T, U) -> (){{$}}
+// FULL: FuncDecl '''testInGenericFunc2''' <T, U where T : swift_ide_test.QuxProtocol, U : swift_ide_test.QuxProtocol, T.Qux == U.Qux> (T, U) -> (){{$}}
diff --git a/test/Index/circular.swift b/test/Index/circular.swift
new file mode 100644
index 0000000..1c81995
--- /dev/null
+++ b/test/Index/circular.swift
@@ -0,0 +1,66 @@
+// RUN: %target-swift-ide-test -print-indexed-symbols -source-filename %s | %FileCheck %s
+
+class SelfCycle : SelfCycle {}
+// CHECK: [[@LINE-1]]:7 | class/Swift | SelfCycle | {{[^ ]*}} | Def | rel: 0
+// CHECK: [[@LINE-2]]:19 | class/Swift | SelfCycle | {{[^ ]*}} | Ref,RelBase | rel: 1
+// CHECK: RelBase | class/Swift | SelfCycle | {{\W*}}
+
+class Cycle1_A: Cycle1_B {}
+// CHECK: [[@LINE-1]]:7 | class/Swift | Cycle1_A | {{[^ ]*}} | Def | rel: 0
+// CHECK: [[@LINE-2]]:17 | class/Swift | Cycle1_B | {{[^ ]*}} | Ref,RelBase | rel: 1
+// CHECK: RelBase | class/Swift | Cycle1_A | {{[^ ]*}}
+class Cycle1_B: Cycle1_A {}
+// CHECK: [[@LINE-1]]:7 | class/Swift | Cycle1_B | {{[^ ]*}} | Def | rel: 0
+// CHECK: [[@LINE-2]]:17 | class/Swift | Cycle1_A | {{[^ ]*}} | Ref,RelBase | rel: 1
+// CHECK: RelBase | class/Swift | Cycle1_B | {{[^ ]*}}
+
+class Cycle2_A: Cycle2_C {}
+// CHECK: [[@LINE-1]]:7 | class/Swift | Cycle2_A | {{[^ ]*}} | Def | rel: 0
+// CHECK: [[@LINE-2]]:17 | class/Swift | Cycle2_C | {{[^ ]*}} | Ref,RelBase | rel: 1
+// CHECK: RelBase | class/Swift | Cycle2_A | {{[^ ]*}}
+class Cycle2_B: Cycle2_A {}
+// CHECK: [[@LINE-1]]:7 | class/Swift | Cycle2_B | {{[^ ]*}} | Def | rel: 0
+// CHECK: [[@LINE-2]]:17 | class/Swift | Cycle2_A | {{[^ ]*}} | Ref,RelBase | rel: 1
+// CHECK: RelBase | class/Swift | Cycle2_B | {{[^ ]*}}
+class Cycle2_C: Cycle2_B {}
+// CHECK: [[@LINE-1]]:7 | class/Swift | Cycle2_C | {{[^ ]*}} | Def | rel: 0
+// CHECK: [[@LINE-2]]:17 | class/Swift | Cycle2_B | {{[^ ]*}} | Ref,RelBase | rel: 1
+// CHECK: RelBase | class/Swift | Cycle2_C | {{[^ ]*}}
+
+class TestCase1: XCTestCase {}
+// CHECK: [[@LINE-1]]:7 | class(test)/Swift | TestCase1 | {{[^ ]*}} | Def | rel: 0
+// CHECK: [[@LINE-2]]:18 | class/Swift | XCTestCase | {{[^ ]*}} | Ref,RelBase | rel: 1
+// CHECK: RelBase | class(test)/Swift | TestCase1 | {{[^ ]*}}
+class XCTestCase: TestCase1 {}
+// CHECK: [[@LINE-1]]:7 | class/Swift | XCTestCase | {{[^ ]*}} | Def | rel: 0
+// CHECK: [[@LINE-2]]:19 | class(test)/Swift | TestCase1 | {{[^ ]*}} | Ref,RelBase | rel: 1
+// CHECK: RelBase | class/Swift | XCTestCase | {{[^ ]*}}
+class TestCase2: TestCase1 {}
+// CHECK: [[@LINE-1]]:7 | class(test)/Swift | TestCase2 | {{[^ ]*}} | Def | rel: 0
+// CHECK: [[@LINE-2]]:18 | class(test)/Swift | TestCase1 | {{[^ ]*}} | Ref,RelBase | rel: 1
+// CHECK: RelBase | class(test)/Swift | TestCase2 | {{[^ ]*}}
+
+protocol SelfCycleP: SelfCycleP {}
+// CHECK: [[@LINE-1]]:10 | protocol/Swift | SelfCycleP | {{[^ ]*}} | Def | rel: 0
+// CHECK: [[@LINE-2]]:22 | protocol/Swift | SelfCycleP | {{[^ ]*}} | Ref,RelBase | rel: 1
+// CHECK: RelBase | protocol/Swift | SelfCycleP | {{[^ ]*}}
+protocol Cycle1P_A: Cycle1P_B {}
+// CHECK: [[@LINE-1]]:10 | protocol/Swift | Cycle1P_A | {{[^ ]*}} | Def | rel: 0
+// CHECK: [[@LINE-2]]:21 | protocol/Swift | Cycle1P_B | {{[^ ]*}} | Ref,RelBase | rel: 1
+// CHECK: RelBase | protocol/Swift | Cycle1P_A | {{[^ ]*}}
+protocol Cycle1P_B: Cycle1P_A {}
+// CHECK: [[@LINE-1]]:10 | protocol/Swift | Cycle1P_B | {{[^ ]*}} | Def | rel: 0
+// CHECK: [[@LINE-2]]:21 | protocol/Swift | Cycle1P_A | {{[^ ]*}} | Ref,RelBase | rel: 1
+// CHECK: RelBase | protocol/Swift | Cycle1P_B | {{[^ ]*}}
+protocol Cycle2P_A: Cycle2P_C {}
+// CHECK: [[@LINE-1]]:10 | protocol/Swift | Cycle2P_A | {{[^ ]*}} | Def | rel: 0
+// CHECK: [[@LINE-2]]:21 | protocol/Swift | Cycle2P_C | {{[^ ]*}} | Ref,RelBase | rel: 1
+// CHECK: RelBase | protocol/Swift | Cycle2P_A | {{[^ ]*}}
+protocol Cycle2P_B: Cycle2P_A {}
+// CHECK: [[@LINE-1]]:10 | protocol/Swift | Cycle2P_B | {{[^ ]*}} | Def | rel: 0
+// CHECK: [[@LINE-2]]:21 | protocol/Swift | Cycle2P_A | {{[^ ]*}} | Ref,RelBase | rel: 1
+// CHECK: RelBase | protocol/Swift | Cycle2P_B | {{[^ ]*}}
+protocol Cycle2P_C: Cycle2P_B {}
+// CHECK: [[@LINE-1]]:10 | protocol/Swift | Cycle2P_C | {{[^ ]*}} | Def | rel: 0
+// CHECK: [[@LINE-2]]:21 | protocol/Swift | Cycle2P_B | {{[^ ]*}} | Ref,RelBase | rel: 1
+// CHECK: RelBase | protocol/Swift | Cycle2P_C | {{[^ ]*}}
diff --git a/test/NameBinding/import-implementation-only.swift b/test/NameBinding/import-implementation-only.swift
new file mode 100644
index 0000000..e05c70c
--- /dev/null
+++ b/test/NameBinding/import-implementation-only.swift
@@ -0,0 +1,14 @@
+// RUN: %empty-directory(%t)
+// RUN: %target-swift-frontend -emit-module -o %t/abcde.swiftmodule %S/Inputs/abcde.swift
+// RUN: %target-swift-frontend -emit-module -o %t/Library.swiftmodule %s -I %t
+
+// RUN: echo 'import Library; foo()' > %t/main.swift
+// RUN: %target-swift-frontend -typecheck %t/main.swift -I %t
+
+// Delete the indirect dependency; everything should still work.
+// RUN: rm %t/abcde.swiftmodule
+// RUN: %target-swift-frontend -typecheck %t/main.swift -I %t
+
+@_implementationOnly import abcde
+
+public func foo() {}
diff --git a/test/ParseableInterface/Inputs/imports-clang-modules/NotSoSecret.h b/test/ParseableInterface/Inputs/imports-clang-modules/NotSoSecret.h
new file mode 100644
index 0000000..cf4f6ba
--- /dev/null
+++ b/test/ParseableInterface/Inputs/imports-clang-modules/NotSoSecret.h
@@ -0,0 +1 @@
+void notSoSecret(void);
diff --git a/test/ParseableInterface/Inputs/imports-clang-modules/NotSoSecret2.h b/test/ParseableInterface/Inputs/imports-clang-modules/NotSoSecret2.h
new file mode 100644
index 0000000..87b61fb
--- /dev/null
+++ b/test/ParseableInterface/Inputs/imports-clang-modules/NotSoSecret2.h
@@ -0,0 +1 @@
+void notSoSecret2(void);
diff --git a/test/ParseableInterface/Inputs/imports-clang-modules/Secret_BAD.h b/test/ParseableInterface/Inputs/imports-clang-modules/Secret_BAD.h
new file mode 100644
index 0000000..c16fc93
--- /dev/null
+++ b/test/ParseableInterface/Inputs/imports-clang-modules/Secret_BAD.h
@@ -0,0 +1 @@
+void secret(void);
diff --git a/test/ParseableInterface/Inputs/imports-clang-modules/module.modulemap b/test/ParseableInterface/Inputs/imports-clang-modules/module.modulemap
index 308d286..8289129 100644
--- a/test/ParseableInterface/Inputs/imports-clang-modules/module.modulemap
+++ b/test/ParseableInterface/Inputs/imports-clang-modules/module.modulemap
@@ -6,3 +6,8 @@
}
module C { header "C.h" }
module D { header "D.h" }
+
+module Secret_BAD { header "Secret_BAD.h" }
+
+module NotSoSecret { header "NotSoSecret.h" }
+module NotSoSecret2 { header "NotSoSecret2.h" }
diff --git a/test/ParseableInterface/Inputs/imports-other.swift b/test/ParseableInterface/Inputs/imports-other.swift
index 617edff..b1a4e2c 100644
--- a/test/ParseableInterface/Inputs/imports-other.swift
+++ b/test/ParseableInterface/Inputs/imports-other.swift
@@ -1,3 +1,6 @@
import A
import B.B3
import D
+
+import NotSoSecret
+@_implementationOnly import NotSoSecret2
diff --git a/test/ParseableInterface/ParseStdlib.swiftinterface b/test/ParseableInterface/ParseStdlib.swiftinterface
index 9072c2d..ba16186 100644
--- a/test/ParseableInterface/ParseStdlib.swiftinterface
+++ b/test/ParseableInterface/ParseStdlib.swiftinterface
@@ -8,5 +8,5 @@
// RUN: %target-swift-frontend -build-module-from-parseable-interface -o %t/ParseStdlib.swiftmodule %s
// RUN: %target-swift-ide-test -print-module -module-to-print ParseStdlib -I %t -source-filename x -print-interface | %FileCheck %s
-// CHECK: func test(_: Int42)
+// CHECK: func test(_: Builtin.Int42)
public func test(_: Builtin.Int42) {}
diff --git a/test/ParseableInterface/access-filter.swift b/test/ParseableInterface/access-filter.swift
index b499dda..5b56490 100644
--- a/test/ParseableInterface/access-filter.swift
+++ b/test/ParseableInterface/access-filter.swift
@@ -197,12 +197,12 @@
@usableFromInline internal func constrainedToInternalStruct2_BAD() {}
}
-// CHECK: extension GenericStruct where T : PublicProto {{[{]$}}
+// CHECK: extension GenericStruct where T : main.PublicProto {{[{]$}}
extension GenericStruct where T: PublicProto {
// CHECK-NEXT: public func constrainedToPublicProto(){{$}}
public func constrainedToPublicProto() {}
} // CHECK-NEXT: {{^[}]$}}
-// CHECK: extension GenericStruct where T : UFIProto {{[{]$}}
+// CHECK: extension GenericStruct where T : main.UFIProto {{[{]$}}
extension GenericStruct where T: UFIProto {
// CHECK-NEXT: @usableFromInline{{$}}
// CHECK-NEXT: internal func constrainedToUFIProto(){{$}}
@@ -245,12 +245,12 @@
internal typealias ReallyInternalAlias_BAD = ReallyInternalAliasBase_BAD
-// CHECK: extension GenericStruct where T == PublicAlias {{[{]$}}
+// CHECK: extension GenericStruct where T == main.PublicAlias {{[{]$}}
extension GenericStruct where T == PublicAlias {
// CHECK-NEXT: public func constrainedToPublicAlias(){{$}}
public func constrainedToPublicAlias() {}
} // CHECK-NEXT: {{^[}]$}}
-// CHECK: extension GenericStruct where T == UFIAlias {{[{]$}}
+// CHECK: extension GenericStruct where T == main.UFIAlias {{[{]$}}
extension GenericStruct where T == UFIAlias {
// CHECK-NEXT: @usableFromInline{{$}}
// CHECK-NEXT: internal func constrainedToUFIAlias(){{$}}
diff --git a/test/ParseableInterface/conformances.swift b/test/ParseableInterface/conformances.swift
index 566cf6d..f006bf9 100644
--- a/test/ParseableInterface/conformances.swift
+++ b/test/ParseableInterface/conformances.swift
@@ -33,23 +33,23 @@
// NEGATIVE-NOT: extension conformances.A2
public struct A2: PrivateProto, PublicProto {}
// CHECK: public struct A3 {
-// CHECK-END: extension conformances.A3 : PublicProto {}
+// CHECK-END: extension conformances.A3 : conformances.PublicProto {}
public struct A3: PublicProto & PrivateProto {}
// CHECK: public struct A4 {
-// CHECK-END: extension conformances.A4 : PublicProto {}
+// CHECK-END: extension conformances.A4 : conformances.PublicProto {}
public struct A4: PrivateProto & PublicProto {}
public protocol PublicBaseProto {}
private protocol PrivateSubProto: PublicBaseProto {}
// CHECK: public struct B1 {
-// CHECK-END: extension conformances.B1 : PublicBaseProto {}
+// CHECK-END: extension conformances.B1 : conformances.PublicBaseProto {}
public struct B1: PrivateSubProto {}
// CHECK: public struct B2 : PublicBaseProto {
// NEGATIVE-NOT: extension conformances.B2
public struct B2: PublicBaseProto, PrivateSubProto {}
// CHECK: public struct B3 {
-// CHECK-END: extension conformances.B3 : PublicBaseProto {}
+// CHECK-END: extension conformances.B3 : conformances.PublicBaseProto {}
public struct B3: PublicBaseProto & PrivateSubProto {}
// CHECK: public struct B4 : PublicBaseProto {
// CHECK: extension B4 {
@@ -87,26 +87,26 @@
public protocol ConditionallyConformed {}
public protocol ConditionallyConformedAgain {}
-// CHECK-END: extension conformances.OuterGeneric : ConditionallyConformed, ConditionallyConformedAgain where T : _ConstraintThatIsNotPartOfTheAPIOfThisLibrary {}
+// CHECK-END: extension conformances.OuterGeneric : conformances.ConditionallyConformed, conformances.ConditionallyConformedAgain where T : _ConstraintThatIsNotPartOfTheAPIOfThisLibrary {}
extension OuterGeneric: ConditionallyConformed where T: PrivateProto {}
extension OuterGeneric: ConditionallyConformedAgain where T == PrivateProto {}
-// CHECK-END: extension conformances.OuterGeneric.Inner : PublicBaseProto {}
-// CHECK-END: extension conformances.OuterGeneric.Inner : ConditionallyConformed, ConditionallyConformedAgain where T : _ConstraintThatIsNotPartOfTheAPIOfThisLibrary {}
+// CHECK-END: extension conformances.OuterGeneric.Inner : conformances.PublicBaseProto {}
+// CHECK-END: extension conformances.OuterGeneric.Inner : conformances.ConditionallyConformed, conformances.ConditionallyConformedAgain where T : _ConstraintThatIsNotPartOfTheAPIOfThisLibrary {}
extension OuterGeneric.Inner: ConditionallyConformed where T: PrivateProto {}
extension OuterGeneric.Inner: ConditionallyConformedAgain where T == PrivateProto {}
private protocol AnotherPrivateSubProto: PublicBaseProto {}
// CHECK: public struct C1 {
-// CHECK-END: extension conformances.C1 : PublicBaseProto {}
+// CHECK-END: extension conformances.C1 : conformances.PublicBaseProto {}
public struct C1: PrivateSubProto, AnotherPrivateSubProto {}
// CHECK: public struct C2 {
-// CHECK-END: extension conformances.C2 : PublicBaseProto {}
+// CHECK-END: extension conformances.C2 : conformances.PublicBaseProto {}
public struct C2: PrivateSubProto & AnotherPrivateSubProto {}
// CHECK: public struct C3 {
// CHECK: extension C3 {
-// CHECK-END: extension conformances.C3 : PublicBaseProto {}
+// CHECK-END: extension conformances.C3 : conformances.PublicBaseProto {}
public struct C3: PrivateSubProto {}
extension C3: AnotherPrivateSubProto {}
@@ -120,10 +120,10 @@
// NEGATIVE-NOT: extension conformances.D2
public struct D2: PrivateSubProto, PublicSubProto {}
// CHECK: public struct D3 {
-// CHECK-END: extension conformances.D3 : PublicBaseProto, PublicSubProto {}
+// CHECK-END: extension conformances.D3 : conformances.PublicBaseProto, conformances.PublicSubProto {}
public struct D3: PrivateSubProto & PublicSubProto {}
// CHECK: public struct D4 {
-// CHECK-END: extension conformances.D4 : APublicSubProto, PublicBaseProto {}
+// CHECK-END: extension conformances.D4 : conformances.APublicSubProto, conformances.PublicBaseProto {}
public struct D4: APublicSubProto & PrivateSubProto {}
// CHECK: public struct D5 {
// CHECK: extension D5 : PublicSubProto {
@@ -139,33 +139,33 @@
private typealias PrivateProtoAlias = PublicProto
// CHECK: public struct E1 {
-// CHECK-END: extension conformances.E1 : PublicProto {}
+// CHECK-END: extension conformances.E1 : conformances.PublicProto {}
public struct E1: PrivateProtoAlias {}
private typealias PrivateSubProtoAlias = PrivateSubProto
// CHECK: public struct F1 {
-// CHECK-END: extension conformances.F1 : PublicBaseProto {}
+// CHECK-END: extension conformances.F1 : conformances.PublicBaseProto {}
public struct F1: PrivateSubProtoAlias {}
private protocol ClassConstrainedProto: PublicProto, AnyObject {}
public class G1: ClassConstrainedProto {}
// CHECK: public class G1 {
-// CHECK-END: extension conformances.G1 : PublicProto {}
+// CHECK-END: extension conformances.G1 : conformances.PublicProto {}
public class Base {}
private protocol BaseConstrainedProto: Base, PublicProto {}
public class H1: Base, ClassConstrainedProto {}
// CHECK: public class H1 : Base {
-// CHECK-END: extension conformances.H1 : PublicProto {}
+// CHECK-END: extension conformances.H1 : conformances.PublicProto {}
public struct MultiGeneric<T, U, V> {}
extension MultiGeneric: PublicProto where U: PrivateProto {}
// CHECK: public struct MultiGeneric<T, U, V> {
-// CHECK-END: extension conformances.MultiGeneric : PublicProto where T : _ConstraintThatIsNotPartOfTheAPIOfThisLibrary {}
+// CHECK-END: extension conformances.MultiGeneric : conformances.PublicProto where T : _ConstraintThatIsNotPartOfTheAPIOfThisLibrary {}
internal struct InternalImpl_BAD: PrivateSubProto {}
diff --git a/test/ParseableInterface/imports.swift b/test/ParseableInterface/imports.swift
index 337e597..e68e33d 100644
--- a/test/ParseableInterface/imports.swift
+++ b/test/ParseableInterface/imports.swift
@@ -1,12 +1,16 @@
// RUN: %empty-directory(%t)
// RUN: %target-swift-frontend -emit-module -o %t/empty.swiftmodule %S/../Inputs/empty.swift
-// RUN: %target-swift-frontend -typecheck -emit-parseable-module-interface-path - %s %S/Inputs/imports-other.swift -I %S/Inputs/imports-clang-modules/ -I %t -verify | %FileCheck %s
+// RUN: %target-swift-frontend -typecheck -emit-parseable-module-interface-path - %s %S/Inputs/imports-other.swift -I %S/Inputs/imports-clang-modules/ -I %t -verify | %FileCheck -implicit-check-not BAD %s
@_exported import empty
import B.B2
import func C.c // expected-warning {{scoped imports are not yet supported in parseable module interfaces}}
import D
+@_implementationOnly import Secret_BAD
+
+@_implementationOnly import NotSoSecret
+import NotSoSecret2
// CHECK-NOT: import
// CHECK: {{^}}import A{{$}}
@@ -15,6 +19,8 @@
// CHECK-NEXT: {{^}}import B.B3{{$}}
// CHECK-NEXT: {{^}}import C/*.c*/{{$}}
// CHECK-NEXT: {{^}}import D{{$}}
+// CHECK-NEXT: {{^}}import NotSoSecret{{$}}
+// CHECK-NEXT: {{^}}import NotSoSecret2{{$}}
// CHECK-NEXT: {{^}}import Swift{{$}}
// CHECK-NEXT: {{^}}@_exported import empty{{$}}
// CHECK-NOT: import
diff --git a/test/ParseableInterface/inlinable-function.swift b/test/ParseableInterface/inlinable-function.swift
index f22e63d..b6b7ced 100644
--- a/test/ParseableInterface/inlinable-function.swift
+++ b/test/ParseableInterface/inlinable-function.swift
@@ -4,7 +4,10 @@
// RUN: %target-swift-frontend -emit-module -o /dev/null -merge-modules %t/Test.swiftmodule -disable-objc-attr-requires-foundation-module -emit-parseable-module-interface-path %t/TestFromModule.swiftinterface -module-name Test
// RUN: %FileCheck %s --check-prefix FROMMODULE --check-prefix CHECK < %t/TestFromModule.swiftinterface
-// CHECK: public struct Foo : Hashable {
+// FIXME: These shouldn't be different, or we'll get different output from
+// WMO and non-WMO builds.
+// FROMSOURCE-LABEL: public struct Foo : Hashable {
+// FROMMODULE-LABEL: public struct Foo : Swift.Hashable {
public struct Foo: Hashable {
// CHECK: public var inlinableGetPublicSet: [[INT:(Swift.)?Int]] {
public var inlinableGetPublicSet: Int {
diff --git a/test/SILGen/witness_accessibility_multi.swift b/test/SILGen/witness_accessibility_multi.swift
index 340f5c2..a6577ac 100644
--- a/test/SILGen/witness_accessibility_multi.swift
+++ b/test/SILGen/witness_accessibility_multi.swift
@@ -15,7 +15,7 @@
// CHECK-LABEL: sil [ossa] @$s27witness_accessibility_multi22callsPublicRequirement1sy0a1_B6_other1SV_tF : $@convention(thin) (S) -> ()
public func callsPublicRequirement(s: S) {
- // CHECK: witness_method $S, #P.publicRequirement!1 : <Self where Self : P> (Self) -> () -> () : $@convention(witness_method: P) <τ_0_0 where τ_0_0 : P> (@in_guaranteed τ_0_0) -> ()
+ // CHECK: witness_method $S, #P.publicRequirement!1 : <Self where Self : witness_accessibility_other.P> (Self) -> () -> () : $@convention(witness_method: P) <τ_0_0 where τ_0_0 : P> (@in_guaranteed τ_0_0) -> ()
s.publicRequirement()
// CHECK: function_ref @$s27witness_accessibility_other1QPAAE19internalRequirementyyF : $@convention(method) <τ_0_0 where τ_0_0 : Q> (@in_guaranteed τ_0_0) -> ()
diff --git a/test/Serialization/Inputs/autolinking_implementation_only.swift b/test/Serialization/Inputs/autolinking_implementation_only.swift
new file mode 100644
index 0000000..ed4fd1e
--- /dev/null
+++ b/test/Serialization/Inputs/autolinking_implementation_only.swift
@@ -0,0 +1 @@
+public func dfunc() {}
diff --git a/test/Serialization/Inputs/autolinking_module_inferred.swift b/test/Serialization/Inputs/autolinking_module_inferred.swift
index 41f60c9..f50f084 100644
--- a/test/Serialization/Inputs/autolinking_module_inferred.swift
+++ b/test/Serialization/Inputs/autolinking_module_inferred.swift
@@ -2,7 +2,9 @@
import autolinking_other
import autolinking_indirect
import autolinking_private
+@_implementationOnly import autolinking_implementation_only
public func bfunc(x: Int = afunc(), y: Int = afunc2()) {
cfunc()
+ dfunc()
}
diff --git a/test/Serialization/Inputs/import-multi-file-other.swift b/test/Serialization/Inputs/import-multi-file-other.swift
new file mode 100644
index 0000000..7e95211
--- /dev/null
+++ b/test/Serialization/Inputs/import-multi-file-other.swift
@@ -0,0 +1,5 @@
+@_implementationOnly import A
+import B
+@_implementationOnly import C
+@_exported import D
+@_implementationOnly import E
diff --git a/test/Serialization/autolinking-inlinable-inferred.swift b/test/Serialization/autolinking-inlinable-inferred.swift
index 5bbb25d..709b63e 100644
--- a/test/Serialization/autolinking-inlinable-inferred.swift
+++ b/test/Serialization/autolinking-inlinable-inferred.swift
@@ -5,29 +5,72 @@
// RUN: %target-swift-frontend -emit-module %S/Inputs/autolinking_private.swift -emit-module-path %t/autolinking_private.swiftmodule -module-link-name autolinking_private -I %t -swift-version 4
// RUN: %target-swift-frontend -emit-module %S/Inputs/autolinking_other2.swift -emit-module-path %t/autolinking_other2.swiftmodule -module-link-name autolinking_other2 -swift-version 4
// RUN: %target-swift-frontend -emit-module %S/Inputs/autolinking_indirect.swift -emit-module-path %t/autolinking_indirect.swiftmodule -module-link-name autolinking_indirect -I %t -swift-version 4
+// RUN: %target-swift-frontend -emit-module %S/Inputs/autolinking_implementation_only.swift -emit-module-path %t/autolinking_implementation_only.swiftmodule -module-link-name autolinking_implementation_only_BAD -I %t -swift-version 4
// RUN: %target-swift-frontend -emit-module %S/Inputs/autolinking_module_inferred.swift -emit-module-path %t/autolinking_module_inferred.swiftmodule -module-link-name autolinking_module_inferred -I %t -swift-version 4
-// RUN: %target-swift-frontend -emit-ir %s -I %t -swift-version 4 -enable-objc-interop | %FileCheck %s -check-prefix CHECK -check-prefix CHECK-%target-os
+
+// RUN: %target-swift-frontend -emit-ir %s -I %t -swift-version 4 -enable-objc-interop -D NORMAL_IMPORT | %FileCheck -check-prefix CHECK -check-prefix CHECK-NORMAL -check-prefix CHECK-NORMAL-%target-os -implicit-check-not BAD %s
+// RUN: %target-swift-frontend -emit-ir %s -I %t -swift-version 4 -enable-objc-interop -D IMPLEMENTATION_ONLY_IMPORT | %FileCheck -check-prefix CHECK -check-prefix CHECK-IMPL_ONLY -check-prefix CHECK-IMPL_ONLY-%target-os -implicit-check-not BAD %s
+
+// RUN: %target-swift-frontend -emit-ir %s -I %t -swift-version 4 -enable-objc-interop -D NORMAL_AND_IMPLEMENTATION_ONLY | %FileCheck -check-prefix CHECK -check-prefix CHECK-NORMAL -check-prefix CHECK-NORMAL-%target-os -implicit-check-not BAD %s
+// RUN: %target-swift-frontend -emit-ir %s -I %t -swift-version 4 -enable-objc-interop -D IMPLEMENTATION_ONLY_AND_NORMAL | %FileCheck -check-prefix CHECK -check-prefix CHECK-NORMAL -check-prefix CHECK-NORMAL-%target-os -implicit-check-not BAD %s
+// RUN: %target-swift-frontend -emit-ir %s -I %t -swift-version 4 -enable-objc-interop -D EXPORTED_AND_IMPLEMENTATION_ONLY | %FileCheck -check-prefix CHECK -check-prefix CHECK-NORMAL -check-prefix CHECK-NORMAL-%target-os -implicit-check-not BAD %s
+// RUN: %target-swift-frontend -emit-ir %s -I %t -swift-version 4 -enable-objc-interop -D IMPLEMENTATION_ONLY_AND_EXPORTED | %FileCheck -check-prefix CHECK -check-prefix CHECK-NORMAL -check-prefix CHECK-NORMAL-%target-os -implicit-check-not BAD %s
// Linux uses a different autolinking mechanism, based on
// swift-autolink-extract. This file tests the Darwin mechanism.
/// UNSUPPORTED: autolink-extract
+#if NORMAL_IMPORT
import autolinking_module_inferred
+#elseif IMPLEMENTATION_ONLY_IMPORT
+@_implementationOnly import autolinking_module_inferred
+
+#elseif NORMAL_AND_IMPLEMENTATION_ONLY
+import autolinking_module_inferred
+@_implementationOnly import autolinking_module_inferred
+
+#elseif IMPLEMENTATION_ONLY_AND_NORMAL
+@_implementationOnly import autolinking_module_inferred
+import autolinking_module_inferred
+
+#elseif EXPORTED_AND_IMPLEMENTATION_ONLY
+@_exported import autolinking_module_inferred
+@_implementationOnly import autolinking_module_inferred
+
+#elseif IMPLEMENTATION_ONLY_AND_EXPORTED
+@_implementationOnly import autolinking_module_inferred
+@_exported import autolinking_module_inferred
+
+#else
+#error("must pick an import mode to test")
+#endif
+
bfunc()
// CHECK: !llvm.linker.options = !{
-// CHECK-SAME: [[MODULE:![0-9]+]],
-// CHECK-SAME: [[PUBLIC:![0-9]+]],
-// CHECK-SAME: [[SWIFTONONESUPPORT:![0-9]+]],
-// CHECK-SAME: [[SWIFTCORE:![0-9]+]],
-// CHECK-windows-msvc-SAME: [[STDIO:![0-9]+]],
+
+// CHECK-NORMAL-SAME: [[MODULE:![0-9]+]],
+// CHECK-NORMAL-SAME: [[PUBLIC:![0-9]+]],
+// CHECK-NORMAL-SAME: [[SWIFTONONESUPPORT:![0-9]+]],
+// CHECK-NORMAL-SAME: [[SWIFTCORE:![0-9]+]],
+// CHECK-NORMAL-windows-msvc-SAME: [[STDIO:![0-9]+]],
+
+// This is the same set as the above, just in a different order due to a
+// different traversal of the transitive import graph.
+// CHECK-IMPL_ONLY-SAME: [[SWIFTONONESUPPORT:![0-9]+]],
+// CHECK-IMPL_ONLY-SAME: [[SWIFTCORE:![0-9]+]],
+// CHECK-IMPL_ONLY-windows-msvc-SAME: [[STDIO:![0-9]+]],
+// CHECK-IMPL_ONLY-SAME: [[MODULE:![0-9]+]],
+// CHECK-IMPL_ONLY-SAME: [[PUBLIC:![0-9]+]],
+
// CHECK-SAME: [[PRIVATE:![0-9]+]],
// CHECK-SAME: [[OTHER:![0-9]+]],
// CHECK-SAME: [[INDIRECT:![0-9]+]],
// CHECK-SAME: [[OTHER2:![0-9]+]],
// CHECK-SAME: [[OBJC:![0-9]+]]
+
// CHECK-SAME: }
// CHECK-DAG: [[MODULE]] = !{!{{"-lautolinking_module_inferred"|"/DEFAULTLIB:autolinking_module_inferred.lib"}}}
diff --git a/test/Serialization/import-multi-file.swift b/test/Serialization/import-multi-file.swift
new file mode 100644
index 0000000..591967d
--- /dev/null
+++ b/test/Serialization/import-multi-file.swift
@@ -0,0 +1,26 @@
+// RUN: %empty-directory(%t)
+// RUN: mkdir %t/a %t/b %t/c %t/d %t/e
+// RUN: %target-swift-frontend -emit-module -o %t/a/A.swiftmodule %S/../Inputs/empty.swift
+// RUN: %target-swift-frontend -emit-module -o %t/b/B.swiftmodule %S/../Inputs/empty.swift
+// RUN: %target-swift-frontend -emit-module -o %t/c/C.swiftmodule %S/../Inputs/empty.swift
+// RUN: %target-swift-frontend -emit-module -o %t/d/D.swiftmodule %S/../Inputs/empty.swift
+// RUN: %target-swift-frontend -emit-module -o %t/e/E.swiftmodule %S/../Inputs/empty.swift
+
+// RUN: %target-swift-frontend -emit-module -o %t/Library.swiftmodule %s %S/Inputs/import-multi-file-other.swift -I %t/a -I %t/b -I %t/c -I %t/d -I %t/e
+
+// RUN: echo "import Library" > %t/main.swift
+// RUN: %target-swift-frontend -typecheck %t/main.swift -I %t -I %t/a -I %t/b -I %t/c -I %t/d -I %t/e
+
+// We should be able to drop "E", which is implementation-only imported in both
+// files, but not any of the others.
+// RUN: %target-swift-frontend -typecheck %t/main.swift -I %t -I %t/a -I %t/b -I %t/c -I %t/d
+// RUN: not %target-swift-frontend -typecheck %t/main.swift -I %t -I %t/a -I %t/b -I %t/c -I %t/e
+// RUN: not %target-swift-frontend -typecheck %t/main.swift -I %t -I %t/a -I %t/b -I %t/d -I %t/e
+// RUN: not %target-swift-frontend -typecheck %t/main.swift -I %t -I %t/a -I %t/c -I %t/d -I %t/e
+// RUN: not %target-swift-frontend -typecheck %t/main.swift -I %t -I %t/b -I %t/c -I %t/d -I %t/e
+
+import A
+@_implementationOnly import B
+@_exported import C
+@_implementationOnly import D
+@_implementationOnly import E
diff --git a/test/Serialization/module-merging-implementation-only.swift b/test/Serialization/module-merging-implementation-only.swift
new file mode 100644
index 0000000..a31bdfd
--- /dev/null
+++ b/test/Serialization/module-merging-implementation-only.swift
@@ -0,0 +1,23 @@
+// This is a very simple test that module merging does not eliminate
+// @_implementationOnly imports or declarations referenced from those imports.
+// More thorough tests exist in LLDB, which can look into those imports when
+// debugging a client of the module with @_implementationOnly imports.
+
+// RUN: %empty-directory(%t)
+// RUN: %target-swift-frontend -emit-module -o %t %S/Inputs/def_struct.swift
+
+// RUN: %target-swift-frontend -emit-module -I %t -o %t/main~partial.swiftmodule -module-name main %s
+// RUN: llvm-bcanalyzer -dump %t/main~partial.swiftmodule | %FileCheck %s
+// RUN: grep -q TwoInts %t/main~partial.swiftmodule
+
+// RUN: %target-swift-frontend -merge-modules -emit-module -I %t -o %t/main.swiftmodule %t/main~partial.swiftmodule
+// RUN: llvm-bcanalyzer -dump %t/main.swiftmodule | %FileCheck %s
+// RUN: grep -q TwoInts %t/main.swiftmodule
+
+@_implementationOnly import def_struct
+
+struct Container {
+ var wrapped: TwoInts
+}
+
+// CHECK: <IMPORTED_MODULE abbrevid={{[0-9]+}} op0=2 op1=0{{.*}}/> blob data = 'def_struct'
diff --git a/test/SourceKit/DocSupport/doc_swift_module.swift.response b/test/SourceKit/DocSupport/doc_swift_module.swift.response
index 221f283..6c2a4f5 100644
--- a/test/SourceKit/DocSupport/doc_swift_module.swift.response
+++ b/test/SourceKit/DocSupport/doc_swift_module.swift.response
@@ -1,6 +1,6 @@
import SwiftOnoneSupport
-class C1 : Prot {
+class C1 : cake.Prot {
typealias Element = Int
@@ -26,13 +26,13 @@
subscript(_ index: Int) -> Int { get }
}
-extension C1 : P4 {
+extension C1 : cake.P4 {
func C1foo()
struct C1S1 {
- func C1S1foo(a a: P4)
+ func C1S1foo(a a: cake.P4)
}
}
@@ -100,7 +100,7 @@
associatedtype Element
}
-protocol P6 : P5 {
+protocol P6 : cake.P5 {
}
extension P6 {
@@ -155,12 +155,12 @@
static func != (_ lhs: S1.SE, _ rhs: S1.SE) -> Bool
}
-struct S2 : P3 {
+struct S2 : cake.P3 {
typealias T = cake.S2
}
-struct S3<Wrapped> : P5 where Wrapped : P5 {
+struct S3<Wrapped> : cake.P5 where Wrapped : cake.P5 {
typealias Element = Wrapped.Element
}
@@ -170,7 +170,7 @@
var null: Wrapped.Element? { get }
}
-func genfoo<T1, T2>(x ix: T1, y iy: T2) where T1 : Prot, T2 : cake.C1, T1.Element == Int
+func genfoo<T1, T2>(x ix: T1, y iy: T2) where T1 : cake.Prot, T2 : cake.C1, T1.Element == Int
[
@@ -195,762 +195,760 @@
key.length: 2
},
{
- key.kind: source.lang.swift.ref.protocol,
- key.name: "Prot",
- key.usr: "s:4cake4ProtP",
+ key.kind: source.lang.swift.syntaxtype.typeidentifier,
key.offset: 37,
key.length: 4
},
{
+ key.kind: source.lang.swift.ref.protocol,
+ key.name: "Prot",
+ key.usr: "s:4cake4ProtP",
+ key.offset: 42,
+ key.length: 4
+ },
+ {
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 49,
+ key.offset: 54,
key.length: 9
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 59,
+ key.offset: 64,
key.length: 7
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 69,
+ key.offset: 74,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 78,
+ key.offset: 83,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 82,
+ key.offset: 87,
key.length: 1
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 85,
+ key.offset: 90,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 94,
- key.length: 4
- },
- {
- key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 99,
- key.length: 3
- },
- {
- key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 110,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
+ key.offset: 104,
+ key.length: 3
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 115,
key.length: 4
},
{
- key.kind: source.lang.swift.syntaxtype.argument,
+ key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 120,
+ key.length: 4
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.argument,
+ key.offset: 125,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 123,
+ key.offset: 128,
key.length: 2
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 127,
+ key.offset: 132,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 132,
+ key.offset: 137,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 135,
+ key.offset: 140,
key.length: 2
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 139,
+ key.offset: 144,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 149,
+ key.offset: 154,
key.length: 9
},
{
key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 159,
+ key.offset: 164,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 161,
+ key.offset: 166,
key.length: 5
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 168,
+ key.offset: 173,
key.length: 3
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 176,
+ key.offset: 181,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 182,
+ key.offset: 187,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 193,
+ key.offset: 198,
key.length: 9
},
{
key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 203,
+ key.offset: 208,
key.length: 5
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 209,
+ key.offset: 214,
key.length: 1
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Float",
key.usr: "s:Sf",
- key.offset: 212,
+ key.offset: 217,
key.length: 5
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 222,
+ key.offset: 227,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 228,
+ key.offset: 233,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 239,
+ key.offset: 244,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 244,
+ key.offset: 249,
key.length: 7
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 254,
+ key.offset: 259,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 269,
+ key.offset: 274,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 274,
+ key.offset: 279,
key.length: 5
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 291,
+ key.offset: 296,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 296,
+ key.offset: 301,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 310,
- key.length: 4
- },
- {
- key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 315,
key.length: 4
},
{
+ key.kind: source.lang.swift.syntaxtype.identifier,
+ key.offset: 320,
+ key.length: 4
+ },
+ {
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 327,
+ key.offset: 332,
key.length: 9
},
{
key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 337,
+ key.offset: 342,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 339,
+ key.offset: 344,
key.length: 5
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 346,
+ key.offset: 351,
key.length: 3
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 354,
+ key.offset: 359,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 360,
+ key.offset: 365,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 369,
+ key.offset: 374,
key.length: 9
},
{
key.kind: source.lang.swift.ref.class,
key.name: "C1",
key.usr: "s:4cake2C1C",
- key.offset: 379,
- key.length: 2
- },
- {
- key.kind: source.lang.swift.ref.protocol,
- key.name: "P4",
- key.usr: "s:4cake2P4P",
key.offset: 384,
key.length: 2
},
{
- key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 394,
+ key.kind: source.lang.swift.syntaxtype.typeidentifier,
+ key.offset: 389,
key.length: 4
},
{
- key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 399,
- key.length: 5
- },
- {
- key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 412,
- key.length: 6
- },
- {
- key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 419,
- key.length: 4
- },
- {
- key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 435,
- key.length: 4
- },
- {
- key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 440,
- key.length: 7
- },
- {
- key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 448,
- key.length: 1
- },
- {
- key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 450,
- key.length: 1
- },
- {
key.kind: source.lang.swift.ref.protocol,
key.name: "P4",
key.usr: "s:4cake2P4P",
- key.offset: 453,
+ key.offset: 394,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 466,
+ key.offset: 404,
+ key.length: 4
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.identifier,
+ key.offset: 409,
+ key.length: 5
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.keyword,
+ key.offset: 422,
+ key.length: 6
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.identifier,
+ key.offset: 429,
+ key.length: 4
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.keyword,
+ key.offset: 445,
+ key.length: 4
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.identifier,
+ key.offset: 450,
+ key.length: 7
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.argument,
+ key.offset: 458,
+ key.length: 1
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.parameter,
+ key.offset: 460,
+ key.length: 1
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.typeidentifier,
+ key.offset: 463,
+ key.length: 4
+ },
+ {
+ key.kind: source.lang.swift.ref.protocol,
+ key.name: "P4",
+ key.usr: "s:4cake2P4P",
+ key.offset: 468,
+ key.length: 2
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.keyword,
+ key.offset: 481,
key.length: 9
},
{
key.kind: source.lang.swift.ref.class,
key.name: "C1",
key.usr: "s:4cake2C1C",
- key.offset: 476,
+ key.offset: 491,
key.length: 2
},
{
key.kind: source.lang.swift.ref.enum,
key.name: "C1Cases",
key.usr: "s:4cake2C1C0B5CasesO",
- key.offset: 479,
+ key.offset: 494,
key.length: 7
},
{
key.kind: source.lang.swift.syntaxtype.attribute.builtin,
- key.offset: 494,
+ key.offset: 509,
key.length: 10
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 505,
+ key.offset: 520,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 509,
+ key.offset: 524,
key.length: 9
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 520,
+ key.offset: 535,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 526,
+ key.offset: 541,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.attribute.builtin,
- key.offset: 537,
+ key.offset: 552,
key.length: 10
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 548,
+ key.offset: 563,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 553,
+ key.offset: 568,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 558,
+ key.offset: 573,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 563,
+ key.offset: 578,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 571,
+ key.offset: 586,
key.length: 5
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Hasher",
key.usr: "s:s6HasherV",
- key.offset: 577,
+ key.offset: 592,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 590,
+ key.offset: 605,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 597,
+ key.offset: 612,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 606,
+ key.offset: 621,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 608,
+ key.offset: 623,
key.length: 3
},
{
key.kind: source.lang.swift.ref.class,
key.name: "C1",
key.usr: "s:4cake2C1C",
- key.offset: 613,
+ key.offset: 628,
key.length: 2
},
{
key.kind: source.lang.swift.ref.enum,
key.name: "C1Cases",
key.usr: "s:4cake2C1C0B5CasesO",
- key.offset: 616,
+ key.offset: 631,
key.length: 7
},
{
key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 625,
+ key.offset: 640,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 627,
+ key.offset: 642,
key.length: 3
},
{
key.kind: source.lang.swift.ref.class,
key.name: "C1",
key.usr: "s:4cake2C1C",
- key.offset: 632,
+ key.offset: 647,
key.length: 2
},
{
key.kind: source.lang.swift.ref.enum,
key.name: "C1Cases",
key.usr: "s:4cake2C1C0B5CasesO",
- key.offset: 635,
+ key.offset: 650,
key.length: 7
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Bool",
key.usr: "s:Sb",
- key.offset: 647,
+ key.offset: 662,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 655,
+ key.offset: 670,
key.length: 5
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 661,
+ key.offset: 676,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 666,
+ key.offset: 681,
key.length: 4
},
{
key.kind: source.lang.swift.ref.class,
key.name: "C1",
key.usr: "s:4cake2C1C",
- key.offset: 671,
+ key.offset: 686,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 681,
+ key.offset: 696,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 686,
+ key.offset: 701,
key.length: 5
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 699,
+ key.offset: 714,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 704,
+ key.offset: 719,
key.length: 7
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 714,
+ key.offset: 729,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 729,
+ key.offset: 744,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 734,
+ key.offset: 749,
key.length: 5
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 751,
+ key.offset: 766,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 756,
+ key.offset: 771,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 770,
+ key.offset: 785,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 775,
+ key.offset: 790,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 787,
+ key.offset: 802,
key.length: 9
},
{
key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 797,
+ key.offset: 812,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 799,
+ key.offset: 814,
key.length: 5
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 806,
+ key.offset: 821,
key.length: 3
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 814,
- key.length: 3
- },
- {
- key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 820,
- key.length: 3
- },
- {
- key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 829,
+ key.length: 3
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.keyword,
+ key.offset: 835,
+ key.length: 3
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.keyword,
+ key.offset: 844,
key.length: 9
},
{
key.kind: source.lang.swift.ref.class,
key.name: "C2",
key.usr: "s:4cake2C2C",
- key.offset: 839,
+ key.offset: 854,
key.length: 2
},
{
key.kind: source.lang.swift.ref.protocol,
key.name: "P4",
key.usr: "s:4cake2P4P",
- key.offset: 844,
+ key.offset: 859,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 854,
+ key.offset: 869,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 859,
+ key.offset: 874,
key.length: 5
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 872,
+ key.offset: 887,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 879,
+ key.offset: 894,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 895,
+ key.offset: 910,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 900,
+ key.offset: 915,
key.length: 7
},
{
key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 908,
+ key.offset: 923,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 910,
+ key.offset: 925,
key.length: 1
},
{
key.kind: source.lang.swift.ref.protocol,
key.name: "P4",
key.usr: "s:4cake2P4P",
- key.offset: 913,
+ key.offset: 928,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 926,
+ key.offset: 941,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 931,
+ key.offset: 946,
key.length: 6
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 940,
+ key.offset: 955,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 951,
+ key.offset: 966,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 956,
+ key.offset: 971,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.attribute.builtin,
- key.offset: 966,
+ key.offset: 981,
key.length: 10
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 977,
+ key.offset: 992,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 981,
+ key.offset: 996,
key.length: 9
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 992,
+ key.offset: 1007,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 998,
+ key.offset: 1013,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.attribute.builtin,
- key.offset: 1009,
+ key.offset: 1024,
key.length: 10
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1020,
+ key.offset: 1035,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1025,
+ key.offset: 1040,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 1030,
+ key.offset: 1045,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 1035,
+ key.offset: 1050,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1043,
+ key.offset: 1058,
key.length: 5
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Hasher",
key.usr: "s:s6HasherV",
- key.offset: 1049,
+ key.offset: 1064,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1062,
+ key.offset: 1077,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1069,
+ key.offset: 1084,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 1078,
- key.length: 1
- },
- {
- key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 1080,
- key.length: 3
- },
- {
- key.kind: source.lang.swift.ref.enum,
- key.name: "MyEnum",
- key.usr: "s:4cake6MyEnumO",
- key.offset: 1085,
- key.length: 6
- },
- {
- key.kind: source.lang.swift.syntaxtype.argument,
key.offset: 1093,
key.length: 1
},
@@ -967,704 +965,702 @@
key.length: 6
},
{
+ key.kind: source.lang.swift.syntaxtype.argument,
+ key.offset: 1108,
+ key.length: 1
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.parameter,
+ key.offset: 1110,
+ key.length: 3
+ },
+ {
+ key.kind: source.lang.swift.ref.enum,
+ key.name: "MyEnum",
+ key.usr: "s:4cake6MyEnumO",
+ key.offset: 1115,
+ key.length: 6
+ },
+ {
key.kind: source.lang.swift.ref.struct,
key.name: "Bool",
key.usr: "s:Sb",
- key.offset: 1111,
+ key.offset: 1126,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.attribute.builtin,
- key.offset: 1119,
+ key.offset: 1134,
key.length: 5
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1125,
+ key.offset: 1140,
key.length: 8
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1134,
+ key.offset: 1149,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.attribute.builtin,
- key.offset: 1144,
+ key.offset: 1159,
key.length: 5
},
{
key.kind: source.lang.swift.syntaxtype.attribute.builtin,
- key.offset: 1150,
+ key.offset: 1165,
key.length: 8
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1159,
- key.length: 4
- },
- {
- key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1164,
- key.length: 4
- },
- {
- key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 1174,
+ key.length: 4
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.identifier,
+ key.offset: 1179,
+ key.length: 4
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.keyword,
+ key.offset: 1189,
key.length: 8
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1183,
+ key.offset: 1198,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1193,
+ key.offset: 1208,
key.length: 14
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1208,
+ key.offset: 1223,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1213,
+ key.offset: 1228,
key.length: 8
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1222,
+ key.offset: 1237,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1230,
+ key.offset: 1245,
key.length: 8
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1239,
+ key.offset: 1254,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1249,
+ key.offset: 1264,
key.length: 14
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1264,
+ key.offset: 1279,
key.length: 7
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1275,
+ key.offset: 1290,
key.length: 8
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1284,
+ key.offset: 1299,
key.length: 2
},
{
+ key.kind: source.lang.swift.syntaxtype.typeidentifier,
+ key.offset: 1304,
+ key.length: 4
+ },
+ {
key.kind: source.lang.swift.ref.protocol,
key.name: "P5",
key.usr: "s:4cake2P5P",
- key.offset: 1289,
+ key.offset: 1309,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1297,
+ key.offset: 1317,
key.length: 9
},
{
key.kind: source.lang.swift.ref.protocol,
key.name: "P6",
key.usr: "s:4cake2P6P",
- key.offset: 1307,
+ key.offset: 1327,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1317,
+ key.offset: 1337,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1321,
+ key.offset: 1341,
key.length: 4
},
{
key.kind: source.lang.swift.ref.generic_type_param,
key.name: "Self",
key.usr: "s:4cake2P6P4Selfxmfp",
- key.offset: 1327,
+ key.offset: 1347,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 1332,
+ key.offset: 1352,
key.length: 7
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1343,
+ key.offset: 1363,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1352,
+ key.offset: 1372,
key.length: 8
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1361,
+ key.offset: 1381,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1373,
+ key.offset: 1393,
key.length: 14
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1388,
+ key.offset: 1408,
key.length: 7
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1401,
+ key.offset: 1421,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1405,
+ key.offset: 1425,
key.length: 1
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 1408,
+ key.offset: 1428,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1414,
+ key.offset: 1434,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1425,
+ key.offset: 1445,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1430,
+ key.offset: 1450,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1441,
+ key.offset: 1461,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1446,
+ key.offset: 1466,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1456,
+ key.offset: 1476,
key.length: 9
},
{
key.kind: source.lang.swift.ref.protocol,
key.name: "Prot",
key.usr: "s:4cake4ProtP",
- key.offset: 1466,
+ key.offset: 1486,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1478,
+ key.offset: 1498,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1483,
+ key.offset: 1503,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1495,
+ key.offset: 1515,
key.length: 9
},
{
key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 1505,
+ key.offset: 1525,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 1507,
+ key.offset: 1527,
key.length: 5
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 1514,
+ key.offset: 1534,
key.length: 3
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 1522,
+ key.offset: 1542,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1528,
+ key.offset: 1548,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1537,
+ key.offset: 1557,
key.length: 9
},
{
key.kind: source.lang.swift.ref.protocol,
key.name: "Prot",
key.usr: "s:4cake4ProtP",
- key.offset: 1547,
+ key.offset: 1567,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1552,
+ key.offset: 1572,
key.length: 5
},
{
key.kind: source.lang.swift.ref.generic_type_param,
key.name: "Self",
key.usr: "s:4cake4ProtPAASi7ElementRtzrlE4Selfxmfp",
- key.offset: 1558,
+ key.offset: 1578,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 1563,
+ key.offset: 1583,
key.length: 7
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 1574,
+ key.offset: 1594,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1585,
+ key.offset: 1605,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1590,
+ key.offset: 1610,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1602,
+ key.offset: 1622,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1609,
+ key.offset: 1629,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1619,
+ key.offset: 1639,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1624,
+ key.offset: 1644,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1638,
+ key.offset: 1658,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1643,
+ key.offset: 1663,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1654,
+ key.offset: 1674,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1659,
+ key.offset: 1679,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1670,
+ key.offset: 1690,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1675,
+ key.offset: 1695,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1688,
+ key.offset: 1708,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1693,
+ key.offset: 1713,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1705,
+ key.offset: 1725,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1712,
+ key.offset: 1732,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1726,
+ key.offset: 1746,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1730,
+ key.offset: 1750,
key.length: 1
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 1733,
+ key.offset: 1753,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1746,
+ key.offset: 1766,
key.length: 9
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "S1",
key.usr: "s:4cake2S1V",
- key.offset: 1756,
+ key.offset: 1776,
key.length: 2
},
{
key.kind: source.lang.swift.ref.enum,
key.name: "SE",
key.usr: "s:4cake2S1V2SEO",
- key.offset: 1759,
+ key.offset: 1779,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1769,
+ key.offset: 1789,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1776,
+ key.offset: 1796,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 1785,
+ key.offset: 1805,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 1787,
+ key.offset: 1807,
key.length: 3
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "S1",
key.usr: "s:4cake2S1V",
- key.offset: 1792,
+ key.offset: 1812,
key.length: 2
},
{
key.kind: source.lang.swift.ref.enum,
key.name: "SE",
key.usr: "s:4cake2S1V2SEO",
- key.offset: 1795,
+ key.offset: 1815,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 1799,
+ key.offset: 1819,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 1801,
+ key.offset: 1821,
key.length: 3
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "S1",
key.usr: "s:4cake2S1V",
- key.offset: 1806,
+ key.offset: 1826,
key.length: 2
},
{
key.kind: source.lang.swift.ref.enum,
key.name: "SE",
key.usr: "s:4cake2S1V2SEO",
- key.offset: 1809,
+ key.offset: 1829,
key.length: 2
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Bool",
key.usr: "s:Sb",
- key.offset: 1816,
+ key.offset: 1836,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1824,
+ key.offset: 1844,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1831,
+ key.offset: 1851,
key.length: 2
},
{
+ key.kind: source.lang.swift.syntaxtype.typeidentifier,
+ key.offset: 1856,
+ key.length: 4
+ },
+ {
key.kind: source.lang.swift.ref.protocol,
key.name: "P3",
key.usr: "s:4cake2P3P",
- key.offset: 1836,
+ key.offset: 1861,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1846,
+ key.offset: 1871,
key.length: 9
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1856,
+ key.offset: 1881,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 1860,
+ key.offset: 1885,
key.length: 4
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "S2",
key.usr: "s:4cake2S2V",
- key.offset: 1865,
+ key.offset: 1890,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1871,
+ key.offset: 1896,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1878,
+ key.offset: 1903,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1881,
+ key.offset: 1906,
key.length: 7
},
{
+ key.kind: source.lang.swift.syntaxtype.typeidentifier,
+ key.offset: 1917,
+ key.length: 4
+ },
+ {
key.kind: source.lang.swift.ref.protocol,
key.name: "P5",
key.usr: "s:4cake2P5P",
- key.offset: 1892,
+ key.offset: 1922,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1895,
+ key.offset: 1925,
key.length: 5
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 1901,
- key.length: 7
- },
- {
- key.kind: source.lang.swift.ref.protocol,
- key.name: "P5",
- key.usr: "s:4cake2P5P",
- key.offset: 1911,
- key.length: 2
- },
- {
- key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1921,
- key.length: 9
- },
- {
- key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 1931,
key.length: 7
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
key.offset: 1941,
+ key.length: 4
+ },
+ {
+ key.kind: source.lang.swift.ref.protocol,
+ key.name: "P5",
+ key.usr: "s:4cake2P5P",
+ key.offset: 1946,
+ key.length: 2
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.keyword,
+ key.offset: 1956,
+ key.length: 9
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.identifier,
+ key.offset: 1966,
key.length: 7
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 1949,
+ key.offset: 1976,
+ key.length: 7
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.typeidentifier,
+ key.offset: 1984,
key.length: 7
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1960,
+ key.offset: 1995,
key.length: 9
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "S3",
key.usr: "s:4cake2S3V",
- key.offset: 1970,
+ key.offset: 2005,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 1980,
+ key.offset: 2015,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 1984,
+ key.offset: 2019,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 1990,
+ key.offset: 2025,
key.length: 7
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 1998,
+ key.offset: 2033,
key.length: 7
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 2009,
+ key.offset: 2044,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 2018,
+ key.offset: 2053,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 2023,
+ key.offset: 2058,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 2030,
+ key.offset: 2065,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 2034,
- key.length: 2
- },
- {
- key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 2038,
- key.length: 1
- },
- {
- key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 2040,
- key.length: 2
- },
- {
- key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 2044,
- key.length: 2
- },
- {
- key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 2048,
- key.length: 1
- },
- {
- key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 2050,
- key.length: 2
- },
- {
- key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 2054,
- key.length: 2
- },
- {
- key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 2058,
- key.length: 5
- },
- {
- key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 2064,
- key.length: 2
- },
- {
- key.kind: source.lang.swift.ref.protocol,
- key.name: "Prot",
- key.usr: "s:4cake4ProtP",
key.offset: 2069,
- key.length: 4
+ key.length: 2
},
{
- key.kind: source.lang.swift.syntaxtype.typeidentifier,
+ key.kind: source.lang.swift.syntaxtype.argument,
+ key.offset: 2073,
+ key.length: 1
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.parameter,
key.offset: 2075,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 2080,
- key.length: 4
+ key.offset: 2079,
+ key.length: 2
},
{
- key.kind: source.lang.swift.ref.class,
- key.name: "C1",
- key.usr: "s:4cake2C1C",
+ key.kind: source.lang.swift.syntaxtype.argument,
+ key.offset: 2083,
+ key.length: 1
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.parameter,
key.offset: 2085,
key.length: 2
},
@@ -1674,15 +1670,59 @@
key.length: 2
},
{
+ key.kind: source.lang.swift.syntaxtype.keyword,
+ key.offset: 2093,
+ key.length: 5
+ },
+ {
key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 2092,
+ key.offset: 2099,
+ key.length: 2
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.typeidentifier,
+ key.offset: 2104,
+ key.length: 4
+ },
+ {
+ key.kind: source.lang.swift.ref.protocol,
+ key.name: "Prot",
+ key.usr: "s:4cake4ProtP",
+ key.offset: 2109,
+ key.length: 4
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.typeidentifier,
+ key.offset: 2115,
+ key.length: 2
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.typeidentifier,
+ key.offset: 2120,
+ key.length: 4
+ },
+ {
+ key.kind: source.lang.swift.ref.class,
+ key.name: "C1",
+ key.usr: "s:4cake2C1C",
+ key.offset: 2125,
+ key.length: 2
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.typeidentifier,
+ key.offset: 2129,
+ key.length: 2
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.typeidentifier,
+ key.offset: 2132,
key.length: 7
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 2103,
+ key.offset: 2143,
key.length: 3
}
]
@@ -1692,7 +1732,7 @@
key.name: "C1",
key.usr: "s:4cake2C1C",
key.offset: 26,
- key.length: 341,
+ key.length: 346,
key.fully_annotated_decl: "<decl.class><syntaxtype.keyword>class</syntaxtype.keyword> <decl.name>C1</decl.name> : <ref.protocol usr=\"s:4cake4ProtP\">Prot</ref.protocol></decl.class>",
key.conforms: [
{
@@ -1706,7 +1746,7 @@
key.kind: source.lang.swift.decl.typealias,
key.name: "Element",
key.usr: "s:4cake2C1C7Elementa",
- key.offset: 49,
+ key.offset: 54,
key.length: 23,
key.fully_annotated_decl: "<decl.typealias><syntaxtype.keyword>typealias</syntaxtype.keyword> <ref.class usr=\"s:4cake2C1C\">C1</ref.class>.<decl.name>Element</decl.name> = <ref.struct usr=\"s:Si\">Int</ref.struct></decl.typealias>",
key.conforms: [
@@ -1731,7 +1771,7 @@
key.kind: source.lang.swift.decl.var.instance,
key.name: "p",
key.usr: "s:4cake2C1C1pSivp",
- key.offset: 78,
+ key.offset: 83,
key.length: 10,
key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>p</decl.name>: <decl.var.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.type></decl.var.instance>",
key.conforms: [
@@ -1746,7 +1786,7 @@
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "foo()",
key.usr: "s:4cake2C1C3fooyyF",
- key.offset: 94,
+ key.offset: 99,
key.length: 10,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>foo</decl.name>()</decl.function.method.instance>",
key.conforms: [
@@ -1761,7 +1801,7 @@
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "foo1(i0:i1:)",
key.usr: "s:4cake2C1C4foo12i02i1ySin_SihtF",
- key.offset: 110,
+ key.offset: 115,
key.length: 33,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>foo1</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>i0</decl.var.parameter.argument_label>: <decl.var.parameter.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.parameter.type></decl.var.parameter>, <decl.var.parameter><decl.var.parameter.argument_label>i1</decl.var.parameter.argument_label>: <decl.var.parameter.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.parameter.type></decl.var.parameter>)</decl.function.method.instance>",
key.entities: [
@@ -1769,14 +1809,14 @@
key.kind: source.lang.swift.decl.var.local,
key.keyword: "i0",
key.name: "i0",
- key.offset: 127,
+ key.offset: 132,
key.length: 3
},
{
key.kind: source.lang.swift.decl.var.local,
key.keyword: "i1",
key.name: "i1",
- key.offset: 139,
+ key.offset: 144,
key.length: 3
}
]
@@ -1785,7 +1825,7 @@
key.kind: source.lang.swift.decl.function.subscript,
key.name: "subscript(_:)",
key.usr: "s:4cake2C1CyS2icip",
- key.offset: 149,
+ key.offset: 154,
key.length: 38,
key.fully_annotated_decl: "<decl.function.subscript><syntaxtype.keyword>subscript</syntaxtype.keyword>(<decl.var.parameter><decl.var.parameter.name>index</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.parameter.type></decl.var.parameter>) -> <decl.function.returntype><ref.struct usr=\"s:Si\">Int</ref.struct></decl.function.returntype> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.function.subscript>",
key.entities: [
@@ -1793,7 +1833,7 @@
key.kind: source.lang.swift.decl.var.local,
key.keyword: "_",
key.name: "index",
- key.offset: 168,
+ key.offset: 173,
key.length: 3
}
]
@@ -1802,7 +1842,7 @@
key.kind: source.lang.swift.decl.function.subscript,
key.name: "subscript(index:)",
key.usr: "s:4cake2C1C5indexSiSf_tcip",
- key.offset: 193,
+ key.offset: 198,
key.length: 40,
key.fully_annotated_decl: "<decl.function.subscript><syntaxtype.keyword>subscript</syntaxtype.keyword>(<decl.var.parameter><decl.var.parameter.argument_label>index</decl.var.parameter.argument_label> <decl.var.parameter.name>i</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"s:Sf\">Float</ref.struct></decl.var.parameter.type></decl.var.parameter>) -> <decl.function.returntype><ref.struct usr=\"s:Si\">Int</ref.struct></decl.function.returntype> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.function.subscript>",
key.entities: [
@@ -1810,7 +1850,7 @@
key.kind: source.lang.swift.decl.var.local,
key.keyword: "index",
key.name: "i",
- key.offset: 212,
+ key.offset: 217,
key.length: 5
}
]
@@ -1819,7 +1859,7 @@
key.kind: source.lang.swift.decl.enum,
key.name: "C1Cases",
key.usr: "s:4cake2C1C0B5CasesO",
- key.offset: 239,
+ key.offset: 244,
key.length: 46,
key.fully_annotated_decl: "<decl.enum><syntaxtype.keyword>enum</syntaxtype.keyword> <decl.name>C1Cases</decl.name> : <ref.struct usr=\"s:Si\">Int</ref.struct></decl.enum>",
key.inherits: [
@@ -1834,7 +1874,7 @@
key.kind: source.lang.swift.decl.enumelement,
key.name: "case1",
key.usr: "s:4cake2C1C0B5CasesO5case1yA2EmF",
- key.offset: 269,
+ key.offset: 274,
key.length: 10,
key.fully_annotated_decl: "<decl.enumelement><syntaxtype.keyword>case</syntaxtype.keyword> <decl.name>case1</decl.name></decl.enumelement>"
}
@@ -1845,7 +1885,7 @@
key.name: "extfoo()",
key.usr: "s:4cake4ProtPAASi7ElementRtzrlE6extfooyyF::SYNTHESIZED::s:4cake2C1C",
key.original_usr: "s:4cake4ProtPAASi7ElementRtzrlE6extfooyyF",
- key.offset: 291,
+ key.offset: 296,
key.length: 13,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>extfoo</decl.name>()</decl.function.method.instance>"
},
@@ -1854,7 +1894,7 @@
key.name: "foo1()",
key.usr: "s:4cake4ProtPAAE4foo1yyF::SYNTHESIZED::s:4cake2C1C",
key.original_usr: "s:4cake4ProtPAAE4foo1yyF",
- key.offset: 310,
+ key.offset: 315,
key.length: 11,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>foo1</decl.name>()</decl.function.method.instance>"
},
@@ -1863,7 +1903,7 @@
key.name: "subscript(_:)",
key.usr: "s:4cake4ProtPAAEyS2icip::SYNTHESIZED::s:4cake2C1C",
key.original_usr: "s:4cake4ProtPAAEyS2icip",
- key.offset: 327,
+ key.offset: 332,
key.length: 38,
key.fully_annotated_decl: "<decl.function.subscript><syntaxtype.keyword>subscript</syntaxtype.keyword>(<decl.var.parameter><decl.var.parameter.name>index</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.parameter.type></decl.var.parameter>) -> <decl.function.returntype><ref.struct usr=\"s:Si\">Int</ref.struct></decl.function.returntype> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.function.subscript>",
key.entities: [
@@ -1871,7 +1911,7 @@
key.kind: source.lang.swift.decl.var.local,
key.keyword: "_",
key.name: "index",
- key.offset: 346,
+ key.offset: 351,
key.length: 3
}
]
@@ -1880,8 +1920,8 @@
},
{
key.kind: source.lang.swift.decl.extension.class,
- key.offset: 369,
- key.length: 95,
+ key.offset: 374,
+ key.length: 105,
key.conforms: [
{
key.kind: source.lang.swift.ref.protocol,
@@ -1899,7 +1939,7 @@
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "C1foo()",
key.usr: "s:4cake2C1C5C1fooyyF",
- key.offset: 394,
+ key.offset: 404,
key.length: 12,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>C1foo</decl.name>()</decl.function.method.instance>"
},
@@ -1907,24 +1947,24 @@
key.kind: source.lang.swift.decl.struct,
key.name: "C1S1",
key.usr: "s:4cake2C1C0B2S1V",
- key.offset: 412,
- key.length: 50,
+ key.offset: 422,
+ key.length: 55,
key.fully_annotated_decl: "<decl.struct><syntaxtype.keyword>struct</syntaxtype.keyword> <decl.name>C1S1</decl.name></decl.struct>",
key.entities: [
{
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "C1S1foo(a:)",
key.usr: "s:4cake2C1C0B2S1V0B5S1foo1ayAA2P4_p_tF",
- key.offset: 435,
- key.length: 21,
+ key.offset: 445,
+ key.length: 26,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>C1S1foo</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>a</decl.var.parameter.argument_label>: <decl.var.parameter.type><ref.protocol usr=\"s:4cake2P4P\">P4</ref.protocol></decl.var.parameter.type></decl.var.parameter>)</decl.function.method.instance>",
key.entities: [
{
key.kind: source.lang.swift.decl.var.local,
key.keyword: "a",
key.name: "a",
- key.offset: 453,
- key.length: 2
+ key.offset: 463,
+ key.length: 7
}
]
}
@@ -1942,7 +1982,7 @@
key.description: "Self.RawValue : Hashable"
}
],
- key.offset: 466,
+ key.offset: 481,
key.length: 187,
key.fully_annotated_generic_signature: "<<decl.generic_type_param usr=\"s:SYsSHRzSH8RawValueSYRpzrlE4Selfxmfp\"><decl.generic_type_param.name>Self</decl.generic_type_param.name></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:SYsSHRzSH8RawValueSYRpzrlE4Selfxmfp\">Self</ref.generic_type_param> : <ref.protocol usr=\"s:SH\">Hashable</ref.protocol></decl.generic_type_requirement>, <decl.generic_type_requirement><ref.generic_type_param usr=\"s:SYsSHRzSH8RawValueSYRpzrlE4Selfxmfp\">Self</ref.generic_type_param> : <ref.protocol usr=\"s:SY\">RawRepresentable</ref.protocol></decl.generic_type_requirement>, <decl.generic_type_requirement><ref.generic_type_param usr=\"s:SYsSHRzSH8RawValueSYRpzrlE4Selfxmfp\">Self</ref.generic_type_param>.RawValue : <ref.protocol usr=\"s:SH\">Hashable</ref.protocol></decl.generic_type_requirement>>",
key.extends: {
@@ -1956,7 +1996,7 @@
key.name: "hashValue",
key.usr: "s:SYsSHRzSH8RawValueSYRpzrlE04hashB0Sivp::SYNTHESIZED::s:4cake2C1C0B5CasesO",
key.original_usr: "s:SYsSHRzSH8RawValueSYRpzrlE04hashB0Sivp",
- key.offset: 494,
+ key.offset: 509,
key.length: 37,
key.fully_annotated_decl: "<decl.var.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>hashValue</decl.name>: <decl.var.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.instance>"
},
@@ -1965,7 +2005,7 @@
key.name: "hash(into:)",
key.usr: "s:SYsSHRzSH8RawValueSYRpzrlE4hash4intoys6HasherVz_tF::SYNTHESIZED::s:4cake2C1C0B5CasesO",
key.original_usr: "s:SYsSHRzSH8RawValueSYRpzrlE4hash4intoys6HasherVz_tF",
- key.offset: 537,
+ key.offset: 552,
key.length: 47,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>hash</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>into</decl.var.parameter.argument_label> <decl.var.parameter.name>hasher</decl.var.parameter.name>: <syntaxtype.keyword>inout</syntaxtype.keyword> <decl.var.parameter.type><ref.struct usr=\"s:s6HasherV\">Hasher</ref.struct></decl.var.parameter.type></decl.var.parameter>)</decl.function.method.instance>",
key.entities: [
@@ -1973,7 +2013,7 @@
key.kind: source.lang.swift.decl.var.local,
key.keyword: "into",
key.name: "hasher",
- key.offset: 577,
+ key.offset: 592,
key.length: 6
}
]
@@ -1983,7 +2023,7 @@
key.name: "!=(_:_:)",
key.usr: "s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::s:4cake2C1C0B5CasesO",
key.original_usr: "s:SQsE2neoiySbx_xtFZ",
- key.offset: 590,
+ key.offset: 605,
key.length: 61,
key.fully_annotated_decl: "<decl.function.operator.infix><syntaxtype.keyword>static</syntaxtype.keyword> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>!= </decl.name>(<decl.var.parameter><decl.var.parameter.name>lhs</decl.var.parameter.name>: <decl.var.parameter.type><ref.class usr=\"s:4cake2C1C\">C1</ref.class>.<ref.enum usr=\"s:4cake2C1C0B5CasesO\">C1Cases</ref.enum></decl.var.parameter.type></decl.var.parameter>, <decl.var.parameter><decl.var.parameter.name>rhs</decl.var.parameter.name>: <decl.var.parameter.type><ref.class usr=\"s:4cake2C1C\">C1</ref.class>.<ref.enum usr=\"s:4cake2C1C0B5CasesO\">C1Cases</ref.enum></decl.var.parameter.type></decl.var.parameter>) -> <decl.function.returntype><ref.struct usr=\"s:Sb\">Bool</ref.struct></decl.function.returntype></decl.function.operator.infix>",
key.entities: [
@@ -1991,14 +2031,14 @@
key.kind: source.lang.swift.decl.var.local,
key.keyword: "_",
key.name: "lhs",
- key.offset: 613,
+ key.offset: 628,
key.length: 10
},
{
key.kind: source.lang.swift.decl.var.local,
key.keyword: "_",
key.name: "rhs",
- key.offset: 632,
+ key.offset: 647,
key.length: 10
}
]
@@ -2009,7 +2049,7 @@
key.kind: source.lang.swift.decl.class,
key.name: "C2",
key.usr: "s:4cake2C2C",
- key.offset: 655,
+ key.offset: 670,
key.length: 172,
key.fully_annotated_decl: "<decl.class><syntaxtype.keyword>class</syntaxtype.keyword> <decl.name>C2</decl.name> : <ref.class usr=\"s:4cake2C1C\">C1</ref.class></decl.class>",
key.inherits: [
@@ -2024,7 +2064,7 @@
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "C2foo()",
key.usr: "s:4cake2C2C5C2fooyyF",
- key.offset: 681,
+ key.offset: 696,
key.length: 12,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>C2foo</decl.name>()</decl.function.method.instance>"
},
@@ -2033,7 +2073,7 @@
key.name: "C1Cases",
key.usr: "s:4cake2C1C0B5CasesO::SYNTHESIZED::s:4cake2C2C",
key.original_usr: "s:4cake2C1C0B5CasesO",
- key.offset: 699,
+ key.offset: 714,
key.length: 46,
key.fully_annotated_decl: "<decl.enum><syntaxtype.keyword>enum</syntaxtype.keyword> <decl.name>C1Cases</decl.name> : <ref.struct usr=\"s:Si\">Int</ref.struct></decl.enum>",
key.inherits: [
@@ -2048,7 +2088,7 @@
key.kind: source.lang.swift.decl.enumelement,
key.name: "case1",
key.usr: "s:4cake2C1C0B5CasesO5case1yA2EmF",
- key.offset: 729,
+ key.offset: 744,
key.length: 10,
key.fully_annotated_decl: "<decl.enumelement><syntaxtype.keyword>case</syntaxtype.keyword> <decl.name>case1</decl.name></decl.enumelement>"
}
@@ -2059,7 +2099,7 @@
key.name: "extfoo()",
key.usr: "s:4cake4ProtPAASi7ElementRtzrlE6extfooyyF::SYNTHESIZED::s:4cake2C2C",
key.original_usr: "s:4cake4ProtPAASi7ElementRtzrlE6extfooyyF",
- key.offset: 751,
+ key.offset: 766,
key.length: 13,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>extfoo</decl.name>()</decl.function.method.instance>"
},
@@ -2068,7 +2108,7 @@
key.name: "foo1()",
key.usr: "s:4cake4ProtPAAE4foo1yyF::SYNTHESIZED::s:4cake2C2C",
key.original_usr: "s:4cake4ProtPAAE4foo1yyF",
- key.offset: 770,
+ key.offset: 785,
key.length: 11,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>foo1</decl.name>()</decl.function.method.instance>"
},
@@ -2077,7 +2117,7 @@
key.name: "subscript(_:)",
key.usr: "s:4cake4ProtPAAEyS2icip::SYNTHESIZED::s:4cake2C2C",
key.original_usr: "s:4cake4ProtPAAEyS2icip",
- key.offset: 787,
+ key.offset: 802,
key.length: 38,
key.fully_annotated_decl: "<decl.function.subscript><syntaxtype.keyword>subscript</syntaxtype.keyword>(<decl.var.parameter><decl.var.parameter.name>index</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.parameter.type></decl.var.parameter>) -> <decl.function.returntype><ref.struct usr=\"s:Si\">Int</ref.struct></decl.function.returntype> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.function.subscript>",
key.entities: [
@@ -2085,7 +2125,7 @@
key.kind: source.lang.swift.decl.var.local,
key.keyword: "_",
key.name: "index",
- key.offset: 806,
+ key.offset: 821,
key.length: 3
}
]
@@ -2094,7 +2134,7 @@
},
{
key.kind: source.lang.swift.decl.extension.class,
- key.offset: 829,
+ key.offset: 844,
key.length: 95,
key.conforms: [
{
@@ -2114,7 +2154,7 @@
key.name: "C1foo()",
key.usr: "s:4cake2C1C5C1fooyyF::SYNTHESIZED::s:4cake2C2C",
key.original_usr: "s:4cake2C1C5C1fooyyF",
- key.offset: 854,
+ key.offset: 869,
key.length: 12,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>C1foo</decl.name>()</decl.function.method.instance>"
},
@@ -2123,7 +2163,7 @@
key.name: "C1S1",
key.usr: "s:4cake2C1C0B2S1V::SYNTHESIZED::s:4cake2C2C",
key.original_usr: "s:4cake2C1C0B2S1V",
- key.offset: 872,
+ key.offset: 887,
key.length: 50,
key.fully_annotated_decl: "<decl.struct><syntaxtype.keyword>struct</syntaxtype.keyword> <decl.name>C1S1</decl.name></decl.struct>",
key.entities: [
@@ -2131,7 +2171,7 @@
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "C1S1foo(a:)",
key.usr: "s:4cake2C1C0B2S1V0B5S1foo1ayAA2P4_p_tF",
- key.offset: 895,
+ key.offset: 910,
key.length: 21,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>C1S1foo</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>a</decl.var.parameter.argument_label>: <decl.var.parameter.type><ref.protocol usr=\"s:4cake2P4P\">P4</ref.protocol></decl.var.parameter.type></decl.var.parameter>)</decl.function.method.instance>",
key.entities: [
@@ -2139,7 +2179,7 @@
key.kind: source.lang.swift.decl.var.local,
key.keyword: "a",
key.name: "a",
- key.offset: 913,
+ key.offset: 928,
key.length: 2
}
]
@@ -2152,7 +2192,7 @@
key.kind: source.lang.swift.decl.enum,
key.name: "MyEnum",
key.usr: "s:4cake6MyEnumO",
- key.offset: 926,
+ key.offset: 941,
key.length: 191,
key.fully_annotated_decl: "<decl.enum><syntaxtype.keyword>enum</syntaxtype.keyword> <decl.name>MyEnum</decl.name> : <ref.struct usr=\"s:Si\">Int</ref.struct></decl.enum>",
key.inherits: [
@@ -2167,7 +2207,7 @@
key.kind: source.lang.swift.decl.enumelement,
key.name: "Blah",
key.usr: "s:4cake6MyEnumO4BlahyA2CmF",
- key.offset: 951,
+ key.offset: 966,
key.length: 9,
key.fully_annotated_decl: "<decl.enumelement><syntaxtype.keyword>case</syntaxtype.keyword> <decl.name>Blah</decl.name></decl.enumelement>"
},
@@ -2176,7 +2216,7 @@
key.name: "hashValue",
key.usr: "s:SYsSHRzSH8RawValueSYRpzrlE04hashB0Sivp::SYNTHESIZED::s:4cake6MyEnumO",
key.original_usr: "s:SYsSHRzSH8RawValueSYRpzrlE04hashB0Sivp",
- key.offset: 966,
+ key.offset: 981,
key.length: 37,
key.fully_annotated_decl: "<decl.var.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>hashValue</decl.name>: <decl.var.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.instance>"
},
@@ -2185,7 +2225,7 @@
key.name: "hash(into:)",
key.usr: "s:SYsSHRzSH8RawValueSYRpzrlE4hash4intoys6HasherVz_tF::SYNTHESIZED::s:4cake6MyEnumO",
key.original_usr: "s:SYsSHRzSH8RawValueSYRpzrlE4hash4intoys6HasherVz_tF",
- key.offset: 1009,
+ key.offset: 1024,
key.length: 47,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>hash</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>into</decl.var.parameter.argument_label> <decl.var.parameter.name>hasher</decl.var.parameter.name>: <syntaxtype.keyword>inout</syntaxtype.keyword> <decl.var.parameter.type><ref.struct usr=\"s:s6HasherV\">Hasher</ref.struct></decl.var.parameter.type></decl.var.parameter>)</decl.function.method.instance>",
key.entities: [
@@ -2193,7 +2233,7 @@
key.kind: source.lang.swift.decl.var.local,
key.keyword: "into",
key.name: "hasher",
- key.offset: 1049,
+ key.offset: 1064,
key.length: 6
}
]
@@ -2203,7 +2243,7 @@
key.name: "!=(_:_:)",
key.usr: "s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::s:4cake6MyEnumO",
key.original_usr: "s:SQsE2neoiySbx_xtFZ",
- key.offset: 1062,
+ key.offset: 1077,
key.length: 53,
key.fully_annotated_decl: "<decl.function.operator.infix><syntaxtype.keyword>static</syntaxtype.keyword> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>!= </decl.name>(<decl.var.parameter><decl.var.parameter.name>lhs</decl.var.parameter.name>: <decl.var.parameter.type><ref.enum usr=\"s:4cake6MyEnumO\">MyEnum</ref.enum></decl.var.parameter.type></decl.var.parameter>, <decl.var.parameter><decl.var.parameter.name>rhs</decl.var.parameter.name>: <decl.var.parameter.type><ref.enum usr=\"s:4cake6MyEnumO\">MyEnum</ref.enum></decl.var.parameter.type></decl.var.parameter>) -> <decl.function.returntype><ref.struct usr=\"s:Sb\">Bool</ref.struct></decl.function.returntype></decl.function.operator.infix>",
key.entities: [
@@ -2211,14 +2251,14 @@
key.kind: source.lang.swift.decl.var.local,
key.keyword: "_",
key.name: "lhs",
- key.offset: 1085,
+ key.offset: 1100,
key.length: 6
},
{
key.kind: source.lang.swift.decl.var.local,
key.keyword: "_",
key.name: "rhs",
- key.offset: 1100,
+ key.offset: 1115,
key.length: 6
}
]
@@ -2229,7 +2269,7 @@
key.kind: source.lang.swift.decl.protocol,
key.name: "P2",
key.usr: "c:@M@cake@objc(pl)P2",
- key.offset: 1119,
+ key.offset: 1134,
key.length: 53,
key.fully_annotated_decl: "<decl.protocol><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@objc</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>protocol</syntaxtype.keyword> <decl.name>P2</decl.name></decl.protocol>",
key.entities: [
@@ -2237,7 +2277,7 @@
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "foo1()",
key.usr: "c:@M@cake@objc(pl)P2(im)foo1",
- key.offset: 1144,
+ key.offset: 1159,
key.length: 26,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@objc</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>optional</syntaxtype.keyword> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>foo1</decl.name>()</decl.function.method.instance>",
key.is_optional: 1
@@ -2248,7 +2288,7 @@
key.kind: source.lang.swift.decl.protocol,
key.name: "P3",
key.usr: "s:4cake2P3P",
- key.offset: 1174,
+ key.offset: 1189,
key.length: 37,
key.fully_annotated_decl: "<decl.protocol><syntaxtype.keyword>protocol</syntaxtype.keyword> <decl.name>P3</decl.name></decl.protocol>",
key.entities: [
@@ -2256,7 +2296,7 @@
key.kind: source.lang.swift.decl.associatedtype,
key.name: "T",
key.usr: "s:4cake2P3P1TQa",
- key.offset: 1193,
+ key.offset: 1208,
key.length: 16,
key.fully_annotated_decl: "<decl.associatedtype><syntaxtype.keyword>associatedtype</syntaxtype.keyword> <decl.name>T</decl.name></decl.associatedtype>"
}
@@ -2266,7 +2306,7 @@
key.kind: source.lang.swift.decl.protocol,
key.name: "P4",
key.usr: "s:4cake2P4P",
- key.offset: 1213,
+ key.offset: 1228,
key.length: 15,
key.fully_annotated_decl: "<decl.protocol><syntaxtype.keyword>protocol</syntaxtype.keyword> <decl.name>P4</decl.name></decl.protocol>"
},
@@ -2274,7 +2314,7 @@
key.kind: source.lang.swift.decl.protocol,
key.name: "P5",
key.usr: "s:4cake2P5P",
- key.offset: 1230,
+ key.offset: 1245,
key.length: 43,
key.fully_annotated_decl: "<decl.protocol><syntaxtype.keyword>protocol</syntaxtype.keyword> <decl.name>P5</decl.name></decl.protocol>",
key.entities: [
@@ -2282,7 +2322,7 @@
key.kind: source.lang.swift.decl.associatedtype,
key.name: "Element",
key.usr: "s:4cake2P5P7ElementQa",
- key.offset: 1249,
+ key.offset: 1264,
key.length: 22,
key.fully_annotated_decl: "<decl.associatedtype><syntaxtype.keyword>associatedtype</syntaxtype.keyword> <decl.name>Element</decl.name></decl.associatedtype>"
}
@@ -2292,8 +2332,8 @@
key.kind: source.lang.swift.decl.protocol,
key.name: "P6",
key.usr: "s:4cake2P6P",
- key.offset: 1275,
- key.length: 20,
+ key.offset: 1290,
+ key.length: 25,
key.fully_annotated_decl: "<decl.protocol><syntaxtype.keyword>protocol</syntaxtype.keyword> <decl.name>P6</decl.name> : <ref.protocol usr=\"s:4cake2P5P\">P5</ref.protocol></decl.protocol>",
key.conforms: [
{
@@ -2305,7 +2345,7 @@
},
{
key.kind: source.lang.swift.decl.extension.protocol,
- key.offset: 1297,
+ key.offset: 1317,
key.length: 53,
key.fully_annotated_generic_signature: "<<decl.generic_type_param usr=\"s:4cake2P6P4Selfxmfp\"><decl.generic_type_param.name>Self</decl.generic_type_param.name></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:4cake2P6P4Selfxmfp\">Self</ref.generic_type_param> : <ref.protocol usr=\"s:4cake2P6P\">P6</ref.protocol></decl.generic_type_requirement>>",
key.extends: {
@@ -2318,7 +2358,7 @@
key.kind: source.lang.swift.decl.var.instance,
key.name: "null",
key.usr: "s:4cake2P6PAAE4null7ElementQzSgvp",
- key.offset: 1317,
+ key.offset: 1337,
key.length: 31,
key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>null</decl.name>: <decl.var.type><ref.generic_type_param usr=\"s:4cake2P6P4Selfxmfp\">Self</ref.generic_type_param>.Element?</decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.instance>"
}
@@ -2328,7 +2368,7 @@
key.kind: source.lang.swift.decl.protocol,
key.name: "Prot",
key.usr: "s:4cake4ProtP",
- key.offset: 1352,
+ key.offset: 1372,
key.length: 102,
key.fully_annotated_decl: "<decl.protocol><syntaxtype.keyword>protocol</syntaxtype.keyword> <decl.name>Prot</decl.name></decl.protocol>",
key.entities: [
@@ -2336,7 +2376,7 @@
key.kind: source.lang.swift.decl.associatedtype,
key.name: "Element",
key.usr: "s:4cake4ProtP7ElementQa",
- key.offset: 1373,
+ key.offset: 1393,
key.length: 22,
key.fully_annotated_decl: "<decl.associatedtype><syntaxtype.keyword>associatedtype</syntaxtype.keyword> <decl.name>Element</decl.name></decl.associatedtype>"
},
@@ -2344,7 +2384,7 @@
key.kind: source.lang.swift.decl.var.instance,
key.name: "p",
key.usr: "s:4cake4ProtP1pSivp",
- key.offset: 1401,
+ key.offset: 1421,
key.length: 18,
key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>p</decl.name>: <decl.var.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.instance>"
},
@@ -2352,7 +2392,7 @@
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "foo()",
key.usr: "s:4cake4ProtP3fooyyF",
- key.offset: 1425,
+ key.offset: 1445,
key.length: 10,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>foo</decl.name>()</decl.function.method.instance>"
},
@@ -2360,7 +2400,7 @@
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "foo1()",
key.usr: "s:4cake4ProtP4foo1yyF",
- key.offset: 1441,
+ key.offset: 1461,
key.length: 11,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>foo1</decl.name>()</decl.function.method.instance>"
}
@@ -2368,7 +2408,7 @@
},
{
key.kind: source.lang.swift.decl.extension.protocol,
- key.offset: 1456,
+ key.offset: 1476,
key.length: 79,
key.fully_annotated_generic_signature: "<<decl.generic_type_param usr=\"s:4cake4ProtP4Selfxmfp\"><decl.generic_type_param.name>Self</decl.generic_type_param.name></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:4cake4ProtP4Selfxmfp\">Self</ref.generic_type_param> : <ref.protocol usr=\"s:4cake4ProtP\">Prot</ref.protocol></decl.generic_type_requirement>>",
key.extends: {
@@ -2382,7 +2422,7 @@
key.name: "foo1()",
key.usr: "s:4cake4ProtPAAE4foo1yyF",
key.default_implementation_of: "s:4cake4ProtP4foo1yyF",
- key.offset: 1478,
+ key.offset: 1498,
key.length: 11,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>foo1</decl.name>()</decl.function.method.instance>"
},
@@ -2390,7 +2430,7 @@
key.kind: source.lang.swift.decl.function.subscript,
key.name: "subscript(_:)",
key.usr: "s:4cake4ProtPAAEyS2icip",
- key.offset: 1495,
+ key.offset: 1515,
key.length: 38,
key.fully_annotated_decl: "<decl.function.subscript><syntaxtype.keyword>subscript</syntaxtype.keyword>(<decl.var.parameter><decl.var.parameter.name>index</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.parameter.type></decl.var.parameter>) -> <decl.function.returntype><ref.struct usr=\"s:Si\">Int</ref.struct></decl.function.returntype> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.function.subscript>",
key.entities: [
@@ -2398,7 +2438,7 @@
key.kind: source.lang.swift.decl.var.local,
key.keyword: "_",
key.name: "index",
- key.offset: 1514,
+ key.offset: 1534,
key.length: 3
}
]
@@ -2412,7 +2452,7 @@
key.description: "Self.Element == Int"
}
],
- key.offset: 1537,
+ key.offset: 1557,
key.length: 63,
key.fully_annotated_generic_signature: "<<decl.generic_type_param usr=\"s:4cake4ProtPAASi7ElementRtzrlE4Selfxmfp\"><decl.generic_type_param.name>Self</decl.generic_type_param.name></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:4cake4ProtPAASi7ElementRtzrlE4Selfxmfp\">Self</ref.generic_type_param> : <ref.protocol usr=\"s:4cake4ProtP\">Prot</ref.protocol></decl.generic_type_requirement>, <decl.generic_type_requirement><ref.generic_type_param usr=\"s:4cake4ProtPAASi7ElementRtzrlE4Selfxmfp\">Self</ref.generic_type_param>.Element == <ref.struct usr=\"s:Si\">Int</ref.struct></decl.generic_type_requirement>>",
key.extends: {
@@ -2425,7 +2465,7 @@
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "extfoo()",
key.usr: "s:4cake4ProtPAASi7ElementRtzrlE6extfooyyF",
- key.offset: 1585,
+ key.offset: 1605,
key.length: 13,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>extfoo</decl.name>()</decl.function.method.instance>"
}
@@ -2435,7 +2475,7 @@
key.kind: source.lang.swift.decl.struct,
key.name: "S1",
key.usr: "s:4cake2S1V",
- key.offset: 1602,
+ key.offset: 1622,
key.length: 142,
key.fully_annotated_decl: "<decl.struct><syntaxtype.keyword>struct</syntaxtype.keyword> <decl.name>S1</decl.name></decl.struct>",
key.entities: [
@@ -2443,7 +2483,7 @@
key.kind: source.lang.swift.decl.enum,
key.name: "SE",
key.usr: "s:4cake2S1V2SEO",
- key.offset: 1619,
+ key.offset: 1639,
key.length: 63,
key.fully_annotated_decl: "<decl.enum><syntaxtype.keyword>enum</syntaxtype.keyword> <ref.struct usr=\"s:4cake2S1V\">S1</ref.struct>.<decl.name>SE</decl.name></decl.enum>",
key.entities: [
@@ -2451,7 +2491,7 @@
key.kind: source.lang.swift.decl.enumelement,
key.name: "a",
key.usr: "s:4cake2S1V2SEO1ayA2EmF",
- key.offset: 1638,
+ key.offset: 1658,
key.length: 6,
key.fully_annotated_decl: "<decl.enumelement><syntaxtype.keyword>case</syntaxtype.keyword> <decl.name>a</decl.name></decl.enumelement>"
},
@@ -2459,7 +2499,7 @@
key.kind: source.lang.swift.decl.enumelement,
key.name: "b",
key.usr: "s:4cake2S1V2SEO1byA2EmF",
- key.offset: 1654,
+ key.offset: 1674,
key.length: 6,
key.fully_annotated_decl: "<decl.enumelement><syntaxtype.keyword>case</syntaxtype.keyword> <decl.name>b</decl.name></decl.enumelement>"
},
@@ -2467,7 +2507,7 @@
key.kind: source.lang.swift.decl.enumelement,
key.name: "c",
key.usr: "s:4cake2S1V2SEO1cyA2EmF",
- key.offset: 1670,
+ key.offset: 1690,
key.length: 6,
key.fully_annotated_decl: "<decl.enumelement><syntaxtype.keyword>case</syntaxtype.keyword> <decl.name>c</decl.name></decl.enumelement>"
}
@@ -2477,7 +2517,7 @@
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "foo1()",
key.usr: "s:4cake2S1V4foo1yyF",
- key.offset: 1688,
+ key.offset: 1708,
key.length: 11,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>foo1</decl.name>()</decl.function.method.instance>"
},
@@ -2485,7 +2525,7 @@
key.kind: source.lang.swift.decl.struct,
key.name: "S2",
key.usr: "s:4cake2S1V2S2V",
- key.offset: 1705,
+ key.offset: 1725,
key.length: 37,
key.fully_annotated_decl: "<decl.struct><syntaxtype.keyword>struct</syntaxtype.keyword> <decl.name>S2</decl.name></decl.struct>",
key.entities: [
@@ -2493,7 +2533,7 @@
key.kind: source.lang.swift.decl.var.instance,
key.name: "b",
key.usr: "s:4cake2S1V2S2V1bSivp",
- key.offset: 1726,
+ key.offset: 1746,
key.length: 10,
key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>let</syntaxtype.keyword> <decl.name>b</decl.name>: <decl.var.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.type></decl.var.instance>"
}
@@ -2503,7 +2543,7 @@
},
{
key.kind: source.lang.swift.decl.extension.enum,
- key.offset: 1746,
+ key.offset: 1766,
key.length: 76,
key.fully_annotated_generic_signature: "<<decl.generic_type_param usr=\"s:SQ4Selfxmfp\"><decl.generic_type_param.name>Self</decl.generic_type_param.name></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:SQ4Selfxmfp\">Self</ref.generic_type_param> : <ref.protocol usr=\"s:SQ\">Equatable</ref.protocol></decl.generic_type_requirement>>",
key.extends: {
@@ -2517,7 +2557,7 @@
key.name: "!=(_:_:)",
key.usr: "s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::s:4cake2S1V2SEO",
key.original_usr: "s:SQsE2neoiySbx_xtFZ",
- key.offset: 1769,
+ key.offset: 1789,
key.length: 51,
key.fully_annotated_decl: "<decl.function.operator.infix><syntaxtype.keyword>static</syntaxtype.keyword> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>!= </decl.name>(<decl.var.parameter><decl.var.parameter.name>lhs</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"s:4cake2S1V\">S1</ref.struct>.<ref.enum usr=\"s:4cake2S1V2SEO\">SE</ref.enum></decl.var.parameter.type></decl.var.parameter>, <decl.var.parameter><decl.var.parameter.name>rhs</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"s:4cake2S1V\">S1</ref.struct>.<ref.enum usr=\"s:4cake2S1V2SEO\">SE</ref.enum></decl.var.parameter.type></decl.var.parameter>) -> <decl.function.returntype><ref.struct usr=\"s:Sb\">Bool</ref.struct></decl.function.returntype></decl.function.operator.infix>",
key.entities: [
@@ -2525,14 +2565,14 @@
key.kind: source.lang.swift.decl.var.local,
key.keyword: "_",
key.name: "lhs",
- key.offset: 1792,
+ key.offset: 1812,
key.length: 5
},
{
key.kind: source.lang.swift.decl.var.local,
key.keyword: "_",
key.name: "rhs",
- key.offset: 1806,
+ key.offset: 1826,
key.length: 5
}
]
@@ -2543,8 +2583,8 @@
key.kind: source.lang.swift.decl.struct,
key.name: "S2",
key.usr: "s:4cake2S2V",
- key.offset: 1824,
- key.length: 45,
+ key.offset: 1844,
+ key.length: 50,
key.fully_annotated_decl: "<decl.struct><syntaxtype.keyword>struct</syntaxtype.keyword> <decl.name>S2</decl.name> : <ref.protocol usr=\"s:4cake2P3P\">P3</ref.protocol></decl.struct>",
key.conforms: [
{
@@ -2558,7 +2598,7 @@
key.kind: source.lang.swift.decl.typealias,
key.name: "T",
key.usr: "s:4cake2S2V1Ta",
- key.offset: 1846,
+ key.offset: 1871,
key.length: 21,
key.fully_annotated_decl: "<decl.typealias><syntaxtype.keyword>typealias</syntaxtype.keyword> <ref.struct usr=\"s:4cake2S2V\">S2</ref.struct>.<decl.name>T</decl.name> = <ref.struct usr=\"s:4cake2S2V\">S2</ref.struct></decl.typealias>",
key.conforms: [
@@ -2585,8 +2625,8 @@
key.description: "Wrapped : P5"
}
],
- key.offset: 1871,
- key.length: 87,
+ key.offset: 1896,
+ key.length: 97,
key.fully_annotated_decl: "<decl.struct><syntaxtype.keyword>struct</syntaxtype.keyword> <decl.name>S3</decl.name><<decl.generic_type_param usr=\"s:4cake2S3V7Wrappedxmfp\"><decl.generic_type_param.name>Wrapped</decl.generic_type_param.name></decl.generic_type_param>> : <ref.protocol usr=\"s:4cake2P5P\">P5</ref.protocol> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement>Wrapped : <ref.protocol usr=\"s:4cake2P5P\">P5</ref.protocol></decl.generic_type_requirement></decl.struct>",
key.conforms: [
{
@@ -2600,7 +2640,7 @@
key.kind: source.lang.swift.decl.typealias,
key.name: "Element",
key.usr: "s:4cake2S3V7Elementa",
- key.offset: 1921,
+ key.offset: 1956,
key.length: 35,
key.fully_annotated_decl: "<decl.typealias><syntaxtype.keyword>typealias</syntaxtype.keyword> <ref.struct usr=\"s:4cake2S3V\">S3</ref.struct><Wrapped>.<decl.name>Element</decl.name> = Wrapped.Element</decl.typealias>",
key.conforms: [
@@ -2615,7 +2655,7 @@
},
{
key.kind: source.lang.swift.decl.extension.struct,
- key.offset: 1960,
+ key.offset: 1995,
key.length: 56,
key.fully_annotated_generic_signature: "<<decl.generic_type_param usr=\"s:4cake2P6P4Selfxmfp\"><decl.generic_type_param.name>Self</decl.generic_type_param.name></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:4cake2P6P4Selfxmfp\">Self</ref.generic_type_param> : <ref.protocol usr=\"s:4cake2P6P\">P6</ref.protocol></decl.generic_type_requirement>>",
key.extends: {
@@ -2629,7 +2669,7 @@
key.name: "null",
key.usr: "s:4cake2P6PAAE4null7ElementQzSgvp::SYNTHESIZED::s:4cake2S3V",
key.original_usr: "s:4cake2P6PAAE4null7ElementQzSgvp",
- key.offset: 1980,
+ key.offset: 2015,
key.length: 34,
key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>null</decl.name>: <decl.var.type>Wrapped.Element?</decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.instance>"
}
@@ -2658,22 +2698,22 @@
key.description: "T1.Element == Int"
}
],
- key.offset: 2018,
- key.length: 88,
+ key.offset: 2053,
+ key.length: 93,
key.fully_annotated_decl: "<decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>genfoo</decl.name><<decl.generic_type_param usr=\"s:4cake6genfoo1x1yyx_q_tAA4ProtRzAA2C1CRb_Si7ElementRtzr0_lF2T1L_xmfp\"><decl.generic_type_param.name>T1</decl.generic_type_param.name></decl.generic_type_param>, <decl.generic_type_param usr=\"s:4cake6genfoo1x1yyx_q_tAA4ProtRzAA2C1CRb_Si7ElementRtzr0_lF2T2L_q_mfp\"><decl.generic_type_param.name>T2</decl.generic_type_param.name></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 : <ref.protocol usr=\"s:4cake4ProtP\">Prot</ref.protocol></decl.generic_type_requirement>, <decl.generic_type_requirement>T2 : <ref.class usr=\"s:4cake2C1C\">C1</ref.class></decl.generic_type_requirement>, <decl.generic_type_requirement>T1.Element == <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,
key.keyword: "x",
key.name: "ix",
- key.offset: 2044,
+ key.offset: 2079,
key.length: 2
},
{
key.kind: source.lang.swift.decl.var.local,
key.keyword: "y",
key.name: "iy",
- key.offset: 2054,
+ key.offset: 2089,
key.length: 2
}
]
diff --git a/test/SourceKit/DocSupport/doc_swift_module1.swift.response b/test/SourceKit/DocSupport/doc_swift_module1.swift.response
index a4f9d04..1c310d0 100644
--- a/test/SourceKit/DocSupport/doc_swift_module1.swift.response
+++ b/test/SourceKit/DocSupport/doc_swift_module1.swift.response
@@ -1,6 +1,6 @@
import SwiftOnoneSupport
-class InitClassImpl : InitProto {
+class InitClassImpl : cake1.InitProto {
required init(x x: Int)
@@ -17,7 +17,7 @@
init()
}
-struct InitStructImpl : InitProto {
+struct InitStructImpl : cake1.InitProto {
init(x x: Int)
@@ -37,7 +37,7 @@
func fooConstraint()
}
-protocol P2 : P1 {
+protocol P2 : cake1.P1 {
func bar1()
@@ -55,7 +55,7 @@
subscript(_ a: Int) -> Int
}
-extension P2 where Self : P3 {
+extension P2 where Self : cake1.P3 {
func fooConstraint()
}
@@ -70,7 +70,7 @@
func foo()
}
-extension Dictionary.Keys where Key : P1 {
+extension Dictionary.Keys where Key : cake1.P1 {
func bar()
}
@@ -98,565 +98,590 @@
key.length: 13
},
{
+ key.kind: source.lang.swift.syntaxtype.typeidentifier,
+ key.offset: 48,
+ key.length: 5
+ },
+ {
key.kind: source.lang.swift.ref.protocol,
key.name: "InitProto",
key.usr: "s:5cake19InitProtoP",
- key.offset: 48,
+ key.offset: 54,
key.length: 9
},
{
key.kind: source.lang.swift.syntaxtype.attribute.builtin,
- key.offset: 65,
+ key.offset: 71,
key.length: 8
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 74,
+ key.offset: 80,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 79,
+ key.offset: 85,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 81,
+ key.offset: 87,
key.length: 1
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 84,
+ key.offset: 90,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.attribute.builtin,
- key.offset: 94,
+ key.offset: 100,
key.length: 11
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 106,
+ key.offset: 112,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 116,
+ key.offset: 122,
key.length: 8
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 125,
+ key.offset: 131,
key.length: 9
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 142,
+ key.offset: 148,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 147,
+ key.offset: 153,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 149,
+ key.offset: 155,
key.length: 1
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 152,
+ key.offset: 158,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 160,
+ key.offset: 166,
key.length: 9
},
{
key.kind: source.lang.swift.ref.protocol,
key.name: "InitProto",
key.usr: "s:5cake19InitProtoP",
- key.offset: 170,
+ key.offset: 176,
key.length: 9
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 187,
+ key.offset: 193,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 197,
+ key.offset: 203,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 204,
+ key.offset: 210,
key.length: 14
},
{
+ key.kind: source.lang.swift.syntaxtype.typeidentifier,
+ key.offset: 227,
+ key.length: 5
+ },
+ {
key.kind: source.lang.swift.ref.protocol,
key.name: "InitProto",
key.usr: "s:5cake19InitProtoP",
- key.offset: 221,
+ key.offset: 233,
key.length: 9
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 238,
+ key.offset: 250,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 243,
+ key.offset: 255,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 245,
+ key.offset: 257,
key.length: 1
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 248,
+ key.offset: 260,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 258,
+ key.offset: 270,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 268,
+ key.offset: 280,
key.length: 8
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 277,
+ key.offset: 289,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 287,
+ key.offset: 299,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 292,
- key.length: 4
- },
- {
- key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 304,
+ key.length: 4
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.keyword,
+ key.offset: 316,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 308,
+ key.offset: 320,
key.length: 3
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 313,
+ key.offset: 325,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 319,
+ key.offset: 331,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 323,
+ key.offset: 335,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 334,
- key.length: 4
- },
- {
- key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 339,
- key.length: 4
- },
- {
- key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 344,
- key.length: 1
- },
- {
- key.kind: source.lang.swift.syntaxtype.parameter,
key.offset: 346,
- key.length: 1
+ key.length: 4
},
{
- key.kind: source.lang.swift.ref.struct,
- key.name: "Int",
- key.usr: "s:Si",
- key.offset: 349,
- key.length: 3
+ key.kind: source.lang.swift.syntaxtype.identifier,
+ key.offset: 351,
+ key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 354,
- key.length: 1
- },
- {
- key.kind: source.lang.swift.syntaxtype.parameter,
key.offset: 356,
key.length: 1
},
{
+ key.kind: source.lang.swift.syntaxtype.parameter,
+ key.offset: 358,
+ key.length: 1
+ },
+ {
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 359,
+ key.offset: 361,
key.length: 3
},
{
- key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 369,
- key.length: 9
- },
- {
key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 379,
+ key.offset: 366,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 381,
+ key.offset: 368,
key.length: 1
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 384,
+ key.offset: 371,
+ key.length: 3
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.keyword,
+ key.offset: 381,
+ key.length: 9
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.argument,
+ key.offset: 391,
+ key.length: 1
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.parameter,
+ key.offset: 393,
+ key.length: 1
+ },
+ {
+ key.kind: source.lang.swift.ref.struct,
+ key.name: "Int",
+ key.usr: "s:Si",
+ key.offset: 396,
key.length: 3
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 392,
+ key.offset: 404,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 398,
+ key.offset: 410,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 402,
+ key.offset: 414,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 413,
+ key.offset: 425,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 418,
+ key.offset: 430,
key.length: 13
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 437,
+ key.offset: 449,
key.length: 8
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 446,
+ key.offset: 458,
key.length: 2
},
{
+ key.kind: source.lang.swift.syntaxtype.typeidentifier,
+ key.offset: 463,
+ key.length: 5
+ },
+ {
key.kind: source.lang.swift.ref.protocol,
key.name: "P1",
key.usr: "s:5cake12P1P",
- key.offset: 451,
+ key.offset: 469,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 461,
+ key.offset: 479,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 466,
+ key.offset: 484,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 478,
+ key.offset: 496,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 483,
+ key.offset: 501,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 493,
+ key.offset: 511,
key.length: 9
},
{
key.kind: source.lang.swift.ref.protocol,
key.name: "P2",
key.usr: "s:5cake12P2P",
- key.offset: 503,
+ key.offset: 521,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 513,
+ key.offset: 531,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 518,
+ key.offset: 536,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 530,
- key.length: 3
- },
- {
- key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 534,
- key.length: 3
- },
- {
- key.kind: source.lang.swift.ref.struct,
- key.name: "Int",
- key.usr: "s:Si",
- key.offset: 539,
- key.length: 3
- },
- {
- key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 548,
+ key.length: 3
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.identifier,
+ key.offset: 552,
+ key.length: 3
+ },
+ {
+ key.kind: source.lang.swift.ref.struct,
+ key.name: "Int",
+ key.usr: "s:Si",
+ key.offset: 557,
+ key.length: 3
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.keyword,
+ key.offset: 566,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 553,
+ key.offset: 571,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 558,
+ key.offset: 576,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 560,
+ key.offset: 578,
key.length: 1
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 563,
+ key.offset: 581,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 568,
+ key.offset: 586,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 570,
+ key.offset: 588,
key.length: 1
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 573,
+ key.offset: 591,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 583,
+ key.offset: 601,
key.length: 9
},
{
key.kind: source.lang.swift.syntaxtype.argument,
- key.offset: 593,
+ key.offset: 611,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
- key.offset: 595,
+ key.offset: 613,
key.length: 1
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 598,
+ key.offset: 616,
key.length: 3
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
- key.offset: 606,
+ key.offset: 624,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 613,
+ key.offset: 631,
key.length: 9
},
{
key.kind: source.lang.swift.ref.protocol,
key.name: "P2",
key.usr: "s:5cake12P2P",
- key.offset: 623,
+ key.offset: 641,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 626,
+ key.offset: 644,
key.length: 5
},
{
key.kind: source.lang.swift.ref.generic_type_param,
key.name: "Self",
key.usr: "s:5cake12P2PA2A2P3RzrlE4Selfxmfp",
- key.offset: 632,
+ key.offset: 650,
key.length: 4
},
{
+ key.kind: source.lang.swift.syntaxtype.typeidentifier,
+ key.offset: 657,
+ key.length: 5
+ },
+ {
key.kind: source.lang.swift.ref.protocol,
key.name: "P3",
key.usr: "s:5cake12P3P",
- key.offset: 639,
+ key.offset: 663,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 649,
- key.length: 4
- },
- {
- key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 654,
- key.length: 13
- },
- {
- key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 673,
+ key.length: 4
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.identifier,
+ key.offset: 678,
+ key.length: 13
+ },
+ {
+ key.kind: source.lang.swift.syntaxtype.keyword,
+ key.offset: 697,
key.length: 8
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 682,
+ key.offset: 706,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 692,
+ key.offset: 716,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 697,
+ key.offset: 721,
key.length: 10
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 713,
+ key.offset: 737,
key.length: 9
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Dictionary",
key.usr: "s:SD",
- key.offset: 723,
+ key.offset: 747,
key.length: 10
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Keys",
key.usr: "s:SD4KeysV",
- key.offset: 734,
+ key.offset: 758,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 746,
+ key.offset: 770,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 751,
+ key.offset: 775,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 760,
+ key.offset: 784,
key.length: 9
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Dictionary",
key.usr: "s:SD",
- key.offset: 770,
+ key.offset: 794,
key.length: 10
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Keys",
key.usr: "s:SD4KeysV",
- key.offset: 781,
+ key.offset: 805,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 786,
+ key.offset: 810,
key.length: 5
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
- key.offset: 792,
+ key.offset: 816,
key.length: 3
},
{
+ key.kind: source.lang.swift.syntaxtype.typeidentifier,
+ key.offset: 822,
+ key.length: 5
+ },
+ {
key.kind: source.lang.swift.ref.protocol,
key.name: "P1",
key.usr: "s:5cake12P1P",
- key.offset: 798,
+ key.offset: 828,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
- key.offset: 808,
+ key.offset: 838,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
- key.offset: 813,
+ key.offset: 843,
key.length: 3
}
]
@@ -666,7 +691,7 @@
key.name: "InitClassImpl",
key.usr: "s:5cake113InitClassImplC",
key.offset: 26,
- key.length: 88,
+ key.length: 94,
key.fully_annotated_decl: "<decl.class><syntaxtype.keyword>class</syntaxtype.keyword> <decl.name>InitClassImpl</decl.name> : <ref.protocol usr=\"s:5cake19InitProtoP\">InitProto</ref.protocol></decl.class>",
key.conforms: [
{
@@ -680,7 +705,7 @@
key.kind: source.lang.swift.decl.function.constructor,
key.name: "init(x:)",
key.usr: "s:5cake113InitClassImplC1xACSi_tcfc",
- key.offset: 65,
+ key.offset: 71,
key.length: 23,
key.fully_annotated_decl: "<decl.function.constructor><syntaxtype.keyword>required</syntaxtype.keyword> <syntaxtype.keyword>init</syntaxtype.keyword>(<decl.var.parameter><decl.var.parameter.argument_label>x</decl.var.parameter.argument_label>: <decl.var.parameter.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.parameter.type></decl.var.parameter>)</decl.function.constructor>",
key.conforms: [
@@ -695,7 +720,7 @@
key.kind: source.lang.swift.decl.var.local,
key.keyword: "x",
key.name: "x",
- key.offset: 84,
+ key.offset: 90,
key.length: 3
}
]
@@ -705,7 +730,7 @@
key.name: "init()",
key.usr: "s:5cake19InitProtoPAAExycfc::SYNTHESIZED::s:5cake113InitClassImplC",
key.original_usr: "s:5cake19InitProtoPAAExycfc",
- key.offset: 94,
+ key.offset: 100,
key.length: 18,
key.fully_annotated_decl: "<decl.function.constructor><syntaxtype.keyword>convenience</syntaxtype.keyword> <syntaxtype.keyword>init</syntaxtype.keyword>()</decl.function.constructor>"
}
@@ -715,7 +740,7 @@
key.kind: source.lang.swift.decl.protocol,
key.name: "InitProto",
key.usr: "s:5cake19InitProtoP",
- key.offset: 116,
+ key.offset: 122,
key.length: 42,
key.fully_annotated_decl: "<decl.protocol><syntaxtype.keyword>protocol</syntaxtype.keyword> <decl.name>InitProto</decl.name></decl.protocol>",
key.entities: [
@@ -723,7 +748,7 @@
key.kind: source.lang.swift.decl.function.constructor,
key.name: "init(x:)",
key.usr: "s:5cake19InitProtoP1xxSi_tcfc",
- key.offset: 142,
+ key.offset: 148,
key.length: 14,
key.fully_annotated_decl: "<decl.function.constructor><syntaxtype.keyword>init</syntaxtype.keyword>(<decl.var.parameter><decl.var.parameter.argument_label>x</decl.var.parameter.argument_label>: <decl.var.parameter.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.parameter.type></decl.var.parameter>)</decl.function.constructor>",
key.entities: [
@@ -731,7 +756,7 @@
key.kind: source.lang.swift.decl.var.local,
key.keyword: "x",
key.name: "x",
- key.offset: 152,
+ key.offset: 158,
key.length: 3
}
]
@@ -740,7 +765,7 @@
},
{
key.kind: source.lang.swift.decl.extension.protocol,
- key.offset: 160,
+ key.offset: 166,
key.length: 35,
key.fully_annotated_generic_signature: "<<decl.generic_type_param usr=\"s:5cake19InitProtoP4Selfxmfp\"><decl.generic_type_param.name>Self</decl.generic_type_param.name></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:5cake19InitProtoP4Selfxmfp\">Self</ref.generic_type_param> : <ref.protocol usr=\"s:5cake19InitProtoP\">InitProto</ref.protocol></decl.generic_type_requirement>>",
key.extends: {
@@ -753,7 +778,7 @@
key.kind: source.lang.swift.decl.function.constructor,
key.name: "init()",
key.usr: "s:5cake19InitProtoPAAExycfc",
- key.offset: 187,
+ key.offset: 193,
key.length: 6,
key.fully_annotated_decl: "<decl.function.constructor><syntaxtype.keyword>init</syntaxtype.keyword>()</decl.function.constructor>"
}
@@ -763,8 +788,8 @@
key.kind: source.lang.swift.decl.struct,
key.name: "InitStructImpl",
key.usr: "s:5cake114InitStructImplV",
- key.offset: 197,
- key.length: 69,
+ key.offset: 203,
+ key.length: 75,
key.fully_annotated_decl: "<decl.struct><syntaxtype.keyword>struct</syntaxtype.keyword> <decl.name>InitStructImpl</decl.name> : <ref.protocol usr=\"s:5cake19InitProtoP\">InitProto</ref.protocol></decl.struct>",
key.conforms: [
{
@@ -778,7 +803,7 @@
key.kind: source.lang.swift.decl.function.constructor,
key.name: "init(x:)",
key.usr: "s:5cake114InitStructImplV1xACSi_tcfc",
- key.offset: 238,
+ key.offset: 250,
key.length: 14,
key.fully_annotated_decl: "<decl.function.constructor><syntaxtype.keyword>init</syntaxtype.keyword>(<decl.var.parameter><decl.var.parameter.argument_label>x</decl.var.parameter.argument_label>: <decl.var.parameter.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.parameter.type></decl.var.parameter>)</decl.function.constructor>",
key.conforms: [
@@ -793,7 +818,7 @@
key.kind: source.lang.swift.decl.var.local,
key.keyword: "x",
key.name: "x",
- key.offset: 248,
+ key.offset: 260,
key.length: 3
}
]
@@ -803,7 +828,7 @@
key.name: "init()",
key.usr: "s:5cake19InitProtoPAAExycfc::SYNTHESIZED::s:5cake114InitStructImplV",
key.original_usr: "s:5cake19InitProtoPAAExycfc",
- key.offset: 258,
+ key.offset: 270,
key.length: 6,
key.fully_annotated_decl: "<decl.function.constructor><syntaxtype.keyword>init</syntaxtype.keyword>()</decl.function.constructor>"
}
@@ -813,7 +838,7 @@
key.kind: source.lang.swift.decl.protocol,
key.name: "P1",
key.usr: "s:5cake12P1P",
- key.offset: 268,
+ key.offset: 280,
key.length: 167,
key.fully_annotated_decl: "<decl.protocol><syntaxtype.keyword>protocol</syntaxtype.keyword> <decl.name>P1</decl.name></decl.protocol>",
key.entities: [
@@ -821,7 +846,7 @@
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "foo1()",
key.usr: "s:5cake12P1P4foo1yyF",
- key.offset: 287,
+ key.offset: 299,
key.length: 11,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>foo1</decl.name>()</decl.function.method.instance>"
},
@@ -829,7 +854,7 @@
key.kind: source.lang.swift.decl.var.instance,
key.name: "Ins",
key.usr: "s:5cake12P1P3InsSivp",
- key.offset: 304,
+ key.offset: 316,
key.length: 24,
key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>Ins</decl.name>: <decl.var.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> <syntaxtype.keyword>set</syntaxtype.keyword> }</decl.var.instance>"
},
@@ -837,7 +862,7 @@
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "foo2(a:b:)",
key.usr: "s:5cake12P1P4foo21a1bySi_SitF",
- key.offset: 334,
+ key.offset: 346,
key.length: 29,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>foo2</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>a</decl.var.parameter.argument_label>: <decl.var.parameter.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.parameter.type></decl.var.parameter>, <decl.var.parameter><decl.var.parameter.argument_label>b</decl.var.parameter.argument_label>: <decl.var.parameter.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.parameter.type></decl.var.parameter>)</decl.function.method.instance>",
key.entities: [
@@ -845,14 +870,14 @@
key.kind: source.lang.swift.decl.var.local,
key.keyword: "a",
key.name: "a",
- key.offset: 349,
+ key.offset: 361,
key.length: 3
},
{
key.kind: source.lang.swift.decl.var.local,
key.keyword: "b",
key.name: "b",
- key.offset: 359,
+ key.offset: 371,
key.length: 3
}
]
@@ -861,7 +886,7 @@
key.kind: source.lang.swift.decl.function.subscript,
key.name: "subscript(_:)",
key.usr: "s:5cake12P1PyS2icip",
- key.offset: 369,
+ key.offset: 381,
key.length: 38,
key.fully_annotated_decl: "<decl.function.subscript><syntaxtype.keyword>subscript</syntaxtype.keyword>(<decl.var.parameter><decl.var.parameter.name>a</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.parameter.type></decl.var.parameter>) -> <decl.function.returntype><ref.struct usr=\"s:Si\">Int</ref.struct></decl.function.returntype> { <syntaxtype.keyword>get</syntaxtype.keyword> <syntaxtype.keyword>set</syntaxtype.keyword> }</decl.function.subscript>",
key.entities: [
@@ -869,7 +894,7 @@
key.kind: source.lang.swift.decl.var.local,
key.keyword: "_",
key.name: "a",
- key.offset: 384,
+ key.offset: 396,
key.length: 3
}
]
@@ -878,7 +903,7 @@
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "fooConstraint()",
key.usr: "s:5cake12P1P13fooConstraintyyF",
- key.offset: 413,
+ key.offset: 425,
key.length: 20,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooConstraint</decl.name>()</decl.function.method.instance>"
}
@@ -888,8 +913,8 @@
key.kind: source.lang.swift.decl.protocol,
key.name: "P2",
key.usr: "s:5cake12P2P",
- key.offset: 437,
- key.length: 54,
+ key.offset: 449,
+ key.length: 60,
key.fully_annotated_decl: "<decl.protocol><syntaxtype.keyword>protocol</syntaxtype.keyword> <decl.name>P2</decl.name> : <ref.protocol usr=\"s:5cake12P1P\">P1</ref.protocol></decl.protocol>",
key.conforms: [
{
@@ -903,7 +928,7 @@
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "bar1()",
key.usr: "s:5cake12P2P4bar1yyF",
- key.offset: 461,
+ key.offset: 479,
key.length: 11,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>bar1</decl.name>()</decl.function.method.instance>"
},
@@ -911,7 +936,7 @@
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "bar2()",
key.usr: "s:5cake12P2P4bar2yyF",
- key.offset: 478,
+ key.offset: 496,
key.length: 11,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>bar2</decl.name>()</decl.function.method.instance>"
}
@@ -919,7 +944,7 @@
},
{
key.kind: source.lang.swift.decl.extension.protocol,
- key.offset: 493,
+ key.offset: 511,
key.length: 118,
key.fully_annotated_generic_signature: "<<decl.generic_type_param usr=\"s:5cake12P2P4Selfxmfp\"><decl.generic_type_param.name>Self</decl.generic_type_param.name></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:5cake12P2P4Selfxmfp\">Self</ref.generic_type_param> : <ref.protocol usr=\"s:5cake12P2P\">P2</ref.protocol></decl.generic_type_requirement>>",
key.extends: {
@@ -933,7 +958,7 @@
key.name: "foo1()",
key.usr: "s:5cake12P2PAAE4foo1yyF",
key.default_implementation_of: "s:5cake12P1P4foo1yyF",
- key.offset: 513,
+ key.offset: 531,
key.length: 11,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>foo1</decl.name>()</decl.function.method.instance>"
},
@@ -942,7 +967,7 @@
key.name: "Ins",
key.usr: "s:5cake12P2PAAE3InsSivp",
key.default_implementation_of: "s:5cake12P1P3InsSivp",
- key.offset: 530,
+ key.offset: 548,
key.length: 12,
key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>Ins</decl.name>: <decl.var.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> <syntaxtype.keyword>set</syntaxtype.keyword> }</decl.var.instance>"
},
@@ -951,7 +976,7 @@
key.name: "foo2(a:b:)",
key.usr: "s:5cake12P2PAAE4foo21a1bySi_SitF",
key.default_implementation_of: "s:5cake12P1P4foo21a1bySi_SitF",
- key.offset: 548,
+ key.offset: 566,
key.length: 29,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>foo2</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>a</decl.var.parameter.argument_label>: <decl.var.parameter.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.parameter.type></decl.var.parameter>, <decl.var.parameter><decl.var.parameter.argument_label>b</decl.var.parameter.argument_label>: <decl.var.parameter.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.parameter.type></decl.var.parameter>)</decl.function.method.instance>",
key.entities: [
@@ -959,14 +984,14 @@
key.kind: source.lang.swift.decl.var.local,
key.keyword: "a",
key.name: "a",
- key.offset: 563,
+ key.offset: 581,
key.length: 3
},
{
key.kind: source.lang.swift.decl.var.local,
key.keyword: "b",
key.name: "b",
- key.offset: 573,
+ key.offset: 591,
key.length: 3
}
]
@@ -976,7 +1001,7 @@
key.name: "subscript(_:)",
key.usr: "s:5cake12P2PAAEyS2icip",
key.default_implementation_of: "s:5cake12P1PyS2icip",
- key.offset: 583,
+ key.offset: 601,
key.length: 26,
key.fully_annotated_decl: "<decl.function.subscript><syntaxtype.keyword>subscript</syntaxtype.keyword>(<decl.var.parameter><decl.var.parameter.name>a</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.parameter.type></decl.var.parameter>) -> <decl.function.returntype><ref.struct usr=\"s:Si\">Int</ref.struct></decl.function.returntype> { <syntaxtype.keyword>get</syntaxtype.keyword> <syntaxtype.keyword>set</syntaxtype.keyword> }</decl.function.subscript>",
key.entities: [
@@ -984,7 +1009,7 @@
key.kind: source.lang.swift.decl.var.local,
key.keyword: "_",
key.name: "a",
- key.offset: 598,
+ key.offset: 616,
key.length: 3
}
]
@@ -998,8 +1023,8 @@
key.description: "Self : P3"
}
],
- key.offset: 613,
- key.length: 58,
+ key.offset: 631,
+ key.length: 64,
key.fully_annotated_generic_signature: "<<decl.generic_type_param usr=\"s:5cake12P2PA2A2P3RzrlE4Selfxmfp\"><decl.generic_type_param.name>Self</decl.generic_type_param.name></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:5cake12P2PA2A2P3RzrlE4Selfxmfp\">Self</ref.generic_type_param> : <ref.protocol usr=\"s:5cake12P2P\">P2</ref.protocol></decl.generic_type_requirement>, <decl.generic_type_requirement><ref.generic_type_param usr=\"s:5cake12P2PA2A2P3RzrlE4Selfxmfp\">Self</ref.generic_type_param> : <ref.protocol usr=\"s:5cake12P3P\">P3</ref.protocol></decl.generic_type_requirement>>",
key.extends: {
key.kind: source.lang.swift.ref.protocol,
@@ -1012,7 +1037,7 @@
key.name: "fooConstraint()",
key.usr: "s:5cake12P2PA2A2P3RzrlE13fooConstraintyyF",
key.default_implementation_of: "s:5cake12P1P13fooConstraintyyF",
- key.offset: 649,
+ key.offset: 673,
key.length: 20,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooConstraint</decl.name>()</decl.function.method.instance>"
}
@@ -1022,7 +1047,7 @@
key.kind: source.lang.swift.decl.protocol,
key.name: "P3",
key.usr: "s:5cake12P3P",
- key.offset: 673,
+ key.offset: 697,
key.length: 38,
key.fully_annotated_decl: "<decl.protocol><syntaxtype.keyword>protocol</syntaxtype.keyword> <decl.name>P3</decl.name></decl.protocol>",
key.entities: [
@@ -1030,7 +1055,7 @@
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "p3Required()",
key.usr: "s:5cake12P3P10p3RequiredyyF",
- key.offset: 692,
+ key.offset: 716,
key.length: 17,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>p3Required</decl.name>()</decl.function.method.instance>"
}
@@ -1051,7 +1076,7 @@
key.description: "Key : Hashable"
}
],
- key.offset: 713,
+ key.offset: 737,
key.length: 45,
key.fully_annotated_generic_signature: "<<decl.generic_type_param usr=\"s:SD3Keyxmfp\"><decl.generic_type_param.name>Key</decl.generic_type_param.name></decl.generic_type_param>, <decl.generic_type_param usr=\"s:SD5Valueq_mfp\"><decl.generic_type_param.name>Value</decl.generic_type_param.name></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement>Key : <ref.protocol usr=\"s:SH\">Hashable</ref.protocol></decl.generic_type_requirement>>",
key.extends: {
@@ -1064,7 +1089,7 @@
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "foo()",
key.usr: "s:SD4KeysV5cake1E3fooyyF",
- key.offset: 746,
+ key.offset: 770,
key.length: 10,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>foo</decl.name>()</decl.function.method.instance>"
}
@@ -1080,8 +1105,8 @@
key.description: "Key : P1"
}
],
- key.offset: 760,
- key.length: 60,
+ key.offset: 784,
+ key.length: 66,
key.fully_annotated_generic_signature: "<<decl.generic_type_param usr=\"s:SD4KeysV5cake1AC2P1RzrlE3Keyxmfp\"><decl.generic_type_param.name>Key</decl.generic_type_param.name></decl.generic_type_param>, <decl.generic_type_param usr=\"s:SD4KeysV5cake1AC2P1RzrlE5Valueq_mfp\"><decl.generic_type_param.name>Value</decl.generic_type_param.name></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement>Key : <ref.protocol usr=\"s:SH\">Hashable</ref.protocol></decl.generic_type_requirement>, <decl.generic_type_requirement>Key : <ref.protocol usr=\"s:5cake12P1P\">P1</ref.protocol></decl.generic_type_requirement>>",
key.extends: {
key.kind: source.lang.swift.ref.struct,
@@ -1093,7 +1118,7 @@
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "bar()",
key.usr: "s:SD4KeysV5cake1AC2P1RzrlE3baryyF",
- key.offset: 808,
+ key.offset: 838,
key.length: 10,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>bar</decl.name>()</decl.function.method.instance>"
}
diff --git a/test/api-digester/Outputs/Cake-abi.txt b/test/api-digester/Outputs/Cake-abi.txt
index 1aaa9f2..0fb4f38 100644
--- a/test/api-digester/Outputs/Cake-abi.txt
+++ b/test/api-digester/Outputs/Cake-abi.txt
@@ -1,7 +1,7 @@
/* Generic Signature Changes */
cake1: Func P1.P1Constraint() has generic signature change from <τ_0_0 where τ_0_0 : P1, τ_0_0 : P2> to <τ_0_0 where τ_0_0 : P1>
-cake1: Protocol P3 has generic signature change from <τ_0_0 : P1, τ_0_0 : P2> to <τ_0_0 : P1, τ_0_0 : P4>
+cake1: Protocol P3 has generic signature change from <τ_0_0 : cake.P1, τ_0_0 : cake.P2> to <τ_0_0 : cake.P1, τ_0_0 : cake.P4>
/* RawRepresentable Changes */
diff --git a/test/api-digester/Outputs/Cake.txt b/test/api-digester/Outputs/Cake.txt
index b415e2c..222487d 100644
--- a/test/api-digester/Outputs/Cake.txt
+++ b/test/api-digester/Outputs/Cake.txt
@@ -1,7 +1,7 @@
/* Generic Signature Changes */
cake1: Func P1.P1Constraint() has generic signature change from <Self where Self : P1, Self : P2> to <Self where Self : P1>
-cake1: Protocol P3 has generic signature change from <Self : P1, Self : P2> to <Self : P1, Self : P4>
+cake1: Protocol P3 has generic signature change from <Self : cake.P1, Self : cake.P2> to <Self : cake.P1, Self : cake.P4>
/* RawRepresentable Changes */
diff --git a/test/api-digester/Outputs/cake-abi.json b/test/api-digester/Outputs/cake-abi.json
index d90815b..599c3a9 100644
--- a/test/api-digester/Outputs/cake-abi.json
+++ b/test/api-digester/Outputs/cake-abi.json
@@ -59,7 +59,7 @@
"declKind": "Protocol",
"usr": "s:4cake2P3P",
"moduleName": "cake",
- "genericSig": "<τ_0_0 : P1, τ_0_0 : P2>",
+ "genericSig": "<τ_0_0 : cake.P1, τ_0_0 : cake.P2>",
"conformances": [
{
"kind": "Conformance",
@@ -1057,7 +1057,7 @@
"declKind": "Protocol",
"usr": "s:4cake4PSubP",
"moduleName": "cake",
- "genericSig": "<τ_0_0 : PSuper>",
+ "genericSig": "<τ_0_0 : cake.PSuper>",
"conformances": [
{
"kind": "Conformance",
diff --git a/test/api-digester/Outputs/cake.json b/test/api-digester/Outputs/cake.json
index c37af7b..a5b0dfb 100644
--- a/test/api-digester/Outputs/cake.json
+++ b/test/api-digester/Outputs/cake.json
@@ -59,7 +59,7 @@
"declKind": "Protocol",
"usr": "s:4cake2P3P",
"moduleName": "cake",
- "genericSig": "<Self : P1, Self : P2>",
+ "genericSig": "<Self : cake.P1, Self : cake.P2>",
"conformances": [
{
"kind": "Conformance",
@@ -1004,7 +1004,7 @@
"declKind": "Protocol",
"usr": "s:4cake4PSubP",
"moduleName": "cake",
- "genericSig": "<Self : PSuper>",
+ "genericSig": "<Self : cake.PSuper>",
"conformances": [
{
"kind": "Conformance",
diff --git a/test/api-digester/compare-dump.swift b/test/api-digester/compare-dump.swift
index 6b79bad..daf7dd0 100644
--- a/test/api-digester/compare-dump.swift
+++ b/test/api-digester/compare-dump.swift
@@ -1,18 +1,19 @@
-// RUN: %empty-directory(%t.mod)
+// RUN: %empty-directory(%t.mod1)
+// RUN: %empty-directory(%t.mod2)
// RUN: %empty-directory(%t.sdk)
// RUN: %empty-directory(%t.module-cache)
-// RUN: %swift -emit-module -o %t.mod/cake1.swiftmodule %S/Inputs/cake1.swift -parse-as-library -enable-library-evolution -I %S/Inputs/APINotesLeft %clang-importer-sdk-nosource
-// RUN: %swift -emit-module -o %t.mod/cake2.swiftmodule %S/Inputs/cake2.swift -parse-as-library -enable-library-evolution -I %S/Inputs/APINotesRight %clang-importer-sdk-nosource
-// RUN: %api-digester -dump-sdk -module cake1 -o %t.dump1.json -module-cache-path %t.module-cache %clang-importer-sdk-nosource -I %t.mod -I %S/Inputs/APINotesLeft
-// RUN: %api-digester -dump-sdk -module cake2 -o %t.dump2.json -module-cache-path %t.module-cache %clang-importer-sdk-nosource -I %t.mod -I %S/Inputs/APINotesRight
+// RUN: %swift -emit-module -o %t.mod1/cake.swiftmodule %S/Inputs/cake1.swift -parse-as-library -enable-library-evolution -I %S/Inputs/APINotesLeft %clang-importer-sdk-nosource
+// RUN: %swift -emit-module -o %t.mod2/cake.swiftmodule %S/Inputs/cake2.swift -parse-as-library -enable-library-evolution -I %S/Inputs/APINotesRight %clang-importer-sdk-nosource
+// RUN: %api-digester -dump-sdk -module cake -o - -module-cache-path %t.module-cache %clang-importer-sdk-nosource -I %t.mod1 -I %S/Inputs/APINotesLeft | sed 's/"cake"/"cake1"/' > %t.dump1.json
+// RUN: %api-digester -dump-sdk -module cake -o - -module-cache-path %t.module-cache %clang-importer-sdk-nosource -I %t.mod2 -I %S/Inputs/APINotesLeft | sed 's/"cake"/"cake2"/' > %t.dump2.json
// RUN: %api-digester -diagnose-sdk -print-module --input-paths %t.dump1.json -input-paths %t.dump2.json -o %t.result
// RUN: %clang -E -P -x c %S/Outputs/Cake.txt -o - | sed '/^\s*$/d' > %t.expected
// RUN: %clang -E -P -x c %t.result -o - | sed '/^\s*$/d' > %t.result.tmp
// RUN: diff -u %t.expected %t.result.tmp
-// RUN: %api-digester -dump-sdk -module cake1 -o %t.dump1.json -module-cache-path %t.module-cache %clang-importer-sdk-nosource -I %t.mod -I %S/Inputs/APINotesLeft -abi
-// RUN: %api-digester -dump-sdk -module cake2 -o %t.dump2.json -module-cache-path %t.module-cache %clang-importer-sdk-nosource -I %t.mod -I %S/Inputs/APINotesRight -abi
+// RUN: %api-digester -dump-sdk -module cake -o - -module-cache-path %t.module-cache %clang-importer-sdk-nosource -I %t.mod1 -I %S/Inputs/APINotesLeft -abi | sed 's/"cake"/"cake1"/' > %t.dump1.json
+// RUN: %api-digester -dump-sdk -module cake -o - -module-cache-path %t.module-cache %clang-importer-sdk-nosource -I %t.mod2 -I %S/Inputs/APINotesLeft -abi | sed 's/"cake"/"cake2"/' > %t.dump2.json
// RUN: %api-digester -diagnose-sdk -print-module --input-paths %t.dump1.json -input-paths %t.dump2.json -abi -o %t.result
// RUN: %clang -E -P -x c %S/Outputs/Cake-abi.txt -o - | sed '/^\s*$/d' > %t.abi.expected
diff --git a/test/decl/import/import.swift b/test/decl/import/import.swift
index 5bcecc4..06cf3c0 100644
--- a/test/decl/import/import.swift
+++ b/test/decl/import/import.swift
@@ -2,7 +2,7 @@
// RUN: echo "public struct X {}; public var x = X()" | %target-swift-frontend -module-name import_builtin -parse-stdlib -emit-module -o %t -
// RUN: echo "public func foo() -> Int { return false }" > %t/import_text.swift
// RUN: echo "public func phoûx() -> Int { return false }" > %t/français.swift
-// RUN: %target-swift-frontend -typecheck %s -I %t -sdk "" -enable-source-import -module-name main -verify -show-diagnostics-after-fatal -verify-ignore-unknown
+// RUN: %target-swift-frontend -typecheck %s -I %t -I %S/../../Inputs/ -sdk "" -enable-source-import -module-name main -verify -show-diagnostics-after-fatal -verify-ignore-unknown
// -verify-ignore-unknown is for:
// <unknown>:0: error: unexpected note produced: did you forget to set an SDK using -sdk or SDKROOT?
@@ -68,3 +68,5 @@
import func français.phoûx
import main // expected-warning {{file 'import.swift' is part of module 'main'; ignoring import}}
+
+@_exported @_implementationOnly import empty // expected-error {{module 'empty' cannot be both exported and implementation-only}} {{12-33=}}
diff --git a/tools/SourceKit/lib/SwiftLang/CodeCompletionOrganizer.cpp b/tools/SourceKit/lib/SwiftLang/CodeCompletionOrganizer.cpp
index f58e037..6f07d4d 100644
--- a/tools/SourceKit/lib/SwiftLang/CodeCompletionOrganizer.cpp
+++ b/tools/SourceKit/lib/SwiftLang/CodeCompletionOrganizer.cpp
@@ -338,8 +338,11 @@
// Private imports from this module.
// FIXME: only the private imports from the current source file.
+ ModuleDecl::ImportFilter importFilter;
+ importFilter |= ModuleDecl::ImportFilterKind::Private;
+ importFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
SmallVector<ModuleDecl::ImportedModule, 16> mainImports;
- main->getImportedModules(mainImports, ModuleDecl::ImportFilter::Private);
+ main->getImportedModules(mainImports, importFilter);
for (auto &import : mainImports) {
uint8_t depth = 1;
if (auxImports.count(import.second->getName().str()))
diff --git a/tools/SourceKit/lib/SwiftLang/SwiftASTManager.cpp b/tools/SourceKit/lib/SwiftLang/SwiftASTManager.cpp
index 065a256..8d3650c 100644
--- a/tools/SourceKit/lib/SwiftLang/SwiftASTManager.cpp
+++ b/tools/SourceKit/lib/SwiftLang/SwiftASTManager.cpp
@@ -788,8 +788,16 @@
return;
auto ClangModuleLoader = TopMod->getASTContext().getClangModuleLoader();
+
+ ModuleDecl::ImportFilter ImportFilter;
+ ImportFilter |= ModuleDecl::ImportFilterKind::Public;
+ ImportFilter |= ModuleDecl::ImportFilterKind::Private;
+ if (Visited.empty()) {
+ // Only collect implementation-only dependencies from the main module.
+ ImportFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
+ }
SmallVector<ModuleDecl::ImportedModule, 8> Imports;
- TopMod->getImportedModules(Imports, ModuleDecl::ImportFilter::All);
+ TopMod->getImportedModules(Imports, ImportFilter);
for (auto Import : Imports) {
ModuleDecl *Mod = Import.second;
diff --git a/tools/SourceKit/lib/SwiftLang/SwiftIndexing.cpp b/tools/SourceKit/lib/SwiftLang/SwiftIndexing.cpp
index 1631338..cc56684 100644
--- a/tools/SourceKit/lib/SwiftLang/SwiftIndexing.cpp
+++ b/tools/SourceKit/lib/SwiftLang/SwiftIndexing.cpp
@@ -190,7 +190,9 @@
// documentation file.
// FIXME: refactor the frontend to provide an easy way to figure out the
// correct filename here.
- auto FUnit = Loader->loadAST(*Mod, None, std::move(Buf), nullptr);
+ auto FUnit = Loader->loadAST(*Mod, None, std::move(Buf), nullptr,
+ /*isFramework*/false,
+ /*treatAsPartialModule*/false);
// FIXME: Not knowing what went wrong is pretty bad. loadModule() should be
// more modular, rather than emitting diagnostics itself.
diff --git a/tools/swift-api-digester/CMakeLists.txt b/tools/swift-api-digester/CMakeLists.txt
index a6fba59..12cc78e 100644
--- a/tools/swift-api-digester/CMakeLists.txt
+++ b/tools/swift-api-digester/CMakeLists.txt
@@ -3,6 +3,7 @@
ModuleAnalyzerNodes.cpp
ModuleDiagsConsumer.cpp
SWIFT_COMPONENT tools
+ SWIFT_COMPONENT toolchain-tools
)
target_link_libraries(swift-api-digester
PRIVATE
diff --git a/tools/swift-ide-test/swift-ide-test.cpp b/tools/swift-ide-test/swift-ide-test.cpp
index 4571c27..bbb12ef 100644
--- a/tools/swift-ide-test/swift-ide-test.cpp
+++ b/tools/swift-ide-test/swift-ide-test.cpp
@@ -2644,7 +2644,8 @@
llvm::outs() << ":\n";
scratch.clear();
- next.second->getImportedModules(scratch, ModuleDecl::ImportFilter::Public);
+ next.second->getImportedModules(scratch,
+ ModuleDecl::ImportFilterKind::Public);
for (auto &import : scratch) {
llvm::outs() << "\t" << import.second->getName();
for (auto accessPathPiece : import.first) {
diff --git a/utils/api_checker/CMakeLists.txt b/utils/api_checker/CMakeLists.txt
index 6d8dc1d..56e2250 100644
--- a/utils/api_checker/CMakeLists.txt
+++ b/utils/api_checker/CMakeLists.txt
@@ -1,6 +1,6 @@
-swift_install_in_component(tools
+swift_install_in_either_component(tools toolchain-tools
FILES "swift-api-checker.py"
DESTINATION "bin")
-swift_install_in_component(tools
+swift_install_in_either_component(tools toolchain-tools
DIRECTORY "sdk-module-lists"
DESTINATION "bin")
diff --git a/utils/build-presets.ini b/utils/build-presets.ini
index 5fdcce9..76626b0 100644
--- a/utils/build-presets.ini
+++ b/utils/build-presets.ini
@@ -16,7 +16,7 @@
[preset: mixin_buildbot_install_components]
dash-dash
-swift-install-components=compiler;clang-builtin-headers;stdlib;sdk-overlay;parser-lib;editor-integration;tools;testsuite-tools;sourcekit-xpc-service;swift-remote-mirror;swift-remote-mirror-headers;
+swift-install-components=compiler;clang-builtin-headers;stdlib;sdk-overlay;parser-lib;editor-integration;tools;toolchain-tools;testsuite-tools;sourcekit-xpc-service;swift-remote-mirror;swift-remote-mirror-headers;
[preset: mixin_buildbot_trunk_base]
@@ -736,7 +736,7 @@
install-xctest
install-libicu
install-prefix=/usr
-swift-install-components=autolink-driver;compiler;clang-resource-dir-symlink;stdlib;swift-remote-mirror;sdk-overlay;parser-lib;license;sourcekit-inproc
+swift-install-components=autolink-driver;compiler;clang-resource-dir-symlink;stdlib;swift-remote-mirror;sdk-overlay;parser-lib;toolchain-tools;license;sourcekit-inproc
llvm-install-components=llvm-cov;llvm-profdata;IndexStore;clang;clang-headers;compiler-rt;clangd
install-libcxx
build-swift-static-stdlib
@@ -1129,7 +1129,7 @@
# If someone uses this for incremental builds, force reconfiguration.
reconfigure
-swift-install-components=compiler;clang-resource-dir-symlink;stdlib;sdk-overlay;parser-lib;license;sourcekit-xpc-service;swift-remote-mirror;swift-remote-mirror-headers
+swift-install-components=compiler;clang-resource-dir-symlink;stdlib;sdk-overlay;parser-lib;toolchain-tools;license;sourcekit-xpc-service;swift-remote-mirror;swift-remote-mirror-headers
llvm-install-components=llvm-cov;llvm-profdata;IndexStore;clang;clang-headers;compiler-rt;clangd
install-libcxx