Skip to content

Commit 3625f0e

Browse files
authored
Merge pull request #4660 from DougGregor/astscope-self-lookup
[Scope map] Explicitly model the scope of a function body.
2 parents 016bc24 + ead78e0 commit 3625f0e

File tree

5 files changed

+85
-17
lines changed

5 files changed

+85
-17
lines changed

include/swift/AST/ASTScope.h

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ enum class ASTScopeKind : uint8_t {
7171
AbstractFunctionParams,
7272
/// The default argument for a parameter.
7373
DefaultArgument,
74+
/// The body of a function.
75+
AbstractFunctionBody,
7476
/// A specific pattern binding.
7577
PatternBinding,
7678
/// The scope introduced for an initializer of a pattern binding.
@@ -186,7 +188,8 @@ class ASTScope {
186188
unsigned index;
187189
} genericParams;
188190

189-
/// An abstract function, for \c kind == ASTScopeKind::AbstractFunctionDecl.
191+
/// An abstract function, for \c kind == ASTScopeKind::AbstractFunctionDecl
192+
/// or \c kind == ASTScopeKind::AbstractFunctionBody.
190193
AbstractFunctionDecl *abstractFunction;
191194

192195
/// An parameter for an abstract function (init/func/deinit).
@@ -314,8 +317,11 @@ class ASTScope {
314317
this->genericParams.index = index;
315318
}
316319

317-
ASTScope(const ASTScope *parent, AbstractFunctionDecl *abstractFunction)
318-
: ASTScope(ASTScopeKind::AbstractFunctionDecl, parent) {
320+
ASTScope(ASTScopeKind kind, const ASTScope *parent,
321+
AbstractFunctionDecl *abstractFunction)
322+
: ASTScope(kind, parent) {
323+
assert(kind == ASTScopeKind::AbstractFunctionDecl ||
324+
kind == ASTScopeKind::AbstractFunctionBody);
319325
this->abstractFunction = abstractFunction;
320326
}
321327

@@ -513,9 +519,11 @@ class ASTScope {
513519
}
514520

515521
/// Retrieve the abstract function declaration when
516-
/// \c getKind() == ASTScopeKind::AbstractFunctionDecl;
522+
/// \c getKind() == ASTScopeKind::AbstractFunctionDecl or
523+
/// \c getKind() == ASTScopeKind::AbstractFunctionBody;
517524
AbstractFunctionDecl *getAbstractFunctionDecl() const {
518-
assert(getKind() == ASTScopeKind::AbstractFunctionDecl);
525+
assert(getKind() == ASTScopeKind::AbstractFunctionDecl ||
526+
getKind() == ASTScopeKind::AbstractFunctionBody);
519527
return abstractFunction;
520528
}
521529

lib/AST/ASTScope.cpp

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,12 @@ void ASTScope::expand() const {
217217
addChild(child);
218218
break;
219219

220+
case ASTScopeKind::AbstractFunctionBody:
221+
// Create a child for the actual body.
222+
if (auto child = createIfNeeded(this, abstractFunction->getBody()))
223+
addChild(child);
224+
break;
225+
220226
case ASTScopeKind::PatternBinding: {
221227
const auto &patternEntry =
222228
patternBinding.decl->getPatternList()[patternBinding.entry];
@@ -588,6 +594,7 @@ static bool parentDirectDescendedFromLocalDeclaration(const ASTScope *parent,
588594

589595
case ASTScopeKind::SourceFile:
590596
case ASTScopeKind::DefaultArgument:
597+
case ASTScopeKind::AbstractFunctionBody:
591598
case ASTScopeKind::PatternBinding:
592599
case ASTScopeKind::PatternInitializer:
593600
case ASTScopeKind::AfterPatternBinding:
@@ -633,6 +640,7 @@ static bool parentDirectDescendedFromAbstractStorageDecl(
633640
case ASTScopeKind::SourceFile:
634641
case ASTScopeKind::TypeOrExtensionBody:
635642
case ASTScopeKind::DefaultArgument:
643+
case ASTScopeKind::AbstractFunctionBody:
636644
case ASTScopeKind::LocalDeclaration:
637645
case ASTScopeKind::PatternBinding:
638646
case ASTScopeKind::PatternInitializer:
@@ -668,6 +676,7 @@ static bool parentDirectDescendedFromAbstractFunctionDecl(
668676
case ASTScopeKind::Preexpanded:
669677
case ASTScopeKind::AbstractFunctionParams:
670678
case ASTScopeKind::DefaultArgument:
679+
case ASTScopeKind::AbstractFunctionBody:
671680
case ASTScopeKind::GenericParams:
672681
// Keep looking.
673682
parent = parent->getParent();
@@ -741,7 +750,8 @@ ASTScope *ASTScope::createIfNeeded(const ASTScope *parent, Decl *decl) {
741750
// an AbstractFunctionDecl scope, add it now.
742751
if (auto func = dyn_cast<AbstractFunctionDecl>(decl)) {
743752
if (!parentDirectDescendedFromAbstractFunctionDecl(parent, func)) {
744-
return new (ctx) ASTScope(parent, func);
753+
return new (ctx) ASTScope(ASTScopeKind::AbstractFunctionDecl, parent,
754+
func);
745755
}
746756
}
747757

@@ -879,9 +889,11 @@ ASTScope *ASTScope::createIfNeeded(const ASTScope *parent, Decl *decl) {
879889
return afterParamScope;
880890
}
881891

882-
883892
// Function body, if present.
884-
return createIfNeeded(parent, abstractFunction->getBody());
893+
if (abstractFunction->hasBody())
894+
return new (ctx) ASTScope(ASTScopeKind::AbstractFunctionBody, parent,
895+
abstractFunction);
896+
return nullptr;
885897
}
886898

887899
case DeclKind::PatternBinding: {
@@ -1082,6 +1094,7 @@ bool ASTScope::isContinuationScope() const {
10821094
case ASTScopeKind::AbstractFunctionDecl:
10831095
case ASTScopeKind::AbstractFunctionParams:
10841096
case ASTScopeKind::DefaultArgument:
1097+
case ASTScopeKind::AbstractFunctionBody:
10851098
case ASTScopeKind::PatternBinding:
10861099
case ASTScopeKind::PatternInitializer:
10871100
case ASTScopeKind::Accessors:
@@ -1131,6 +1144,7 @@ void ASTScope::enumerateContinuationScopes(
11311144
case ASTScopeKind::Preexpanded:
11321145
case ASTScopeKind::SourceFile:
11331146
case ASTScopeKind::DefaultArgument:
1147+
case ASTScopeKind::AbstractFunctionBody:
11341148
case ASTScopeKind::PatternInitializer:
11351149
case ASTScopeKind::IfStmt:
11361150
case ASTScopeKind::RepeatWhileStmt:
@@ -1210,6 +1224,7 @@ ASTContext &ASTScope::getASTContext() const {
12101224
return genericParams.decl->getASTContext();
12111225

12121226
case ASTScopeKind::AbstractFunctionDecl:
1227+
case ASTScopeKind::AbstractFunctionBody:
12131228
return abstractFunction->getASTContext();
12141229

12151230
case ASTScopeKind::AbstractFunctionParams:
@@ -1328,6 +1343,9 @@ SourceRange ASTScope::getSourceRangeImpl() const {
13281343
case ASTScopeKind::DefaultArgument:
13291344
return parameter->getDefaultValue()->getSourceRange();
13301345

1346+
case ASTScopeKind::AbstractFunctionBody:
1347+
return abstractFunction->getBodySourceRange();
1348+
13311349
case ASTScopeKind::PatternBinding: {
13321350
const auto &patternEntry =
13331351
patternBinding.decl->getPatternList()[patternBinding.entry];
@@ -1596,6 +1614,7 @@ DeclContext *ASTScope::getDeclContext() const {
15961614
case ASTScopeKind::ForStmt:
15971615
case ASTScopeKind::ForStmtInitializer:
15981616
case ASTScopeKind::LocalDeclaration:
1617+
case ASTScopeKind::AbstractFunctionBody:
15991618
return nullptr;
16001619
}
16011620
}
@@ -1623,6 +1642,7 @@ SmallVector<ValueDecl *, 4> ASTScope::getLocalBindings() const {
16231642
case ASTScopeKind::TypeOrExtensionBody:
16241643
case ASTScopeKind::AbstractFunctionDecl:
16251644
case ASTScopeKind::DefaultArgument:
1645+
case ASTScopeKind::AbstractFunctionBody:
16261646
case ASTScopeKind::PatternBinding:
16271647
case ASTScopeKind::PatternInitializer:
16281648
case ASTScopeKind::BraceStmt:
@@ -1794,6 +1814,13 @@ void ASTScope::print(llvm::raw_ostream &out, unsigned level,
17941814
printRange();
17951815
break;
17961816

1817+
case ASTScopeKind::AbstractFunctionBody:
1818+
printScopeKind("AbstractFunctionBody");
1819+
printAddress(abstractFunction);
1820+
out << " " << abstractFunction->getFullName();
1821+
printRange();
1822+
break;
1823+
17971824
case ASTScopeKind::PatternBinding:
17981825
printScopeKind("PatternBinding");
17991826
printAddress(patternBinding.decl);

lib/AST/NameLookup.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,7 @@ static DeclVisibilityKind getLocalDeclVisibilityKind(const ASTScope *scope) {
404404
case ASTScopeKind::SourceFile:
405405
case ASTScopeKind::TypeOrExtensionBody:
406406
case ASTScopeKind::AbstractFunctionDecl:
407+
case ASTScopeKind::AbstractFunctionBody:
407408
case ASTScopeKind::DefaultArgument:
408409
case ASTScopeKind::PatternBinding:
409410
case ASTScopeKind::PatternInitializer:
@@ -477,6 +478,7 @@ UnqualifiedLookup::UnqualifiedLookup(DeclName Name, DeclContext *DC,
477478

478479
// Walk scopes outward from the innermost scope until we find something.
479480
bool lookupInNominalIsStatic = true;
481+
ParamDecl *selfDecl = nullptr;
480482
bool withinDefaultArgument = false;
481483
for (auto currentScope = lookupScope; currentScope;
482484
currentScope = currentScope->getParent()) {
@@ -490,6 +492,15 @@ UnqualifiedLookup::UnqualifiedLookup(DeclName Name, DeclContext *DC,
490492
if (!Results.empty())
491493
return;
492494

495+
// When we are in the body of a method, get the 'self' declaration.
496+
if (currentScope->getKind() == ASTScopeKind::AbstractFunctionBody &&
497+
currentScope->getAbstractFunctionDecl()->getDeclContext()
498+
->isTypeContext()) {
499+
selfDecl =
500+
currentScope->getAbstractFunctionDecl()->getImplicitSelfDecl();
501+
continue;
502+
}
503+
493504
// If there is a declaration context associated with this scope, we might
494505
// want to look in it.
495506
if (auto dc = currentScope->getDeclContext()) {
@@ -590,8 +601,10 @@ UnqualifiedLookup::UnqualifiedLookup(DeclName Name, DeclContext *DC,
590601

591602
SmallVector<ValueDecl *, 4> lookup;
592603
dc->lookupQualified(lookupType, Name, options, TypeResolver, lookup);
604+
ValueDecl *baseDecl = nominal;
605+
if (selfDecl) baseDecl = selfDecl;
593606
for (auto result : lookup) {
594-
Results.push_back(UnqualifiedLookupResult(nominal, result));
607+
Results.push_back(UnqualifiedLookupResult(baseDecl, result));
595608
}
596609

597610
if (!Results.empty()) {
@@ -614,6 +627,9 @@ UnqualifiedLookup::UnqualifiedLookup(DeclName Name, DeclContext *DC,
614627
return;
615628
}
616629
}
630+
631+
// Forget the 'self' declaration.
632+
selfDecl = nullptr;
617633
}
618634
}
619635
} else {

test/NameBinding/scope_map.swift

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ func localPatternsWithSharedType() {
206206
// CHECK-EXPANDED-NEXT: -AbstractFunctionParams {{.*}} genericFunc0(t:u:i:) param 0:1 [22:34 - 23:1] expanded
207207
// CHECK-EXPANDED: |-DefaultArgument {{.*}} [22:46 - 22:46] expanded
208208
// CHECK-EXPANDED: `-AbstractFunctionParams {{.*}} genericFunc0(t:u:i:) param 0:2 [22:46 - 23:1] expanded
209+
// CHECK-EXPANDED-NEXT: `-AbstractFunctionBody {{.*}} genericFunc0(t:u:i:) [22:50 - 23:1] expanded
209210
// CHECK-EXPANDED-NEXT: -BraceStmt {{.*}} [22:50 - 23:1] expanded
210211
// CHECK-EXPANDED-NEXT: -TypeOrExtensionBody {{.*}} 'ContainsGenerics0' [25:25 - 31:1] expanded
211212
// CHECK-EXPANDED-NEXT: -AbstractFunctionDecl {{.*}} init(t:u:) [26:3 - 27:3] expanded
@@ -214,15 +215,18 @@ func localPatternsWithSharedType() {
214215
// CHECK-EXPANDED-NEXT: -AbstractFunctionParams {{.*}} init(t:u:) param 0:0 [26:13 - 27:3] expanded
215216
// CHECK-EXPANDED-NEXT: -AbstractFunctionParams {{.*}} init(t:u:) param 1:0 [26:17 - 27:3] expanded
216217
// CHECK-EXPANDED-NEXT: -AbstractFunctionParams {{.*}} init(t:u:) param 1:1 [26:23 - 27:3] expanded
218+
// CHECK-EXPANDED-NEXT: `-AbstractFunctionBody {{.*}} init(t:u:) [26:26 - 27:3] expanded
217219
// CHECK-EXPANDED-NEXT: -BraceStmt {{.*}} [26:26 - 27:3] expanded
218220
// CHECK-EXPANDED-NEXT: -AbstractFunctionDecl {{.*}} deinit
219221
// CHECK-EXPANDED-NEXT: -AbstractFunctionParams {{.*}} deinit param 0:0 [29:3 - 30:3] expanded
222+
// CHECK-EXPANDED-NEXT: `-AbstractFunctionBody {{.*}} deinit [29:10 - 30:3] expanded
220223
// CHECK-EXPANDED-NEXT: -BraceStmt {{.*}} [29:10 - 30:3] expanded
221224
// CHECK-EXPANDED-NEXT: -GenericParams {{.*}} param 0 [33:25 - 33:32] expanded
222225
// CHECK-EXPANDED-NEXT: {{^[|`]}}-TypeOrExtensionBody {{.*}} '{{.*}}ArchStruct' [{{.*}}] expanded
223226
// CHECK-EXPANDED-NEXT: {{^}}|-AbstractFunctionDecl {{.*}} functionBodies1(a:b:) [41:1 - 100:1] expanded
224227
// CHECK-EXPANDED-NEXT: {{^}} `-AbstractFunctionParams {{.*}} functionBodies1(a:b:) param 0:0 [41:25 - 100:1] expanded
225228
// CHECK-EXPANDED-NEXT: {{^}} `-AbstractFunctionParams {{.*}} functionBodies1(a:b:) param 0:1 [41:36 - 100:1] expanded
229+
// CHECK-EXPANDED-NEXT: `-AbstractFunctionBody {{.*}} functionBodies1(a:b:) [41:39 - 100:1] expanded
226230
// CHECK-EXPANDED-NEXT: {{^}} `-BraceStmt {{.*}} [41:39 - 100:1] expanded
227231
// CHECK-EXPANDED-NEXT: {{^}} `-PatternBinding {{.*}} entry 0 [42:7 - 100:1] expanded
228232
// CHECK-EXPANDED-NEXT: {{^}} |-PatternInitializer {{.*}} entry 0 [42:18 - 42:23] expanded
@@ -255,6 +259,7 @@ func localPatternsWithSharedType() {
255259
// CHECK-EXPANDED-NEXT: {{^}} `-LocalDeclaration {{.*}} [57:3 - 100:1] expanded
256260
// CHECK-EXPANDED-NEXT: {{^}} |-AbstractFunctionDecl {{.*}} f(_:) [57:3 - 57:38] expanded
257261
// CHECK-EXPANDED-NEXT: {{^}} `-AbstractFunctionParams {{.*}} f(_:) param 0:0 [57:15 - 57:38] expanded
262+
// CHECK-EXPANDED-NEXT: `-AbstractFunctionBody {{.*}} f(_:) [57:27 - 57:38] expanded
258263
// CHECK-EXPANDED-NEXT: {{^}} `-BraceStmt {{.*}} [57:27 - 57:38] expanded
259264
// CHECK-EXPANDED: {{^}} `-AfterPatternBinding {{.*}} entry 0 [58:16 - 100:1] expanded
260265
// CHECK-EXPANDED-NEXT: {{^}} `-LocalDeclaration {{.*}} [59:3 - 100:1] expanded
@@ -311,52 +316,56 @@ func localPatternsWithSharedType() {
311316
// CHECK-EXPANDED-NEXT: {{^}} `-AbstractFunctionParams {{.*}} _ param 1:0 [116:5 - 117:5] expanded
312317
// CHECK-EXPANDED-NEXT: {{^}} `-AbstractFunctionParams {{.*}} _ param 1:1 [116:5 - 117:5] expanded
313318
// CHECK-EXPANDED-NEXT: {{^}} `-AbstractFunctionParams {{.*}} _ param 1:2 [116:5 - 117:5] expanded
319+
// CHECK-EXPANDED-NEXT: `-AbstractFunctionBody {{.*}} _ [116:9 - 117:5] expanded
314320
// CHECK-EXPANDED-NEXT: {{^}} `-BraceStmt {{.*}} [116:9 - 117:5] expanded
315321
// CHECK-EXPANDED-NEXT: {{^}} `-AbstractFunctionDecl {{.*}} _ [118:5 - 120:5] expanded
316322
// CHECK-EXPANDED-NEXT: {{^}} `-AbstractFunctionParams {{.*}} _ param 0:0 [118:5 - 120:5] expanded
317323
// CHECK-EXPANDED-NEXT: {{^}} `-AbstractFunctionParams {{.*}} _ param 1:0 [118:5 - 120:5] expanded
318324
// CHECK-EXPANDED-NEXT: {{^}} `-AbstractFunctionParams {{.*}} _ param 1:1 [118:5 - 120:5] expanded
325+
// CHECK-EXPANDED-NEXT: `-AbstractFunctionBody {{.*}} _ [118:9 - 120:5] expanded
319326
// CHECK-EXPANDED-NEXT: {{^}} `-BraceStmt {{.*}} [118:9 - 120:5] expanded
320327

321328
// CHECK-EXPANDED: {{^}} `-Accessors {{.*}} scope_map.(file).StructContainsAbstractStorageDecls.computed@{{.*}}scope_map.swift:123:7 [123:21 - 129:3] expanded
322329
// CHECK-EXPANDED-NEXT: {{^}} |-AbstractFunctionDecl {{.*}} _ [124:5 - 126:5] expanded
323330
// CHECK-EXPANDED-NEXT: {{^}} `-AbstractFunctionParams {{.*}} _ param 0:0 [124:5 - 126:5] expanded
331+
// CHECK-EXPANDED-NEXT: `-AbstractFunctionBody {{.*}} _ [124:9 - 126:5] expanded
324332
// CHECK-EXPANDED-NEXT: {{^}} `-BraceStmt {{.*}} [124:9 - 126:5] expanded
325333
// CHECK-EXPANDED-NEXT: {{^}} `-AbstractFunctionDecl {{.*}} _ [127:5 - 128:5] expanded
326334
// CHECK-EXPANDED-NEXT: {{^}} `-AbstractFunctionParams {{.*}} _ param 0:0 [127:5 - 128:5] expanded
327335
// CHECK-EXPANDED-NEXT: {{^}} `-AbstractFunctionParams {{.*}} _ param 1:0 [127:5 - 128:5] expanded
336+
// CHECK-EXPANDED-NEXT: `-AbstractFunctionBody {{.*}} _ [127:9 - 128:5] expanded
328337
// CHECK-EXPANDED-NEXT: {{^}} `-BraceStmt {{.*}} [127:9 - 128:5] expanded
329338

330339
// CHECK-EXPANDED: {{^}}|-TypeOrExtensionBody {{.*}} 'ClassWithComputedProperties' [132:35 - 140:1] expanded
331340
// CHECK-EXPANDED: {{^}} `-Accessors {{.*}} scope_map.(file).ClassWithComputedProperties.willSetProperty@{{.*}}scope_map.swift:133:7 [133:32 - 135:3] expanded
332341
// CHECK-EXPANDED-NEXT: {{^}} `-AbstractFunctionDecl {{.*}} _ [134:5 - 134:15] expanded
333342
// CHECK-EXPANDED-NEXT: {{^}} `-AbstractFunctionParams {{.*}} _ param 0:0 [134:5 - 134:15] expanded
334343
// CHECK-EXPANDED-NEXT: {{^}} `-AbstractFunctionParams {{.*}} _ param 1:0 [134:5 - 134:15] expanded
335-
// CHECK-EXPANDED-NEXT: {{^}} `-BraceStmt {{.*}} [134:13 - 134:15] expanded
344+
// CHECK-EXPANDED: {{^}} `-BraceStmt {{.*}} [134:13 - 134:15] expanded
336345
// CHECK-EXPANDED: {{^}} `-Accessors {{.*}} scope_map.(file).ClassWithComputedProperties.didSetProperty@{{.*}}scope_map.swift:137:7 [137:31 - 139:3] expanded
337346
// CHECK-EXPANDED-NEXT: {{^}} `-AbstractFunctionDecl {{.*}} _ [138:5 - 138:14] expanded
338347
// CHECK-EXPANDED-NEXT: {{^}} `-AbstractFunctionParams {{.*}} _ param 0:0 [138:5 - 138:14] expanded
339348
// CHECK-EXPANDED-NEXT: {{^}} `-AbstractFunctionParams {{.*}} _ param 1:0 [138:5 - 138:14] expanded
340-
// CHECK-EXPANDED-NEXT: {{^}} `-BraceStmt {{.*}} [138:12 - 138:14] expanded
349+
// CHECK-EXPANDED: {{^}} `-BraceStmt {{.*}} [138:12 - 138:14] expanded
341350

342351
// CHECK-EXPANDED: {{^}} `-AbstractFunctionParams {{.*}} funcWithComputedProperties(i:) param 0:0 [142:36 - 155:1] expanded
343-
// CHECK-EXPANDED-NEXT: {{^}} `-BraceStmt {{.*}} [142:41 - 155:1] expanded
352+
// CHECK-EXPANDED: {{^}} `-BraceStmt {{.*}} [142:41 - 155:1] expanded
344353
// CHECK-EXPANDED: {{^}} |-Accessors {{.*}} scope_map.(file).func decl.computed@{{.*}}scope_map.swift:143:7 [143:21 - 149:3] expanded
345354
// CHECK-EXPANDED-NEXT: {{^}} |-AbstractFunctionDecl {{.*}} _ [144:5 - 145:5] expanded
346355
// CHECK-EXPANDED-NEXT: {{^}} `-AbstractFunctionParams {{.*}} _ param 0:0 [144:5 - 145:5] expanded
347-
// CHECK-EXPANDED-NEXT: {{^}} `-BraceStmt {{.*}} [144:9 - 145:5] expanded
356+
// CHECK-EXPANDED: {{^}} `-BraceStmt {{.*}} [144:9 - 145:5] expanded
348357
// CHECK-EXPANDED-NEXT: {{^}} `-AbstractFunctionDecl {{.*}} _ [146:5 - 148:5] expanded
349-
// CHECK-EXPANDED-NEXT: {{^}} `-BraceStmt {{.*}} [146:9 - 148:5] expanded
358+
// CHECK-EXPANDED: {{^}} `-BraceStmt {{.*}} [146:9 - 148:5] expanded
350359
// CHECK-EXPANDED: {{^}} `-AfterPatternBinding {{.*}} entry 0 [149:3 - 155:1] expanded
351360
// CHECK-EXPANDED: {{^}} `-AfterPatternBinding {{.*}} entry 1 [149:36 - 155:1] expanded
352361
// CHECK-EXPANDED: {{^}} `-AfterPatternBinding {{.*}} entry 2 [150:21 - 155:1] expanded
353362
// CHECK-EXPANDED-NEXT: {{^}} `-LocalDeclaration {{.*}} [150:25 - 155:1] expanded
354363
// CHECK-EXPANDED-NEXT: {{^}} |-AbstractFunctionDecl {{.*}} _ [150:25 - 152:3] expanded
355-
// CHECK-EXPANDED-NEXT: {{^}} `-BraceStmt {{.*}} [150:25 - 152:3] expanded
364+
// CHECK-EXPANDED: {{^}} `-BraceStmt {{.*}} [150:25 - 152:3] expanded
356365
// CHECK-EXPANDED-NEXT: {{^}} `-BraceStmt {{.*}} [154:6 - 154:8] expanded
357366

358367
// CHECK-EXPANDED: |-AbstractFunctionDecl {{.*}} closures() [157:1 - 162:1] expanded
359-
// CHECK-EXPANDED-NEXT: {{^}} `-BraceStmt {{.*}} [157:17 - 162:1] expanded
368+
// CHECK-EXPANDED: {{^}} `-BraceStmt {{.*}} [157:17 - 162:1] expanded
360369
// CHECK-EXPANDED-NEXT: {{^}} `-Preexpanded {{.*}} [158:10 - 161:19] expanded
361370
// CHECK-EXPANDED-NEXT: {{^}} |-Closure {{.*}} [158:10 - 160:3] expanded
362371
// CHECK-EXPANDED-NEXT: {{^}} `-BraceStmt {{.*}} [158:10 - 160:3] expanded
@@ -388,7 +397,7 @@ func localPatternsWithSharedType() {
388397
// CHECK-EXPANDED-NEXT: `-AbstractFunctionParams {{.*}} _ param 1:1 [183:39 - 183:39] expanded
389398

390399
// CHECK-EXPANDED: `-AbstractFunctionDecl {{.*}} localPatternsWithSharedType() [186:1 - 188:1] expanded
391-
// CHECK-EXPANDED-NEXT: `-BraceStmt {{.*}} [186:36 - 188:1] expanded
400+
// CHECK-EXPANDED: `-BraceStmt {{.*}} [186:36 - 188:1] expanded
392401
// CHECK-EXPANDED-NEXT: `-PatternBinding {{.*}} entry 0 [187:7 - 188:1] expanded
393402
// CHECK-EXPANDED-NEXT: `-AfterPatternBinding {{.*}} entry 0 [187:7 - 188:1] expanded
394403
// CHECK-EXPANDED-NEXT: `-PatternBinding {{.*}} entry 1 [187:10 - 188:1] expanded

test/NameBinding/scope_map_lookup.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,11 @@ func functionParamScopes(x: Int, y: Int = x) -> Int {
88
return x + y
99
}
1010

11+
// Name binding in instance methods.
12+
class C1 {
13+
var x = 0
14+
15+
var hashValue: Int {
16+
return x
17+
}
18+
}

0 commit comments

Comments
 (0)