Skip to content

Commit 66850d2

Browse files
committed
Test shadowing module qualified macro
1 parent 6c8ef5a commit 66850d2

File tree

5 files changed

+42
-3
lines changed

5 files changed

+42
-3
lines changed

include/swift/AST/NameLookup.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,8 @@ enum class UnqualifiedLookupFlags {
245245
ExcludeMacroExpansions = 1 << 6,
246246
/// This lookup should only return macros.
247247
MacroLookup = 1 << 7,
248+
/// This lookup should only return modules
249+
ModuleLookup = 1 << 8,
248250
};
249251

250252
using UnqualifiedLookupOptions = OptionSet<UnqualifiedLookupFlags>;

lib/AST/NameLookup.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ void swift::simple_display(llvm::raw_ostream &out,
113113
{UnqualifiedLookupFlags::IncludeOuterResults, "IncludeOuterResults"},
114114
{UnqualifiedLookupFlags::TypeLookup, "TypeLookup"},
115115
{UnqualifiedLookupFlags::MacroLookup, "MacroLookup"},
116+
{UnqualifiedLookupFlags::ModuleLookup, "ModuleLookup"},
116117
};
117118

118119
auto flagsToPrint = llvm::make_filter_range(
@@ -1649,16 +1650,20 @@ SmallVector<MacroDecl *, 1> namelookup::lookupMacros(DeclContext *dc,
16491650
if (moduleName) {
16501651
UnqualifiedLookupDescriptor moduleLookupDesc(
16511652
moduleName, moduleScopeDC, SourceLoc(),
1652-
UnqualifiedLookupFlags::TypeLookup);
1653+
UnqualifiedLookupFlags::ModuleLookup);
16531654
auto moduleLookup = evaluateOrDefault(
16541655
ctx.evaluator, UnqualifiedLookupRequest{moduleLookupDesc}, {});
16551656
auto foundTypeDecl = moduleLookup.getSingleTypeResult();
16561657
auto *moduleDecl = dyn_cast_or_null<ModuleDecl>(foundTypeDecl);
16571658
if (!moduleDecl)
16581659
return {};
16591660

1661+
auto options = NL_ExcludeMacroExpansions;
1662+
if (onlyMacros)
1663+
options |= NL_OnlyMacros;
1664+
16601665
ModuleQualifiedLookupRequest req{moduleScopeDC, moduleDecl, macroName,
1661-
SourceLoc(), NL_ExcludeMacroExpansions};
1666+
SourceLoc(), options};
16621667
auto lookup = evaluateOrDefault(ctx.evaluator, req, {});
16631668
for (auto *found : lookup)
16641669
addChoiceIfApplicable(found);

lib/AST/UnqualifiedLookup.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,12 @@ void UnqualifiedLookupFactory::performUnqualifiedLookup() {
281281
"performUnqualifiedLookup",
282282
DC->getParentSourceFile());
283283

284+
if (options.contains(UnqualifiedLookupFlags::ModuleLookup)) {
285+
lookForAModuleWithTheGivenName(DC->getModuleScopeContext());
286+
recordCompletionOfAScope();
287+
return;
288+
}
289+
284290
if (Loc.isValid() && DC->getParentSourceFile()) {
285291
// Operator lookup is always global, for the time being.
286292
if (!Name.isOperator())

test/Macros/Inputs/macro_library.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,14 @@ public macro AddClassReferencingSelf() = #externalMacro(module: "MacroDefinition
4242

4343
@attached(peer, names: named(value))
4444
public macro declareVarValuePeer() = #externalMacro(module: "MacroDefinition", type: "VarValueMacro")
45+
46+
@propertyWrapper
47+
public struct declareVarValuePeerShadowed {
48+
public var wrappedValue: Int
49+
public init(wrappedValue: Int) {
50+
self.wrappedValue = wrappedValue
51+
}
52+
}
53+
54+
@attached(peer, names: named(value))
55+
public macro declareVarValuePeerShadowed() = #externalMacro(module: "MacroDefinition", type: "VarValueMacro")

test/Macros/macro_shadowing.swift

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,29 @@
77

88
// Build library that declares macros
99
// RUN: %target-swift-frontend -swift-version 5 -emit-module -o %t/freestanding_macro_library.swiftmodule %S/Inputs/freestanding_macro_library.swift -module-name freestanding_macro_library -load-plugin-library %t/%target-library-name(MacroDefinition)
10-
10+
// RUN: %target-swift-frontend -swift-version 5 -emit-module -o %t/macro_library.swiftmodule %S/Inputs/macro_library.swift -module-name macro_library -load-plugin-library %t/%target-library-name(MacroDefinition) -enable-experimental-feature ExtensionMacros
1111
//
1212
// RUN: %target-typecheck-verify-swift -swift-version 5 -load-plugin-library %t/%target-library-name(MacroDefinition) -module-name MacroUser -I %t
1313

1414
import freestanding_macro_library
15+
import macro_library
1516

1617
struct stringify<T> { }
1718

1819
func testStringify(a: Int, b: Int) {
1920
_ = #stringify(a + b)
2021
}
22+
23+
enum macro_library {
24+
@propertyWrapper
25+
struct declareVarValuePeerShadowed {
26+
var wrappedValue: Int
27+
}
28+
}
29+
30+
struct TestShadowedQualified {
31+
@macro_library.declareVarValuePeerShadowed
32+
var shouldFindMacro: Int = 3
33+
}
34+
35+
_ = TestShadowedQualified().value

0 commit comments

Comments
 (0)