diff --git a/lib/ClangImporter/SwiftLookupTable.cpp b/lib/ClangImporter/SwiftLookupTable.cpp index cd5ec16678407..a367e6c487723 100644 --- a/lib/ClangImporter/SwiftLookupTable.cpp +++ b/lib/ClangImporter/SwiftLookupTable.cpp @@ -219,7 +219,7 @@ bool SwiftLookupTable::contextRequiresName(ContextKind kind) { /// Try to translate the given Clang declaration into a context. static std::optional -translateDeclToContext(const clang::NamedDecl *decl) { +translateDeclToContext(clang::NamedDecl *decl) { // Tag declaration. if (auto tag = dyn_cast(decl)) { if (tag->getIdentifier()) @@ -324,46 +324,22 @@ SwiftLookupTable::translateContext(EffectiveClangContext context) { /// Lookup an unresolved context name and resolve it to a Clang /// declaration context or typedef name. -const clang::NamedDecl * -SwiftLookupTable::resolveContext(StringRef unresolvedName) { - SmallVector nameComponents; - unresolvedName.split(nameComponents, '.'); - - EffectiveClangContext parentContext; - +clang::NamedDecl *SwiftLookupTable::resolveContext(StringRef unresolvedName) { // Look for a context with the given Swift name. - for (auto nameComponent : nameComponents) { - auto entries = - parentContext - ? lookup(SerializedSwiftName(nameComponent), parentContext) - : lookup(SerializedSwiftName(nameComponent), - std::make_pair(ContextKind::TranslationUnit, StringRef())); - bool entryFound = false; - for (auto entry : entries) { - if (auto decl = entry.dyn_cast()) { - if (isa(decl) || - isa(decl) || - isa(decl)) { - entryFound = true; - parentContext = EffectiveClangContext(cast(decl)); - break; - } - if (auto typedefDecl = dyn_cast(decl)) { - entryFound = true; - parentContext = EffectiveClangContext(typedefDecl); - break; - } - } + for (auto entry : + lookup(SerializedSwiftName(unresolvedName), + std::make_pair(ContextKind::TranslationUnit, StringRef()))) { + if (auto decl = entry.dyn_cast()) { + if (isa(decl) || + isa(decl) || + isa(decl)) + return decl; } - - // If we could not resolve this component of the qualified name, bail. - if (!entryFound) - return nullptr; } - return parentContext.getAsDeclContext() - ? cast(parentContext.getAsDeclContext()) - : parentContext.getTypedefName(); + // FIXME: Search imported modules to resolve the context. + + return nullptr; } void SwiftLookupTable::addCategory(clang::ObjCCategoryDecl *category) { diff --git a/lib/ClangImporter/SwiftLookupTable.h b/lib/ClangImporter/SwiftLookupTable.h index 5849233c110b6..535f72a4671ee 100644 --- a/lib/ClangImporter/SwiftLookupTable.h +++ b/lib/ClangImporter/SwiftLookupTable.h @@ -593,7 +593,7 @@ class SwiftLookupTable { public: /// Lookup an unresolved context name and resolve it to a Clang /// named declaration. - const clang::NamedDecl *resolveContext(StringRef unresolvedName); + clang::NamedDecl *resolveContext(StringRef unresolvedName); /// Lookup the set of entities with the given base name. /// diff --git a/test/APINotes/Inputs/broken-modules/BrokenAPINotes.apinotes b/test/APINotes/Inputs/broken-modules/BrokenAPINotes.apinotes index c8a9dd0ecd2b1..ef6e86a96e882 100644 --- a/test/APINotes/Inputs/broken-modules/BrokenAPINotes.apinotes +++ b/test/APINotes/Inputs/broken-modules/BrokenAPINotes.apinotes @@ -13,4 +13,4 @@ Functions: - Name: ZXSpectrumSetMisnamedRegister SwiftName: 'setter:ZXSpectrum.misnamedRegister(self:newValue:)' - Name: ZXSpectrumHelperReset - SwiftName: 'ZXSpectrum::Helper.reset()' + SwiftName: 'ZXSpectrum.Helper.reset()' diff --git a/test/Interop/Cxx/namespace/Inputs/import-as-member.h b/test/Interop/Cxx/namespace/Inputs/import-as-member.h deleted file mode 100644 index 750c26f135ce7..0000000000000 --- a/test/Interop/Cxx/namespace/Inputs/import-as-member.h +++ /dev/null @@ -1,32 +0,0 @@ -#define SWIFT_NAME(name) __attribute__((swift_name(name))) - -namespace MyNS { -struct NestedStruct { - int value = 123; -}; -} - -int nestedStruct_method(MyNS::NestedStruct p) SWIFT_NAME("MyNS.NestedStruct.method(self:)") { return p.value; } -int nestedStruct_methodConstRef(const MyNS::NestedStruct &p) SWIFT_NAME("MyNS.NestedStruct.methodConstRef(self:)") { return p.value + 1; } -inline int nestedStruct_methodInline(MyNS::NestedStruct p) SWIFT_NAME("MyNS.NestedStruct.methodInline(self:)") { return p.value + 2; } - -namespace MyNS { -namespace MyDeepNS { -struct DeepNestedStruct { - int value = 456; -}; -} -} - -int deepNestedStruct_method(MyNS::MyDeepNS::DeepNestedStruct p) SWIFT_NAME("MyNS.MyDeepNS.DeepNestedStruct.method(self:)") { return p.value; } -int deepNestedStruct_methodConstRef(const MyNS::MyDeepNS::DeepNestedStruct &p) SWIFT_NAME("MyNS.MyDeepNS.DeepNestedStruct.methodConstRef(self:)") { return p.value + 2; } - -typedef MyNS::MyDeepNS::DeepNestedStruct DeepNestedStructTypedef; - -int deepNestedStructTypedef_method(DeepNestedStructTypedef p) SWIFT_NAME("DeepNestedStructTypedef.methodTypedef(self:)") { return p.value + 3; } -int deepNestedStructTypedef_methodQualName(MyNS::MyDeepNS::DeepNestedStruct p) SWIFT_NAME("DeepNestedStructTypedef.methodTypedefQualName(self:)") { return p.value + 4; } - -namespace MyNS { -int nestedStruct_nestedMethod(MyNS::NestedStruct p) SWIFT_NAME("MyNS.NestedStruct.nestedMethod(self:)") { return p.value + 3; } -inline int nestedStruct_nestedMethodInline(MyNS::NestedStruct p) SWIFT_NAME("MyNS.NestedStruct.nestedMethodInline(self:)") { return p.value + 4; } -} diff --git a/test/Interop/Cxx/namespace/Inputs/module.modulemap b/test/Interop/Cxx/namespace/Inputs/module.modulemap index a2394849f073d..b2d1808ac2dc5 100644 --- a/test/Interop/Cxx/namespace/Inputs/module.modulemap +++ b/test/Interop/Cxx/namespace/Inputs/module.modulemap @@ -60,12 +60,6 @@ module Enums { requires cplusplus } -module ImportAsMember { - header "import-as-member.h" - export * - requires cplusplus -} - module MembersDirect { header "members-direct.h" requires cplusplus diff --git a/test/Interop/Cxx/namespace/import-as-member-module-interface.swift b/test/Interop/Cxx/namespace/import-as-member-module-interface.swift deleted file mode 100644 index cd6be06ac827d..0000000000000 --- a/test/Interop/Cxx/namespace/import-as-member-module-interface.swift +++ /dev/null @@ -1,16 +0,0 @@ -// RUN: %target-swift-ide-test -print-module -module-to-print=ImportAsMember -I %S/Inputs -source-filename=x -cxx-interoperability-mode=upcoming-swift | %FileCheck %s - -// CHECK: extension MyNS.NestedStruct { -// CHECK-NEXT: func method() -> Int32 -// CHECK-NEXT: func methodConstRef() -> Int32 -// CHECK-NEXT: func methodInline() -> Int32 -// CHECK-NEXT: func nestedMethod() -> Int32 -// CHECK-NEXT: func nestedMethodInline() -> Int32 -// CHECK-NEXT: } - -// CHECK: extension MyNS.MyDeepNS.DeepNestedStruct { -// CHECK-NEXT: func method() -> Int32 -// CHECK-NEXT: func methodConstRef() -> Int32 -// CHECK-NEXT: func methodTypedef() -> Int32 -// CHECK-NEXT: func methodTypedefQualName() -> Int32 -// CHECK-NEXT: } diff --git a/test/Interop/Cxx/namespace/import-as-member-typechecker.swift b/test/Interop/Cxx/namespace/import-as-member-typechecker.swift deleted file mode 100644 index 8d0330528055d..0000000000000 --- a/test/Interop/Cxx/namespace/import-as-member-typechecker.swift +++ /dev/null @@ -1,24 +0,0 @@ -// RUN: %target-typecheck-verify-swift -I %S/Inputs -cxx-interoperability-mode=upcoming-swift - -import ImportAsMember - -func takesNestedStruct(_ s: MyNS.NestedStruct) { - _ = s.method() - _ = s.methodConstRef() - _ = s.nestedMethod() - _ = s.nestedMethodInline() - - _ = nestedStruct_method(s) // expected-error {{'nestedStruct_method' has been replaced by instance method 'MyNS.NestedStruct.method()'}} -} - -func takesDeepNestedStruct(_ s: MyNS.MyDeepNS.DeepNestedStruct) { - _ = s.method() - _ = s.methodConstRef() - _ = s.methodTypedef() - _ = s.methodTypedefQualName() - - _ = deepNestedStruct_method(s) // expected-error {{'deepNestedStruct_method' has been replaced by instance method 'MyNS.MyDeepNS.DeepNestedStruct.method()'}} -} - -MyNS.method() // expected-error {{type 'MyNS' has no member 'method'}} -MyNS.nestedMethod() // expected-error {{type 'MyNS' has no member 'nestedMethod'}} diff --git a/test/Interop/Cxx/namespace/import-as-member.swift b/test/Interop/Cxx/namespace/import-as-member.swift deleted file mode 100644 index 6275598d9048b..0000000000000 --- a/test/Interop/Cxx/namespace/import-as-member.swift +++ /dev/null @@ -1,31 +0,0 @@ -// RUN: %target-run-simple-swift(-I %S/Inputs -Xfrontend -cxx-interoperability-mode=upcoming-swift) - -// REQUIRES: executable_test - -import StdlibUnittest -import ImportAsMember - -var NamespacesTestSuite = TestSuite("Import as member of namespace") - -NamespacesTestSuite.test("Struct in a namespace") { - let s = MyNS.NestedStruct() - expectEqual(123, s.method()) - expectEqual(124, s.methodConstRef()) - expectEqual(125, s.methodInline()) -} - -NamespacesTestSuite.test("Struct in a deep namespace") { - let s = MyNS.MyDeepNS.DeepNestedStruct() - expectEqual(456, s.method()) - expectEqual(458, s.methodConstRef()) - expectEqual(459, s.methodTypedef()) - expectEqual(460, s.methodTypedefQualName()) -} - -NamespacesTestSuite.test("Struct and function in a namespace") { - let s = MyNS.NestedStruct() - expectEqual(126, s.nestedMethod()) - expectEqual(127, s.nestedMethodInline()) -} - -runAllTests()