From 2ce485169fc21d51bfb386da6d729f1469e8db46 Mon Sep 17 00:00:00 2001 From: Gustavo Leon <1261319+gusty@users.noreply.github.com> Date: Thu, 26 Sep 2019 10:36:57 +0200 Subject: [PATCH 1/4] Consider '_' for members with access modifiers --- src/fsharp/pars.fsy | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/fsharp/pars.fsy b/src/fsharp/pars.fsy index cb2b0a7020b..64011e2c407 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) } From cdc1377d5e8e30a56ba68f4126de357b2484c628 Mon Sep 17 00:00:00 2001 From: Gustavo Leon <1261319+gusty@users.noreply.github.com> Date: Thu, 26 Sep 2019 21:15:17 +0200 Subject: [PATCH 2/4] Add tests --- tests/fsharp/core/members/basics/test.fs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/fsharp/core/members/basics/test.fs b/tests/fsharp/core/members/basics/test.fs index a5da244c0a6..2411c92d2ee 100644 --- a/tests/fsharp/core/members/basics/test.fs +++ b/tests/fsharp/core/members/basics/test.fs @@ -17,6 +17,15 @@ let test (s : string) b = let check s b1 b2 = test s (b1 = b2) +//-------------------------------------------------------------- +// Test defining a type using wildcard self identifiers + +type ClassType0 () = + member _.myNumber () = 0 + member private _.myPrivateNumber () = 1 + member inline _.myInlineNumber () = 2 + member inline private _.myPrivateInlineNumber () = 3 + //-------------------------------------------------------------- // Test defining a record using object-expression syntax From 66780e397be24fdff9486df5cc264dacf0c6f5e2 Mon Sep 17 00:00:00 2001 From: Gustavo Leon <1261319+gusty@users.noreply.github.com> Date: Thu, 26 Sep 2019 21:55:28 +0200 Subject: [PATCH 3/4] Revert --- tests/fsharp/core/members/basics/test.fs | 9 --------- 1 file changed, 9 deletions(-) diff --git a/tests/fsharp/core/members/basics/test.fs b/tests/fsharp/core/members/basics/test.fs index 2411c92d2ee..a5da244c0a6 100644 --- a/tests/fsharp/core/members/basics/test.fs +++ b/tests/fsharp/core/members/basics/test.fs @@ -17,15 +17,6 @@ let test (s : string) b = let check s b1 b2 = test s (b1 = b2) -//-------------------------------------------------------------- -// Test defining a type using wildcard self identifiers - -type ClassType0 () = - member _.myNumber () = 0 - member private _.myPrivateNumber () = 1 - member inline _.myInlineNumber () = 2 - member inline private _.myPrivateInlineNumber () = 3 - //-------------------------------------------------------------- // Test defining a record using object-expression syntax From b85be78e52a0b5233ce45cdce903a66bad8f1a1a Mon Sep 17 00:00:00 2001 From: Gustavo Leon <1261319+gusty@users.noreply.github.com> Date: Thu, 26 Sep 2019 22:07:27 +0200 Subject: [PATCH 4/4] Add tests with modifiers --- .../members/self-identifier/version47/test.fs | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tests/fsharp/core/members/self-identifier/version47/test.fs b/tests/fsharp/core/members/self-identifier/version47/test.fs index 99629250b65..76bc777ae0d 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