mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
DependenciesScanner: report user module version for textual Swift interfaces
This commit is contained in:
@@ -217,6 +217,10 @@ SWIFTSCAN_PUBLIC swiftscan_string_ref_t
|
|||||||
swiftscan_swift_textual_detail_get_module_cache_key(
|
swiftscan_swift_textual_detail_get_module_cache_key(
|
||||||
swiftscan_module_details_t details);
|
swiftscan_module_details_t details);
|
||||||
|
|
||||||
|
SWIFTSCAN_PUBLIC swiftscan_string_ref_t
|
||||||
|
swiftscan_swift_textual_detail_get_user_module_version(
|
||||||
|
swiftscan_module_details_t details);
|
||||||
|
|
||||||
//=== Swift Binary Module Details query APIs ------------------------------===//
|
//=== Swift Binary Module Details query APIs ------------------------------===//
|
||||||
|
|
||||||
SWIFTSCAN_PUBLIC swiftscan_string_ref_t
|
SWIFTSCAN_PUBLIC swiftscan_string_ref_t
|
||||||
|
|||||||
@@ -294,12 +294,16 @@ public:
|
|||||||
/// Details common to Swift textual (interface or source) modules
|
/// Details common to Swift textual (interface or source) modules
|
||||||
CommonSwiftTextualModuleDependencyDetails textualModuleDetails;
|
CommonSwiftTextualModuleDependencyDetails textualModuleDetails;
|
||||||
|
|
||||||
|
/// The user module version of this textual module interface.
|
||||||
|
const std::string userModuleVersion;
|
||||||
|
|
||||||
SwiftInterfaceModuleDependenciesStorage(
|
SwiftInterfaceModuleDependenciesStorage(
|
||||||
StringRef moduleOutputPath, StringRef swiftInterfaceFile,
|
StringRef moduleOutputPath, StringRef swiftInterfaceFile,
|
||||||
ArrayRef<StringRef> compiledModuleCandidates,
|
ArrayRef<StringRef> compiledModuleCandidates,
|
||||||
ArrayRef<StringRef> buildCommandLine, ArrayRef<LinkLibrary> linkLibraries,
|
ArrayRef<StringRef> buildCommandLine, ArrayRef<LinkLibrary> linkLibraries,
|
||||||
ArrayRef<StringRef> extraPCMArgs, StringRef contextHash, bool isFramework,
|
ArrayRef<StringRef> extraPCMArgs, StringRef contextHash, bool isFramework,
|
||||||
bool isStatic, StringRef RootID, StringRef moduleCacheKey)
|
bool isStatic, StringRef RootID, StringRef moduleCacheKey,
|
||||||
|
StringRef userModuleVersion)
|
||||||
: ModuleDependencyInfoStorageBase(ModuleDependencyKind::SwiftInterface,
|
: ModuleDependencyInfoStorageBase(ModuleDependencyKind::SwiftInterface,
|
||||||
linkLibraries, moduleCacheKey),
|
linkLibraries, moduleCacheKey),
|
||||||
moduleOutputPath(moduleOutputPath),
|
moduleOutputPath(moduleOutputPath),
|
||||||
@@ -307,7 +311,8 @@ public:
|
|||||||
compiledModuleCandidates(compiledModuleCandidates.begin(),
|
compiledModuleCandidates(compiledModuleCandidates.begin(),
|
||||||
compiledModuleCandidates.end()),
|
compiledModuleCandidates.end()),
|
||||||
contextHash(contextHash), isFramework(isFramework), isStatic(isStatic),
|
contextHash(contextHash), isFramework(isFramework), isStatic(isStatic),
|
||||||
textualModuleDetails(extraPCMArgs, buildCommandLine, RootID) {}
|
textualModuleDetails(extraPCMArgs, buildCommandLine, RootID),
|
||||||
|
userModuleVersion(userModuleVersion) {}
|
||||||
|
|
||||||
ModuleDependencyInfoStorageBase *clone() const override {
|
ModuleDependencyInfoStorageBase *clone() const override {
|
||||||
return new SwiftInterfaceModuleDependenciesStorage(*this);
|
return new SwiftInterfaceModuleDependenciesStorage(*this);
|
||||||
@@ -592,12 +597,14 @@ public:
|
|||||||
ArrayRef<StringRef> compiledCandidates, ArrayRef<StringRef> buildCommands,
|
ArrayRef<StringRef> compiledCandidates, ArrayRef<StringRef> buildCommands,
|
||||||
ArrayRef<LinkLibrary> linkLibraries, ArrayRef<StringRef> extraPCMArgs,
|
ArrayRef<LinkLibrary> linkLibraries, ArrayRef<StringRef> extraPCMArgs,
|
||||||
StringRef contextHash, bool isFramework, bool isStatic,
|
StringRef contextHash, bool isFramework, bool isStatic,
|
||||||
StringRef CASFileSystemRootID, StringRef moduleCacheKey) {
|
StringRef CASFileSystemRootID, StringRef moduleCacheKey,
|
||||||
|
StringRef userModuleVersion) {
|
||||||
return ModuleDependencyInfo(
|
return ModuleDependencyInfo(
|
||||||
std::make_unique<SwiftInterfaceModuleDependenciesStorage>(
|
std::make_unique<SwiftInterfaceModuleDependenciesStorage>(
|
||||||
moduleOutputPath, swiftInterfaceFile, compiledCandidates,
|
moduleOutputPath, swiftInterfaceFile, compiledCandidates,
|
||||||
buildCommands, linkLibraries, extraPCMArgs, contextHash,
|
buildCommands, linkLibraries, extraPCMArgs, contextHash,
|
||||||
isFramework, isStatic, CASFileSystemRootID, moduleCacheKey));
|
isFramework, isStatic, CASFileSystemRootID, moduleCacheKey,
|
||||||
|
userModuleVersion));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Describe the module dependencies for a serialized or parsed Swift module.
|
/// Describe the module dependencies for a serialized or parsed Swift module.
|
||||||
|
|||||||
@@ -214,7 +214,8 @@ struct InterfaceSubContextDelegate {
|
|||||||
SourceLoc diagLoc,
|
SourceLoc diagLoc,
|
||||||
llvm::function_ref<std::error_code(ASTContext&, ModuleDecl*,
|
llvm::function_ref<std::error_code(ASTContext&, ModuleDecl*,
|
||||||
ArrayRef<StringRef>,
|
ArrayRef<StringRef>,
|
||||||
ArrayRef<StringRef>, StringRef)> action) = 0;
|
ArrayRef<StringRef>, StringRef,
|
||||||
|
StringRef)> action) = 0;
|
||||||
virtual std::error_code runInSubCompilerInstance(StringRef moduleName,
|
virtual std::error_code runInSubCompilerInstance(StringRef moduleName,
|
||||||
StringRef interfacePath,
|
StringRef interfacePath,
|
||||||
StringRef sdkPath,
|
StringRef sdkPath,
|
||||||
|
|||||||
@@ -132,6 +132,9 @@ typedef struct {
|
|||||||
|
|
||||||
/// Macro dependecies.
|
/// Macro dependecies.
|
||||||
swiftscan_macro_dependency_set_t *macro_dependencies;
|
swiftscan_macro_dependency_set_t *macro_dependencies;
|
||||||
|
|
||||||
|
/// User module version
|
||||||
|
swiftscan_string_ref_t user_module_version;
|
||||||
} swiftscan_swift_textual_details_t;
|
} swiftscan_swift_textual_details_t;
|
||||||
|
|
||||||
/// Swift modules with only a binary module file.
|
/// Swift modules with only a binary module file.
|
||||||
|
|||||||
@@ -150,7 +150,8 @@ using SwiftInterfaceModuleDetailsLayout =
|
|||||||
DependencyIDArrayIDField, // swiftOverlayDependencies
|
DependencyIDArrayIDField, // swiftOverlayDependencies
|
||||||
IdentifierIDField, // CASFileSystemRootID
|
IdentifierIDField, // CASFileSystemRootID
|
||||||
IdentifierIDField, // bridgingHeaderIncludeTree
|
IdentifierIDField, // bridgingHeaderIncludeTree
|
||||||
IdentifierIDField // moduleCacheKey
|
IdentifierIDField, // moduleCacheKey
|
||||||
|
IdentifierIDField // UserModuleVersion
|
||||||
>;
|
>;
|
||||||
|
|
||||||
using SwiftSourceModuleDetailsLayout =
|
using SwiftSourceModuleDetailsLayout =
|
||||||
|
|||||||
@@ -688,7 +688,7 @@ public:
|
|||||||
SourceLoc diagLoc,
|
SourceLoc diagLoc,
|
||||||
llvm::function_ref<std::error_code(ASTContext&, ModuleDecl*,
|
llvm::function_ref<std::error_code(ASTContext&, ModuleDecl*,
|
||||||
ArrayRef<StringRef>, ArrayRef<StringRef>,
|
ArrayRef<StringRef>, ArrayRef<StringRef>,
|
||||||
StringRef)> action) override;
|
StringRef, StringRef)> action) override;
|
||||||
std::error_code runInSubCompilerInstance(StringRef moduleName,
|
std::error_code runInSubCompilerInstance(StringRef moduleName,
|
||||||
StringRef interfacePath,
|
StringRef interfacePath,
|
||||||
StringRef sdkPath,
|
StringRef sdkPath,
|
||||||
|
|||||||
@@ -456,6 +456,9 @@ void writeJSON(llvm::raw_ostream &out,
|
|||||||
swiftTextualDeps->module_cache_key, 5,
|
swiftTextualDeps->module_cache_key, 5,
|
||||||
/*trailingComma=*/true);
|
/*trailingComma=*/true);
|
||||||
}
|
}
|
||||||
|
writeJSONSingleField(out, "userModuleVersion",
|
||||||
|
swiftTextualDeps->user_module_version, 5,
|
||||||
|
/*trailingComma=*/true);
|
||||||
writeMacroDependencies(out, swiftTextualDeps->macro_dependencies, 5,
|
writeMacroDependencies(out, swiftTextualDeps->macro_dependencies, 5,
|
||||||
/*trailingComma=*/true);
|
/*trailingComma=*/true);
|
||||||
writeJSONSingleField(out, "isFramework", swiftTextualDeps->is_framework,
|
writeJSONSingleField(out, "isFramework", swiftTextualDeps->is_framework,
|
||||||
|
|||||||
@@ -255,14 +255,15 @@ bool ModuleDependenciesCacheDeserializer::readGraph(SwiftDependencyScanningServi
|
|||||||
extraPCMArgsArrayID, contextHashID, isFramework, isStatic, bridgingHeaderFileID,
|
extraPCMArgsArrayID, contextHashID, isFramework, isStatic, bridgingHeaderFileID,
|
||||||
sourceFilesArrayID, bridgingSourceFilesArrayID,
|
sourceFilesArrayID, bridgingSourceFilesArrayID,
|
||||||
bridgingModuleDependenciesArrayID, overlayDependencyIDArrayID,
|
bridgingModuleDependenciesArrayID, overlayDependencyIDArrayID,
|
||||||
CASFileSystemRootID, bridgingHeaderIncludeTreeID, moduleCacheKeyID;
|
CASFileSystemRootID, bridgingHeaderIncludeTreeID, moduleCacheKeyID,
|
||||||
|
userModuleVersionID;
|
||||||
SwiftInterfaceModuleDetailsLayout::readRecord(
|
SwiftInterfaceModuleDetailsLayout::readRecord(
|
||||||
Scratch, outputPathFileID, interfaceFileID,
|
Scratch, outputPathFileID, interfaceFileID,
|
||||||
compiledModuleCandidatesArrayID, buildCommandLineArrayID,
|
compiledModuleCandidatesArrayID, buildCommandLineArrayID,
|
||||||
extraPCMArgsArrayID, contextHashID, isFramework, isStatic, bridgingHeaderFileID,
|
extraPCMArgsArrayID, contextHashID, isFramework, isStatic, bridgingHeaderFileID,
|
||||||
sourceFilesArrayID, bridgingSourceFilesArrayID,
|
sourceFilesArrayID, bridgingSourceFilesArrayID,
|
||||||
bridgingModuleDependenciesArrayID, overlayDependencyIDArrayID,
|
bridgingModuleDependenciesArrayID, overlayDependencyIDArrayID,
|
||||||
CASFileSystemRootID, bridgingHeaderIncludeTreeID, moduleCacheKeyID);
|
CASFileSystemRootID, bridgingHeaderIncludeTreeID, moduleCacheKeyID, userModuleVersionID);
|
||||||
|
|
||||||
auto outputModulePath = getIdentifier(outputPathFileID);
|
auto outputModulePath = getIdentifier(outputPathFileID);
|
||||||
if (!outputModulePath)
|
if (!outputModulePath)
|
||||||
@@ -304,13 +305,17 @@ bool ModuleDependenciesCacheDeserializer::readGraph(SwiftDependencyScanningServi
|
|||||||
auto moduleCacheKey = getIdentifier(moduleCacheKeyID);
|
auto moduleCacheKey = getIdentifier(moduleCacheKeyID);
|
||||||
if (!moduleCacheKeyID)
|
if (!moduleCacheKeyID)
|
||||||
llvm::report_fatal_error("Bad moduleCacheKey");
|
llvm::report_fatal_error("Bad moduleCacheKey");
|
||||||
|
auto userModuleVersion = getIdentifier(userModuleVersionID);
|
||||||
|
if (!userModuleVersion)
|
||||||
|
llvm::report_fatal_error("Bad userModuleVersion");
|
||||||
|
|
||||||
// TODO: LinkLibraries, MacroDependencies
|
// TODO: LinkLibraries, MacroDependencies
|
||||||
// Form the dependencies storage object
|
// Form the dependencies storage object
|
||||||
auto moduleDep = ModuleDependencyInfo::forSwiftInterfaceModule(
|
auto moduleDep = ModuleDependencyInfo::forSwiftInterfaceModule(
|
||||||
outputModulePath.value(), optionalSwiftInterfaceFile.value(),
|
outputModulePath.value(), optionalSwiftInterfaceFile.value(),
|
||||||
compiledCandidatesRefs, buildCommandRefs, {}, extraPCMRefs,
|
compiledCandidatesRefs, buildCommandRefs, {}, extraPCMRefs,
|
||||||
*contextHash, isFramework, isStatic, *rootFileSystemID, *moduleCacheKey);
|
*contextHash, isFramework, isStatic, *rootFileSystemID, *moduleCacheKey,
|
||||||
|
*userModuleVersion);
|
||||||
|
|
||||||
// Add imports of this module
|
// Add imports of this module
|
||||||
for (const auto &moduleName : currentModuleImports)
|
for (const auto &moduleName : currentModuleImports)
|
||||||
@@ -1007,7 +1012,8 @@ void ModuleDependenciesCacheSerializer::writeModuleInfo(
|
|||||||
getIdentifier(swiftTextDeps->textualModuleDetails.CASFileSystemRootID),
|
getIdentifier(swiftTextDeps->textualModuleDetails.CASFileSystemRootID),
|
||||||
getIdentifier(swiftTextDeps->textualModuleDetails
|
getIdentifier(swiftTextDeps->textualModuleDetails
|
||||||
.CASBridgingHeaderIncludeTreeRootID),
|
.CASBridgingHeaderIncludeTreeRootID),
|
||||||
getIdentifier(swiftTextDeps->moduleCacheKey));
|
getIdentifier(swiftTextDeps->moduleCacheKey),
|
||||||
|
getIdentifier(swiftTextDeps->userModuleVersion));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case swift::ModuleDependencyKind::SwiftSource: {
|
case swift::ModuleDependencyKind::SwiftSource: {
|
||||||
|
|||||||
@@ -701,7 +701,8 @@ generateFullDependencyGraph(const CompilerInstance &instance,
|
|||||||
.CASBridgingHeaderIncludeTreeRootID.c_str()),
|
.CASBridgingHeaderIncludeTreeRootID.c_str()),
|
||||||
create_clone(swiftTextualDeps->moduleCacheKey.c_str()),
|
create_clone(swiftTextualDeps->moduleCacheKey.c_str()),
|
||||||
createMacroDependencySet(
|
createMacroDependencySet(
|
||||||
swiftTextualDeps->textualModuleDetails.macroDependencies)};
|
swiftTextualDeps->textualModuleDetails.macroDependencies),
|
||||||
|
create_clone(swiftTextualDeps->userModuleVersion.c_str())};
|
||||||
} else if (swiftSourceDeps) {
|
} else if (swiftSourceDeps) {
|
||||||
swiftscan_string_ref_t moduleInterfacePath = create_null();
|
swiftscan_string_ref_t moduleInterfacePath = create_null();
|
||||||
swiftscan_string_ref_t bridgingHeaderPath =
|
swiftscan_string_ref_t bridgingHeaderPath =
|
||||||
|
|||||||
@@ -2135,15 +2135,18 @@ InterfaceSubContextDelegateImpl::runInSubContext(StringRef moduleName,
|
|||||||
StringRef outputPath,
|
StringRef outputPath,
|
||||||
SourceLoc diagLoc,
|
SourceLoc diagLoc,
|
||||||
llvm::function_ref<std::error_code(ASTContext&, ModuleDecl*, ArrayRef<StringRef>,
|
llvm::function_ref<std::error_code(ASTContext&, ModuleDecl*, ArrayRef<StringRef>,
|
||||||
ArrayRef<StringRef>, StringRef)> action) {
|
ArrayRef<StringRef>, StringRef, StringRef)> action) {
|
||||||
return runInSubCompilerInstance(moduleName, interfacePath, sdkPath, outputPath,
|
return runInSubCompilerInstance(moduleName, interfacePath, sdkPath, outputPath,
|
||||||
diagLoc, /*silenceErrors=*/false,
|
diagLoc, /*silenceErrors=*/false,
|
||||||
[&](SubCompilerInstanceInfo &info){
|
[&](SubCompilerInstanceInfo &info){
|
||||||
|
std::string UserModuleVer = info.Instance->getInvocation().getFrontendOptions()
|
||||||
|
.UserModuleVersion.getAsString();
|
||||||
return action(info.Instance->getASTContext(),
|
return action(info.Instance->getASTContext(),
|
||||||
info.Instance->getMainModule(),
|
info.Instance->getMainModule(),
|
||||||
info.BuildArguments,
|
info.BuildArguments,
|
||||||
info.ExtraPCMArgs,
|
info.ExtraPCMArgs,
|
||||||
info.Hash);
|
info.Hash,
|
||||||
|
UserModuleVer);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -154,7 +154,7 @@ SwiftModuleScanner::scanInterfaceFile(Twine moduleInterfacePath,
|
|||||||
realModuleName.str(), moduleInterfacePath.str(), sdkPath,
|
realModuleName.str(), moduleInterfacePath.str(), sdkPath,
|
||||||
StringRef(), SourceLoc(),
|
StringRef(), SourceLoc(),
|
||||||
[&](ASTContext &Ctx, ModuleDecl *mainMod, ArrayRef<StringRef> BaseArgs,
|
[&](ASTContext &Ctx, ModuleDecl *mainMod, ArrayRef<StringRef> BaseArgs,
|
||||||
ArrayRef<StringRef> PCMArgs, StringRef Hash) {
|
ArrayRef<StringRef> PCMArgs, StringRef Hash, StringRef UserModVer) {
|
||||||
assert(mainMod);
|
assert(mainMod);
|
||||||
std::string InPath = moduleInterfacePath.str();
|
std::string InPath = moduleInterfacePath.str();
|
||||||
auto compiledCandidates =
|
auto compiledCandidates =
|
||||||
@@ -247,7 +247,7 @@ SwiftModuleScanner::scanInterfaceFile(Twine moduleInterfacePath,
|
|||||||
Result = ModuleDependencyInfo::forSwiftInterfaceModule(
|
Result = ModuleDependencyInfo::forSwiftInterfaceModule(
|
||||||
outputPathBase.str().str(), InPath, compiledCandidatesRefs,
|
outputPathBase.str().str(), InPath, compiledCandidatesRefs,
|
||||||
ArgsRefs, linkLibraries, PCMArgs, Hash, isFramework, isStatic, {},
|
ArgsRefs, linkLibraries, PCMArgs, Hash, isFramework, isStatic, {},
|
||||||
/*module-cache-key*/ "");
|
/*module-cache-key*/ "", UserModVer);
|
||||||
|
|
||||||
if (Ctx.CASOpts.EnableCaching) {
|
if (Ctx.CASOpts.EnableCaching) {
|
||||||
std::vector<std::string> clangDependencyFiles;
|
std::vector<std::string> clangDependencyFiles;
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
// RUN: %empty-directory(%t/DependencyModules)
|
// RUN: %empty-directory(%t/DependencyModules)
|
||||||
|
|
||||||
// Emit a textual module dependency
|
// Emit a textual module dependency
|
||||||
|
// RUN: %target-swift-frontend -emit-module -emit-module-interface-path %t/DependencyModules/TextualFoo.swiftinterface -module-cache-path %t/clang-module-cache -module-name TextualFoo %s -D TEXTUAL_FOO -user-module-version 12.3.4
|
||||||
|
|
||||||
// RUN: %target-swift-frontend -emit-module -emit-module-path %t/DependencyModules/Foo.swiftmodule -module-cache-path %t/clang-module-cache -module-name Foo %s -D FOO -user-module-version 42.3.3
|
// RUN: %target-swift-frontend -emit-module -emit-module-path %t/DependencyModules/Foo.swiftmodule -module-cache-path %t/clang-module-cache -module-name Foo %s -D FOO -user-module-version 42.3.3
|
||||||
|
|
||||||
// RUN: %target-swift-frontend -scan-dependencies -module-cache-path %t/clang-module-cache %s -o %t/deps.json -I %t/DependencyModules/ -module-name main
|
// RUN: %target-swift-frontend -scan-dependencies -module-cache-path %t/clang-module-cache %s -o %t/deps.json -I %t/DependencyModules/ -module-name main
|
||||||
@@ -15,9 +17,14 @@
|
|||||||
|
|
||||||
public func foo() {}
|
public func foo() {}
|
||||||
|
|
||||||
|
#elseif TEXTUAL_FOO
|
||||||
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
import Foo
|
import Foo
|
||||||
|
import TextualFoo
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// CHECK: "userModuleVersion": "12.3.4"
|
||||||
// CHECK: "userModuleVersion": "42.3.3.0"
|
// CHECK: "userModuleVersion": "42.3.3.0"
|
||||||
|
|||||||
@@ -74,6 +74,8 @@ void swiftscan_dependency_info_details_dispose(
|
|||||||
details_impl->swift_textual_details.module_cache_key);
|
details_impl->swift_textual_details.module_cache_key);
|
||||||
swiftscan_macro_dependency_dispose(
|
swiftscan_macro_dependency_dispose(
|
||||||
details_impl->swift_textual_details.macro_dependencies);
|
details_impl->swift_textual_details.macro_dependencies);
|
||||||
|
swiftscan_string_dispose(
|
||||||
|
details_impl->swift_textual_details.user_module_version);
|
||||||
break;
|
break;
|
||||||
case SWIFTSCAN_DEPENDENCY_INFO_SWIFT_BINARY:
|
case SWIFTSCAN_DEPENDENCY_INFO_SWIFT_BINARY:
|
||||||
swiftscan_string_dispose(
|
swiftscan_string_dispose(
|
||||||
@@ -393,6 +395,11 @@ swiftscan_string_ref_t swiftscan_swift_textual_detail_get_module_cache_key(
|
|||||||
return details->swift_textual_details.module_cache_key;
|
return details->swift_textual_details.module_cache_key;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
swiftscan_string_ref_t swiftscan_swift_textual_detail_get_user_module_version(
|
||||||
|
swiftscan_module_details_t details) {
|
||||||
|
return details->swift_textual_details.user_module_version;
|
||||||
|
}
|
||||||
|
|
||||||
//=== Swift Binary Module Details query APIs ------------------------------===//
|
//=== Swift Binary Module Details query APIs ------------------------------===//
|
||||||
|
|
||||||
swiftscan_string_ref_t swiftscan_swift_binary_detail_get_compiled_module_path(
|
swiftscan_string_ref_t swiftscan_swift_binary_detail_get_compiled_module_path(
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ swiftscan_swift_textual_detail_get_is_framework
|
|||||||
swiftscan_swift_textual_detail_get_swift_overlay_dependencies
|
swiftscan_swift_textual_detail_get_swift_overlay_dependencies
|
||||||
swiftscan_swift_textual_detail_get_cas_fs_root_id
|
swiftscan_swift_textual_detail_get_cas_fs_root_id
|
||||||
swiftscan_swift_textual_detail_get_module_cache_key
|
swiftscan_swift_textual_detail_get_module_cache_key
|
||||||
|
swiftscan_swift_textual_detail_get_user_module_version
|
||||||
swiftscan_swift_binary_detail_get_compiled_module_path
|
swiftscan_swift_binary_detail_get_compiled_module_path
|
||||||
swiftscan_swift_binary_detail_get_module_doc_path
|
swiftscan_swift_binary_detail_get_module_doc_path
|
||||||
swiftscan_swift_binary_detail_get_module_source_info_path
|
swiftscan_swift_binary_detail_get_module_source_info_path
|
||||||
|
|||||||
Reference in New Issue
Block a user