@@ -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>]
854865let (| 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