diff --git a/src/fsharp/pars.fsy b/src/fsharp/pars.fsy index cb2b0a7020b4322df34335c7c66fe83bde860b67..64011e2c40742dd8413e7d139fbe085d15a58f57 100644 --- a/src/fsharp/pars.fsy +++ b/src/fsharp/pars.fsy @@ -1924,6 +1924,11 @@ atomicPatternLongIdent: } | GLOBAL DOT pathOp { let (LongIdentWithDots(lid,dotms)) = $3 in (None,LongIdentWithDots(ident(MangledGlobalName,rhs parseState 1) :: lid, rhs parseState 2 :: dotms)) } | pathOp { (None,$1) } + | access UNDERSCORE DOT pathOp { + if not (parseState.LexBuffer.SupportsFeature LanguageFeature.SingleUnderscorePattern) then + raiseParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnexpectedSymbolDot()) + let (LongIdentWithDots(lid,dotms)) = $4 in (Some($1),LongIdentWithDots(ident("_",rhs parseState 1)::lid, rhs parseState 2::dotms)) + } | access pathOp { (Some($1), $2) } diff --git a/tests/fsharp/core/members/self-identifier/version47/test.fs b/tests/fsharp/core/members/self-identifier/version47/test.fs index 99629250b65805f7ed9d5e543716db923366d206..76bc777ae0d547e282290763e8dac8394e97d40d 100644 --- a/tests/fsharp/core/members/self-identifier/version47/test.fs +++ b/tests/fsharp/core/members/self-identifier/version47/test.fs @@ -26,12 +26,30 @@ type MyStructWithUnderscoreIdentifier = member _.MethodWithUnderscoreSelf() = true member __.MethodWithDoubleUnderscoreSelf() = true member _E.MethodWithUnderscoreESelf() = true + member private _.PrivateMethodWithUnderscoreSelf() = true + member private __.PrivateMethodWithDoubleUnderscoreSelf() = true + member private _E.PrivateMethodWithUnderscoreESelf() = true + member inline _.InlineMethodWithUnderscoreSelf() = true + member inline __.InlineMethodWithDoubleUnderscoreSelf() = true + member inline _E.InlineMethodWithUnderscoreESelf() = true + member inline private _.InlinePrivateMethodWithUnderscoreSelf() = true + member inline private __.InlinePrivateMethodWithDoubleUnderscoreSelf() = true + member inline private _E.InlinePrivateMethodWithUnderscoreESelf() = true type MyClassWithUnderscoreIdentifier () = class member _.MethodWithUnderscoreSelf() = true member __.MethodWithDoubleUnderscoreSelf() = true member _E.MethodWithUnderscoreESelf() = true + member private _.PrivateMethodWithUnderscoreSelf() = true + member private __.PrivateMethodWithDoubleUnderscoreSelf() = true + member private _E.PrivateMethodWithUnderscoreESelf() = true + member inline _.InlineMethodWithUnderscoreSelf() = true + member inline __.InlineMethodWithDoubleUnderscoreSelf() = true + member inline _E.InlineMethodWithUnderscoreESelf() = true + member inline private _.InlinePrivateMethodWithUnderscoreSelf() = true + member inline private __.InlinePrivateMethodWithDoubleUnderscoreSelf() = true + member inline private _E.InlinePrivateMethodWithUnderscoreESelf() = true end type MyStructTypeWithUnderscoreIdentifier = @@ -39,6 +57,15 @@ type MyStructTypeWithUnderscoreIdentifier = member _.MethodWithUnderscoreSelf() = true member __.MethodWithDoubleUnderscoreSelf() = true member _E.MethodWithUnderscoreESelf() = true + member private _.PrivateMethodWithUnderscoreSelf() = true + member private __.PrivateMethodWithDoubleUnderscoreSelf() = true + member private _E.PrivateMethodWithUnderscoreESelf() = true + member inline _.InlineMethodWithUnderscoreSelf() = true + member inline __.InlineMethodWithDoubleUnderscoreSelf() = true + member inline _E.InlineMethodWithUnderscoreESelf() = true + member inline private _.InlinePrivateMethodWithUnderscoreSelf() = true + member inline private __.InlinePrivateMethodWithDoubleUnderscoreSelf() = true + member inline private _E.InlinePrivateMethodWithUnderscoreESelf() = true end