@@ -47,15 +47,15 @@ ParserResult<Expr> Parser::parseExprImpl(Diag<> Message,
4747 // Only do this if we're parsing a pattern, to improve QoI on malformed
4848 // expressions followed by (e.g.) let/var decls.
4949 //
50- if (InVarOrLetPattern && isOnlyStartOfMatchingPattern ()) {
50+ if (InBindingPattern && isOnlyStartOfMatchingPattern ()) {
5151 ParserResult<Pattern> pattern = parseMatchingPattern (/* isExprBasic*/ false );
5252 if (pattern.hasCodeCompletion ())
5353 return makeParserCodeCompletionResult<Expr>();
5454 if (pattern.isNull ())
5555 return nullptr ;
5656 return makeParserResult (new (Context) UnresolvedPatternExpr (pattern.get ()));
5757 }
58-
58+
5959 return parseExprSequence (Message, isExprBasic,
6060 /* forConditionalDirective*/ false );
6161}
@@ -275,7 +275,7 @@ ParserResult<Expr> Parser::parseExprSequence(Diag<> Message,
275275 // pattern, then an assignment doesn't make sense. In a "if let"
276276 // statement the equals is the start of the condition, so don't parse it
277277 // as a binary operator.
278- if (InVarOrLetPattern )
278+ if (InBindingPattern )
279279 goto done;
280280 SourceLoc equalsLoc = consumeToken ();
281281 auto *assign = new (Context) AssignExpr (equalsLoc);
@@ -1634,18 +1634,19 @@ ParserResult<Expr> Parser::parseExprPrimary(Diag<> ID, bool isExprBasic) {
16341634 // Parse and return this as an UnresolvedPatternExpr around a binding. This
16351635 // will be resolved (or rejected) by sema when the overall refutable pattern
16361636 // it transformed from an expression into a pattern.
1637- if ((InVarOrLetPattern == IVOLP_ImplicitlyImmutable ||
1638- InVarOrLetPattern == IVOLP_InVar ||
1639- InVarOrLetPattern == IVOLP_InLet ) &&
1637+ if ((InBindingPattern == PatternBindingState::ImplicitlyImmutable ||
1638+ InBindingPattern == PatternBindingState::InVar ||
1639+ InBindingPattern == PatternBindingState::InLet ) &&
16401640 // If we have "case let x." or "case let x(", we parse x as a normal
16411641 // name, not a binding, because it is the start of an enum pattern or
16421642 // call pattern.
16431643 peekToken ().isNot (tok::period, tok::period_prefix, tok::l_paren)) {
16441644 Identifier name;
16451645 SourceLoc loc = consumeIdentifier (name, /* diagnoseDollarPrefix=*/ false );
1646- auto introducer = (InVarOrLetPattern != IVOLP_InVar
1647- ? VarDecl::Introducer::Let
1648- : VarDecl::Introducer::Var);
1646+ // If we have an inout/let/var, set that as our introducer. otherwise
1647+ // default to Let.
1648+ auto introducer =
1649+ InBindingPattern.getIntroducer ().getValueOr (VarDecl::Introducer::Let);
16491650 auto pattern = createBindingFromPattern (loc, name, introducer);
16501651 return makeParserResult (new (Context) UnresolvedPatternExpr (pattern));
16511652 }
@@ -1799,7 +1800,8 @@ ParserResult<Expr> Parser::parseExprPrimary(Diag<> ID, bool isExprBasic) {
17991800 Result.setHasCodeCompletionAndIsError ();
18001801 if (IDECallbacks &&
18011802 // We cannot code complete anything after var/let.
1802- (!InVarOrLetPattern || InVarOrLetPattern == IVOLP_InMatchingPattern)) {
1803+ (!InBindingPattern ||
1804+ InBindingPattern == PatternBindingState::InMatchingPattern)) {
18031805 if (InPoundIfEnvironment) {
18041806 IDECallbacks->completePlatformCondition ();
18051807 } else {
@@ -2785,8 +2787,8 @@ ParserResult<Expr> Parser::parseExprClosure() {
27852787 ParserStatus Status;
27862788 // We may be parsing this closure expr in a matching pattern context. If so,
27872789 // reset our state to not be in a pattern for any recursive pattern parses.
2788- llvm::SaveAndRestore<decltype (InVarOrLetPattern)>
2789- T (InVarOrLetPattern, IVOLP_NotInVarOrLet );
2790+ llvm::SaveAndRestore<decltype (InBindingPattern)> T (
2791+ InBindingPattern, PatternBindingState::NotInBinding );
27902792
27912793 // Reset async attribute in parser context.
27922794 llvm::SaveAndRestore<bool > AsyncAttr (InPatternWithAsyncAttribute, false );
0 commit comments