@@ -88,32 +88,6 @@ namespace {
8888 SmallVectorImpl<LookupResultEntry> &results) const ;
8989 };
9090
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
11791 // Inputs
11892 const DeclNameRef Name;
11993 DeclContext *const DC;
@@ -128,12 +102,7 @@ namespace {
128102 const Options options;
129103 const bool isOriginallyTypeLookup;
130104 const NLOptions baseNLOptions;
131- // Transputs
132- #ifndef NDEBUG
133- InstrumentedNamedDeclConsumer Consumer;
134- #else
135- NamedDeclConsumer Consumer;
136- #endif
105+
137106 // Outputs
138107 SmallVectorImpl<LookupResultEntry> &Results;
139108 size_t &IndexOfFirstOuterResult;
@@ -279,11 +248,6 @@ UnqualifiedLookupFactory::UnqualifiedLookupFactory(
279248 options(options),
280249 isOriginallyTypeLookup(options.contains(Flags::TypeLookup)),
281250 baseNLOptions(computeBaseNLOptions(options, isOriginallyTypeLookup)),
282- #ifdef NDEBUG
283- Consumer (Name, Results, isOriginallyTypeLookup),
284- #else
285- Consumer (this , Name, Results, isOriginallyTypeLookup),
286- #endif
287251 Results(Results),
288252 IndexOfFirstOuterResult(IndexOfFirstOuterResult)
289253{}
@@ -675,9 +639,6 @@ UnqualifiedLookupRequest::evaluate(Evaluator &evaluator,
675639}
676640
677641#pragma mark debugging
678- #ifndef NDEBUG
679- void UnqualifiedLookupFactory::InstrumentedNamedDeclConsumer::anchor () {}
680- #endif
681642
682643void UnqualifiedLookupFactory::ResultFinderForTypeContext::dump () const {
683644 (void )factory;
@@ -775,13 +736,16 @@ namespace {
775736
776737class ASTScopeDeclConsumerForLocalLookup
777738 : public AbstractASTScopeDeclConsumer {
778- SmallVectorImpl<ValueDecl *> &results;
779739 DeclName name;
740+ bool stopAfterInnermostBraceStmt;
741+ SmallVectorImpl<ValueDecl *> &results;
780742
781743public:
782744 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) {}
785749
786750 bool consume (ArrayRef<ValueDecl *> values, DeclVisibilityKind vis,
787751 NullablePtr<DeclContext> baseDC) override {
@@ -792,14 +756,18 @@ class ASTScopeDeclConsumerForLocalLookup
792756 results.push_back (value);
793757 }
794758
795- return ! results.empty ();
759+ return (!stopAfterInnermostBraceStmt && ! results.empty () );
796760 }
797761
798762 bool lookInMembers (DeclContext *const ,
799763 NominalTypeDecl *const ) override {
800764 return true ;
801765 }
802766
767+ bool finishLookupInBraceStmt (BraceStmt *stmt) override {
768+ return stopAfterInnermostBraceStmt;
769+ }
770+
803771#ifndef NDEBUG
804772 void startingNextLookupStep () override {}
805773 void finishingLookup (std::string) const override {}
@@ -812,15 +780,19 @@ class ASTScopeDeclConsumerForLocalLookup
812780// / Lookup that only finds local declarations and does not trigger
813781// / interface type computation.
814782void ASTScope::lookupLocalDecls (SourceFile *sf, DeclName name, SourceLoc loc,
783+ bool stopAfterInnermostBraceStmt,
815784 SmallVectorImpl<ValueDecl *> &results) {
816- ASTScopeDeclConsumerForLocalLookup consumer (results, name);
785+ ASTScopeDeclConsumerForLocalLookup consumer (name, stopAfterInnermostBraceStmt,
786+ results);
817787 ASTScope::unqualifiedLookup (sf, loc, consumer);
818788}
819789
820790ValueDecl *ASTScope::lookupSingleLocalDecl (SourceFile *sf, DeclName name,
821791 SourceLoc loc) {
822792 SmallVector<ValueDecl *, 1 > result;
823- ASTScope::lookupLocalDecls (sf, name, loc, result);
793+ ASTScope::lookupLocalDecls (sf, name, loc,
794+ /* finishLookupInBraceStmt=*/ false ,
795+ result);
824796 if (result.size () != 1 )
825797 return nullptr ;
826798 return result[0 ];
0 commit comments