@@ -120,6 +120,14 @@ void BridgedDecl_attachParsedAttrs(BridgedDecl decl,
120120 decl.unbridged ()->attachParsedAttrs (attrs.unbridged ());
121121}
122122
123+ void BridgedDecl_forEachDeclToHoist (BridgedDecl cDecl,
124+ BridgedSwiftClosure closure) {
125+ cDecl.unbridged ()->forEachDeclToHoist ([&](Decl *D) {
126+ BridgedDecl bridged (D);
127+ closure (&bridged);
128+ });
129+ }
130+
123131BridgedAccessorDecl BridgedAccessorDecl_createParsed (
124132 BridgedASTContext cContext, BridgedDeclContext cDeclContext,
125133 BridgedAccessorKind cKind, BridgedAbstractStorageDecl cStorage,
@@ -150,6 +158,7 @@ BridgedPatternBindingDecl BridgedPatternBindingDecl_createParsed(
150158 VD->attachParsedAttrs (cAttrs.unbridged ());
151159 VD->setStatic (isStatic);
152160 VD->setIntroducer (introducer);
161+ VD->setTopLevelGlobal (isa<TopLevelCodeDecl>(declContext));
153162 });
154163
155164 entries.emplace_back (pattern, entry.equalLoc .unbridged (),
@@ -345,32 +354,15 @@ static void setParsedMembers(IterableDeclContext *IDC, BridgedArrayRef cMembers,
345354
346355 Fingerprint fp = cFingerprint.unbridged ();
347356
348- SmallVector<Decl *> members;
349- for (auto *decl : cMembers.unbridged <Decl *>()) {
350- members.push_back (decl);
351-
352- // Add any variables bound to the list of decls.
353- if (auto *PBD = dyn_cast<PatternBindingDecl>(decl)) {
354- for (auto idx : range (PBD->getNumPatternEntries ())) {
355- PBD->getPattern (idx)->forEachVariable (
356- [&](VarDecl *VD) { members.push_back (VD); });
357- }
358- }
359- // Each enum case element is also part of the members list according to the
360- // legacy parser.
361- if (auto *ECD = dyn_cast<EnumCaseDecl>(decl)) {
362- for (auto *EED : ECD->getElements ()) {
363- members.push_back (EED);
364- }
365- }
366- }
357+ ArrayRef<Decl *> members =
358+ ctx.AllocateTransform <Decl *>(cMembers.unbridged <BridgedDecl>(),
359+ [](auto decl) { return decl.unbridged (); });
367360
368361 IDC->setMaybeHasOperatorDeclarations ();
369362 IDC->setMaybeHasNestedClassDeclarations ();
370363 // FIXME: Split requests. e.g. DeclMembersFingerprintRequest.
371- ctx.evaluator .cacheOutput (
372- ParseMembersRequest{IDC},
373- FingerprintAndMembers{fp, ctx.AllocateCopy (members)});
364+ ctx.evaluator .cacheOutput (ParseMembersRequest{IDC},
365+ FingerprintAndMembers{fp, members});
374366}
375367
376368void BridgedNominalTypeDecl_setParsedMembers (BridgedNominalTypeDecl cDecl,
@@ -660,32 +652,15 @@ BridgedSubscriptDecl BridgedSubscriptDecl_createParsed(
660652 cGenericParamList.unbridged ());
661653}
662654
663- BridgedTopLevelCodeDecl BridgedTopLevelCodeDecl_createStmt (
664- BridgedASTContext cContext, BridgedDeclContext cDeclContext,
665- BridgedSourceLoc cStartLoc, BridgedStmt statement,
666- BridgedSourceLoc cEndLoc) {
667- ASTContext &context = cContext.unbridged ();
668- DeclContext *declContext = cDeclContext.unbridged ();
669-
670- auto *S = statement.unbridged ();
671- auto Brace = BraceStmt::create (context, cStartLoc.unbridged (), {S},
672- cEndLoc.unbridged (),
673- /* Implicit=*/ true );
674- return new (context) TopLevelCodeDecl (declContext, Brace);
655+ BridgedTopLevelCodeDecl
656+ BridgedTopLevelCodeDecl_create (BridgedASTContext cContext,
657+ BridgedDeclContext cDeclContext) {
658+ return new (cContext.unbridged ()) TopLevelCodeDecl (cDeclContext.unbridged ());
675659}
676660
677- BridgedTopLevelCodeDecl BridgedTopLevelCodeDecl_createExpr (
678- BridgedASTContext cContext, BridgedDeclContext cDeclContext,
679- BridgedSourceLoc cStartLoc, BridgedExpr expression,
680- BridgedSourceLoc cEndLoc) {
681- ASTContext &context = cContext.unbridged ();
682- DeclContext *declContext = cDeclContext.unbridged ();
683-
684- auto *E = expression.unbridged ();
685- auto Brace = BraceStmt::create (context, cStartLoc.unbridged (), {E},
686- cEndLoc.unbridged (),
687- /* Implicit=*/ true );
688- return new (context) TopLevelCodeDecl (declContext, Brace);
661+ void BridgedTopLevelCodeDecl_setBody (BridgedTopLevelCodeDecl cDecl,
662+ BridgedBraceStmt cBody) {
663+ cDecl.unbridged ()->setBody (cBody.unbridged ());
689664}
690665
691666BridgedVarDecl BridgedVarDec_createImplicitStringInterpolationVar (
0 commit comments