@@ -88,32 +88,6 @@ namespace {
88
88
SmallVectorImpl<LookupResultEntry> &results) const ;
89
89
};
90
90
91
- enum class AddGenericParameters { Yes, No };
92
-
93
- #ifndef NDEBUG
94
- // / A consumer for debugging that lets the UnqualifiedLookupFactory know when
95
- // / finding something.
96
- class InstrumentedNamedDeclConsumer : public NamedDeclConsumer {
97
- virtual void anchor () override ;
98
- UnqualifiedLookupFactory *factory;
99
-
100
- public:
101
- InstrumentedNamedDeclConsumer (UnqualifiedLookupFactory *factory,
102
- DeclNameRef name,
103
- SmallVectorImpl<LookupResultEntry> &results,
104
- bool isTypeLookup)
105
- : NamedDeclConsumer(name, results, isTypeLookup), factory(factory) {}
106
-
107
- virtual void foundDecl (ValueDecl *VD, DeclVisibilityKind Reason,
108
- DynamicLookupInfo dynamicLookupInfo = {}) override {
109
- unsigned before = results.size ();
110
- NamedDeclConsumer::foundDecl (VD, Reason, dynamicLookupInfo);
111
- unsigned after = results.size ();
112
- if (after > before)
113
- factory->addedResult (results.back ());
114
- }
115
- };
116
- #endif
117
91
// Inputs
118
92
const DeclNameRef Name;
119
93
DeclContext *const DC;
@@ -128,12 +102,7 @@ namespace {
128
102
const Options options;
129
103
const bool isOriginallyTypeLookup;
130
104
const NLOptions baseNLOptions;
131
- // Transputs
132
- #ifndef NDEBUG
133
- InstrumentedNamedDeclConsumer Consumer;
134
- #else
135
- NamedDeclConsumer Consumer;
136
- #endif
105
+
137
106
// Outputs
138
107
SmallVectorImpl<LookupResultEntry> &Results;
139
108
size_t &IndexOfFirstOuterResult;
@@ -279,11 +248,6 @@ UnqualifiedLookupFactory::UnqualifiedLookupFactory(
279
248
options(options),
280
249
isOriginallyTypeLookup(options.contains(Flags::TypeLookup)),
281
250
baseNLOptions(computeBaseNLOptions(options, isOriginallyTypeLookup)),
282
- #ifdef NDEBUG
283
- Consumer (Name, Results, isOriginallyTypeLookup),
284
- #else
285
- Consumer (this , Name, Results, isOriginallyTypeLookup),
286
- #endif
287
251
Results(Results),
288
252
IndexOfFirstOuterResult(IndexOfFirstOuterResult)
289
253
{}
@@ -675,9 +639,6 @@ UnqualifiedLookupRequest::evaluate(Evaluator &evaluator,
675
639
}
676
640
677
641
#pragma mark debugging
678
- #ifndef NDEBUG
679
- void UnqualifiedLookupFactory::InstrumentedNamedDeclConsumer::anchor () {}
680
- #endif
681
642
682
643
void UnqualifiedLookupFactory::ResultFinderForTypeContext::dump () const {
683
644
(void )factory;
@@ -775,13 +736,16 @@ namespace {
775
736
776
737
class ASTScopeDeclConsumerForLocalLookup
777
738
: public AbstractASTScopeDeclConsumer {
778
- SmallVectorImpl<ValueDecl *> &results;
779
739
DeclName name;
740
+ bool stopAfterInnermostBraceStmt;
741
+ SmallVectorImpl<ValueDecl *> &results;
780
742
781
743
public:
782
744
ASTScopeDeclConsumerForLocalLookup (
783
- SmallVectorImpl<ValueDecl *> &results, DeclName name)
784
- : results(results), name(name) {}
745
+ DeclName name, bool stopAfterInnermostBraceStmt,
746
+ SmallVectorImpl<ValueDecl *> &results)
747
+ : name(name), stopAfterInnermostBraceStmt(stopAfterInnermostBraceStmt),
748
+ results (results) {}
785
749
786
750
bool consume (ArrayRef<ValueDecl *> values, DeclVisibilityKind vis,
787
751
NullablePtr<DeclContext> baseDC) override {
@@ -792,14 +756,18 @@ class ASTScopeDeclConsumerForLocalLookup
792
756
results.push_back (value);
793
757
}
794
758
795
- return ! results.empty ();
759
+ return (!stopAfterInnermostBraceStmt && ! results.empty () );
796
760
}
797
761
798
762
bool lookInMembers (DeclContext *const ,
799
763
NominalTypeDecl *const ) override {
800
764
return true ;
801
765
}
802
766
767
+ bool finishLookupInBraceStmt (BraceStmt *stmt) override {
768
+ return stopAfterInnermostBraceStmt;
769
+ }
770
+
803
771
#ifndef NDEBUG
804
772
void startingNextLookupStep () override {}
805
773
void finishingLookup (std::string) const override {}
@@ -812,15 +780,19 @@ class ASTScopeDeclConsumerForLocalLookup
812
780
// / Lookup that only finds local declarations and does not trigger
813
781
// / interface type computation.
814
782
void ASTScope::lookupLocalDecls (SourceFile *sf, DeclName name, SourceLoc loc,
783
+ bool stopAfterInnermostBraceStmt,
815
784
SmallVectorImpl<ValueDecl *> &results) {
816
- ASTScopeDeclConsumerForLocalLookup consumer (results, name);
785
+ ASTScopeDeclConsumerForLocalLookup consumer (name, stopAfterInnermostBraceStmt,
786
+ results);
817
787
ASTScope::unqualifiedLookup (sf, loc, consumer);
818
788
}
819
789
820
790
ValueDecl *ASTScope::lookupSingleLocalDecl (SourceFile *sf, DeclName name,
821
791
SourceLoc loc) {
822
792
SmallVector<ValueDecl *, 1 > result;
823
- ASTScope::lookupLocalDecls (sf, name, loc, result);
793
+ ASTScope::lookupLocalDecls (sf, name, loc,
794
+ /* finishLookupInBraceStmt=*/ false ,
795
+ result);
824
796
if (result.size () != 1 )
825
797
return nullptr ;
826
798
return result[0 ];
0 commit comments