Skip to content

Commit a3036ba

Browse files
committed
UnwrapUseBang
1 parent f7c9620 commit a3036ba

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

src/Compiler/Checking/Expressions/CheckComputationExpressions.fs

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -850,6 +850,17 @@ let (|OptionalSequential|) e =
850850
| SynExpr.Sequential(debugPoint = _sp; isTrueSeq = true; expr1 = dataComp1; expr2 = dataComp2) -> (dataComp1, Some dataComp2)
851851
| _ -> (e, None)
852852

853+
[<return: Struct>]
854+
let rec (|UnwrapUseBang|_|) supportsUseBangBindingValueDiscard pat =
855+
match pat with
856+
| SynPat.Named(ident = SynIdent(id, _); isThisVal = false) -> ValueSome(id, pat)
857+
| SynPat.LongIdent(longDotId = SynLongIdent(id = [ id ])) -> ValueSome(id, pat)
858+
| SynPat.Wild(m) when supportsUseBangBindingValueDiscard ->
859+
let tmpIdent = mkSynId m "_"
860+
ValueSome(tmpIdent, SynPat.Named(SynIdent(tmpIdent, None), false, None, m))
861+
| SynPat.Paren(pat = UnwrapUseBang supportsUseBangBindingValueDiscard (id, pat)) -> ValueSome(id, pat)
862+
| _ -> ValueNone
863+
853864
[<return: Struct>]
854865
let (|ExprAsUseBang|_|) expr =
855866
match expr with
@@ -1823,14 +1834,12 @@ let rec TryTranslateComputationExpression
18231834
requireBuilderMethod "Using" mBind cenv ceenv.env ceenv.ad ceenv.builderTy mBind
18241835
requireBuilderMethod "Bind" mBind cenv ceenv.env ceenv.ad ceenv.builderTy mBind
18251836

1837+
let supportsUseBangBindingValueDiscard =
1838+
ceenv.cenv.g.langVersion.SupportsFeature LanguageFeature.UseBangBindingValueDiscard
1839+
18261840
let ident, pat =
18271841
match pat with
1828-
| SynPat.Named(ident = SynIdent(id, _); isThisVal = false) -> id, pat
1829-
| SynPat.LongIdent(longDotId = SynLongIdent(id = [ id ])) -> id, pat
1830-
| SynPat.Wild(m) when ceenv.cenv.g.langVersion.SupportsFeature LanguageFeature.UseBangBindingValueDiscard ->
1831-
// Special handling for wildcard (_) patterns
1832-
let tmpIdent = mkSynId m "_"
1833-
tmpIdent, SynPat.Named(SynIdent(tmpIdent, None), false, None, m)
1842+
| UnwrapUseBang supportsUseBangBindingValueDiscard (ident, pat) -> ident, pat
18341843
| _ -> error (Error(FSComp.SR.tcInvalidUseBangBinding (), pat.Range))
18351844

18361845
let bindExpr =

0 commit comments

Comments
 (0)