From 867d15d2812b3acdd8773fc7a7b60c080e10328f Mon Sep 17 00:00:00 2001 From: Phillip Carter Date: Thu, 21 Nov 2019 14:52:48 -0800 Subject: [PATCH 1/2] Be very literal about the LangVersion string --- src/fsharp/LanguageFeatures.fs | 46 +++++++++---------- .../langversion/badlangversion-culture.fsx | 5 ++ .../langversion/badlangversion-decimal.fsx | 5 ++ .../CompilerOptions/fsc/langversion/env.lst | 2 + .../langversion/badlangversion-culture.fsx | 5 ++ .../langversion/badlangversion-decimal.fsx | 5 ++ .../CompilerOptions/fsi/langversion/env.lst | 3 ++ 7 files changed, 48 insertions(+), 23 deletions(-) create mode 100644 tests/fsharpqa/Source/CompilerOptions/fsc/langversion/badlangversion-culture.fsx create mode 100644 tests/fsharpqa/Source/CompilerOptions/fsc/langversion/badlangversion-decimal.fsx create mode 100644 tests/fsharpqa/Source/CompilerOptions/fsi/langversion/badlangversion-culture.fsx create mode 100644 tests/fsharpqa/Source/CompilerOptions/fsi/langversion/badlangversion-decimal.fsx diff --git a/src/fsharp/LanguageFeatures.fs b/src/fsharp/LanguageFeatures.fs index 8f6a873e206..0472582f1be 100644 --- a/src/fsharp/LanguageFeatures.fs +++ b/src/fsharp/LanguageFeatures.fs @@ -29,9 +29,8 @@ type LanguageFeature = | ImplicitYield = 7 | OpenStaticClasses = 8 - /// LanguageVersion management -type LanguageVersion (specifiedVersion) = +type LanguageVersion (specifiedVersionAsString) = // When we increment language versions here preview is higher than current RTM version static let languageVersion46 = 4.6m @@ -44,30 +43,34 @@ type LanguageVersion (specifiedVersion) = static let validOptions = [| "preview"; "default"; "latest"; "latestmajor" |] static let languageVersions = set [| languageVersion46; languageVersion47 |] - static let features = dict [| - // Add new LanguageVersions here ... - LanguageFeature.LanguageVersion46, languageVersion46 - LanguageFeature.LanguageVersion47, languageVersion47 - LanguageFeature.PreviewVersion, previewVersion - LanguageFeature.SingleUnderscorePattern, languageVersion47 - LanguageFeature.WildCardInForLoop, languageVersion47 - LanguageFeature.RelaxWhitespace, languageVersion47 - LanguageFeature.NameOf, previewVersion - LanguageFeature.ImplicitYield, languageVersion47 - LanguageFeature.OpenStaticClasses, previewVersion - |] + static let features = + dict [ + // Add new LanguageVersions here ... + LanguageFeature.LanguageVersion46, languageVersion46 + LanguageFeature.LanguageVersion47, languageVersion47 + LanguageFeature.PreviewVersion, previewVersion + + // F# 4.7 + LanguageFeature.SingleUnderscorePattern, languageVersion47 + LanguageFeature.WildCardInForLoop, languageVersion47 + LanguageFeature.RelaxWhitespace, languageVersion47 + LanguageFeature.ImplicitYield, languageVersion47 + + // Add new Language Features here... + LanguageFeature.NameOf, previewVersion + LanguageFeature.OpenStaticClasses, previewVersion + ] let specified = - match specifiedVersion with + match specifiedVersionAsString with | "?" -> 0m | "preview" -> previewVersion | "default" -> defaultVersion | "latest" -> latestVersion | "latestmajor" -> latestMajorVersion - | _ -> - match Decimal.TryParse(specifiedVersion) with - | true, v -> v - | _ -> 0m + | "4.6" -> languageVersion46 + | "4.7" -> languageVersion47 + | _ -> 0m /// Check if this feature is supported by the selected langversion member __.SupportsFeature featureId = @@ -79,10 +82,7 @@ type LanguageVersion (specifiedVersion) = member __.ContainsVersion version = match version with | "?" | "preview" | "default" | "latest" | "latestmajor" -> true - | _ -> - match Decimal.TryParse(specifiedVersion) with - | true, v -> languageVersions.Contains v - | _ -> false + | _ -> languageVersions.Contains specified /// Get a list of valid strings for help text member __.ValidOptions = validOptions diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/langversion/badlangversion-culture.fsx b/tests/fsharpqa/Source/CompilerOptions/fsc/langversion/badlangversion-culture.fsx new file mode 100644 index 00000000000..d1e6d620d70 --- /dev/null +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/langversion/badlangversion-culture.fsx @@ -0,0 +1,5 @@ +// #NoMT #CompilerOptions #RequiresENU +// Unrecognized value '4,7' for --langversion use --langversion:? for complete list +// +#light +exit 0 diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/langversion/badlangversion-decimal.fsx b/tests/fsharpqa/Source/CompilerOptions/fsc/langversion/badlangversion-decimal.fsx new file mode 100644 index 00000000000..d92c376bc39 --- /dev/null +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/langversion/badlangversion-decimal.fsx @@ -0,0 +1,5 @@ +// #NoMT #CompilerOptions #RequiresENU +// Unrecognized value '4.70000000000' for --langversion use --langversion:? for complete list +// +#light +exit 0 diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/langversion/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/langversion/env.lst index bba306f616a..6ecc5030f21 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/langversion/env.lst +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/langversion/env.lst @@ -2,3 +2,5 @@ ReqENU SOURCE=dummy.fsx COMPILE_ONLY=1 PRECMD="\$FSC_PIPE >langversionhelp.txt --langversion:? 2>&1" POSTCMD="\$FSI_PIPE --nologo --quiet --exec ..\\..\\..\\comparer.fsx langversionhelp.txt langversionhelp.437.1033.bsl" # --langversion:? ReqENU SOURCE=badlangversion.fsx SCFLAGS=" --langversion:4.5" # --langversion:4.5 +ReqENU SOURCE=badlangversion-culture.fsx SCFLAGS=" --langversion:4,7" # --langversion:4,7 +ReqENU SOURCE=badlangversion-decimal.fsx SCFLAGS=" --langversion:4.70000000000" # --langversion:4.70000000000 diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/langversion/badlangversion-culture.fsx b/tests/fsharpqa/Source/CompilerOptions/fsi/langversion/badlangversion-culture.fsx new file mode 100644 index 00000000000..d1e6d620d70 --- /dev/null +++ b/tests/fsharpqa/Source/CompilerOptions/fsi/langversion/badlangversion-culture.fsx @@ -0,0 +1,5 @@ +// #NoMT #CompilerOptions #RequiresENU +// Unrecognized value '4,7' for --langversion use --langversion:? for complete list +// +#light +exit 0 diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/langversion/badlangversion-decimal.fsx b/tests/fsharpqa/Source/CompilerOptions/fsi/langversion/badlangversion-decimal.fsx new file mode 100644 index 00000000000..d92c376bc39 --- /dev/null +++ b/tests/fsharpqa/Source/CompilerOptions/fsi/langversion/badlangversion-decimal.fsx @@ -0,0 +1,5 @@ +// #NoMT #CompilerOptions #RequiresENU +// Unrecognized value '4.70000000000' for --langversion use --langversion:? for complete list +// +#light +exit 0 diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/langversion/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsi/langversion/env.lst index fa31a7b0e41..ebaceafa745 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/langversion/env.lst +++ b/tests/fsharpqa/Source/CompilerOptions/fsi/langversion/env.lst @@ -2,3 +2,6 @@ ReqENU SOURCE=dummy.fsx COMPILE_ONLY=1 SCFLAGS="--nologo" FSIMODE=EXEC PRECMD="\$FSI_PIPE --langversion:? >langversionhelp.txt 2>&1" POSTCMD="\$FSI_PIPE --nologo --quiet --exec ..\\..\\..\\comparer.fsx langversionhelp.txt langversionhelp.437.1033.bsl" # --langversion:? ReqENU SOURCE=badlangversion.fsx SCFLAGS=" --langversion:4.5" # --langversion:4.5 +ReqENU SOURCE=badlangversion-culture.fsx SCFLAGS=" --langversion:4,7" # --langversion:4,7 +ReqENU SOURCE=badlangversion-decimal.fsx SCFLAGS=" --langversion:4.70000000000" # --langversion:4.70000000000 + From 35552194993a5182a7a6f5f29ee4c87e9a184b0e Mon Sep 17 00:00:00 2001 From: Phillip Carter Date: Thu, 21 Nov 2019 16:14:22 -0800 Subject: [PATCH 2/2] Skip timing test --- .../FSharpScriptTests.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs index 11317354aa4..9b4707b7872 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs @@ -100,7 +100,7 @@ type InteractiveTests() = | Ok(_) -> Assert.Fail("expected a failure") | Error(ex) -> Assert.IsInstanceOf(ex) - [] + [] member _.``Evaluation can be cancelled``() = use script = new FSharpScript() let sleepTime = 10000