|
20 | 20 | #include "swift/AST/Expr.h" |
21 | 21 | #include "swift/AST/GenericParamList.h" |
22 | 22 | #include "swift/AST/Identifier.h" |
| 23 | +#include "swift/AST/Initializer.h" |
23 | 24 | #include "swift/AST/ParameterList.h" |
24 | 25 | #include "swift/AST/ParseRequests.h" |
25 | 26 | #include "swift/AST/Pattern.h" |
@@ -324,36 +325,58 @@ void BridgedDiagnostic_finish(BridgedDiagnostic cDiag) { |
324 | 325 | delete diag; |
325 | 326 | } |
326 | 327 |
|
| 328 | +//===----------------------------------------------------------------------===// |
| 329 | +// MARK: DeclContexts |
| 330 | +//===----------------------------------------------------------------------===// |
| 331 | + |
| 332 | +bool BridgedDeclContext_isLocalContext(BridgedDeclContext cDeclContext) { |
| 333 | + return cDeclContext.unbridged()->isLocalContext(); |
| 334 | +} |
| 335 | + |
| 336 | +BridgedPatternBindingInitializer |
| 337 | +BridgedPatternBindingInitializer_create(BridgedDeclContext cDeclContext) { |
| 338 | + auto *dc = cDeclContext.unbridged(); |
| 339 | + return new (dc->getASTContext()) PatternBindingInitializer(dc); |
| 340 | +} |
| 341 | + |
| 342 | +BridgedDeclContext BridgedPatternBindingInitializer_asDeclContext( |
| 343 | + BridgedPatternBindingInitializer cInit) { |
| 344 | + return cInit.unbridged(); |
| 345 | +} |
| 346 | + |
327 | 347 | //===----------------------------------------------------------------------===// |
328 | 348 | // MARK: Decls |
329 | 349 | //===----------------------------------------------------------------------===// |
330 | 350 |
|
331 | 351 | BridgedPatternBindingDecl BridgedPatternBindingDecl_createParsed( |
332 | 352 | BridgedASTContext cContext, BridgedDeclContext cDeclContext, |
333 | | - BridgedSourceLoc cBindingKeywordLoc, BridgedPattern cPattern, |
334 | | - BridgedExpr initExpr, bool isStatic, bool isLet) { |
| 353 | + BridgedSourceLoc cBindingKeywordLoc, BridgedArrayRef cBindingEntries, |
| 354 | + bool isStatic, bool isLet) { |
335 | 355 | ASTContext &context = cContext.unbridged(); |
336 | 356 | DeclContext *declContext = cDeclContext.unbridged(); |
337 | 357 |
|
338 | | - Pattern *pattern = cPattern.unbridged(); |
| 358 | + auto introducer = isLet ? VarDecl::Introducer::Let : VarDecl::Introducer::Var; |
339 | 359 |
|
340 | | - VarDecl::Introducer introducer = |
341 | | - isLet ? VarDecl::Introducer::Let : VarDecl::Introducer::Var; |
| 360 | + SmallVector<PatternBindingEntry, 4> entries; |
| 361 | + for (auto &entry : cBindingEntries.unbridged<BridgedPatternBindingEntry>()) { |
| 362 | + auto *pattern = entry.pattern.unbridged(); |
| 363 | + |
| 364 | + // Configure all vars. |
| 365 | + pattern->forEachVariable([&](VarDecl *VD) { |
| 366 | + VD->setStatic(isStatic); |
| 367 | + VD->setIntroducer(introducer); |
| 368 | + }); |
| 369 | + |
| 370 | + entries.emplace_back(pattern, entry.equalLoc.unbridged(), |
| 371 | + entry.init.unbridged(), entry.initContext.unbridged()); |
| 372 | + } |
342 | 373 |
|
343 | | - // Configure all vars. |
344 | | - pattern->forEachVariable([&](VarDecl *VD) { |
345 | | - VD->setStatic(isStatic); |
346 | | - VD->setIntroducer(introducer); |
347 | | - }); |
348 | | - |
349 | | - return PatternBindingDecl::create(context, |
350 | | - /*StaticLoc=*/SourceLoc(), |
351 | | - // FIXME: 'class' spelling kind. |
352 | | - isStatic ? StaticSpellingKind::KeywordStatic |
353 | | - : StaticSpellingKind::None, |
354 | | - cBindingKeywordLoc.unbridged(), pattern, |
355 | | - /*EqualLoc=*/SourceLoc(), // FIXME |
356 | | - initExpr.unbridged(), declContext); |
| 374 | + return PatternBindingDecl::create( |
| 375 | + context, |
| 376 | + /*StaticLoc=*/SourceLoc(), |
| 377 | + // FIXME: 'class' spelling kind. |
| 378 | + isStatic ? StaticSpellingKind::KeywordStatic : StaticSpellingKind::None, |
| 379 | + cBindingKeywordLoc.unbridged(), entries, declContext); |
357 | 380 | } |
358 | 381 |
|
359 | 382 | BridgedParamDecl BridgedParamDecl_createParsed( |
|
0 commit comments