From e7d09b2ed9600cbf2c43fcf66814a15eb4ea4f53 Mon Sep 17 00:00:00 2001 From: Steffen Forkmann Date: Sun, 11 Sep 2016 07:30:28 +0200 Subject: [PATCH 01/24] Use List.exists for contains (#1518) * Use List.exists for contains * ListSet.contains is List.exists * Revert "ListSet.contains is List.exists" This reverts commit dc41206f8ffd4ef047ade0eaf1ae200900609b11. --- src/fsharp/autobox.fs | 2 +- src/fsharp/lib.fs | 7 ++----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/fsharp/autobox.fs b/src/fsharp/autobox.fs index 7d4398fea80..b32e07f0798 100644 --- a/src/fsharp/autobox.fs +++ b/src/fsharp/autobox.fs @@ -17,7 +17,7 @@ open Microsoft.FSharp.Compiler.TypeRelations // Decide the set of mutable locals to promote to heap-allocated reference cells type cenv = - { g: TcGlobals; + { g: TcGlobals amap: Import.ImportMap } /// Find all the mutable locals that escape a method, function or lambda expression diff --git a/src/fsharp/lib.fs b/src/fsharp/lib.fs index 1a1e64acd23..766f6f023f6 100755 --- a/src/fsharp/lib.fs +++ b/src/fsharp/lib.fs @@ -178,14 +178,11 @@ module ListAssoc = //------------------------------------------------------------------------ module ListSet = - (* NOTE: O(n)! *) - let rec contains f x l = - match l with - | [] -> false - | x'::t -> f x x' || contains f x t + let inline contains f x l = List.exists (f x) l (* NOTE: O(n)! *) let insert f x l = if contains f x l then l else x::l + let unionFavourRight f l1 l2 = match l1, l2 with | _, [] -> l1 From 76c82a0d8af5a84c8a787b9491c18a8129e746f7 Mon Sep 17 00:00:00 2001 From: Omar Tawfik Date: Mon, 29 Aug 2016 16:44:19 -0700 Subject: [PATCH 02/24] Build other VS SKUs --- setup/Swix/Microsoft.FSharp.vsmanproj | 5 ++++- setup/fsharp-setup-build.proj | 28 ++++++++++++++++++++++----- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/setup/Swix/Microsoft.FSharp.vsmanproj b/setup/Swix/Microsoft.FSharp.vsmanproj index 736ea5bdb51..d3e84452711 100644 --- a/setup/Swix/Microsoft.FSharp.vsmanproj +++ b/setup/Swix/Microsoft.FSharp.vsmanproj @@ -16,9 +16,12 @@ - + + + + \ No newline at end of file diff --git a/setup/fsharp-setup-build.proj b/setup/fsharp-setup-build.proj index 87ca1c6d400..2ad86745eb4 100644 --- a/setup/fsharp-setup-build.proj +++ b/setup/fsharp-setup-build.proj @@ -30,21 +30,39 @@ TaskParameter="Include"/> - - - - + + + + + + + + Swix\Microsoft.FSharp.Dependencies\Microsoft.FSharp.Dependencies.swixproj Full - + + + + Swix\Microsoft.FSharp.Dependencies\Microsoft.FSharp.Dependencies.swixproj + Desktop + + + + Swix\Microsoft.FSharp.Dependencies\Microsoft.FSharp.Dependencies.swixproj + Web + Swix\Microsoft.FSharp.vsmanproj From 8ec741e48261eeac36b0a4f4a1bb1b9a8bd7fd68 Mon Sep 17 00:00:00 2001 From: Omar Tawfik Date: Mon, 29 Aug 2016 17:47:18 -0700 Subject: [PATCH 03/24] Fix localization by producing core + resources packages --- setup/FSharp.SDK/FSharp.SDK.wixproj | 5 +- .../Dependencies.swr | 43 +++++++++++++ .../Microsoft.FSharp.Dependencies/Files.swr | 12 +--- .../Microsoft.FSharp.Dependencies.swixproj | 8 +-- .../Swix/Microsoft.FSharp.SDK.Core/Files.swr | 8 +++ .../Microsoft.FSharp.SDK.Core.swixproj | 28 +++++++++ .../Microsoft.FSharp.SDK.Resources/Empty.swr | 6 ++ .../Files.swr | 4 +- .../Microsoft.FSharp.SDK.Resources.swixproj} | 8 ++- .../Files.swr} | 3 +- .../Microsoft.FSharp.Vsix.Core.swixproj | 34 +++++++++++ .../Desktop.Templates.swr} | 2 +- .../Microsoft.FSharp.Vsix.Resources/Empty.swr | 5 ++ .../Files.swr} | 2 +- .../Full.Templates.swr} | 2 +- .../Microsoft.FSharp.Vsix.Resources.swixproj} | 19 ++---- .../Web.Templates.swr} | 2 +- setup/Swix/Microsoft.FSharp.vsmanproj | 20 +++--- setup/fsharp-setup-build.proj | 61 +++++++++++-------- 19 files changed, 196 insertions(+), 76 deletions(-) create mode 100644 setup/Swix/Microsoft.FSharp.Dependencies/Dependencies.swr create mode 100644 setup/Swix/Microsoft.FSharp.SDK.Core/Files.swr create mode 100644 setup/Swix/Microsoft.FSharp.SDK.Core/Microsoft.FSharp.SDK.Core.swixproj create mode 100644 setup/Swix/Microsoft.FSharp.SDK.Resources/Empty.swr rename setup/Swix/{Microsoft.FSharp.SDK => Microsoft.FSharp.SDK.Resources}/Files.swr (70%) rename setup/Swix/{Microsoft.FSharp.SDK/Microsoft.FSharp.SDK.swixproj => Microsoft.FSharp.SDK.Resources/Microsoft.FSharp.SDK.Resources.swixproj} (89%) rename setup/Swix/{Microsoft.FSharp.Vsix/Core.Files.swr => Microsoft.FSharp.Vsix.Core/Files.swr} (67%) create mode 100644 setup/Swix/Microsoft.FSharp.Vsix.Core/Microsoft.FSharp.Vsix.Core.swixproj rename setup/Swix/{Microsoft.FSharp.Vsix/LangPack.Desktop.Templates.swr => Microsoft.FSharp.Vsix.Resources/Desktop.Templates.swr} (96%) create mode 100644 setup/Swix/Microsoft.FSharp.Vsix.Resources/Empty.swr rename setup/Swix/{Microsoft.FSharp.Vsix/LangPack.Files.swr => Microsoft.FSharp.Vsix.Resources/Files.swr} (96%) rename setup/Swix/{Microsoft.FSharp.Vsix/LangPack.Full.Templates.swr => Microsoft.FSharp.Vsix.Resources/Full.Templates.swr} (98%) rename setup/Swix/{Microsoft.FSharp.Vsix/Microsoft.FSharp.Vsix.swixproj => Microsoft.FSharp.Vsix.Resources/Microsoft.FSharp.Vsix.Resources.swixproj} (85%) rename setup/Swix/{Microsoft.FSharp.Vsix/LangPack.Web.Templates.swr => Microsoft.FSharp.Vsix.Resources/Web.Templates.swr} (95%) diff --git a/setup/FSharp.SDK/FSharp.SDK.wixproj b/setup/FSharp.SDK/FSharp.SDK.wixproj index 04e76713f4e..552ba996035 100644 --- a/setup/FSharp.SDK/FSharp.SDK.wixproj +++ b/setup/FSharp.SDK/FSharp.SDK.wixproj @@ -10,7 +10,8 @@ - Microsoft.FSharp.SDK + Microsoft.FSharp.SDK.Core + Microsoft.FSharp.SDK.Resources.$(LocaleCode) da0da41f-0e00-4598-8eee-b29d31b0ca04 Package net @@ -74,6 +75,6 @@ - + \ No newline at end of file diff --git a/setup/Swix/Microsoft.FSharp.Dependencies/Dependencies.swr b/setup/Swix/Microsoft.FSharp.Dependencies/Dependencies.swr new file mode 100644 index 00000000000..af47f6b3c1f --- /dev/null +++ b/setup/Swix/Microsoft.FSharp.Dependencies/Dependencies.swr @@ -0,0 +1,43 @@ +use vs + +package name=Microsoft.FSharp.Dependencies + version=4.1 + +vs.dependencies + vs.dependency id=Microsoft.FSharp.SDK.Core + version=4.1 + type=Required + + vs.dependency id=Microsoft.FSharp.SDK.Resources + version=4.1 + type=Required + + vs.dependency id=Microsoft.FSharp.VSIX.Full.Core + version=4.1 + type=Required + when=Microsoft.VisualStudio.Product.Enterprise,Microsoft.VisualStudio.Product.Professional,Microsoft.VisualStudio.Product.Community + + vs.dependency id=Microsoft.FSharp.VSIX.Full.Resources + version=4.1 + type=Required + when=Microsoft.VisualStudio.Product.Enterprise,Microsoft.VisualStudio.Product.Professional,Microsoft.VisualStudio.Product.Community + + vs.dependency id=Microsoft.FSharp.VSIX.Desktop.Core + version=4.1 + type=Required + when=Microsoft.VisualStudio.Product.DesktopExpress + + vs.dependency id=Microsoft.FSharp.VSIX.Desktop.Resources + version=4.1 + type=Required + when=Microsoft.VisualStudio.Product.DesktopExpress + + vs.dependency id=Microsoft.FSharp.VSIX.Web.Core + version=4.1 + type=Required + when=Microsoft.VisualStudio.Product.WebExpress + + vs.dependency id=Microsoft.FSharp.VSIX.Web.Resources + version=4.1 + type=Required + when=Microsoft.VisualStudio.Product.WebExpress diff --git a/setup/Swix/Microsoft.FSharp.Dependencies/Files.swr b/setup/Swix/Microsoft.FSharp.Dependencies/Files.swr index bf639935d7a..cc027e4bbe0 100644 --- a/setup/Swix/Microsoft.FSharp.Dependencies/Files.swr +++ b/setup/Swix/Microsoft.FSharp.Dependencies/Files.swr @@ -1,17 +1,7 @@ use vs -package name=Microsoft.FSharp.Dependencies.$(VSSku) +package name=Microsoft.FSharp.Dependencies version=4.1 - vs.package.language=neutral - -vs.dependencies - vs.dependency id=Microsoft.FSharp.VSIX.$(VSSku) - version=4.1 - type=Required - - vs.dependency id=Microsoft.FSharp.SDK - version=4.1 - type=Required folder "InstallDir:MSBuild\Microsoft\VisualStudio\v15.0\FSharp" file "Microsoft.FSharp.targets" source="$(BinariesFolder)\setup\resources\Microsoft.FSharp.Shim.targets" diff --git a/setup/Swix/Microsoft.FSharp.Dependencies/Microsoft.FSharp.Dependencies.swixproj b/setup/Swix/Microsoft.FSharp.Dependencies/Microsoft.FSharp.Dependencies.swixproj index 071b86deb08..40f510c7f0f 100644 --- a/setup/Swix/Microsoft.FSharp.Dependencies/Microsoft.FSharp.Dependencies.swixproj +++ b/setup/Swix/Microsoft.FSharp.Dependencies/Microsoft.FSharp.Dependencies.swixproj @@ -10,7 +10,7 @@ $(FSharpSourcesRoot)\..\$(Configuration) $(FSharpSourcesRoot)\..\packages $(BinariesFolder)\insertion - Microsoft.FSharp.Dependencies.$(VSSku) + Microsoft.FSharp.Dependencies $(MSBuildThisFileDirectory)obj @@ -19,18 +19,14 @@ $(PackagePreprocessorDefinitions);BinariesFolder=$(BinariesFolder) $(PackagePreprocessorDefinitions);PackagesFolder=$(PackagesFolder) - $(PackagePreprocessorDefinitions);VSSku=$(VSSku) + - - - - diff --git a/setup/Swix/Microsoft.FSharp.SDK.Core/Files.swr b/setup/Swix/Microsoft.FSharp.SDK.Core/Files.swr new file mode 100644 index 00000000000..a3b0e1c7558 --- /dev/null +++ b/setup/Swix/Microsoft.FSharp.SDK.Core/Files.swr @@ -0,0 +1,8 @@ +use vs + +package name=Microsoft.FSharp.SDK.Core + version=4.1 + vs.package.type=msi + +vs.payloads + vs.payload source="$(BinariesFolder)\msi\Microsoft.FSharp.SDK.Core.msi" diff --git a/setup/Swix/Microsoft.FSharp.SDK.Core/Microsoft.FSharp.SDK.Core.swixproj b/setup/Swix/Microsoft.FSharp.SDK.Core/Microsoft.FSharp.SDK.Core.swixproj new file mode 100644 index 00000000000..03062b5d636 --- /dev/null +++ b/setup/Swix/Microsoft.FSharp.SDK.Core/Microsoft.FSharp.SDK.Core.swixproj @@ -0,0 +1,28 @@ + + + + ..\..\..\src + neutral + false + manifest + Microsoft.FSharp.SDK.Core + true + Debug + $(FSharpSourcesRoot)\..\$(Configuration) + $(BinariesFolder)\insertion + + + + + + $(PackagePreprocessorDefinitions);BinariesFolder=$(BinariesFolder) + + + + + + + + + + diff --git a/setup/Swix/Microsoft.FSharp.SDK.Resources/Empty.swr b/setup/Swix/Microsoft.FSharp.SDK.Resources/Empty.swr new file mode 100644 index 00000000000..3ffac485287 --- /dev/null +++ b/setup/Swix/Microsoft.FSharp.SDK.Resources/Empty.swr @@ -0,0 +1,6 @@ +use vs + +package name=Microsoft.FSharp.SDK.Resources + version=4.1 + vs.package.type=msi + vs.package.language=$(LocaleRegion) \ No newline at end of file diff --git a/setup/Swix/Microsoft.FSharp.SDK/Files.swr b/setup/Swix/Microsoft.FSharp.SDK.Resources/Files.swr similarity index 70% rename from setup/Swix/Microsoft.FSharp.SDK/Files.swr rename to setup/Swix/Microsoft.FSharp.SDK.Resources/Files.swr index d161ff0fb99..26c9847538e 100644 --- a/setup/Swix/Microsoft.FSharp.SDK/Files.swr +++ b/setup/Swix/Microsoft.FSharp.SDK.Resources/Files.swr @@ -1,9 +1,9 @@ use vs -package name=Microsoft.FSharp.SDK +package name=Microsoft.FSharp.SDK.Resources version=4.1 vs.package.type=msi vs.package.language=$(LocaleRegion) vs.payloads - vs.payload source="$(BinariesFolder)\msi\Microsoft.FSharp.SDK.$(LocaleCode).msi" + vs.payload source="$(BinariesFolder)\msi\Microsoft.FSharp.SDK.Resources.$(LocaleCode).msi" diff --git a/setup/Swix/Microsoft.FSharp.SDK/Microsoft.FSharp.SDK.swixproj b/setup/Swix/Microsoft.FSharp.SDK.Resources/Microsoft.FSharp.SDK.Resources.swixproj similarity index 89% rename from setup/Swix/Microsoft.FSharp.SDK/Microsoft.FSharp.SDK.swixproj rename to setup/Swix/Microsoft.FSharp.SDK.Resources/Microsoft.FSharp.SDK.Resources.swixproj index 3e836ccb657..3ae84ecb8de 100644 --- a/setup/Swix/Microsoft.FSharp.SDK/Microsoft.FSharp.SDK.swixproj +++ b/setup/Swix/Microsoft.FSharp.SDK.Resources/Microsoft.FSharp.SDK.Resources.swixproj @@ -5,7 +5,7 @@ neutral false manifest - Microsoft.FSharp.SDK.$(LocaleCode) + Microsoft.FSharp.SDK.Resources.$(LocaleCode) true Debug $(FSharpSourcesRoot)\..\$(Configuration) @@ -22,7 +22,11 @@ $(PackagePreprocessorDefinitions);IsLangPack=$(IsLangPack) - + + + + + diff --git a/setup/Swix/Microsoft.FSharp.Vsix/Core.Files.swr b/setup/Swix/Microsoft.FSharp.Vsix.Core/Files.swr similarity index 67% rename from setup/Swix/Microsoft.FSharp.Vsix/Core.Files.swr rename to setup/Swix/Microsoft.FSharp.Vsix.Core/Files.swr index 2cd1df4fd55..5d2bc8383ef 100644 --- a/setup/Swix/Microsoft.FSharp.Vsix/Core.Files.swr +++ b/setup/Swix/Microsoft.FSharp.Vsix.Core/Files.swr @@ -1,9 +1,8 @@ use vs -package name=Microsoft.FSharp.VSIX.$(VSSku) +package name=Microsoft.FSharp.VSIX.$(VSSku).Core version=4.1 vs.package.type=vsix - vs.package.language=$(LocaleRegion) vs.package.vsixId=VisualFSharp vs.payloads diff --git a/setup/Swix/Microsoft.FSharp.Vsix.Core/Microsoft.FSharp.Vsix.Core.swixproj b/setup/Swix/Microsoft.FSharp.Vsix.Core/Microsoft.FSharp.Vsix.Core.swixproj new file mode 100644 index 00000000000..ffb10deb955 --- /dev/null +++ b/setup/Swix/Microsoft.FSharp.Vsix.Core/Microsoft.FSharp.Vsix.Core.swixproj @@ -0,0 +1,34 @@ + + + + ..\..\..\src + neutral + false + true + Debug + $(FSharpSourcesRoot)\..\$(Configuration) + $(BinariesFolder)\insertion + Microsoft.FSharp.VSIX.$(VSSku).Core + $(MSBuildThisFileDirectory)obj + manifest + + + + + + $(PackagePreprocessorDefinitions);BinariesFolder=$(BinariesFolder) + $(PackagePreprocessorDefinitions);VSSku=$(VSSku) + + + + + + + + + + + + + + diff --git a/setup/Swix/Microsoft.FSharp.Vsix/LangPack.Desktop.Templates.swr b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Desktop.Templates.swr similarity index 96% rename from setup/Swix/Microsoft.FSharp.Vsix/LangPack.Desktop.Templates.swr rename to setup/Swix/Microsoft.FSharp.Vsix.Resources/Desktop.Templates.swr index a3977cc67f0..264ac22d2fc 100644 --- a/setup/Swix/Microsoft.FSharp.Vsix/LangPack.Desktop.Templates.swr +++ b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Desktop.Templates.swr @@ -1,6 +1,6 @@ use vs -package name=Microsoft.FSharp.VSIX.$(VSSku) +package name=Microsoft.FSharp.VSIX.$(VSSku).Resources version=4.1 vs.package.language=$(LocaleRegion) diff --git a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Empty.swr b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Empty.swr new file mode 100644 index 00000000000..5b1acc40bd4 --- /dev/null +++ b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Empty.swr @@ -0,0 +1,5 @@ +use vs + +package name=Microsoft.FSharp.VSIX.$(VSSku).Resources + version=4.1 + vs.package.language=$(LocaleRegion) diff --git a/setup/Swix/Microsoft.FSharp.Vsix/LangPack.Files.swr b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Files.swr similarity index 96% rename from setup/Swix/Microsoft.FSharp.Vsix/LangPack.Files.swr rename to setup/Swix/Microsoft.FSharp.Vsix.Resources/Files.swr index fa907fa0edf..64a7212159d 100644 --- a/setup/Swix/Microsoft.FSharp.Vsix/LangPack.Files.swr +++ b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Files.swr @@ -1,6 +1,6 @@ use vs -package name=Microsoft.FSharp.VSIX.$(VSSku) +package name=Microsoft.FSharp.VSIX.$(VSSku).Resources version=4.1 vs.package.language=$(LocaleRegion) diff --git a/setup/Swix/Microsoft.FSharp.Vsix/LangPack.Full.Templates.swr b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Full.Templates.swr similarity index 98% rename from setup/Swix/Microsoft.FSharp.Vsix/LangPack.Full.Templates.swr rename to setup/Swix/Microsoft.FSharp.Vsix.Resources/Full.Templates.swr index fa876a3fef3..176ff8c8e98 100644 --- a/setup/Swix/Microsoft.FSharp.Vsix/LangPack.Full.Templates.swr +++ b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Full.Templates.swr @@ -1,6 +1,6 @@ use vs -package name=Microsoft.FSharp.VSIX.$(VSSku) +package name=Microsoft.FSharp.VSIX.$(VSSku).Resources version=4.1 vs.package.language=$(LocaleRegion) diff --git a/setup/Swix/Microsoft.FSharp.Vsix/Microsoft.FSharp.Vsix.swixproj b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Microsoft.FSharp.Vsix.Resources.swixproj similarity index 85% rename from setup/Swix/Microsoft.FSharp.Vsix/Microsoft.FSharp.Vsix.swixproj rename to setup/Swix/Microsoft.FSharp.Vsix.Resources/Microsoft.FSharp.Vsix.Resources.swixproj index 9cc2d0f1199..01bb34505d2 100644 --- a/setup/Swix/Microsoft.FSharp.Vsix/Microsoft.FSharp.Vsix.swixproj +++ b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Microsoft.FSharp.Vsix.Resources.swixproj @@ -8,18 +8,11 @@ Debug $(FSharpSourcesRoot)\..\$(Configuration) $(BinariesFolder)\insertion - Microsoft.FSharp.VSIX.$(VSSku).$(LocaleCode) + Microsoft.FSharp.VSIX.$(VSSku).Resources.$(LocaleCode) $(MSBuildThisFileDirectory)obj - - - - manifest - - - vsix - + @@ -30,14 +23,14 @@ $(PackagePreprocessorDefinitions);LocaleRegion=$(LocaleRegion) $(PackagePreprocessorDefinitions);IsLangPack=$(IsLangPack) - + - + - - + + diff --git a/setup/Swix/Microsoft.FSharp.Vsix/LangPack.Web.Templates.swr b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Web.Templates.swr similarity index 95% rename from setup/Swix/Microsoft.FSharp.Vsix/LangPack.Web.Templates.swr rename to setup/Swix/Microsoft.FSharp.Vsix.Resources/Web.Templates.swr index e9756006478..4eed84e98b1 100644 --- a/setup/Swix/Microsoft.FSharp.Vsix/LangPack.Web.Templates.swr +++ b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Web.Templates.swr @@ -1,6 +1,6 @@ use vs -package name=Microsoft.FSharp.VSIX.$(VSSku) +package name=Microsoft.FSharp.VSIX.$(VSSku).Resources version=4.1 vs.package.language=$(LocaleRegion) diff --git a/setup/Swix/Microsoft.FSharp.vsmanproj b/setup/Swix/Microsoft.FSharp.vsmanproj index d3e84452711..25e55147a3a 100644 --- a/setup/Swix/Microsoft.FSharp.vsmanproj +++ b/setup/Swix/Microsoft.FSharp.vsmanproj @@ -15,13 +15,19 @@ - - - - - - - + + + + + + + + + + + + + \ No newline at end of file diff --git a/setup/fsharp-setup-build.proj b/setup/fsharp-setup-build.proj index 2ad86745eb4..208209368cf 100644 --- a/setup/fsharp-setup-build.proj +++ b/setup/fsharp-setup-build.proj @@ -15,54 +15,61 @@ FSharp.Wix.Extensions\FSharp.Wix.Extensions.csproj - + - + + + + Swix\Microsoft.FSharp.SDK.Core\Microsoft.FSharp.SDK.Core.swixproj + + + - + AdditionalMetadata="ProjectPath=Swix\Microsoft.FSharp.SDK.Resources\Microsoft.FSharp.SDK.Resources.swixproj"> + + + + Swix\Microsoft.FSharp.Vsix.Core\Microsoft.FSharp.Vsix.Core.swixproj + Full + + + + Swix\Microsoft.FSharp.Vsix.Core\Microsoft.FSharp.Vsix.Core.swixproj + Desktop + + + + Swix\Microsoft.FSharp.Vsix.Core\Microsoft.FSharp.Vsix.Core.swixproj + Web + + + - + AdditionalMetadata="ProjectPath=Swix\Microsoft.FSharp.Vsix.Resources\Microsoft.FSharp.Vsix.Resources.swixproj;VSSku=Full"> + - + AdditionalMetadata="ProjectPath=Swix\Microsoft.FSharp.Vsix.Resources\Microsoft.FSharp.Vsix.Resources.swixproj;VSSku=Desktop"> + - + AdditionalMetadata="ProjectPath=Swix\Microsoft.FSharp.Vsix.Resources\Microsoft.FSharp.Vsix.Resources.swixproj;VSSku=Web"> + Swix\Microsoft.FSharp.Dependencies\Microsoft.FSharp.Dependencies.swixproj - Full - - - - Swix\Microsoft.FSharp.Dependencies\Microsoft.FSharp.Dependencies.swixproj - Desktop - - - - Swix\Microsoft.FSharp.Dependencies\Microsoft.FSharp.Dependencies.swixproj - Web - + Swix\Microsoft.FSharp.vsmanproj From 98d2711197bf656c8c5b2ffa0a66c1594780bdfc Mon Sep 17 00:00:00 2001 From: Omar Tawfik Date: Tue, 30 Aug 2016 12:23:35 -0700 Subject: [PATCH 04/24] Address PR comments --- setup/FSharp.SDK/FSharp.SDK.wixproj | 2 +- setup/FSharp.Setup.props | 1 + .../Dependencies.swr | 18 +++++++++--------- .../Microsoft.FSharp.Dependencies/Files.swr | 2 +- .../Microsoft.FSharp.Dependencies.swixproj | 1 + setup/Swix/Microsoft.FSharp.SDK.Core/Files.swr | 2 +- .../Microsoft.FSharp.SDK.Core.swixproj | 1 + .../Microsoft.FSharp.SDK.Resources/Empty.swr | 2 +- .../Microsoft.FSharp.SDK.Resources/Files.swr | 2 +- .../Microsoft.FSharp.SDK.Resources.swixproj | 3 ++- .../Swix/Microsoft.FSharp.Vsix.Core/Files.swr | 2 +- .../Microsoft.FSharp.Vsix.Core.swixproj | 1 + .../Desktop.Templates.swr | 2 +- .../Microsoft.FSharp.Vsix.Resources/Empty.swr | 2 +- .../Microsoft.FSharp.Vsix.Resources/Files.swr | 2 +- .../Full.Templates.swr | 2 +- .../Microsoft.FSharp.Vsix.Resources.swixproj | 3 ++- .../Web.Templates.swr | 2 +- setup/fsharp-setup-build.proj | 6 +++--- 19 files changed, 31 insertions(+), 25 deletions(-) diff --git a/setup/FSharp.SDK/FSharp.SDK.wixproj b/setup/FSharp.SDK/FSharp.SDK.wixproj index 552ba996035..77a21295e2f 100644 --- a/setup/FSharp.SDK/FSharp.SDK.wixproj +++ b/setup/FSharp.SDK/FSharp.SDK.wixproj @@ -10,7 +10,7 @@ - Microsoft.FSharp.SDK.Core + Microsoft.FSharp.SDK.Core Microsoft.FSharp.SDK.Resources.$(LocaleCode) da0da41f-0e00-4598-8eee-b29d31b0ca04 Package diff --git a/setup/FSharp.Setup.props b/setup/FSharp.Setup.props index 683a8929c52..b865b1f2e04 100644 --- a/setup/FSharp.Setup.props +++ b/setup/FSharp.Setup.props @@ -4,6 +4,7 @@ 2.0 3.10 + 4.1 3.10.0.1503 $(SetupRootFolder)\..\packages\WiX.Toolset.2015.$(WiXToolset2015Version)\tools\wix $(SetupRootFolder)\..\packages diff --git a/setup/Swix/Microsoft.FSharp.Dependencies/Dependencies.swr b/setup/Swix/Microsoft.FSharp.Dependencies/Dependencies.swr index af47f6b3c1f..406eb671e33 100644 --- a/setup/Swix/Microsoft.FSharp.Dependencies/Dependencies.swr +++ b/setup/Swix/Microsoft.FSharp.Dependencies/Dependencies.swr @@ -1,43 +1,43 @@ use vs package name=Microsoft.FSharp.Dependencies - version=4.1 + version=$(FSharpPackageVersion) vs.dependencies vs.dependency id=Microsoft.FSharp.SDK.Core - version=4.1 + version=$(FSharpPackageVersion) type=Required vs.dependency id=Microsoft.FSharp.SDK.Resources - version=4.1 + version=$(FSharpPackageVersion) type=Required vs.dependency id=Microsoft.FSharp.VSIX.Full.Core - version=4.1 + version=$(FSharpPackageVersion) type=Required when=Microsoft.VisualStudio.Product.Enterprise,Microsoft.VisualStudio.Product.Professional,Microsoft.VisualStudio.Product.Community vs.dependency id=Microsoft.FSharp.VSIX.Full.Resources - version=4.1 + version=$(FSharpPackageVersion) type=Required when=Microsoft.VisualStudio.Product.Enterprise,Microsoft.VisualStudio.Product.Professional,Microsoft.VisualStudio.Product.Community vs.dependency id=Microsoft.FSharp.VSIX.Desktop.Core - version=4.1 + version=$(FSharpPackageVersion) type=Required when=Microsoft.VisualStudio.Product.DesktopExpress vs.dependency id=Microsoft.FSharp.VSIX.Desktop.Resources - version=4.1 + version=$(FSharpPackageVersion) type=Required when=Microsoft.VisualStudio.Product.DesktopExpress vs.dependency id=Microsoft.FSharp.VSIX.Web.Core - version=4.1 + version=$(FSharpPackageVersion) type=Required when=Microsoft.VisualStudio.Product.WebExpress vs.dependency id=Microsoft.FSharp.VSIX.Web.Resources - version=4.1 + version=$(FSharpPackageVersion) type=Required when=Microsoft.VisualStudio.Product.WebExpress diff --git a/setup/Swix/Microsoft.FSharp.Dependencies/Files.swr b/setup/Swix/Microsoft.FSharp.Dependencies/Files.swr index cc027e4bbe0..04eeec577a8 100644 --- a/setup/Swix/Microsoft.FSharp.Dependencies/Files.swr +++ b/setup/Swix/Microsoft.FSharp.Dependencies/Files.swr @@ -1,7 +1,7 @@ use vs package name=Microsoft.FSharp.Dependencies - version=4.1 + version=$(FSharpPackageVersion) folder "InstallDir:MSBuild\Microsoft\VisualStudio\v15.0\FSharp" file "Microsoft.FSharp.targets" source="$(BinariesFolder)\setup\resources\Microsoft.FSharp.Shim.targets" diff --git a/setup/Swix/Microsoft.FSharp.Dependencies/Microsoft.FSharp.Dependencies.swixproj b/setup/Swix/Microsoft.FSharp.Dependencies/Microsoft.FSharp.Dependencies.swixproj index 40f510c7f0f..2ba832036eb 100644 --- a/setup/Swix/Microsoft.FSharp.Dependencies/Microsoft.FSharp.Dependencies.swixproj +++ b/setup/Swix/Microsoft.FSharp.Dependencies/Microsoft.FSharp.Dependencies.swixproj @@ -19,6 +19,7 @@ $(PackagePreprocessorDefinitions);BinariesFolder=$(BinariesFolder) $(PackagePreprocessorDefinitions);PackagesFolder=$(PackagesFolder) + $(PackagePreprocessorDefinitions);FSharpPackageVersion=$(FSharpPackageVersion) diff --git a/setup/Swix/Microsoft.FSharp.SDK.Core/Files.swr b/setup/Swix/Microsoft.FSharp.SDK.Core/Files.swr index a3b0e1c7558..03c9dab29b7 100644 --- a/setup/Swix/Microsoft.FSharp.SDK.Core/Files.swr +++ b/setup/Swix/Microsoft.FSharp.SDK.Core/Files.swr @@ -1,7 +1,7 @@ use vs package name=Microsoft.FSharp.SDK.Core - version=4.1 + version=$(FSharpPackageVersion) vs.package.type=msi vs.payloads diff --git a/setup/Swix/Microsoft.FSharp.SDK.Core/Microsoft.FSharp.SDK.Core.swixproj b/setup/Swix/Microsoft.FSharp.SDK.Core/Microsoft.FSharp.SDK.Core.swixproj index 03062b5d636..b1f5d3a1d11 100644 --- a/setup/Swix/Microsoft.FSharp.SDK.Core/Microsoft.FSharp.SDK.Core.swixproj +++ b/setup/Swix/Microsoft.FSharp.SDK.Core/Microsoft.FSharp.SDK.Core.swixproj @@ -16,6 +16,7 @@ $(PackagePreprocessorDefinitions);BinariesFolder=$(BinariesFolder) + $(PackagePreprocessorDefinitions);FSharpPackageVersion=$(FSharpPackageVersion) diff --git a/setup/Swix/Microsoft.FSharp.SDK.Resources/Empty.swr b/setup/Swix/Microsoft.FSharp.SDK.Resources/Empty.swr index 3ffac485287..1764f4975d8 100644 --- a/setup/Swix/Microsoft.FSharp.SDK.Resources/Empty.swr +++ b/setup/Swix/Microsoft.FSharp.SDK.Resources/Empty.swr @@ -1,6 +1,6 @@ use vs package name=Microsoft.FSharp.SDK.Resources - version=4.1 + version=$(FSharpPackageVersion) vs.package.type=msi vs.package.language=$(LocaleRegion) \ No newline at end of file diff --git a/setup/Swix/Microsoft.FSharp.SDK.Resources/Files.swr b/setup/Swix/Microsoft.FSharp.SDK.Resources/Files.swr index 26c9847538e..515c2113cff 100644 --- a/setup/Swix/Microsoft.FSharp.SDK.Resources/Files.swr +++ b/setup/Swix/Microsoft.FSharp.SDK.Resources/Files.swr @@ -1,7 +1,7 @@ use vs package name=Microsoft.FSharp.SDK.Resources - version=4.1 + version=$(FSharpPackageVersion) vs.package.type=msi vs.package.language=$(LocaleRegion) diff --git a/setup/Swix/Microsoft.FSharp.SDK.Resources/Microsoft.FSharp.SDK.Resources.swixproj b/setup/Swix/Microsoft.FSharp.SDK.Resources/Microsoft.FSharp.SDK.Resources.swixproj index 3ae84ecb8de..36e770c5a5f 100644 --- a/setup/Swix/Microsoft.FSharp.SDK.Resources/Microsoft.FSharp.SDK.Resources.swixproj +++ b/setup/Swix/Microsoft.FSharp.SDK.Resources/Microsoft.FSharp.SDK.Resources.swixproj @@ -16,13 +16,14 @@ $(PackagePreprocessorDefinitions);BinariesFolder=$(BinariesFolder) + $(PackagePreprocessorDefinitions);FSharpPackageVersion=$(FSharpPackageVersion) $(PackagePreprocessorDefinitions);LocaleCode=$(LocaleCode) $(PackagePreprocessorDefinitions);LocaleId=$(LocaleId) $(PackagePreprocessorDefinitions);LocaleRegion=$(LocaleRegion) $(PackagePreprocessorDefinitions);IsLangPack=$(IsLangPack) - + diff --git a/setup/Swix/Microsoft.FSharp.Vsix.Core/Files.swr b/setup/Swix/Microsoft.FSharp.Vsix.Core/Files.swr index 5d2bc8383ef..34048ab6dbb 100644 --- a/setup/Swix/Microsoft.FSharp.Vsix.Core/Files.swr +++ b/setup/Swix/Microsoft.FSharp.Vsix.Core/Files.swr @@ -1,7 +1,7 @@ use vs package name=Microsoft.FSharp.VSIX.$(VSSku).Core - version=4.1 + version=$(FSharpPackageVersion) vs.package.type=vsix vs.package.vsixId=VisualFSharp diff --git a/setup/Swix/Microsoft.FSharp.Vsix.Core/Microsoft.FSharp.Vsix.Core.swixproj b/setup/Swix/Microsoft.FSharp.Vsix.Core/Microsoft.FSharp.Vsix.Core.swixproj index ffb10deb955..5f95bcfcfa6 100644 --- a/setup/Swix/Microsoft.FSharp.Vsix.Core/Microsoft.FSharp.Vsix.Core.swixproj +++ b/setup/Swix/Microsoft.FSharp.Vsix.Core/Microsoft.FSharp.Vsix.Core.swixproj @@ -17,6 +17,7 @@ $(PackagePreprocessorDefinitions);BinariesFolder=$(BinariesFolder) + $(PackagePreprocessorDefinitions);FSharpPackageVersion=$(FSharpPackageVersion) $(PackagePreprocessorDefinitions);VSSku=$(VSSku) diff --git a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Desktop.Templates.swr b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Desktop.Templates.swr index 264ac22d2fc..c3a5051eb9b 100644 --- a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Desktop.Templates.swr +++ b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Desktop.Templates.swr @@ -1,7 +1,7 @@ use vs package name=Microsoft.FSharp.VSIX.$(VSSku).Resources - version=4.1 + version=$(FSharpPackageVersion) vs.package.language=$(LocaleRegion) folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\$(LocaleId)\ConsoleProject" diff --git a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Empty.swr b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Empty.swr index 5b1acc40bd4..e5f6b32bba1 100644 --- a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Empty.swr +++ b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Empty.swr @@ -1,5 +1,5 @@ use vs package name=Microsoft.FSharp.VSIX.$(VSSku).Resources - version=4.1 + version=$(FSharpPackageVersion) vs.package.language=$(LocaleRegion) diff --git a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Files.swr b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Files.swr index 64a7212159d..2d4b526661c 100644 --- a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Files.swr +++ b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Files.swr @@ -1,7 +1,7 @@ use vs package name=Microsoft.FSharp.VSIX.$(VSSku).Resources - version=4.1 + version=$(FSharpPackageVersion) vs.package.language=$(LocaleRegion) folder "InstallDir:Common7\IDE\PublicAssemblies\$(LocaleRegion)" diff --git a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Full.Templates.swr b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Full.Templates.swr index 176ff8c8e98..863641f0646 100644 --- a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Full.Templates.swr +++ b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Full.Templates.swr @@ -1,7 +1,7 @@ use vs package name=Microsoft.FSharp.VSIX.$(VSSku).Resources - version=4.1 + version=$(FSharpPackageVersion) vs.package.language=$(LocaleRegion) folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\$(LocaleId)\ConsoleProject" diff --git a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Microsoft.FSharp.Vsix.Resources.swixproj b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Microsoft.FSharp.Vsix.Resources.swixproj index 01bb34505d2..57f2350108a 100644 --- a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Microsoft.FSharp.Vsix.Resources.swixproj +++ b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Microsoft.FSharp.Vsix.Resources.swixproj @@ -17,6 +17,7 @@ $(PackagePreprocessorDefinitions);BinariesFolder=$(BinariesFolder) + $(PackagePreprocessorDefinitions);FSharpPackageVersion=$(FSharpPackageVersion) $(PackagePreprocessorDefinitions);VSSku=$(VSSku) $(PackagePreprocessorDefinitions);LocaleCode=$(LocaleCode) $(PackagePreprocessorDefinitions);LocaleId=$(LocaleId) @@ -24,7 +25,7 @@ $(PackagePreprocessorDefinitions);IsLangPack=$(IsLangPack) - + diff --git a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Web.Templates.swr b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Web.Templates.swr index 4eed84e98b1..e2c399c6445 100644 --- a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Web.Templates.swr +++ b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Web.Templates.swr @@ -1,7 +1,7 @@ use vs package name=Microsoft.FSharp.VSIX.$(VSSku).Resources - version=4.1 + version=$(FSharpPackageVersion) vs.package.language=$(LocaleRegion) folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\$(LocaleId)\LibraryProject" diff --git a/setup/fsharp-setup-build.proj b/setup/fsharp-setup-build.proj index 208209368cf..3468defdb64 100644 --- a/setup/fsharp-setup-build.proj +++ b/setup/fsharp-setup-build.proj @@ -81,19 +81,19 @@ + Properties="LocaleCode=%(SetupProjects.LocaleCode);LocaleId=%(SetupProjects.LocaleId);LocaleRegion=%(SetupProjects.LocaleRegion);IsLangPack=%(SetupProjects.IsLangPack);VSSku=%(SetupProjects.VSSku);FSharpPackageVersion=$(FSharpPackageVersion)"/> + Properties="LocaleCode=%(SetupProjects.LocaleCode);LocaleId=%(SetupProjects.LocaleId);LocaleRegion=%(SetupProjects.LocaleRegion);IsLangPack=%(SetupProjects.IsLangPack);VSSku=%(SetupProjects.VSSku);FSharpPackageVersion=$(FSharpPackageVersion)"/> + Properties="LocaleCode=%(SetupProjects.LocaleCode);LocaleId=%(SetupProjects.LocaleId);LocaleRegion=%(SetupProjects.LocaleRegion);IsLangPack=%(SetupProjects.IsLangPack);VSSku=%(SetupProjects.VSSku);FSharpPackageVersion=$(FSharpPackageVersion)"/> From 2ca18939f89b9cb24508ac49c6aa9b09a314ffd9 Mon Sep 17 00:00:00 2001 From: Omar Tawfik Date: Tue, 30 Aug 2016 21:28:46 -0700 Subject: [PATCH 05/24] Fix Core SDK empty msi error --- setup/Swix/Microsoft.FSharp.SDK.Resources/Empty.swr | 1 - .../Microsoft.FSharp.SDK.Resources.swixproj | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/setup/Swix/Microsoft.FSharp.SDK.Resources/Empty.swr b/setup/Swix/Microsoft.FSharp.SDK.Resources/Empty.swr index 1764f4975d8..033e87965f0 100644 --- a/setup/Swix/Microsoft.FSharp.SDK.Resources/Empty.swr +++ b/setup/Swix/Microsoft.FSharp.SDK.Resources/Empty.swr @@ -2,5 +2,4 @@ use vs package name=Microsoft.FSharp.SDK.Resources version=$(FSharpPackageVersion) - vs.package.type=msi vs.package.language=$(LocaleRegion) \ No newline at end of file diff --git a/setup/Swix/Microsoft.FSharp.SDK.Resources/Microsoft.FSharp.SDK.Resources.swixproj b/setup/Swix/Microsoft.FSharp.SDK.Resources/Microsoft.FSharp.SDK.Resources.swixproj index 36e770c5a5f..7c97051d864 100644 --- a/setup/Swix/Microsoft.FSharp.SDK.Resources/Microsoft.FSharp.SDK.Resources.swixproj +++ b/setup/Swix/Microsoft.FSharp.SDK.Resources/Microsoft.FSharp.SDK.Resources.swixproj @@ -4,12 +4,13 @@ ..\..\..\src neutral false - manifest Microsoft.FSharp.SDK.Resources.$(LocaleCode) true Debug $(FSharpSourcesRoot)\..\$(Configuration) $(BinariesFolder)\insertion + vsix + manifest From fc4f4b0870f22f1ba3a0ffc81f8d39279c5c6e41 Mon Sep 17 00:00:00 2001 From: Omar Tawfik Date: Wed, 31 Aug 2016 01:16:31 -0700 Subject: [PATCH 06/24] Place localized templates in F# extension folder --- .../Desktop.Templates.swr | 6 +++--- .../Full.Templates.swr | 14 +++++++------- .../Web.Templates.swr | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Desktop.Templates.swr b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Desktop.Templates.swr index c3a5051eb9b..5a13ea95b15 100644 --- a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Desktop.Templates.swr +++ b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Desktop.Templates.swr @@ -4,21 +4,21 @@ package name=Microsoft.FSharp.VSIX.$(VSSku).Resources version=$(FSharpPackageVersion) vs.package.language=$(LocaleRegion) -folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\$(LocaleId)\ConsoleProject" +folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp\ProjectTemplates\FSharp\$(LocaleId)\ConsoleProject" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\ConsoleProject\App.config" file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\ProjectTemplates\ConsoleProject\AssemblyInfo.fs" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\ConsoleProject\ConsoleApplication.fsproj" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\ConsoleProject\ConsoleApplication.vstemplate" file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\ProjectTemplates\ConsoleProject\Program.fs" -folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\$(LocaleId)\LibraryProject" +folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp\ProjectTemplates\FSharp\$(LocaleId)\LibraryProject" file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\ProjectTemplates\LibraryProject\AssemblyInfo.fs" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\LibraryProject\Library.fsproj" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\LibraryProject\Library.vstemplate" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\LibraryProject\Library1.fs" file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\ProjectTemplates\LibraryProject\Script.fsx" -folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\$(LocaleId)\TutorialProject" +folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp\ProjectTemplates\FSharp\$(LocaleId)\TutorialProject" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\TutorialProject\Tutorial.fsproj" file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\ProjectTemplates\TutorialProject\Tutorial.fsx" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\TutorialProject\Tutorial.vstemplate" diff --git a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Full.Templates.swr b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Full.Templates.swr index 863641f0646..e695cfb6289 100644 --- a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Full.Templates.swr +++ b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Full.Templates.swr @@ -4,49 +4,49 @@ package name=Microsoft.FSharp.VSIX.$(VSSku).Resources version=$(FSharpPackageVersion) vs.package.language=$(LocaleRegion) -folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\$(LocaleId)\ConsoleProject" +folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp\ProjectTemplates\FSharp\$(LocaleId)\ConsoleProject" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\ConsoleProject\App.config" file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\ProjectTemplates\ConsoleProject\AssemblyInfo.fs" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\ConsoleProject\ConsoleApplication.fsproj" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\ConsoleProject\ConsoleApplication.vstemplate" file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\ProjectTemplates\ConsoleProject\Program.fs" -folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\$(LocaleId)\LibraryProject" +folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp\ProjectTemplates\FSharp\$(LocaleId)\LibraryProject" file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\ProjectTemplates\LibraryProject\AssemblyInfo.fs" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\LibraryProject\Library.fsproj" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\LibraryProject\Library.vstemplate" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\LibraryProject\Library1.fs" file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\ProjectTemplates\LibraryProject\Script.fsx" -folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\$(LocaleId)\NetCore259Project" +folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp\ProjectTemplates\FSharp\$(LocaleId)\NetCore259Project" file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\ProjectTemplates\NetCore259Project\AssemblyInfo.fs" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\NetCore259Project\NETCore259PortableLibrary.vstemplate" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\NetCore259Project\PortableLibrary.fsproj" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\NetCore259Project\PortableLibrary1.fs" file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\ProjectTemplates\NetCore259Project\Script.fsx" -folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\$(LocaleId)\NetCore78Project" +folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp\ProjectTemplates\FSharp\$(LocaleId)\NetCore78Project" file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\ProjectTemplates\NetCore78Project\AssemblyInfo.fs" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\NetCore78Project\NETCore78PortableLibrary.vstemplate" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\NetCore78Project\PortableLibrary.fsproj" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\NetCore78Project\PortableLibrary1.fs" file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\ProjectTemplates\NetCore78Project\Script.fsx" -folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\$(LocaleId)\NetCoreProject" +folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp\ProjectTemplates\FSharp\$(LocaleId)\NetCoreProject" file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\ProjectTemplates\NetCoreProject\AssemblyInfo.fs" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\NetCoreProject\NETCore7PortableLibrary.vstemplate" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\NetCoreProject\PortableLibrary.fsproj" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\NetCoreProject\PortableLibrary1.fs" file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\ProjectTemplates\NetCoreProject\Script.fsx" -folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\$(LocaleId)\PortableLibraryProject" +folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp\ProjectTemplates\FSharp\$(LocaleId)\PortableLibraryProject" file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\ProjectTemplates\PortableLibraryProject\AssemblyInfo.fs" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\PortableLibraryProject\PortableLibrary.fsproj" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\PortableLibraryProject\PortableLibrary.vstemplate" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\PortableLibraryProject\PortableLibrary1.fs" file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\ProjectTemplates\PortableLibraryProject\Script.fsx" -folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\$(LocaleId)\TutorialProject" +folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp\ProjectTemplates\FSharp\$(LocaleId)\TutorialProject" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\TutorialProject\Tutorial.fsproj" file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\ProjectTemplates\TutorialProject\Tutorial.fsx" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\TutorialProject\Tutorial.vstemplate" diff --git a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Web.Templates.swr b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Web.Templates.swr index e2c399c6445..4629530a98a 100644 --- a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Web.Templates.swr +++ b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Web.Templates.swr @@ -4,14 +4,14 @@ package name=Microsoft.FSharp.VSIX.$(VSSku).Resources version=$(FSharpPackageVersion) vs.package.language=$(LocaleRegion) -folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\$(LocaleId)\LibraryProject" +folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp\ProjectTemplates\FSharp\$(LocaleId)\LibraryProject" file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\ProjectTemplates\LibraryProject\AssemblyInfo.fs" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\LibraryProject\Library.fsproj" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\LibraryProject\Library.vstemplate" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\LibraryProject\Library1.fs" file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\ProjectTemplates\LibraryProject\Script.fsx" -folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\$(LocaleId)\TutorialProject" +folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp\ProjectTemplates\FSharp\$(LocaleId)\TutorialProject" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\TutorialProject\Tutorial.fsproj" file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\ProjectTemplates\TutorialProject\Tutorial.fsx" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\TutorialProject\Tutorial.vstemplate" From acf614e1ca8021da2ed0292b26bc13a62c46462d Mon Sep 17 00:00:00 2001 From: Omar Tawfik Date: Wed, 31 Aug 2016 11:55:26 -0700 Subject: [PATCH 07/24] Fix signing build error --- .../Microsoft.FSharp.SDK.Core/Microsoft.FSharp.SDK.Core.swixproj | 1 + .../Microsoft.FSharp.SDK.Resources.swixproj | 1 + 2 files changed, 2 insertions(+) diff --git a/setup/Swix/Microsoft.FSharp.SDK.Core/Microsoft.FSharp.SDK.Core.swixproj b/setup/Swix/Microsoft.FSharp.SDK.Core/Microsoft.FSharp.SDK.Core.swixproj index b1f5d3a1d11..de6979f0a7c 100644 --- a/setup/Swix/Microsoft.FSharp.SDK.Core/Microsoft.FSharp.SDK.Core.swixproj +++ b/setup/Swix/Microsoft.FSharp.SDK.Core/Microsoft.FSharp.SDK.Core.swixproj @@ -10,6 +10,7 @@ Debug $(FSharpSourcesRoot)\..\$(Configuration) $(BinariesFolder)\insertion + $(MSBuildThisFileDirectory)obj diff --git a/setup/Swix/Microsoft.FSharp.SDK.Resources/Microsoft.FSharp.SDK.Resources.swixproj b/setup/Swix/Microsoft.FSharp.SDK.Resources/Microsoft.FSharp.SDK.Resources.swixproj index 7c97051d864..3fc1717b294 100644 --- a/setup/Swix/Microsoft.FSharp.SDK.Resources/Microsoft.FSharp.SDK.Resources.swixproj +++ b/setup/Swix/Microsoft.FSharp.SDK.Resources/Microsoft.FSharp.SDK.Resources.swixproj @@ -11,6 +11,7 @@ $(BinariesFolder)\insertion vsix manifest + $(MSBuildThisFileDirectory)obj From b62f97c2e51799afd84fce51b358999ff49032b9 Mon Sep 17 00:00:00 2001 From: Steffen Forkmann Date: Thu, 15 Sep 2016 08:39:57 +0200 Subject: [PATCH 08/24] Try to reproduce #1536 --- .../LetBindings/Basic/ManyLetBindings.fs | 515 ++++++++++++++++++ .../LetBindings/Basic/env.lst | 2 + 2 files changed, 517 insertions(+) create mode 100644 tests/fsharpqa/Source/Conformance/DeclarationElements/LetBindings/Basic/ManyLetBindings.fs diff --git a/tests/fsharpqa/Source/Conformance/DeclarationElements/LetBindings/Basic/ManyLetBindings.fs b/tests/fsharpqa/Source/Conformance/DeclarationElements/LetBindings/Basic/ManyLetBindings.fs new file mode 100644 index 00000000000..f5ca30545c0 --- /dev/null +++ b/tests/fsharpqa/Source/Conformance/DeclarationElements/LetBindings/Basic/ManyLetBindings.fs @@ -0,0 +1,515 @@ +module TestCase +open System + +let x0 = "0" +let x1 = "1" +let x2 = "2" +let x3 = "3" +let x4 = "4" +let x5 = "5" +let x6 = "6" +let x7 = "7" +let x8 = "8" +let x9 = "9" +let x10 = "10" +let x11 = "11" +let x12 = "12" +let x13 = "13" +let x14 = "14" +let x15 = "15" +let x16 = "16" +let x17 = "17" +let x18 = "18" +let x19 = "19" +let x20 = "20" +let x21 = "21" +let x22 = "22" +let x23 = "23" +let x24 = "24" +let x25 = "25" +let x26 = "26" +let x27 = "27" +let x28 = "28" +let x29 = "29" +let x30 = "30" +let x31 = "31" +let x32 = "32" +let x33 = "33" +let x34 = "34" +let x35 = "35" +let x36 = "36" +let x37 = "37" +let x38 = "38" +let x39 = "39" +let x40 = "40" +let x41 = "41" +let x42 = "42" +let x43 = "43" +let x44 = "44" +let x45 = "45" +let x46 = "46" +let x47 = "47" +let x48 = "48" +let x49 = "49" +let x50 = "50" +let x51 = "51" +let x52 = "52" +let x53 = "53" +let x54 = "54" +let x55 = "55" +let x56 = "56" +let x57 = "57" +let x58 = "58" +let x59 = "59" +let x60 = "60" +let x61 = "61" +let x62 = "62" +let x63 = "63" +let x64 = "64" +let x65 = "65" +let x66 = "66" +let x67 = "67" +let x68 = "68" +let x69 = "69" +let x70 = "70" +let x71 = "71" +let x72 = "72" +let x73 = "73" +let x74 = "74" +let x75 = "75" +let x76 = "76" +let x77 = "77" +let x78 = "78" +let x79 = "79" +let x80 = "80" +let x81 = "81" +let x82 = "82" +let x83 = "83" +let x84 = "84" +let x85 = "85" +let x86 = "86" +let x87 = "87" +let x88 = "88" +let x89 = "89" +let x90 = "90" +let x91 = "91" +let x92 = "92" +let x93 = "93" +let x94 = "94" +let x95 = "95" +let x96 = "96" +let x97 = "97" +let x98 = "98" +let x99 = "99" +let x100 = "100" +let x101 = "101" +let x102 = "102" +let x103 = "103" +let x104 = "104" +let x105 = "105" +let x106 = "106" +let x107 = "107" +let x108 = "108" +let x109 = "109" +let x110 = "110" +let x111 = "111" +let x112 = "112" +let x113 = "113" +let x114 = "114" +let x115 = "115" +let x116 = "116" +let x117 = "117" +let x118 = "118" +let x119 = "119" +let x120 = "120" +let x121 = "121" +let x122 = "122" +let x123 = "123" +let x124 = "124" +let x125 = "125" +let x126 = "126" +let x127 = "127" +let x128 = "128" +let x129 = "129" +let x130 = "130" +let x131 = "131" +let x132 = "132" +let x133 = "133" +let x134 = "134" +let x135 = "135" +let x136 = "136" +let x137 = "137" +let x138 = "138" +let x139 = "139" +let x140 = "140" +let x141 = "141" +let x142 = "142" +let x143 = "143" +let x144 = "144" +let x145 = "145" +let x146 = "146" +let x147 = "147" +let x148 = "148" +let x149 = "149" +let x150 = "150" +let x151 = "151" +let x152 = "152" +let x153 = "153" +let x154 = "154" +let x155 = "155" +let x156 = "156" +let x157 = "157" +let x158 = "158" +let x159 = "159" +let x160 = "160" +let x161 = "161" +let x162 = "162" +let x163 = "163" +let x164 = "164" +let x165 = "165" +let x166 = "166" +let x167 = "167" +let x168 = "168" +let x169 = "169" +let x170 = "170" +let x171 = "171" +let x172 = "172" +let x173 = "173" +let x174 = "174" +let x175 = "175" +let x176 = "176" +let x177 = "177" +let x178 = "178" +let x179 = "179" +let x180 = "180" +let x181 = "181" +let x182 = "182" +let x183 = "183" +let x184 = "184" +let x185 = "185" +let x186 = "186" +let x187 = "187" +let x188 = "188" +let x189 = "189" +let x190 = "190" +let x191 = "191" +let x192 = "192" +let x193 = "193" +let x194 = "194" +let x195 = "195" +let x196 = "196" +let x197 = "197" +let x198 = "198" +let x199 = "199" +let x200 = "200" +let x201 = "201" +let x202 = "202" +let x203 = "203" +let x204 = "204" +let x205 = "205" +let x206 = "206" +let x207 = "207" +let x208 = "208" +let x209 = "209" +let x210 = "210" +let x211 = "211" +let x212 = "212" +let x213 = "213" +let x214 = "214" +let x215 = "215" +let x216 = "216" +let x217 = "217" +let x218 = "218" +let x219 = "219" +let x220 = "220" +let x221 = "221" +let x222 = "222" +let x223 = "223" +let x224 = "224" +let x225 = "225" +let x226 = "226" +let x227 = "227" +let x228 = "228" +let x229 = "229" +let x230 = "230" +let x231 = "231" +let x232 = "232" +let x233 = "233" +let x234 = "234" +let x235 = "235" +let x236 = "236" +let x237 = "237" +let x238 = "238" +let x239 = "239" +let x240 = "240" +let x241 = "241" +let x242 = "242" +let x243 = "243" +let x244 = "244" +let x245 = "245" +let x246 = "246" +let x247 = "247" +let x248 = "248" +let x249 = "249" +let x250 = "250" +let x251 = "251" +let x252 = "252" +let x253 = "253" +let x254 = "254" +let x255 = "255" +let x256 = "256" +let x257 = "257" +let x258 = "258" +let x259 = "259" +let x260 = "260" +let x261 = "261" +let x262 = "262" +let x263 = "263" +let x264 = "264" +let x265 = "265" +let x266 = "266" +let x267 = "267" +let x268 = "268" +let x269 = "269" +let x270 = "270" +let x271 = "271" +let x272 = "272" +let x273 = "273" +let x274 = "274" +let x275 = "275" +let x276 = "276" +let x277 = "277" +let x278 = "278" +let x279 = "279" +let x280 = "280" +let x281 = "281" +let x282 = "282" +let x283 = "283" +let x284 = "284" +let x285 = "285" +let x286 = "286" +let x287 = "287" +let x288 = "288" +let x289 = "289" +let x290 = "290" +let x291 = "291" +let x292 = "292" +let x293 = "293" +let x294 = "294" +let x295 = "295" +let x296 = "296" +let x297 = "297" +let x298 = "298" +let x299 = "299" +let x300 = "300" +let x301 = "301" +let x302 = "302" +let x303 = "303" +let x304 = "304" +let x305 = "305" +let x306 = "306" +let x307 = "307" +let x308 = "308" +let x309 = "309" +let x310 = "310" +let x311 = "311" +let x312 = "312" +let x313 = "313" +let x314 = "314" +let x315 = "315" +let x316 = "316" +let x317 = "317" +let x318 = "318" +let x319 = "319" +let x320 = "320" +let x321 = "321" +let x322 = "322" +let x323 = "323" +let x324 = "324" +let x325 = "325" +let x326 = "326" +let x327 = "327" +let x328 = "328" +let x329 = "329" +let x330 = "330" +let x331 = "331" +let x332 = "332" +let x333 = "333" +let x334 = "334" +let x335 = "335" +let x336 = "336" +let x337 = "337" +let x338 = "338" +let x339 = "339" +let x340 = "340" +let x341 = "341" +let x342 = "342" +let x343 = "343" +let x344 = "344" +let x345 = "345" +let x346 = "346" +let x347 = "347" +let x348 = "348" +let x349 = "349" +let x350 = "350" +let x351 = "351" +let x352 = "352" +let x353 = "353" +let x354 = "354" +let x355 = "355" +let x356 = "356" +let x357 = "357" +let x358 = "358" +let x359 = "359" +let x360 = "360" +let x361 = "361" +let x362 = "362" +let x363 = "363" +let x364 = "364" +let x365 = "365" +let x366 = "366" +let x367 = "367" +let x368 = "368" +let x369 = "369" +let x370 = "370" +let x371 = "371" +let x372 = "372" +let x373 = "373" +let x374 = "374" +let x375 = "375" +let x376 = "376" +let x377 = "377" +let x378 = "378" +let x379 = "379" +let x380 = "380" +let x381 = "381" +let x382 = "382" +let x383 = "383" +let x384 = "384" +let x385 = "385" +let x386 = "386" +let x387 = "387" +let x388 = "388" +let x389 = "389" +let x390 = "390" +let x391 = "391" +let x392 = "392" +let x393 = "393" +let x394 = "394" +let x395 = "395" +let x396 = "396" +let x397 = "397" +let x398 = "398" +let x399 = "399" +let x400 = "400" +let x401 = "401" +let x402 = "402" +let x403 = "403" +let x404 = "404" +let x405 = "405" +let x406 = "406" +let x407 = "407" +let x408 = "408" +let x409 = "409" +let x410 = "410" +let x411 = "411" +let x412 = "412" +let x413 = "413" +let x414 = "414" +let x415 = "415" +let x416 = "416" +let x417 = "417" +let x418 = "418" +let x419 = "419" +let x420 = "420" +let x421 = "421" +let x422 = "422" +let x423 = "423" +let x424 = "424" +let x425 = "425" +let x426 = "426" +let x427 = "427" +let x428 = "428" +let x429 = "429" +let x430 = "430" +let x431 = "431" +let x432 = "432" +let x433 = "433" +let x434 = "434" +let x435 = "435" +let x436 = "436" +let x437 = "437" +let x438 = "438" +let x439 = "439" +let x440 = "440" +let x441 = "441" +let x442 = "442" +let x443 = "443" +let x444 = "444" +let x445 = "445" +let x446 = "446" +let x447 = "447" +let x448 = "448" +let x449 = "449" +let x450 = "450" +let x451 = "451" +let x452 = "452" +let x453 = "453" +let x454 = "454" +let x455 = "455" +let x456 = "456" +let x457 = "457" +let x458 = "458" +let x459 = "459" +let x460 = "460" +let x461 = "461" +let x462 = "462" +let x463 = "463" +let x464 = "464" +let x465 = "465" +let x466 = "466" +let x467 = "467" +let x468 = "468" +let x469 = "469" +let x470 = "470" +let x471 = "471" +let x472 = "472" +let x473 = "473" +let x474 = "474" +let x475 = "475" +let x476 = "476" +let x477 = "477" +let x478 = "478" +let x479 = "479" +let x480 = "480" +let x481 = "481" +let x482 = "482" +let x483 = "483" +let x484 = "484" +let x485 = "485" +let x486 = "486" +let x487 = "487" +let x488 = "488" +let x489 = "489" +let x490 = "490" +let x491 = "491" +let x492 = "492" +let x493 = "493" +let x494 = "494" +let x495 = "495" +let x496 = "496" +let x497 = "497" +let x498 = "498" +let x499 = "499" +let x500 = "500" +let x501 = "501" +let x502 = "502" +let x503 = "503" +let x504 = "504" +let x505 = "505" +let x506 = "506" +let x507 = "507" +let x508 = "508" +let x509 = "509" +let x510 = "510" +let x511 = "511" diff --git a/tests/fsharpqa/Source/Conformance/DeclarationElements/LetBindings/Basic/env.lst b/tests/fsharpqa/Source/Conformance/DeclarationElements/LetBindings/Basic/env.lst index 97702ef99d1..1b523e68034 100644 --- a/tests/fsharpqa/Source/Conformance/DeclarationElements/LetBindings/Basic/env.lst +++ b/tests/fsharpqa/Source/Conformance/DeclarationElements/LetBindings/Basic/env.lst @@ -4,6 +4,8 @@ SOURCE=Pathological04.fs SCFLAGS=-a # Pathological04.fs SOURCE=E_Pathological05.fs SCFLAGS=--test:ErrorRanges # E_Pathological05.fs SOURCE=E_Pathological06.fs SCFLAGS=--test:ErrorRanges # E_Pathological06.fs + + SOURCE=ManyLetBindings.fs SCFLAGS="--debug:full --optimize-" # ManyLetBindings.fs SOURCE=SanityCheck.fs # SanityCheck.fs SOURCE=nestedLetBindings.fs # nestedLetBindings.fs From f320958541364a2337178e05cbdc90841cf26b41 Mon Sep 17 00:00:00 2001 From: Steffen Forkmann Date: Thu, 15 Sep 2016 11:22:49 +0200 Subject: [PATCH 09/24] Deleting unused method from test suite (#1531) --- .../Microsoft.FSharp.Collections/ArrayModule.fs | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule.fs index a91b2736c8a..475f91345f9 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule.fs @@ -21,13 +21,6 @@ Make sure each method works on: [] type ArrayModule() = - let rec IsNaN (x : obj) = - match x with - | :? float as x -> Double.IsNaN(x) - | :? float32 as x -> Single.IsNaN(x) - | :? decimal as x -> Decimal.ToDouble(x) |> box |> IsNaN - | _ -> failwith "Invalid input. Please provide a numeric type which could possibly be NaN" - [] member this.Empty() = let emptyArray = Array.empty @@ -400,7 +393,7 @@ type ArrayModule() = if intChoosed.[1] <> 10 then Assert.Fail() // string array - let stringSrc: string [] = "Lists are a commonly used data structure. They are not mutable, i.e., you can't delete an element of a list – instead you create a new list with the element deleted. List values often share storage under the hood, i.e., a list value only allocate more memory when you actually execute construction operations.".Split([|' '|], System.StringSplitOptions.RemoveEmptyEntries) + let stringSrc: string [] = "Lists are a commonly used data structure. They are not mutable, i.e., you can't delete an element of a list – instead you create a new list with the element deleted. List values often share storage under the hood, i.e., a list value only allocate more memory when you actually execute construction operations.".Split([|' '|], System.StringSplitOptions.RemoveEmptyEntries) let funcString x = match x with | "list"-> Some x | "List" -> Some x From 6bbea65eaa08a791886911e44f9b1aa5eda37b47 Mon Sep 17 00:00:00 2001 From: Steffen Forkmann Date: Thu, 15 Sep 2016 10:10:14 +0200 Subject: [PATCH 10/24] Limit number of scopes in a method to avoid Stack Overflow in PDBWriter - fixes #1536 --- src/absil/ilwritepdb.fs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/absil/ilwritepdb.fs b/src/absil/ilwritepdb.fs index ca569235362..47c3d5e0b56 100644 --- a/src/absil/ilwritepdb.fs +++ b/src/absil/ilwritepdb.fs @@ -470,13 +470,13 @@ let writePdbInfo fixupOverlappingSequencePoints showTimes f fpdb info = pdbDefineSequencePoints !pdbw (getDocument spset.[0].Document) sps) // Write the scopes - let rec writePdbScope top sco = - if top || sco.Locals.Length <> 0 || sco.Children.Length <> 0 then + let rec writePdbScope level sco = + if level = 0 || (level < 450 && (sco.Locals.Length <> 0 || sco.Children.Length <> 0)) then pdbOpenScope !pdbw sco.StartOffset sco.Locals |> Array.iter (fun v -> pdbDefineLocalVariable !pdbw v.Name v.Signature v.Index) - sco.Children |> Array.iter (writePdbScope false) + sco.Children |> Array.iter (writePdbScope (level + 1)) pdbCloseScope !pdbw sco.EndOffset - writePdbScope true minfo.RootScope + writePdbScope 0 minfo.RootScope pdbCloseMethod !pdbw end) From ea60a9de51a2de0ae013abe1b8fc93be0032e0f2 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Thu, 15 Sep 2016 14:49:06 -0700 Subject: [PATCH 11/24] Embed PDBs in built binary (#1529) * Minor refactor of writePortablePdbInfo * Add command line switches for embedded pdbs * Embed PDBs in the .exe * Enable embedded portable pdbs * Update fsharp.build.dll to understand embedded * Clean up * Move BinaryChunk to ilwrite.fsi * Revert "Move BinaryChunk to ilwrite.fsi" This reverts commit 992aa7a944ed62b7aae93311f030278d16a99d29. --- lkg/FSharp-14.0.23413.0/bin/FSharp.Build.dll | Bin 55808 -> 56320 bytes src/absil/ilwrite.fs | 99 ++++++---- src/absil/ilwrite.fsi | 1 + src/absil/ilwritepdb.fs | 129 ++++++++----- src/absil/ilwritepdb.fsi | 16 +- src/fsharp/CompileOps.fs | 3 + src/fsharp/CompileOps.fsi | 2 + src/fsharp/CompileOptions.fs | 16 +- src/fsharp/FSComp.txt | 2 +- src/fsharp/FSharp.Build/Fsc.fs | 1 + .../FSharp.Compiler/FSharp.Compiler.fsproj | 2 +- src/fsharp/fsc.fs | 1 + .../CompilerOptions/fsc/help/comparer.fsx | 6 +- .../fsc/help/help40.437.1033.bsl | 172 +++++++++--------- .../fsi/exename/help40.437.1033.bsl | 92 +++++----- .../fsi/help/help.437.1033.bsl | 62 ------- .../fsi/help/help40-nologo.437.1033.bsl | 94 +++++----- .../fsi/help/help40.437.1033.bsl | 96 +++++----- 18 files changed, 414 insertions(+), 380 deletions(-) delete mode 100644 tests/fsharpqa/Source/CompilerOptions/fsi/help/help.437.1033.bsl diff --git a/lkg/FSharp-14.0.23413.0/bin/FSharp.Build.dll b/lkg/FSharp-14.0.23413.0/bin/FSharp.Build.dll index b0f401edb503dc1dc814aa9b3671ff6861384532..e8d1b6f4612ca380fa91348c8fa815bfe9847f2b 100644 GIT binary patch delta 13689 zcmbt*d0B5@s-F*iOYzt zTtLJGi@Np_eKCb-^P@zX(Znjcrb|ySw%_=dyo_}jODqO^%J{ow1Uu5zVErRwHyR;( z8@t(Pw|`mq2$8K`NgpCwMYXQPBV9|Chn%e4VBT8RVAOjnuHIUWng;m2mfA9h$D(*F zk2ZoxH4{1a@{q?;GT&?QSR8kE4mss;NwUSddIPeaw{3)7Jsmo)m29aQaMJIip6F0C z+-D1HMZqfl9;?yqy*TT&oLagj0mf_d*lxUtJ9dw~uFYdl&EY8&k8fh?@L|DkGhK^V|H=1Pv`ygC2-Db zc`k3GgLWF*ix*bfeKc}47%Ahz`AIFrVJ>?*!e~`uIQ%+`k80-{g??W)X-`k>p_TMP z_*7eGPp|AlW(8SdPjBx-?i8ftqf`l6ftoz1sZO<}_aTr9aE@vj+0xy>QU-0bcl#aE$INIc4PW^zQ_ZK|j|+E9w6cWEDo8$@!#8+5w+xG3uT^WK1^R zE2&^j#@N!JY)elvN=hqP2hhc_t8ij5Eq&y*+tMi<0C|)?Rp69@k}?%Y zXU;EMdZl0n_ApYWl2?Y)e-9%0DZ=OGKB27Yqcj!G41WUu! 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 delta 13310 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 PeSAd1w-M*x|1 PHYSICAL METADATA+BLOBS //===================================================================== -type BinaryChunk = - { size: int32 - addr: int32 } - let chunk sz next = ({addr=next; size=sz},next + sz) let nochunk next = ({addr= 0x0;size= 0x0; } ,next) @@ -3541,7 +3537,7 @@ let writeDirectory os dict = let writeBytes (os: BinaryWriter) (chunk:byte[]) = os.Write(chunk,0,chunk.Length) -let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: ILStrongNameSigner option, portablePDB, +let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: ILStrongNameSigner option, portablePDB, embeddedPDB, fixupOverlappingSequencePoints, emitTailcalls, showTimes, dumpDebugInfo) modul noDebugData = // Store the public key from the signer into the manifest. This means it will be written // to the binary and also acts as an indicator to leave space for delay sign @@ -3590,7 +3586,7 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: with e -> failwith ("Could not open file for writing (binary mode): " + outfile) - let pdbData,debugDirectoryChunk,debugDataChunk,textV2P,mappings = + let pdbData,pdbOpt,debugDirectoryChunk,debugDataChunk,debugEmbeddedPdbChunk,textV2P,mappings = try let imageBaseReal = modul.ImageBase // FIXED CHOICE @@ -3683,7 +3679,7 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: let importLookupTableChunk,next = chunk 0x14 next let importNameHintTableChunk,next = chunk 0x0e next let mscoreeStringChunk,next = chunk 0x0c next - + let next = align 0x10 (next + 0x05) - 0x05 let importTableChunk = { addr=importTableChunk.addr; size = next - importTableChunk.addr} let importTableChunkPadding = importTableChunk.size - (0x28 + 0x14 + 0x0e + 0x0c) @@ -3691,8 +3687,22 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: let next = next + 0x03 let entrypointCodeChunk,next = chunk 0x06 next let globalpointerCodeChunk,next = chunk (if isItanium then 0x8 else 0x0) next - - let debugDirectoryChunk,next = chunk (if pdbfile = None then 0x0 else sizeof_IMAGE_DEBUG_DIRECTORY) next + + let pdbOpt = + match portablePDB with + | true -> + let struct (uncompressedLength, contentId, stream) as pdbStream = generatePortablePdb fixupOverlappingSequencePoints showTimes pdbData + if embeddedPDB then Some (compressPortablePdbStream uncompressedLength contentId stream) + else Some (pdbStream) + | _ -> None + let debugDirectoryChunk,next = + chunk (if pdbfile = None then + 0x0 + else if embeddedPDB && portablePDB then + sizeof_IMAGE_DEBUG_DIRECTORY * 2 + else + sizeof_IMAGE_DEBUG_DIRECTORY + ) next // The debug data is given to us by the PDB writer and appears to // typically be the type of the data plus the PDB file name. We fill // this in after we've written the binary. We approximate the size according @@ -3700,11 +3710,19 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: let debugDataJustInCase = 40 let debugDataChunk,next = chunk (align 0x4 (match pdbfile with - | None -> 0x0 + | None -> 0 | Some f -> (24 + System.Text.Encoding.Unicode.GetByteCount(f) // See bug 748444 + debugDataJustInCase))) next + let debugEmbeddedPdbChunk,next = + let streamLength = + match pdbOpt with + | Some struct (_,_,stream) -> int(stream.Length) + | None -> 0 + chunk (align 0x4 (match embeddedPDB with + | true -> 8 + streamLength + | _ -> 0 )) next let textSectionSize = next - textSectionAddr let nextPhys = align alignPhys (textSectionPhysLoc + textSectionSize) @@ -4094,11 +4112,14 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: if isItanium then write (Some (textV2P globalpointerCodeChunk.addr)) os " itanium global pointer" [| 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy |] - + if pdbfile.IsSome then - write (Some (textV2P debugDirectoryChunk.addr)) os "debug directory" (Array.create sizeof_IMAGE_DEBUG_DIRECTORY 0x0uy) + write (Some (textV2P debugDirectoryChunk.addr)) os "debug directory" (Array.create debugDirectoryChunk.size 0x0uy) write (Some (textV2P debugDataChunk.addr)) os "debug data" (Array.create debugDataChunk.size 0x0uy) - + + if embeddedPDB then + write (Some (textV2P debugEmbeddedPdbChunk.addr)) os "debug data" (Array.create debugEmbeddedPdbChunk.size 0x0uy) + writePadding os "end of .text" (dataSectionPhysLoc - textSectionPhysLoc - textSectionSize) // DATA SECTION @@ -4145,7 +4166,7 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: FileSystemUtilites.setExecutablePermission outfile with _ -> () - pdbData,debugDirectoryChunk,debugDataChunk,textV2P,mappings + pdbData,pdbOpt,debugDirectoryChunk,debugDataChunk,debugEmbeddedPdbChunk,textV2P,mappings // Looks like a finally with e -> @@ -4169,14 +4190,17 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: | Some fpdb -> try let idd = + match pdbOpt with + | Some struct(originalLength, contentId, stream) -> + if embeddedPDB then + embedPortablePdbInfo originalLength contentId stream showTimes fpdb debugDataChunk debugEmbeddedPdbChunk + else + writePortablePdbInfo contentId stream showTimes fpdb debugDataChunk + | None -> #if FX_NO_PDB_WRITER - ignore portablePDB - writePortablePdbInfo fixupOverlappingSequencePoints showTimes fpdb pdbData + Array.empty #else - if portablePDB then - writePortablePdbInfo fixupOverlappingSequencePoints showTimes fpdb pdbData - else - writePdbInfo fixupOverlappingSequencePoints showTimes outfile fpdb pdbData + writePdbInfo fixupOverlappingSequencePoints showTimes outfile fpdb pdbData debugDataChunk #endif reportTime showTimes "Generate PDB Info" @@ -4186,19 +4210,22 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: try // write the IMAGE_DEBUG_DIRECTORY os2.BaseStream.Seek (int64 (textV2P debugDirectoryChunk.addr), SeekOrigin.Begin) |> ignore - writeInt32 os2 idd.iddCharacteristics // IMAGE_DEBUG_DIRECTORY.Characteristics - writeInt32 os2 idd.iddTimestamp - writeInt32AsUInt16 os2 idd.iddMajorVersion - writeInt32AsUInt16 os2 idd.iddMinorVersion - writeInt32 os2 idd.iddType - writeInt32 os2 idd.iddData.Length // IMAGE_DEBUG_DIRECTORY.SizeOfData - writeInt32 os2 debugDataChunk.addr // IMAGE_DEBUG_DIRECTORY.AddressOfRawData - writeInt32 os2 (textV2P debugDataChunk.addr) // IMAGE_DEBUG_DIRECTORY.PointerToRawData - - // write the debug raw data as given us by the PDB writer - os2.BaseStream.Seek (int64 (textV2P debugDataChunk.addr), SeekOrigin.Begin) |> ignore - if debugDataChunk.size < idd.iddData.Length then failwith "Debug data area is not big enough. Debug info may not be usable" - writeBytes os2 idd.iddData + for i in idd do + writeInt32 os2 i.iddCharacteristics // IMAGE_DEBUG_DIRECTORY.Characteristics + writeInt32 os2 i.iddTimestamp + writeInt32AsUInt16 os2 i.iddMajorVersion + writeInt32AsUInt16 os2 i.iddMinorVersion + writeInt32 os2 i.iddType + writeInt32 os2 i.iddData.Length // IMAGE_DEBUG_DIRECTORY.SizeOfData + writeInt32 os2 i.iddChunk.addr // IMAGE_DEBUG_DIRECTORY.AddressOfRawData + writeInt32 os2 (textV2P i.iddChunk.addr) // IMAGE_DEBUG_DIRECTORY.PointerToRawData + + // Write the Debug Data + for i in idd do + // write the debug raw data as given us by the PDB writer + os2.BaseStream.Seek (int64 (textV2P i.iddChunk.addr), SeekOrigin.Begin) |> ignore + if i.iddChunk.size < i.iddData.Length then failwith "Debug data area is not big enough. Debug info may not be usable" + writeBytes os2 i.iddData os2.Dispose() with e -> failwith ("Error while writing debug directory entry: "+e.Message) @@ -4209,6 +4236,7 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: end ignore debugDataChunk + ignore debugEmbeddedPdbChunk reportTime showTimes "Finalize PDB" /// Sign the binary. No further changes to binary allowed past this point! @@ -4228,19 +4256,18 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: //Finished writing and signing the binary and debug info... mappings - type options = { ilg: ILGlobals; pdbfile: string option portablePDB: bool + embeddedPDB: bool signer: ILStrongNameSigner option fixupOverlappingSequencePoints: bool emitTailcalls : bool showTimes: bool dumpDebugInfo:bool } - let WriteILBinary (outfile, (args: options), modul, noDebugData) = - ignore (writeBinaryAndReportMappings (outfile, args.ilg, args.pdbfile, args.signer, args.portablePDB, + ignore (writeBinaryAndReportMappings (outfile, args.ilg, args.pdbfile, args.signer, args.portablePDB, args.embeddedPDB, args.fixupOverlappingSequencePoints, args.emitTailcalls, args.showTimes, args.dumpDebugInfo) modul noDebugData) diff --git a/src/absil/ilwrite.fsi b/src/absil/ilwrite.fsi index aab8b46221b..51d1842b208 100644 --- a/src/absil/ilwrite.fsi +++ b/src/absil/ilwrite.fsi @@ -19,6 +19,7 @@ type options = { ilg: ILGlobals pdbfile: string option portablePDB: bool + embeddedPDB: bool signer : ILStrongNameSigner option fixupOverlappingSequencePoints : bool emitTailcalls: bool diff --git a/src/absil/ilwritepdb.fs b/src/absil/ilwritepdb.fs index ca569235362..1b82f9352dd 100644 --- a/src/absil/ilwritepdb.fs +++ b/src/absil/ilwritepdb.fs @@ -6,6 +6,7 @@ open System open System.Collections.Generic open System.Collections.Immutable open System.IO +open System.IO.Compression open System.Reflection open System.Reflection.Metadata open System.Reflection.Metadata.Ecma335 @@ -86,9 +87,9 @@ type PdbData = Methods: PdbMethodData[] TableRowCounts: int[] } -//--------------------------------------------------------------------- -// Portable PDB Writer -//--------------------------------------------------------------------- +type BinaryChunk = + { size: int32 + addr: int32 } type idd = { iddCharacteristics: int32; @@ -96,34 +97,60 @@ type idd = iddMinorVersion: int32; (* actually u16 in IMAGE_DEBUG_DIRECTORY *) iddType: int32; iddTimestamp: int32; - iddData: byte[];} + iddData: byte[]; + iddChunk: BinaryChunk } -let magicNumber = 0x53445352L -let pdbGetDebugInfo (mvid:byte[]) (timestamp:int32) (filepath:string) = - let iddDataBuffer = +//--------------------------------------------------------------------- +// Portable PDB Writer +//--------------------------------------------------------------------- +let cvMagicNumber = 0x53445352L +let pdbGetCvDebugInfo (mvid:byte[]) (timestamp:int32) (filepath:string) (cvChunk:BinaryChunk) = + let iddCvBuffer = + // Debug directory entry let path = (System.Text.Encoding.UTF8.GetBytes filepath) let buffer = Array.zeroCreate (sizeof + mvid.Length + sizeof + path.Length + 1) - let struct (offset, size) = struct(0, sizeof) // Magic Number RSDS dword: 0x53445352L - Buffer.BlockCopy(BitConverter.GetBytes(magicNumber), 0, buffer, offset, size) - + Buffer.BlockCopy(BitConverter.GetBytes(cvMagicNumber), 0, buffer, offset, size) let struct (offset, size) = struct (offset + size, mvid.Length) // mvid Guid Buffer.BlockCopy(mvid, 0, buffer, offset, size) - let struct (offset, size) = struct (offset + size, sizeof) // # of pdb files generated (1) Buffer.BlockCopy(BitConverter.GetBytes(1), 0, buffer, offset, size) - let struct (offset, size) = struct (offset + size, path.Length) // Path to pdb string Buffer.BlockCopy(path, 0, buffer, offset, size) - buffer - - { iddCharacteristics = 0x0; // Reserved - iddMajorVersion = 0x0; // VersionMajor should be 0 - iddMinorVersion = 0x0; // VersionMinor should be 0 - iddType = 0x2; // IMAGE_DEBUG_TYPE_CODEVIEW + { iddCharacteristics = 0; // Reserved + iddMajorVersion = 0; // VersionMajor should be 0 + iddMinorVersion = 0; // VersionMinor should be 0 + iddType = 2; // IMAGE_DEBUG_TYPE_CODEVIEW iddTimestamp = timestamp; - iddData = iddDataBuffer } // Path name to the pdb file when built + iddData = iddCvBuffer; // Path name to the pdb file when built + iddChunk = cvChunk; + } + +let pdbMagicNumber= 0x4244504dL +let pdbGetPdbDebugInfo (embeddedPDBChunk:BinaryChunk) (uncompressedLength:int64) (stream:MemoryStream) = + let iddPdbBuffer = + let buffer = Array.zeroCreate (sizeof + sizeof + int(stream.Length)) + let struct (offset, size) = struct(0, sizeof) // Magic Number dword: 0x4244504dL + Buffer.BlockCopy(BitConverter.GetBytes(pdbMagicNumber), 0, buffer, offset, size) + let struct (offset, size) = struct(offset + size, sizeof) // Uncompressed size + Buffer.BlockCopy(BitConverter.GetBytes((int uncompressedLength)), 0, buffer, offset, size) + let struct (offset, size) = struct(offset + size, int(stream.Length)) // Uncompressed size + Buffer.BlockCopy(stream.ToArray(), 0, buffer, offset, size) + buffer + { iddCharacteristics = 0; // Reserved + iddMajorVersion = 0; // VersionMajor should be 0 + iddMinorVersion = 0x0100; // VersionMinor should be 0x0100 + iddType = 17; // IMAGE_DEBUG_TYPE_EMBEDDEDPDB + iddTimestamp = 0; + iddData = iddPdbBuffer; // Path name to the pdb file when built + iddChunk = embeddedPDBChunk; + } + +let pdbGetDebugInfo (mvid:byte[]) (timestamp:int32) (filepath:string) (cvChunk:BinaryChunk) (embeddedPDBChunk:BinaryChunk option) (uncompressedLength:int64) (stream:MemoryStream option)= + match stream, embeddedPDBChunk with + | None, _ | _, None -> [| pdbGetCvDebugInfo mvid timestamp filepath cvChunk |] + | Some s, Some chunk -> [| pdbGetCvDebugInfo mvid timestamp filepath cvChunk; pdbGetPdbDebugInfo chunk uncompressedLength s; |] // Document checksum algorithms let guidSourceHashMD5 = System.Guid(0x406ea660u, 0x64cfus, 0x4c82us, 0xb6uy, 0xf0uy, 0x42uy, 0xd4uy, 0x81uy, 0x72uy, 0xa7uy, 0x99uy) //406ea660-64cf-4c82-b6f0-42d48172a799 @@ -200,10 +227,7 @@ let fixupOverlappingSequencePoints fixupSPs showTimes methods = Array.sortInPlaceBy fst allSps spCounts, allSps -let writePortablePdbInfo (fixupSPs:bool) showTimes fpdb (info:PdbData) = - - try FileSystem.FileDelete fpdb with _ -> () - +let generatePortablePdb fixupSPs showTimes (info:PdbData) = sortMethods showTimes info let _spCounts, _allSps = fixupOverlappingSequencePoints fixupSPs showTimes info.Methods let externalRowCounts = getRowCounts info.TableRowCounts @@ -336,18 +360,18 @@ let writePortablePdbInfo (fixupSPs:bool) showTimes fpdb (info:PdbData) = let rec writePdbScope scope = if scope.Children.Length = 0 then metadata.AddLocalScope(MetadataTokens.MethodDefinitionHandle(minfo.MethToken), - Unchecked.defaultof, - nextHandle lastLocalVariableHandle, - Unchecked.defaultof, - 0, - scope.EndOffset - scope.StartOffset) |>ignore + Unchecked.defaultof, + nextHandle lastLocalVariableHandle, + Unchecked.defaultof, + 0, + scope.EndOffset - scope.StartOffset) |>ignore else metadata.AddLocalScope(MetadataTokens.MethodDefinitionHandle(minfo.MethToken), - Unchecked.defaultof, - nextHandle lastLocalVariableHandle, - Unchecked.defaultof, - scope.StartOffset, - scope.EndOffset - scope.StartOffset) |>ignore + Unchecked.defaultof, + nextHandle lastLocalVariableHandle, + Unchecked.defaultof, + scope.StartOffset, + scope.EndOffset - scope.StartOffset) |>ignore for localVariable in scope.Locals do lastLocalVariableHandle <- metadata.AddLocalVariable(LocalVariableAttributes.None, localVariable.Index, metadata.GetOrAddString(localVariable.Name)) @@ -365,12 +389,28 @@ let writePortablePdbInfo (fixupSPs:bool) showTimes fpdb (info:PdbData) = let serializer = PortablePdbBuilder(metadata, externalRowCounts, entryPoint, null) let blobBuilder = new BlobBuilder() let contentId= serializer.Serialize(blobBuilder) - - reportTime showTimes "PDB: Created" - use portablePdbStream = new FileStream(fpdb, FileMode.Create, FileAccess.ReadWrite) + let portablePdbStream = new MemoryStream() blobBuilder.WriteContentTo(portablePdbStream) + reportTime showTimes "PDB: Created" + struct (portablePdbStream.Length, contentId, portablePdbStream) + +let compressPortablePdbStream (uncompressedLength:int64) (contentId:BlobContentId) (stream:MemoryStream) = + let compressedStream = new MemoryStream() + use compressionStream = new DeflateStream(compressedStream, CompressionMode.Compress,true) + stream.WriteTo(compressionStream) + struct (uncompressedLength, contentId, compressedStream) + +let writePortablePdbInfo (contentId:BlobContentId) (stream:MemoryStream) showTimes fpdb cvChunk = + try FileSystem.FileDelete fpdb with _ -> () + use pdbFile = new FileStream(fpdb, FileMode.Create, FileAccess.ReadWrite) + stream.WriteTo(pdbFile) + reportTime showTimes "PDB: Closed" + pdbGetDebugInfo (contentId.Guid.ToByteArray()) (int32 (contentId.Stamp)) fpdb cvChunk None 0L None + +let embedPortablePdbInfo (uncompressedLength:int64) (contentId:BlobContentId) (stream:MemoryStream) showTimes fpdb cvChunk pdbChunk = reportTime showTimes "PDB: Closed" - pdbGetDebugInfo (contentId.Guid.ToByteArray()) (int32(contentId.Stamp)) fpdb + let fn = Path.GetFileName(fpdb) + pdbGetDebugInfo (contentId.Guid.ToByteArray()) (int32 (contentId.Stamp)) fn cvChunk (Some pdbChunk) uncompressedLength (Some stream) #if FX_NO_PDB_WRITER #else @@ -378,7 +418,7 @@ let writePortablePdbInfo (fixupSPs:bool) showTimes fpdb (info:PdbData) = // PDB Writer. The function [WritePdbInfo] abstracts the // imperative calls to the Symbol Writer API. //--------------------------------------------------------------------- -let writePdbInfo fixupOverlappingSequencePoints showTimes f fpdb info = +let writePdbInfo fixupOverlappingSequencePoints showTimes f fpdb info cvChunk = try FileSystem.FileDelete fpdb with _ -> () @@ -487,12 +527,13 @@ let writePdbInfo fixupOverlappingSequencePoints showTimes f fpdb info = pdbClose !pdbw f fpdb; reportTime showTimes "PDB: Closed" - { iddCharacteristics = res.iddCharacteristics; - iddMajorVersion = res.iddMajorVersion; - iddMinorVersion = res.iddMinorVersion; - iddType = res.iddType; - iddTimestamp = info.Timestamp; - iddData = res.iddData} + [| { iddCharacteristics = res.iddCharacteristics; + iddMajorVersion = res.iddMajorVersion; + iddMinorVersion = res.iddMinorVersion; + iddType = res.iddType; + iddTimestamp = info.Timestamp; + iddData = res.iddData + iddChunk = cvChunk } |] #endif #if ENABLE_MONO_SUPPORT diff --git a/src/absil/ilwritepdb.fsi b/src/absil/ilwritepdb.fsi index de03c2bbf37..1baf1d4b98c 100644 --- a/src/absil/ilwritepdb.fsi +++ b/src/absil/ilwritepdb.fsi @@ -7,6 +7,8 @@ open Microsoft.FSharp.Compiler.AbstractIL.IL open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Range open System.Collections.Generic +open System.IO +open System.Reflection.Metadata type PdbDocumentData = ILSourceDocument @@ -67,16 +69,24 @@ val logDebugInfo : string -> PdbData -> unit val writeMdbInfo<'a> : string -> string -> PdbData -> 'a #endif +type BinaryChunk = + { size: int32 + addr: int32 } + type idd = { iddCharacteristics: int32; iddMajorVersion: int32; (* actually u16 in IMAGE_DEBUG_DIRECTORY *) iddMinorVersion: int32; (* actually u16 in IMAGE_DEBUG_DIRECTORY *) iddType: int32; iddTimestamp: int32; - iddData: byte[]; } + iddData: byte[]; + iddChunk: BinaryChunk } -val writePortablePdbInfo : fixupOverlappingSequencePoints:bool -> showTimes:bool -> fpdb:string -> info:PdbData -> idd +val generatePortablePdb : fixupSPs:bool -> showTimes:bool -> info:PdbData -> struct (int64 * BlobContentId * MemoryStream) +val compressPortablePdbStream : uncompressedLength:int64 -> contentId:BlobContentId -> stream:MemoryStream -> struct (int64 * BlobContentId * MemoryStream) +val embedPortablePdbInfo : uncompressedLength:int64 -> contentId:BlobContentId -> stream:MemoryStream -> showTimes:bool -> fpdb:string -> cvChunk:BinaryChunk -> pdbChunk:BinaryChunk -> idd[] +val writePortablePdbInfo : contentId:BlobContentId -> stream:MemoryStream -> showTimes:bool -> fpdb:string -> cvChunk:BinaryChunk -> idd[] #if !FX_NO_PDB_WRITER -val writePdbInfo : fixupOverlappingSequencePoints:bool -> showTimes:bool -> f:string -> fpdb:string -> info:PdbData -> idd +val writePdbInfo : fixupOverlappingSequencePoints:bool -> showTimes:bool -> f:string -> fpdb:string -> info:PdbData -> cvChunk:BinaryChunk -> idd[] #endif diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index 879ccf0f2c4..7ada6090e9e 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -2072,6 +2072,7 @@ type TcConfigBuilder = mutable useSignatureDataFile : bool mutable jitTracking : bool mutable portablePDB : bool + mutable embeddedPDB : bool mutable ignoreSymbolStoreSequencePoints : bool mutable internConstantStrings : bool mutable extraOptimizationIterations : int @@ -2241,6 +2242,7 @@ type TcConfigBuilder = useSignatureDataFile = false jitTracking = true portablePDB = true + embeddedPDB = true ignoreSymbolStoreSequencePoints = false internConstantStrings = true extraOptimizationIterations = 0 @@ -2729,6 +2731,7 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = member x.useSignatureDataFile = data.useSignatureDataFile member x.jitTracking = data.jitTracking member x.portablePDB = data.portablePDB + member x.embeddedPDB = data.embeddedPDB member x.ignoreSymbolStoreSequencePoints = data.ignoreSymbolStoreSequencePoints member x.internConstantStrings = data.internConstantStrings member x.extraOptimizationIterations = data.extraOptimizationIterations diff --git a/src/fsharp/CompileOps.fsi b/src/fsharp/CompileOps.fsi index 1d00cd89d98..34a4f8bf763 100755 --- a/src/fsharp/CompileOps.fsi +++ b/src/fsharp/CompileOps.fsi @@ -306,6 +306,7 @@ type TcConfigBuilder = mutable useSignatureDataFile : bool mutable jitTracking : bool mutable portablePDB : bool + mutable embeddedPDB : bool mutable ignoreSymbolStoreSequencePoints : bool mutable internConstantStrings : bool mutable extraOptimizationIterations : int @@ -459,6 +460,7 @@ type TcConfig = member useSignatureDataFile : bool member jitTracking : bool member portablePDB : bool + member embeddedPDB : bool member ignoreSymbolStoreSequencePoints : bool member internConstantStrings : bool member extraOptimizationIterations : int diff --git a/src/fsharp/CompileOptions.fs b/src/fsharp/CompileOptions.fs index c1867acbb52..ccf2c6e96e6 100644 --- a/src/fsharp/CompileOptions.fs +++ b/src/fsharp/CompileOptions.fs @@ -119,7 +119,7 @@ let PrintCompilerOption (CompilerOption(_s,_tag,_spec,_,help) as compilerOption) // single space - space. // description - words upto but excluding the final character of the line. assert(flagWidth = 30) - printf "%-30s" (compilerOptionUsage compilerOption) + printf "%-40s" (compilerOptionUsage compilerOption) let printWord column (word:string) = // Have printed upto column. // Now print the next word including any preceeding whitespace. @@ -127,7 +127,7 @@ let PrintCompilerOption (CompilerOption(_s,_tag,_spec,_,help) as compilerOption) if column + 1 (*space*) + word.Length >= lineWidth then // NOTE: "equality" ensures final character of the line is never printed printfn "" (* newline *) assert(flagWidth = 30) - printf "%-30s %s" ""(*<--flags*) word + printf "%-40s %s" ""(*<--flags*) word flagWidth + 1 + word.Length else printf " %s" word @@ -474,11 +474,12 @@ let SetDebugSwitch (tcConfigB : TcConfigBuilder) (dtype : string option) (s : Op match dtype with | Some(s) -> match s with - | "portable" -> tcConfigB.portablePDB <- true ; tcConfigB.jitTracking <- true - | "pdbonly" -> tcConfigB.portablePDB <- false; tcConfigB.jitTracking <- false - | "full" -> tcConfigB.portablePDB <- false; tcConfigB.jitTracking <- true + | "portable" -> tcConfigB.portablePDB <- true ; tcConfigB.embeddedPDB <- false; tcConfigB.jitTracking <- true + | "pdbonly" -> tcConfigB.portablePDB <- false; tcConfigB.embeddedPDB <- false; tcConfigB.jitTracking <- false + | "embedded" -> tcConfigB.portablePDB <- true; tcConfigB.embeddedPDB <- true; tcConfigB.jitTracking <- true + | "full" -> tcConfigB.portablePDB <- false; tcConfigB.embeddedPDB <- false; tcConfigB.jitTracking <- true | _ -> error(Error(FSComp.SR.optsUnrecognizedDebugType(s), rangeCmdArgs)) - | None -> tcConfigB.portablePDB <- false; tcConfigB.jitTracking <- s = OptionSwitch.On; + | None -> tcConfigB.portablePDB <- false; tcConfigB.embeddedPDB <- false; tcConfigB.jitTracking <- s = OptionSwitch.On; tcConfigB.debuginfo <- s = OptionSwitch.On let setOutFileName tcConfigB s = @@ -499,7 +500,7 @@ let tagFileList = "" let tagDirList = "" let tagPathList = "" let tagResInfo = "" -let tagFullPDBOnlyPortable = "{full|pdbonly|portable}" +let tagFullPDBOnlyPortable = "{full|pdbonly|portable|embedded}" let tagWarnList = "" let tagSymbolList = "" let tagAddress = "
" @@ -522,6 +523,7 @@ let PrintOptionInfo (tcConfigB:TcConfigBuilder) = printfn " doFinalSimplify. . . . : %+A" tcConfigB.doFinalSimplify printfn " jitTracking . . . . . : %+A" tcConfigB.jitTracking printfn " portablePDB. . . . . . : %+A" tcConfigB.portablePDB + printfn " embeddedPDB. . . . . . : %+A" tcConfigB.embeddedPDB printfn " debuginfo . . . . . . : %+A" tcConfigB.debuginfo printfn " resolutionEnvironment : %+A" tcConfigB.resolutionEnvironment printfn " product . . . . . . . : %+A" tcConfigB.productNameForBannerText diff --git a/src/fsharp/FSComp.txt b/src/fsharp/FSComp.txt index cefdff8663e..8f14f835865 100644 --- a/src/fsharp/FSComp.txt +++ b/src/fsharp/FSComp.txt @@ -839,7 +839,7 @@ optsNowin32manifest,"Do not include the default Win32 manifest" optsResource,"Embed the specified managed resource" optsLinkresource,"Link the specified resource to this assembly where the resinfo format is [,[,public|private]]" optsDebugPM,"Emit debug information (Short form: -g)" -optsDebug,"Specify debugging type: full, portable, pdbonly. ('%s' is the default if no debuggging type specified and enables attaching a debugger to a running program. 'portable' is a cross-platform format)." +optsDebug,"Specify debugging type: full, portable, embedded, pdbonly. ('%s' is the default if no debuggging type specified and enables attaching a debugger to a running program, 'portable' is a cross-platform format, 'embedded' is a cross-platform format embedded into the output file)." optsOptimize,"Enable optimizations (Short form: -O)" optsTailcalls,"Enable or disable tailcalls" optsCrossoptimize,"Enable or disable cross-module optimizations" diff --git a/src/fsharp/FSharp.Build/Fsc.fs b/src/fsharp/FSharp.Build/Fsc.fs index 9b42f425cf1..583fa2bf62f 100644 --- a/src/fsharp/FSharp.Build/Fsc.fs +++ b/src/fsharp/FSharp.Build/Fsc.fs @@ -180,6 +180,7 @@ type [ null | "PORTABLE" -> "portable" | "PDBONLY" -> "pdbonly" + | "EMBEDDED" -> "embedded" | "FULL" -> "full" | _ -> null) // NoFramework diff --git a/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj b/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj index 24d87a98c01..da37aa76f7d 100644 --- a/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj +++ b/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj @@ -528,7 +528,7 @@ ..\..\..\packages\Microsoft.DiaSymReader.1.0.8\lib\portable-net45+win8\Microsoft.DiaSymReader.dll ..\..\..\packages\System.Reflection.Metadata.1.4.1-beta-24227-04\lib\portable-net45+win8\System.Reflection.Metadata.dll ..\..\..\packages\System.Collections.Immutable.1.2.0\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll - ..\..\..\packages\System.ValueTuple.4.0.0-rc3-24212-01\lib\netstandard1.1\System.ValueTuple.dllfalse + ..\..\..\packages\System.ValueTuple.4.0.0-rc3-24212-01\lib\netstandard1.1\System.ValueTuple.dlltrue diff --git a/src/fsharp/fsc.fs b/src/fsharp/fsc.fs index 43b1659e453..73be4f34e89 100755 --- a/src/fsharp/fsc.fs +++ b/src/fsharp/fsc.fs @@ -1741,6 +1741,7 @@ module FileWriter = emitTailcalls = tcConfig.emitTailcalls showTimes = tcConfig.showTimes portablePDB = tcConfig.portablePDB + embeddedPDB = tcConfig.embeddedPDB signer = GetSigner signingInfo fixupOverlappingSequencePoints = false dumpDebugInfo = tcConfig.dumpDebugInfo }, diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/help/comparer.fsx b/tests/fsharpqa/Source/CompilerOptions/fsc/help/comparer.fsx index 5ea487fbd26..3b812c21ae1 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/help/comparer.fsx +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/help/comparer.fsx @@ -17,8 +17,8 @@ let f2 = File2List fn2 let mutable i = 0 let compare (f1:string list) (f2:string list) = List.forall2 (fun (a:string) (b:string) -> - let aa = System.Text.RegularExpressions.Regex.Replace(a, @"F# Compiler version .+", "F# 3.0 Compiler version") - let bb = System.Text.RegularExpressions.Regex.Replace(b, @"F# Compiler version .+", "F# 3.0 Compiler version") + let aa = System.Text.RegularExpressions.Regex.Replace(a, @"F# Compiler version .+", "F# Compiler") + let bb = System.Text.RegularExpressions.Regex.Replace(b, @"F# Compiler version .+", "F# Compiler") i <- i+1 if (aa = bb) then @@ -30,4 +30,4 @@ let compare (f1:string list) (f2:string list) = List.forall2 (fun (a:string) (b: false ) f1 f2 -exit (if (f1.Length = f2.Length && compare f1 f2) then 0 else 1) +exit (if (f1.Length = f2.Length && compare f1 f2) then 0 else printfn "File lengths differ"; 1) diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/help/help40.437.1033.bsl b/tests/fsharpqa/Source/CompilerOptions/fsc/help/help40.437.1033.bsl index 227de6e5682..1d028d6669d 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/help/help40.437.1033.bsl +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/help/help40.437.1033.bsl @@ -1,110 +1,112 @@ -Microsoft (R) F# Compiler version 12.0.50525.0 +Microsoft (R) F# Compiler version 3.0 Copyright (c) Microsoft Corporation. All Rights Reserved. - OUTPUT FILES - ---out: Name of the output file (Short form: -o) ---target:exe Build a console executable ---target:winexe Build a Windows executable ---target:library Build a library (Short form: -a) ---target:module Build a module that can be added to another - assembly ---delaysign[+|-] Delay-sign the assembly using only the public - portion of the strong name key ---publicsign[+|-] Public-sign the assembly using only the public - portion of the strong name key, and mark the - assembly as signed ---doc: Write the xmldoc of the assembly to the given - file ---keyfile: Specify a strong name key file ---keycontainer: Specify a strong name key container ---platform: Limit which platforms this code can run on: x86, - Itanium, x64, anycpu32bitpreferred, or anycpu. - The default is anycpu. ---nooptimizationdata Only include optimization information essential - for implementing inlined constructs. Inhibits - cross-module inlining but improves binary - compatibility. ---nointerfacedata Don't add a resource to the generated assembly - containing F#-specific metadata ---sig: Print the inferred interface of the assembly to - a file ---nocopyfsharpcore Don't copy FSharp.Core.dll along the produced - binaries +--out: Name of the output file (Short form: -o) +--target:exe Build a console executable +--target:winexe Build a Windows executable +--target:library Build a library (Short form: -a) +--target:module Build a module that can be added to another + assembly +--delaysign[+|-] Delay-sign the assembly using only the public + portion of the strong name key +--publicsign[+|-] Public-sign the assembly using only the public + portion of the strong name key, and mark the + assembly as signed +--doc: Write the xmldoc of the assembly to the given + file +--keyfile: Specify a strong name key file +--keycontainer: Specify a strong name key container +--platform: Limit which platforms this code can run on: x86, + Itanium, x64, anycpu32bitpreferred, or anycpu. + The default is anycpu. +--nooptimizationdata Only include optimization information essential + for implementing inlined constructs. Inhibits + cross-module inlining but improves binary + compatibility. +--nointerfacedata Don't add a resource to the generated assembly + containing F#-specific metadata +--sig: Print the inferred interface of the assembly to + a file +--nocopyfsharpcore Don't copy FSharp.Core.dll along the produced + binaries - INPUT FILES - ---reference: Reference an assembly (Short form: -r) +--reference: Reference an assembly (Short form: -r) - RESOURCES - ---win32res: Specify a Win32 resource file (.res) ---win32manifest: Specify a Win32 manifest file ---nowin32manifest Do not include the default Win32 manifest ---resource: Embed the specified managed resource ---linkresource: Link the specified resource to this assembly - where the resinfo format is [,[,public|private]] +--win32res: Specify a Win32 resource file (.res) +--win32manifest: Specify a Win32 manifest file +--nowin32manifest Do not include the default Win32 manifest +--resource: Embed the specified managed resource +--linkresource: Link the specified resource to this assembly + where the resinfo format is [,[,public|private]] - CODE GENERATION - ---debug[+|-] Emit debug information (Short form: -g) ---debug:{full|pdbonly|portable} Specify debugging type: full, portable, pdbonly. - ('full' is the default if no debuggging type - specified and enables attaching a debugger to a - running program. 'portable' is a cross-platform - format). ---optimize[+|-] Enable optimizations (Short form: -O) ---tailcalls[+|-] Enable or disable tailcalls ---crossoptimize[+|-] Enable or disable cross-module optimizations +--debug[+|-] Emit debug information (Short form: -g) +--debug:{full|pdbonly|portable|embedded} Specify debugging type: full, portable, + embedded, pdbonly. ('full' is the default if no + debuggging type specified and enables attaching + a debugger to a running program, 'portable' is a + cross-platform format, 'embedded' is a + cross-platform format embedded into the output + file). +--optimize[+|-] Enable optimizations (Short form: -O) +--tailcalls[+|-] Enable or disable tailcalls +--crossoptimize[+|-] Enable or disable cross-module optimizations - ERRORS AND WARNINGS - ---warnaserror[+|-] Report all warnings as errors ---warnaserror[+|-]: Report specific warnings as errors ---warn: Set a warning level (0-5) ---nowarn: Disable specific warning messages ---warnon: Enable specific warnings that may be off by - default ---consolecolors[+|-] Output warning and error messages in color +--warnaserror[+|-] Report all warnings as errors +--warnaserror[+|-]: Report specific warnings as errors +--warn: Set a warning level (0-5) +--nowarn: Disable specific warning messages +--warnon: Enable specific warnings that may be off by + default +--consolecolors[+|-] Output warning and error messages in color - LANGUAGE - ---checked[+|-] Generate overflow checks ---define: Define conditional compilation symbols (Short - form: -d) ---mlcompatibility Ignore ML compatibility warnings +--checked[+|-] Generate overflow checks +--define: Define conditional compilation symbols (Short + form: -d) +--mlcompatibility Ignore ML compatibility warnings - MISCELLANEOUS - ---nologo Suppress compiler copyright message ---help Display this usage message (Short form: -?) ---@ Read response file for more options +--nologo Suppress compiler copyright message +--help Display this usage message (Short form: -?) +--@ Read response file for more options - ADVANCED - ---codepage: Specify the codepage used to read source files ---utf8output Output messages in UTF-8 encoding ---fullpaths Output messages with fully qualified paths ---lib: Specify a directory for the include path which - is used to resolve source files and assemblies - (Short form: -I) ---baseaddress:
Base address for the library to be built ---noframework Do not reference the default CLI assemblies by - default ---standalone Statically link the F# library and all - referenced DLLs that depend on it into the - assembly being generated ---staticlink: Statically link the given assembly and all - referenced DLLs that depend on this assembly. - Use an assembly name e.g. mylib, not a DLL name. ---pdb: Name the output debug file ---simpleresolution Resolve assembly references using - directory-based rules rather than MSBuild - resolution ---highentropyva[+|-] Enable high-entropy ASLR ---subsystemversion: Specify subsystem version of this assembly ---targetprofile: Specify target framework profile of this - assembly. Valid values are mscorlib or netcore. - Default - mscorlib ---quotations-debug[+|-] Emit debug information in quotations +--codepage: Specify the codepage used to read source files +--utf8output Output messages in UTF-8 encoding +--fullpaths Output messages with fully qualified paths +--lib: Specify a directory for the include path which + is used to resolve source files and assemblies + (Short form: -I) +--baseaddress:
Base address for the library to be built +--noframework Do not reference the default CLI assemblies by + default +--standalone Statically link the F# library and all + referenced DLLs that depend on it into the + assembly being generated +--staticlink: Statically link the given assembly and all + referenced DLLs that depend on this assembly. + Use an assembly name e.g. mylib, not a DLL name. +--pdb: Name the output debug file +--simpleresolution Resolve assembly references using + directory-based rules rather than MSBuild + resolution +--highentropyva[+|-] Enable high-entropy ASLR +--subsystemversion: Specify subsystem version of this assembly +--targetprofile: Specify target framework profile of this + assembly. Valid values are mscorlib or netcore. + Default - mscorlib +--quotations-debug[+|-] Emit debug information in quotations diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/exename/help40.437.1033.bsl b/tests/fsharpqa/Source/CompilerOptions/fsi/exename/help40.437.1033.bsl index 3aaba1fffc8..61dc02ef058 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/exename/help40.437.1033.bsl +++ b/tests/fsharpqa/Source/CompilerOptions/fsi/exename/help40.437.1033.bsl @@ -3,63 +3,65 @@ Usage: fsharpi [script.fsx []] - INPUT FILES - ---use: Use the given file on startup as initial input ---load: #load the given file on startup ---reference: Reference an assembly (Short form: -r) --- ... Treat remaining arguments as command line - arguments, accessed using fsi.CommandLineArgs +--use: Use the given file on startup as initial input +--load: #load the given file on startup +--reference: Reference an assembly (Short form: -r) +-- ... Treat remaining arguments as command line + arguments, accessed using fsi.CommandLineArgs - CODE GENERATION - ---debug[+|-] Emit debug information (Short form: -g) ---debug:{full|pdbonly|portable} Specify debugging type: full, portable, pdbonly. - ('pdbonly' is the default if no debuggging type - specified and enables attaching a debugger to a - running program. 'portable' is a cross-platform - format). ---optimize[+|-] Enable optimizations (Short form: -O) ---tailcalls[+|-] Enable or disable tailcalls ---crossoptimize[+|-] Enable or disable cross-module optimizations +--debug[+|-] Emit debug information (Short form: -g) +--debug:{full|pdbonly|portable|embedded} Specify debugging type: full, portable, + embedded, pdbonly. ('pdbonly' is the default if + no debuggging type specified and enables + attaching a debugger to a running program, + 'portable' is a cross-platform format, + 'embedded' is a cross-platform format embedded + into the output file). +--optimize[+|-] Enable optimizations (Short form: -O) +--tailcalls[+|-] Enable or disable tailcalls +--crossoptimize[+|-] Enable or disable cross-module optimizations - ERRORS AND WARNINGS - ---warnaserror[+|-] Report all warnings as errors ---warnaserror[+|-]: Report specific warnings as errors ---warn: Set a warning level (0-5) ---nowarn: Disable specific warning messages ---warnon: Enable specific warnings that may be off by - default ---consolecolors[+|-] Output warning and error messages in color +--warnaserror[+|-] Report all warnings as errors +--warnaserror[+|-]: Report specific warnings as errors +--warn: Set a warning level (0-5) +--nowarn: Disable specific warning messages +--warnon: Enable specific warnings that may be off by + default +--consolecolors[+|-] Output warning and error messages in color - LANGUAGE - ---checked[+|-] Generate overflow checks ---define: Define conditional compilation symbols (Short - form: -d) ---mlcompatibility Ignore ML compatibility warnings +--checked[+|-] Generate overflow checks +--define: Define conditional compilation symbols (Short + form: -d) +--mlcompatibility Ignore ML compatibility warnings - MISCELLANEOUS - ---nologo Suppress compiler copyright message ---help Display this usage message (Short form: -?) +--nologo Suppress compiler copyright message +--help Display this usage message (Short form: -?) - ADVANCED - ---codepage: Specify the codepage used to read source files ---utf8output Output messages in UTF-8 encoding ---fullpaths Output messages with fully qualified paths ---lib: Specify a directory for the include path which - is used to resolve source files and assemblies - (Short form: -I) ---noframework Do not reference the default CLI assemblies by - default ---exec Exit fsi after loading the files or running the - .fsx script given on the command line ---gui[+|-] Execute interactions on a Windows Forms event - loop (on by default) ---quiet Suppress fsi writing to stdout ---readline[+|-] Support TAB completion in console (on by - default) ---quotations-debug[+|-] Emit debug information in quotations ---shadowcopyreferences[+|-] Prevents references from being locked by the F# - Interactive process \ No newline at end of file +--codepage: Specify the codepage used to read source files +--utf8output Output messages in UTF-8 encoding +--fullpaths Output messages with fully qualified paths +--lib: Specify a directory for the include path which + is used to resolve source files and assemblies + (Short form: -I) +--noframework Do not reference the default CLI assemblies by + default +--exec Exit fsi after loading the files or running the + .fsx script given on the command line +--gui[+|-] Execute interactions on a Windows Forms event + loop (on by default) +--quiet Suppress fsi writing to stdout +--readline[+|-] Support TAB completion in console (on by + default) +--quotations-debug[+|-] Emit debug information in quotations +--shadowcopyreferences[+|-] Prevents references from being locked by the F# + Interactive process diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help.437.1033.bsl b/tests/fsharpqa/Source/CompilerOptions/fsi/help/help.437.1033.bsl deleted file mode 100644 index 5afc1c8249d..00000000000 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help.437.1033.bsl +++ /dev/null @@ -1,62 +0,0 @@ -Microsoft (R) F# 2.0 Interactive build 2.0.50727.0 -Copyright (c) Microsoft Corporation. All Rights Reserved. - -Usage: fsi.exe [script.fsx []] - - - - INPUT FILES - ---use: Use the given file on startup as initial input ---load: #load the given file on startup ---reference: Reference an assembly (Short form: -r) --- ... Treat remaining arguments as command line - arguments, accessed using fsi.CommandLineArgs - - - - CODE GENERATION - ---debug[+|-] Emit debug information (Short form: -g) ---debug:{full|pdbonly|portable} Specify debugging type: full, portable, pdbonly. - ('pdbonly' is the default if no debuggging type - specified and enables attaching a debugger to a - running program. 'portable' is a cross-platform - format). ---optimize[+|-] Enable optimizations (Short form: -O) ---tailcalls[+|-] Enable or disable tailcalls ---crossoptimize[+|-] Enable or disable cross-module optimizations - - - - ERRORS AND WARNINGS - ---warnaserror[+|-] Report all warnings as errors ---warnaserror[+|-]: Report specific warnings as errors ---warn: Set a warning level (0-4) ---nowarn: Disable specific warning messages ---consolecolors[+|-] Output warning and error messages in color - - - - LANGUAGE - ---checked[+|-] Generate overflow checks ---define: Define conditional compilation symbols (Short - form: -d) ---mlcompatibility Ignore ML compatibility warnings - - - - MISCELLANEOUS - ---nologo Suppress compiler copyright message ---help Display this usage message (Short form: -?) - - - - ADVANCED - ---codepage: Specify the codepage used to read source files ---utf8output Output messages in UTF-8 encoding ---fullpaths Output messages with fully qualified paths ---lib: Specify a directory for the include path which - is used to resolve source files and assemblies - (Short form: -I) ---noframework Do not reference the default CLI assemblies by - default ---exec Exit fsi after loading the files or running the - .fsx script given on the command line ---gui[+|-] Execute interactions on a Windows Forms event - loop (on by default) ---quiet Suppress fsi writing to stdout ---readline[+|-] Support TAB completion in console (on by - default) diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40-nologo.437.1033.bsl b/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40-nologo.437.1033.bsl index 3ffd8e94bdf..a044d368a20 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40-nologo.437.1033.bsl +++ b/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40-nologo.437.1033.bsl @@ -1,65 +1,67 @@ -Usage: Fsi.exe [script.fsx []] +Usage: fsi.exe [script.fsx []] - INPUT FILES - ---use: Use the given file on startup as initial input ---load: #load the given file on startup ---reference: Reference an assembly (Short form: -r) --- ... Treat remaining arguments as command line - arguments, accessed using fsi.CommandLineArgs +--use: Use the given file on startup as initial input +--load: #load the given file on startup +--reference: Reference an assembly (Short form: -r) +-- ... Treat remaining arguments as command line + arguments, accessed using fsi.CommandLineArgs - CODE GENERATION - ---debug[+|-] Emit debug information (Short form: -g) ---debug:{full|pdbonly|portable} Specify debugging type: full, portable, pdbonly. - ('pdbonly' is the default if no debuggging type - specified and enables attaching a debugger to a - running program. 'portable' is a cross-platform - format). ---optimize[+|-] Enable optimizations (Short form: -O) ---tailcalls[+|-] Enable or disable tailcalls ---crossoptimize[+|-] Enable or disable cross-module optimizations +--debug[+|-] Emit debug information (Short form: -g) +--debug:{full|pdbonly|portable|embedded} Specify debugging type: full, portable, + embedded, pdbonly. ('pdbonly' is the default if + no debuggging type specified and enables + attaching a debugger to a running program, + 'portable' is a cross-platform format, + 'embedded' is a cross-platform format embedded + into the output file). +--optimize[+|-] Enable optimizations (Short form: -O) +--tailcalls[+|-] Enable or disable tailcalls +--crossoptimize[+|-] Enable or disable cross-module optimizations - ERRORS AND WARNINGS - ---warnaserror[+|-] Report all warnings as errors ---warnaserror[+|-]: Report specific warnings as errors ---warn: Set a warning level (0-5) ---nowarn: Disable specific warning messages ---warnon: Enable specific warnings that may be off by - default ---consolecolors[+|-] Output warning and error messages in color +--warnaserror[+|-] Report all warnings as errors +--warnaserror[+|-]: Report specific warnings as errors +--warn: Set a warning level (0-5) +--nowarn: Disable specific warning messages +--warnon: Enable specific warnings that may be off by + default +--consolecolors[+|-] Output warning and error messages in color - LANGUAGE - ---checked[+|-] Generate overflow checks ---define: Define conditional compilation symbols (Short - form: -d) ---mlcompatibility Ignore ML compatibility warnings +--checked[+|-] Generate overflow checks +--define: Define conditional compilation symbols (Short + form: -d) +--mlcompatibility Ignore ML compatibility warnings - MISCELLANEOUS - ---nologo Suppress compiler copyright message ---help Display this usage message (Short form: -?) +--nologo Suppress compiler copyright message +--help Display this usage message (Short form: -?) - ADVANCED - ---codepage: Specify the codepage used to read source files ---utf8output Output messages in UTF-8 encoding ---fullpaths Output messages with fully qualified paths ---lib: Specify a directory for the include path which - is used to resolve source files and assemblies - (Short form: -I) ---noframework Do not reference the default CLI assemblies by - default ---exec Exit fsi after loading the files or running the - .fsx script given on the command line ---gui[+|-] Execute interactions on a Windows Forms event - loop (on by default) ---quiet Suppress fsi writing to stdout ---readline[+|-] Support TAB completion in console (on by - default) ---quotations-debug[+|-] Emit debug information in quotations ---shadowcopyreferences[+|-] Prevents references from being locked by the F# - Interactive process \ No newline at end of file +--codepage: Specify the codepage used to read source files +--utf8output Output messages in UTF-8 encoding +--fullpaths Output messages with fully qualified paths +--lib: Specify a directory for the include path which + is used to resolve source files and assemblies + (Short form: -I) +--noframework Do not reference the default CLI assemblies by + default +--exec Exit fsi after loading the files or running the + .fsx script given on the command line +--gui[+|-] Execute interactions on a Windows Forms event + loop (on by default) +--quiet Suppress fsi writing to stdout +--readline[+|-] Support TAB completion in console (on by + default) +--quotations-debug[+|-] Emit debug information in quotations +--shadowcopyreferences[+|-] Prevents references from being locked by the F# + Interactive process diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40.437.1033.bsl b/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40.437.1033.bsl index 722596ffd71..a0d495ad635 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40.437.1033.bsl +++ b/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40.437.1033.bsl @@ -1,67 +1,69 @@ -Microsoft (R) F# Interactive build 4.0.30319.17303 +Microsoft (R) F# Interactive version 4.1 Copyright (c) Microsoft Corporation. All Rights Reserved. -Usage: Fsi.exe [script.fsx []] +Usage: fsi.exe [script.fsx []] - INPUT FILES - ---use: Use the given file on startup as initial input ---load: #load the given file on startup ---reference: Reference an assembly (Short form: -r) --- ... Treat remaining arguments as command line - arguments, accessed using fsi.CommandLineArgs +--use: Use the given file on startup as initial input +--load: #load the given file on startup +--reference: Reference an assembly (Short form: -r) +-- ... Treat remaining arguments as command line + arguments, accessed using fsi.CommandLineArgs - CODE GENERATION - ---debug[+|-] Emit debug information (Short form: -g) ---debug:{full|pdbonly|portable} Specify debugging type: full, portable, pdbonly. - ('pdbonly' is the default if no debuggging type - specified and enables attaching a debugger to a - running program. 'portable' is a cross-platform - format). ---optimize[+|-] Enable optimizations (Short form: -O) ---tailcalls[+|-] Enable or disable tailcalls ---crossoptimize[+|-] Enable or disable cross-module optimizations +--debug[+|-] Emit debug information (Short form: -g) +--debug:{full|pdbonly|portable|embedded} Specify debugging type: full, portable, + embedded, pdbonly. ('pdbonly' is the default if + no debuggging type specified and enables + attaching a debugger to a running program, + 'portable' is a cross-platform format, + 'embedded' is a cross-platform format embedded + into the output file). +--optimize[+|-] Enable optimizations (Short form: -O) +--tailcalls[+|-] Enable or disable tailcalls +--crossoptimize[+|-] Enable or disable cross-module optimizations - ERRORS AND WARNINGS - ---warnaserror[+|-] Report all warnings as errors ---warnaserror[+|-]: Report specific warnings as errors ---warn: Set a warning level (0-5) ---nowarn: Disable specific warning messages ---warnon: Enable specific warnings that may be off by - default ---consolecolors[+|-] Output warning and error messages in color +--warnaserror[+|-] Report all warnings as errors +--warnaserror[+|-]: Report specific warnings as errors +--warn: Set a warning level (0-5) +--nowarn: Disable specific warning messages +--warnon: Enable specific warnings that may be off by + default +--consolecolors[+|-] Output warning and error messages in color - LANGUAGE - ---checked[+|-] Generate overflow checks ---define: Define conditional compilation symbols (Short - form: -d) ---mlcompatibility Ignore ML compatibility warnings +--checked[+|-] Generate overflow checks +--define: Define conditional compilation symbols (Short + form: -d) +--mlcompatibility Ignore ML compatibility warnings - MISCELLANEOUS - ---nologo Suppress compiler copyright message ---help Display this usage message (Short form: -?) +--nologo Suppress compiler copyright message +--help Display this usage message (Short form: -?) - ADVANCED - ---codepage: Specify the codepage used to read source files ---utf8output Output messages in UTF-8 encoding ---fullpaths Output messages with fully qualified paths ---lib: Specify a directory for the include path which - is used to resolve source files and assemblies - (Short form: -I) ---noframework Do not reference the default CLI assemblies by - default ---exec Exit fsi after loading the files or running the - .fsx script given on the command line ---gui[+|-] Execute interactions on a Windows Forms event - loop (on by default) ---quiet Suppress fsi writing to stdout ---readline[+|-] Support TAB completion in console (on by - default) ---quotations-debug[+|-] Emit debug information in quotations ---shadowcopyreferences[+|-] Prevents references from being locked by the F# - Interactive process \ No newline at end of file +--codepage: Specify the codepage used to read source files +--utf8output Output messages in UTF-8 encoding +--fullpaths Output messages with fully qualified paths +--lib: Specify a directory for the include path which + is used to resolve source files and assemblies + (Short form: -I) +--noframework Do not reference the default CLI assemblies by + default +--exec Exit fsi after loading the files or running the + .fsx script given on the command line +--gui[+|-] Execute interactions on a Windows Forms event + loop (on by default) +--quiet Suppress fsi writing to stdout +--readline[+|-] Support TAB completion in console (on by + default) +--quotations-debug[+|-] Emit debug information in quotations +--shadowcopyreferences[+|-] Prevents references from being locked by the F# + Interactive process From e5c0230d57caba837d34059dbeec8ce1cff32428 Mon Sep 17 00:00:00 2001 From: Omar Tawfik Date: Thu, 15 Sep 2016 17:03:06 -0700 Subject: [PATCH 12/24] Fixed Sattelite Assemblies folder names --- setup/FSharp.SDK/Common.Wix.Properties.wxs | 36 ++++++++-------- setup/FSharp.SDK/FSharp.SDK.wixproj | 6 ++- .../component-groups/Runtime_LangPack.wxs | 2 +- setup/FSharp.Setup.props | 42 ++++++++++++------- .../Microsoft.FSharp.SDK.Resources/Empty.swr | 2 +- .../Microsoft.FSharp.SDK.Resources/Files.swr | 2 +- .../Microsoft.FSharp.SDK.Resources.swixproj | 8 ++-- .../Desktop.Templates.swr | 2 +- .../Microsoft.FSharp.Vsix.Resources/Empty.swr | 2 +- .../Microsoft.FSharp.Vsix.Resources/Files.swr | 6 +-- .../Full.Templates.swr | 2 +- .../Microsoft.FSharp.Vsix.Resources.swixproj | 6 ++- .../Web.Templates.swr | 2 +- setup/fsharp-setup-build.proj | 6 +-- 14 files changed, 72 insertions(+), 52 deletions(-) diff --git a/setup/FSharp.SDK/Common.Wix.Properties.wxs b/setup/FSharp.SDK/Common.Wix.Properties.wxs index 5afdc6bcca3..f44251c1fdb 100644 --- a/setup/FSharp.SDK/Common.Wix.Properties.wxs +++ b/setup/FSharp.SDK/Common.Wix.Properties.wxs @@ -12,64 +12,64 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -81,7 +81,7 @@ - + diff --git a/setup/FSharp.SDK/FSharp.SDK.wixproj b/setup/FSharp.SDK/FSharp.SDK.wixproj index 77a21295e2f..12843effde0 100644 --- a/setup/FSharp.SDK/FSharp.SDK.wixproj +++ b/setup/FSharp.SDK/FSharp.SDK.wixproj @@ -24,7 +24,8 @@ $(DefineConstants);LocaleCode=$(LocaleCode) $(DefineConstants);LocaleId=$(LocaleId) - $(DefineConstants);LocaleRegion=$(LocaleRegion) + $(DefineConstants);LocaleParentCulture=$(LocaleParentCulture) + $(DefineConstants);LocaleSpecificCulture=$(LocaleSpecificCulture) $(DefineConstants);IsLangPack=$(IsLangPack) $(DefineConstants);BinariesDir=$(BinariesDir) @@ -66,7 +67,8 @@ - + + diff --git a/setup/FSharp.SDK/component-groups/Runtime_LangPack.wxs b/setup/FSharp.SDK/component-groups/Runtime_LangPack.wxs index acd7f104fc9..633cb063bb8 100644 --- a/setup/FSharp.SDK/component-groups/Runtime_LangPack.wxs +++ b/setup/FSharp.SDK/component-groups/Runtime_LangPack.wxs @@ -4,7 +4,7 @@ - + diff --git a/setup/FSharp.Setup.props b/setup/FSharp.Setup.props index b865b1f2e04..0ead30f9770 100644 --- a/setup/FSharp.Setup.props +++ b/setup/FSharp.Setup.props @@ -27,85 +27,99 @@ ENU 1033 - en-us + en + en-US false CHT 1028 - zh-tw + zh-Hant + zh-TW true CSY 1029 - cs-cz + cs + cs-CZ true DEU 1031 - de-de + de + de-DE true FRA 1036 - fr-fr + fr + fr-FR true ITA 1040 - it-it + it + it-IT true JPN 1041 - ja-jp + ja + ja-JP true KOR 1042 - ko-kr + ko + ko-KR true PLK 1045 - pl-pl + pl + pl-PL true PTB 1046 - pt-br + pt-BR + pt-BR true RUS 1049 - ru-ru + ru + ru-RU true TRK 1055 - tr-tr + tr + tr-TR true CHS 2052 - zh-cn + zh-Hans + zh-CN true ESN 3082 - es-es + es + es-ES true diff --git a/setup/Swix/Microsoft.FSharp.SDK.Resources/Empty.swr b/setup/Swix/Microsoft.FSharp.SDK.Resources/Empty.swr index 033e87965f0..fa3af6a1adb 100644 --- a/setup/Swix/Microsoft.FSharp.SDK.Resources/Empty.swr +++ b/setup/Swix/Microsoft.FSharp.SDK.Resources/Empty.swr @@ -2,4 +2,4 @@ use vs package name=Microsoft.FSharp.SDK.Resources version=$(FSharpPackageVersion) - vs.package.language=$(LocaleRegion) \ No newline at end of file + vs.package.language=$(LocaleSpecificCulture) \ No newline at end of file diff --git a/setup/Swix/Microsoft.FSharp.SDK.Resources/Files.swr b/setup/Swix/Microsoft.FSharp.SDK.Resources/Files.swr index 515c2113cff..5e7c02d2980 100644 --- a/setup/Swix/Microsoft.FSharp.SDK.Resources/Files.swr +++ b/setup/Swix/Microsoft.FSharp.SDK.Resources/Files.swr @@ -3,7 +3,7 @@ use vs package name=Microsoft.FSharp.SDK.Resources version=$(FSharpPackageVersion) vs.package.type=msi - vs.package.language=$(LocaleRegion) + vs.package.language=$(LocaleSpecificCulture) vs.payloads vs.payload source="$(BinariesFolder)\msi\Microsoft.FSharp.SDK.Resources.$(LocaleCode).msi" diff --git a/setup/Swix/Microsoft.FSharp.SDK.Resources/Microsoft.FSharp.SDK.Resources.swixproj b/setup/Swix/Microsoft.FSharp.SDK.Resources/Microsoft.FSharp.SDK.Resources.swixproj index 3fc1717b294..a91de00cb73 100644 --- a/setup/Swix/Microsoft.FSharp.SDK.Resources/Microsoft.FSharp.SDK.Resources.swixproj +++ b/setup/Swix/Microsoft.FSharp.SDK.Resources/Microsoft.FSharp.SDK.Resources.swixproj @@ -20,8 +20,9 @@ $(PackagePreprocessorDefinitions);BinariesFolder=$(BinariesFolder) $(PackagePreprocessorDefinitions);FSharpPackageVersion=$(FSharpPackageVersion) $(PackagePreprocessorDefinitions);LocaleCode=$(LocaleCode) - $(PackagePreprocessorDefinitions);LocaleId=$(LocaleId) - $(PackagePreprocessorDefinitions);LocaleRegion=$(LocaleRegion) + $(PackagePreprocessorDefinitions);LocaleId=$(LocaleId) + $(PackagePreprocessorDefinitions);LocaleParentCulture=$(LocaleParentCulture) + $(PackagePreprocessorDefinitions);LocaleSpecificCulture=$(LocaleSpecificCulture) $(PackagePreprocessorDefinitions);IsLangPack=$(IsLangPack) @@ -40,7 +41,8 @@ - + + diff --git a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Desktop.Templates.swr b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Desktop.Templates.swr index 5a13ea95b15..f918abc7334 100644 --- a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Desktop.Templates.swr +++ b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Desktop.Templates.swr @@ -2,7 +2,7 @@ use vs package name=Microsoft.FSharp.VSIX.$(VSSku).Resources version=$(FSharpPackageVersion) - vs.package.language=$(LocaleRegion) + vs.package.language=$(LocaleSpecificCulture) folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp\ProjectTemplates\FSharp\$(LocaleId)\ConsoleProject" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\ConsoleProject\App.config" diff --git a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Empty.swr b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Empty.swr index e5f6b32bba1..2203e272e19 100644 --- a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Empty.swr +++ b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Empty.swr @@ -2,4 +2,4 @@ use vs package name=Microsoft.FSharp.VSIX.$(VSSku).Resources version=$(FSharpPackageVersion) - vs.package.language=$(LocaleRegion) + vs.package.language=$(LocaleSpecificCulture) diff --git a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Files.swr b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Files.swr index 2d4b526661c..749b461e814 100644 --- a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Files.swr +++ b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Files.swr @@ -2,12 +2,12 @@ use vs package name=Microsoft.FSharp.VSIX.$(VSSku).Resources version=$(FSharpPackageVersion) - vs.package.language=$(LocaleRegion) + vs.package.language=$(LocaleSpecificCulture) -folder "InstallDir:Common7\IDE\PublicAssemblies\$(LocaleRegion)" +folder "InstallDir:Common7\IDE\PublicAssemblies\$(LocaleParentCulture)" file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\FSharp.Core.resources.dll" vs.file.ngen=yes -folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp\$(LocaleRegion)" +folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp\$(LocaleParentCulture)" file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\FSharp.Compiler.resources.dll" vs.file.ngen=yes file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\FSharp.Core.resources.dll" vs.file.ngen=yes file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\FSharp.LanguageService.Base.resources.dll" vs.file.ngen=yes diff --git a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Full.Templates.swr b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Full.Templates.swr index e695cfb6289..fec68497438 100644 --- a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Full.Templates.swr +++ b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Full.Templates.swr @@ -2,7 +2,7 @@ use vs package name=Microsoft.FSharp.VSIX.$(VSSku).Resources version=$(FSharpPackageVersion) - vs.package.language=$(LocaleRegion) + vs.package.language=$(LocaleSpecificCulture) folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp\ProjectTemplates\FSharp\$(LocaleId)\ConsoleProject" file source="$(BinariesFolder)\net40\bin\ProjectTemplates\ConsoleProject\App.config" diff --git a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Microsoft.FSharp.Vsix.Resources.swixproj b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Microsoft.FSharp.Vsix.Resources.swixproj index 57f2350108a..e2371d1d5d7 100644 --- a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Microsoft.FSharp.Vsix.Resources.swixproj +++ b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Microsoft.FSharp.Vsix.Resources.swixproj @@ -21,7 +21,8 @@ $(PackagePreprocessorDefinitions);VSSku=$(VSSku) $(PackagePreprocessorDefinitions);LocaleCode=$(LocaleCode) $(PackagePreprocessorDefinitions);LocaleId=$(LocaleId) - $(PackagePreprocessorDefinitions);LocaleRegion=$(LocaleRegion) + $(PackagePreprocessorDefinitions);LocaleParentCulture=$(LocaleParentCulture) + $(PackagePreprocessorDefinitions);LocaleSpecificCulture=$(LocaleSpecificCulture) $(PackagePreprocessorDefinitions);IsLangPack=$(IsLangPack) @@ -42,7 +43,8 @@ - + + diff --git a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Web.Templates.swr b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Web.Templates.swr index 4629530a98a..8f0cdd660ef 100644 --- a/setup/Swix/Microsoft.FSharp.Vsix.Resources/Web.Templates.swr +++ b/setup/Swix/Microsoft.FSharp.Vsix.Resources/Web.Templates.swr @@ -2,7 +2,7 @@ use vs package name=Microsoft.FSharp.VSIX.$(VSSku).Resources version=$(FSharpPackageVersion) - vs.package.language=$(LocaleRegion) + vs.package.language=$(LocaleSpecificCulture) folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp\ProjectTemplates\FSharp\$(LocaleId)\LibraryProject" file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\ProjectTemplates\LibraryProject\AssemblyInfo.fs" diff --git a/setup/fsharp-setup-build.proj b/setup/fsharp-setup-build.proj index 3468defdb64..85b6ffb1dad 100644 --- a/setup/fsharp-setup-build.proj +++ b/setup/fsharp-setup-build.proj @@ -81,19 +81,19 @@ + Properties="LocaleCode=%(SetupProjects.LocaleCode);LocaleId=%(SetupProjects.LocaleId);LocaleParentCulture=%(SetupProjects.LocaleParentCulture);LocaleSpecificCulture=%(SetupProjects.LocaleSpecificCulture);IsLangPack=%(SetupProjects.IsLangPack);VSSku=%(SetupProjects.VSSku);FSharpPackageVersion=$(FSharpPackageVersion)"/> + Properties="LocaleCode=%(SetupProjects.LocaleCode);LocaleId=%(SetupProjects.LocaleId);LocaleParentCulture=%(SetupProjects.LocaleParentCulture);LocaleSpecificCulture=%(SetupProjects.LocaleSpecificCulture);IsLangPack=%(SetupProjects.IsLangPack);VSSku=%(SetupProjects.VSSku);FSharpPackageVersion=$(FSharpPackageVersion)"/> + Properties="LocaleCode=%(SetupProjects.LocaleCode);LocaleId=%(SetupProjects.LocaleId);LocaleParentCulture=%(SetupProjects.LocaleParentCulture);LocaleSpecificCulture=%(SetupProjects.LocaleSpecificCulture);IsLangPack=%(SetupProjects.IsLangPack);VSSku=%(SetupProjects.VSSku);FSharpPackageVersion=$(FSharpPackageVersion)"/> From 6afc4f9776a5dba903ca6b11965a206fb8bc23d8 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Fri, 16 Sep 2016 19:29:58 -0700 Subject: [PATCH 13/24] Update projects for Preview 5 (#1541) * Update projects for Preview 5 * Add test to embedd a pdb and also do a better job of building on preview 4 and below dev 15 previews. * alternate version detection * Embed test failed on success .... fix it * clean up from prior failures for embedded test * don't modify output name for embedded testcase --- .../FSharp.Compiler.Server.Shared.fsproj | 3 ++- .../FSharp.LanguageService.Compiler.fsproj | 4 ++-- tests/fsharpqa/Source/CompilerOptions/fsc/pdb/env.lst | 2 ++ vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj | 3 ++- .../FSharp.LanguageService.Base.csproj | 3 ++- .../src/FSharp.LanguageService/FSharp.LanguageService.fsproj | 3 ++- .../Project/ProjectSystem.Base.csproj | 3 ++- .../src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj | 2 +- .../FSharp.PropertiesPages.vbproj | 3 ++- vsintegration/src/FSharp.VS.FSI/FSHarp.VS.FSI.fsproj | 3 ++- 10 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj b/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj index efe7c37235a..508e735449c 100644 --- a/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj +++ b/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj @@ -40,9 +40,10 @@ + - + diff --git a/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj b/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj index 449cc64b900..d4e2369acaf 100644 --- a/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj +++ b/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj @@ -562,8 +562,7 @@ - - + @@ -572,6 +571,7 @@ + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Framework.dll diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/pdb/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/pdb/env.lst index 1d1680d8d75..9124761257b 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/pdb/env.lst +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/pdb/env.lst @@ -14,6 +14,8 @@ NOMONO SOURCE=pdb01.fs SCFLAGS="--debug --pdb:.\\pdb01.pdb" PRECMD="IF EXIST pd NOMONO SOURCE=pdb01.fs SCFLAGS="-g --pdb:.\\pdb01.fs" PRECMD="IF EXIST pdb01.pdb DEL pdb01.pdb" POSTCMD="IF NOT EXIST pdb01.pdb EXIT 1" # different file w/ -g (try to overwrite) +NOMONO SOURCE=pdb01.fs SCFLAGS="-g --debug:embedded" PRECMD="IF EXIST pdb01.pdb DEL pdb01.pdb" POSTCMD="IF EXIST pdb01.pdb EXIT 1" # If pdb file exists then it didn't embed so fail. + # Case sensitive SOURCE=pdb02.fs SCFLAGS="--PDB -g" POSTCMD="IF EXIST pdb02.pdb EXIT 1" # --PDB diff --git a/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj b/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj index 77a73d101b1..551da2c4f7a 100644 --- a/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj +++ b/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj @@ -69,10 +69,11 @@ - + + diff --git a/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj b/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj index 495b15f67fe..17362e18a70 100644 --- a/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj +++ b/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj @@ -77,9 +77,10 @@ - + + diff --git a/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj b/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj index d00f85a78a1..efb6b1dffc6 100644 --- a/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj +++ b/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj @@ -72,6 +72,7 @@ + @@ -80,7 +81,7 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectSystem.Base.csproj b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectSystem.Base.csproj index 0284bd6e3ce..e4c5214964e 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectSystem.Base.csproj +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectSystem.Base.csproj @@ -91,7 +91,8 @@ - + + diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj b/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj index f5a21f30519..6ba9e0be290 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj @@ -70,7 +70,7 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.PropertiesPages.vbproj b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.PropertiesPages.vbproj index da40fbb61e2..2339d5b834d 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.PropertiesPages.vbproj +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.PropertiesPages.vbproj @@ -72,9 +72,10 @@ - + + diff --git a/vsintegration/src/FSharp.VS.FSI/FSHarp.VS.FSI.fsproj b/vsintegration/src/FSharp.VS.FSI/FSHarp.VS.FSI.fsproj index 9faa0d0e968..bae06aadfad 100644 --- a/vsintegration/src/FSharp.VS.FSI/FSHarp.VS.FSI.fsproj +++ b/vsintegration/src/FSharp.VS.FSI/FSHarp.VS.FSI.fsproj @@ -70,9 +70,10 @@ + - + From b528c236a1ffc5ec9c88da8024ebd8e7b21976da Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Fri, 16 Sep 2016 19:45:12 -0700 Subject: [PATCH 14/24] Merge pdb scopes for full pdbs when the scopes are the same size. --- src/absil/ilwritepdb.fs | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/absil/ilwritepdb.fs b/src/absil/ilwritepdb.fs index 99de000cf44..a354b40f492 100644 --- a/src/absil/ilwritepdb.fs +++ b/src/absil/ilwritepdb.fs @@ -502,22 +502,27 @@ let writePdbInfo fixupOverlappingSequencePoints showTimes f fpdb info cvChunk = if spset.Length > 0 then Array.sortInPlaceWith SequencePoint.orderByOffset spset let sps = - spset |> Array.map (fun sp -> - // Ildiag.dprintf "token 0x%08lx has an sp at offset 0x%08x\n" minfo.MethToken sp.Offset - (sp.Offset, sp.Line, sp.Column,sp.EndLine, sp.EndColumn)) + spset |> Array.map (fun sp -> + // Ildiag.dprintf "token 0x%08lx has an sp at offset 0x%08x\n" minfo.MethToken sp.Offset + (sp.Offset, sp.Line, sp.Column,sp.EndLine, sp.EndColumn)) // Use of alloca in implementation of pdbDefineSequencePoints can give stack overflow here if sps.Length < 5000 then - pdbDefineSequencePoints !pdbw (getDocument spset.[0].Document) sps) + pdbDefineSequencePoints !pdbw (getDocument spset.[0].Document) sps) // Write the scopes - let rec writePdbScope level sco = - if level = 0 || (level < 450 && (sco.Locals.Length <> 0 || sco.Children.Length <> 0)) then - pdbOpenScope !pdbw sco.StartOffset + let rec writePdbScope parent sco = + if sco.Locals.Length <> 0 || sco.Children.Length <> 0 then + // Only nest scopes if the child scope is a different size from + let nested = + match parent with + | Some p -> sco.StartOffset <> p.StartOffset && sco.EndOffset <> p.EndOffset + | None -> true + if nested then pdbOpenScope !pdbw sco.StartOffset sco.Locals |> Array.iter (fun v -> pdbDefineLocalVariable !pdbw v.Name v.Signature v.Index) - sco.Children |> Array.iter (writePdbScope (level + 1)) - pdbCloseScope !pdbw sco.EndOffset - writePdbScope 0 minfo.RootScope + sco.Children |> Array.iter (writePdbScope (if nested then Some sco else parent)) + if nested then pdbCloseScope !pdbw sco.EndOffset + writePdbScope None minfo.RootScope pdbCloseMethod !pdbw end) reportTime showTimes "PDB: Wrote methods" From c7a9acffa3992d684f930232c55728811293ef5c Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Sat, 17 Sep 2016 23:11:28 -0700 Subject: [PATCH 15/24] reapply top --- src/absil/ilwritepdb.fs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/absil/ilwritepdb.fs b/src/absil/ilwritepdb.fs index a354b40f492..91c86943005 100644 --- a/src/absil/ilwritepdb.fs +++ b/src/absil/ilwritepdb.fs @@ -511,11 +511,11 @@ let writePdbInfo fixupOverlappingSequencePoints showTimes f fpdb info cvChunk = // Write the scopes let rec writePdbScope parent sco = - if sco.Locals.Length <> 0 || sco.Children.Length <> 0 then + if parent = None || sco.Locals.Length <> 0 || sco.Children.Length <> 0 then // Only nest scopes if the child scope is a different size from let nested = match parent with - | Some p -> sco.StartOffset <> p.StartOffset && sco.EndOffset <> p.EndOffset + | Some p -> sco.StartOffset <> p.StartOffset || sco.EndOffset <> p.EndOffset | None -> true if nested then pdbOpenScope !pdbw sco.StartOffset sco.Locals |> Array.iter (fun v -> pdbDefineLocalVariable !pdbw v.Name v.Signature v.Index) From 9dc2ed8bb137ccc5a8c5c125926c4c31a744d31b Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Sun, 18 Sep 2016 01:33:52 -0700 Subject: [PATCH 16/24] A couple of files had variables change order --- src/absil/ilwritepdb.fs | 6 +++--- .../SerializableAttribute/ToplevelModule.il.bsl | 10 ++++------ .../SerializableAttribute/ToplevelModuleP.il.bsl | 9 ++++----- .../SerializableAttribute/ToplevelNamespace.il.bsl | 9 ++++----- .../SerializableAttribute/ToplevelNamespaceP.il.bsl | 9 ++++----- 5 files changed, 19 insertions(+), 24 deletions(-) diff --git a/src/absil/ilwritepdb.fs b/src/absil/ilwritepdb.fs index 91c86943005..e25211b3cce 100644 --- a/src/absil/ilwritepdb.fs +++ b/src/absil/ilwritepdb.fs @@ -493,7 +493,7 @@ let writePdbInfo fixupOverlappingSequencePoints showTimes f fpdb info cvChunk = match Map.tryFind k res with | Some xsR -> xsR := sp :: !xsR; res | None -> Map.add k (ref [sp]) res - + let res = Array.fold add res sps let res = Map.toList res // ordering may not be stable List.map (fun (_,x) -> Array.ofList !x) res @@ -504,8 +504,8 @@ let writePdbInfo fixupOverlappingSequencePoints showTimes f fpdb info cvChunk = let sps = spset |> Array.map (fun sp -> // Ildiag.dprintf "token 0x%08lx has an sp at offset 0x%08x\n" minfo.MethToken sp.Offset - (sp.Offset, sp.Line, sp.Column,sp.EndLine, sp.EndColumn)) - // Use of alloca in implementation of pdbDefineSequencePoints can give stack overflow here + (sp.Offset, sp.Line, sp.Column,sp.EndLine, sp.EndColumn)) + // Use of alloca in implementation of pdbDefineSequencePoints can give stack overflow here if sps.Length < 5000 then pdbDefineSequencePoints !pdbw (getDocument spset.[0].Document) sps) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelModule.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelModule.il.bsl index 042143d9677..3c9df2a50c3 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelModule.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelModule.il.bsl @@ -1720,21 +1720,19 @@ { // Code size 14 (0xe) .maxstack 3 - .locals init ([0] string V_0, - [1] string greeting) - .line 12,12 : 9,31 + .locals init ([0] string greeting, + [1] string V_1) + .line 12,12 : 9,31 '' IL_0000: nop IL_0001: call string ABC::get_greeting() IL_0006: stloc.0 - .line 22,22 : 13,35 + .line 22,22 : 13,35 '' IL_0007: call string ABC/ABC::get_greeting() IL_000c: stloc.1 IL_000d: ret } // end of method $ABC::.cctor - } // end of class ''.$ABC - // ============================================================= // *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelModuleP.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelModuleP.il.bsl index a504b86ed4e..93b55d4bd13 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelModuleP.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelModuleP.il.bsl @@ -1692,18 +1692,17 @@ { // Code size 14 (0xe) .maxstack 3 - .locals init ([0] string V_0, - [1] string greeting) - .line 12,12 : 9,31 + .locals init ([0] string greeting, + [1] string V_1) + .line 12,12 : 9,31 '' IL_0000: nop IL_0001: call string ABC::get_greeting() IL_0006: stloc.0 - .line 22,22 : 13,35 + .line 22,22 : 13,35 '' IL_0007: call string ABC/ABC::get_greeting() IL_000c: stloc.1 IL_000d: ret } // end of method $ABC::.cctor - } // end of class ''.$ABC diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelNamespace.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelNamespace.il.bsl index 4ec579e7517..2c1b74c902a 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelNamespace.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelNamespace.il.bsl @@ -2513,18 +2513,17 @@ { // Code size 14 (0xe) .maxstack 3 - .locals init ([0] string V_0, - [1] string greeting) - .line 19,19 : 9,31 + .locals init ([0] string greeting, + [1] string V_1) + .line 19,19 : 9,31 '' IL_0000: nop IL_0001: call string XYZ.ABC::get_greeting() IL_0006: stloc.0 - .line 29,29 : 13,35 + .line 29,29 : 13,35 '' IL_0007: call string XYZ.ABC/ABC::get_greeting() IL_000c: stloc.1 IL_000d: ret } // end of method $ToplevelNamespace::.cctor - } // end of class ''.$ToplevelNamespace diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelNamespaceP.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelNamespaceP.il.bsl index 6e206df9ecc..dc494245d5b 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelNamespaceP.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelNamespaceP.il.bsl @@ -2471,18 +2471,17 @@ { // Code size 14 (0xe) .maxstack 3 - .locals init ([0] string V_0, - [1] string greeting) - .line 19,19 : 9,31 + .locals init ([0] string greeting, + [1] string V_1) + .line 19,19 : 9,31 '' IL_0000: nop IL_0001: call string XYZ.ABC::get_greeting() IL_0006: stloc.0 - .line 29,29 : 13,35 + .line 29,29 : 13,35 '' IL_0007: call string XYZ.ABC/ABC::get_greeting() IL_000c: stloc.1 IL_000d: ret } // end of method $ToplevelNamespace::.cctor - } // end of class ''.$ToplevelNamespace From 4d87596bd24f956b4599ed15f1c4cfcf321086de Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Sun, 18 Sep 2016 03:09:32 -0700 Subject: [PATCH 17/24] Use VisualCppTools nuget package for link.exe --- .nuget/NuGet.Config | 2 +- build.cmd | 3 +-- packages.config | 1 + tests/RunTests.cmd | 10 +++++++++- .../fsc/highentropyva/CheckHighEntropyASLR.bat | 10 +--------- .../fsc/subsystemversion/CheckSubsystemVersion.bat | 10 ---------- 6 files changed, 13 insertions(+), 23 deletions(-) diff --git a/.nuget/NuGet.Config b/.nuget/NuGet.Config index 748f1076f6e..9c6ed6cd8e7 100644 --- a/.nuget/NuGet.Config +++ b/.nuget/NuGet.Config @@ -11,6 +11,6 @@ - + diff --git a/build.cmd b/build.cmd index 2dc565d3eb2..9e856ae7a55 100644 --- a/build.cmd +++ b/build.cmd @@ -363,8 +363,8 @@ if '%RestorePackages%' == 'true' ( .\.nuget\NuGet.exe restore packages.config -PackagesDirectory packages -ConfigFile .nuget\nuget.config @if ERRORLEVEL 1 echo Error: Nuget restore failed && goto :failure ) -if '%BUILD_PROTO_WITH_CORECLR_LKG%' == '1' ( +if '%BUILD_PROTO_WITH_CORECLR_LKG%' == '1' ( :: Restore the Tools directory call %~dp0init-tools.cmd ) @@ -372,7 +372,6 @@ if '%BUILD_PROTO_WITH_CORECLR_LKG%' == '1' ( set _dotnetexe=%~dp0Tools\dotnetcli\dotnet.exe if '%BUILD_PROTO_WITH_CORECLR_LKG%' == '1' ( - :: Restore the Tools directory call %~dp0init-tools.cmd diff --git a/packages.config b/packages.config index 15a7bc4a304..aaddc3a204b 100644 --- a/packages.config +++ b/packages.config @@ -20,4 +20,5 @@ + diff --git a/tests/RunTests.cmd b/tests/RunTests.cmd index 208bd8c296f..9c50d7c9d05 100644 --- a/tests/RunTests.cmd +++ b/tests/RunTests.cmd @@ -18,6 +18,13 @@ if not exist "%~dp0..\packages\NUnit.Console.3.0.0\tools\" ( SET NUNIT3_CONSOLE=%~dp0..\packages\NUnit.Console.3.0.0\tools\nunit3-console.exe SET FSI_TOOL=%~dp0..\%FLAVOR%\net40\bin\Fsi.exe +set link_exe=%~dp0..\packages\VisualCppTools.14.0.24516-Pre\lib\native\bin\link.exe +if not exist "%link_exe%" ( + set saved_errorlevel=1 + echo Error: failed to find '%link_exe%' use nuget to restore the VisualCppTools package + goto :FINISHED +) + rem "ttags" indicates what test areas will be run, based on the tags in the test.lst files set TTAGS_ARG= SET TTAGS= @@ -382,7 +389,8 @@ echo powershell -File Upload-Results.ps1 "%~1" powershell -File Upload-Results.ps1 "%~1" :SKIP_APPVEYOR_UPLOAD - +:FINISHED + if NOT %saved_errorlevel% == 0 exit /b 1 goto :EOF diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/highentropyva/CheckHighEntropyASLR.bat b/tests/fsharpqa/Source/CompilerOptions/fsc/highentropyva/CheckHighEntropyASLR.bat index 230392ba312..d5ec99a9a23 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/highentropyva/CheckHighEntropyASLR.bat +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/highentropyva/CheckHighEntropyASLR.bat @@ -1,14 +1,6 @@ @echo off -REM Search for the Linker -REM Use VS2015 or fall back to VS2014 -SET LINK_EXE="%VS150COMNTOOLS%\..\IDE\VC\bin\link.exe" -IF NOT EXIST %LINK_EXE% ( SET LINK_EXE="%VS150COMNTOOLS%..\..\VC\bin\link.exe" ) -IF NOT EXIST %LINK_EXE% ( SET LINK_EXE="%VS140COMNTOOLS%..\..\VC\bin\link.exe" ) -IF NOT EXIST %LINK_EXE% ( - @echo "Test Requires LINK.EXE" --- Not found - @echo "When installing VS please select "Select Visual C++ / Common Tools For Visual C++" -) +REM Use Link.exe from the nuget package REM %LINK_EXE% -- Path to link.exe REM %1 -- assembly to check diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/subsystemversion/CheckSubsystemVersion.bat b/tests/fsharpqa/Source/CompilerOptions/fsc/subsystemversion/CheckSubsystemVersion.bat index 60afc827ace..7189f89f5cb 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/subsystemversion/CheckSubsystemVersion.bat +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/subsystemversion/CheckSubsystemVersion.bat @@ -1,15 +1,5 @@ @echo off -REM Search for the Linker -REM Use VS2015 or fall back to VS2014 -SET LINK_EXE="%VS150COMNTOOLS%\..\IDE\VC\bin\link.exe" -IF NOT EXIST %LINK_EXE% ( SET LINK_EXE="%VS150COMNTOOLS%..\..\VC\bin\link.exe" ) -IF NOT EXIST %LINK_EXE% ( SET LINK_EXE="%VS140COMNTOOLS%..\..\VC\bin\link.exe" ) -IF NOT EXIST %LINK_EXE% ( - @echo "Test Requires LINK.EXE" --- Not found - @echo "When installing VS please select "Select Visual C++ / Common Tools For Visual C++" -) - REM %LINK_EXE% -- Path to link.exe REM %1 -- assembly to check REM %2 -- expected value ("4.00" etc...) From 588ab10b44b0d0e2d8331a8bab6e31d17bad6759 Mon Sep 17 00:00:00 2001 From: Marcio Rinaldi Date: Tue, 20 Sep 2016 13:24:32 -0300 Subject: [PATCH 18/24] Fix FS0052 warnings (#1543) --- src/fsharp/FSharp.Core/local.fs | 6 ++++-- src/fsharp/FSharp.Core/map.fs | 2 +- src/fsharp/FSharp.Core/printf.fs | 4 ++-- src/fsharp/FSharp.Core/reflect.fs | 6 +++--- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/fsharp/FSharp.Core/local.fs b/src/fsharp/FSharp.Core/local.fs index 6232d9ec3d4..7df2e049e8f 100644 --- a/src/fsharp/FSharp.Core/local.fs +++ b/src/fsharp/FSharp.Core/local.fs @@ -148,10 +148,12 @@ module internal List = let mutable ie = dict.GetEnumerator() if not (ie.MoveNext()) then [] else - let res = freshConsNoTail (keyf ie.Current.Key, ie.Current.Value) + let current = ie.Current + let res = freshConsNoTail (keyf current.Key, current.Value) let mutable cons = res while ie.MoveNext() do - let cons2 = freshConsNoTail (keyf ie.Current.Key, ie.Current.Value) + let current = ie.Current + let cons2 = freshConsNoTail (keyf current.Key, current.Value) setFreshConsTail cons cons2 cons <- cons2 setFreshConsTail cons [] diff --git a/src/fsharp/FSharp.Core/map.fs b/src/fsharp/FSharp.Core/map.fs index 9d16a1d5151..0d5e015b3d3 100644 --- a/src/fsharp/FSharp.Core/map.fs +++ b/src/fsharp/FSharp.Core/map.fs @@ -576,7 +576,7 @@ namespace Microsoft.FSharp.Collections let rec loop () = let m1 = e1.MoveNext() let m2 = e2.MoveNext() - (m1 = m2) && (not m1 || ((e1.Current.Key = e2.Current.Key) && (Unchecked.equals e1.Current.Value e2.Current.Value) && loop())) + (m1 = m2) && (not m1 || let e1c, e2c = e1.Current, e2.Current in ((e1c.Key = e2c.Key) && (Unchecked.equals e1c.Value e2c.Value) && loop())) loop() | _ -> false diff --git a/src/fsharp/FSharp.Core/printf.fs b/src/fsharp/FSharp.Core/printf.fs index 26c9647b86e..c4d6f510e48 100644 --- a/src/fsharp/FSharp.Core/printf.fs +++ b/src/fsharp/FSharp.Core/printf.fs @@ -1094,7 +1094,7 @@ module internal PrintfImpl = mi.Invoke(null, args) let buildPlainFinal(args : obj[], argTypes : Type[]) = - let mi = typeof>.GetMethod("Final" + (argTypes.Length.ToString()), NonPublicStatics) + let mi = typeof>.GetMethod("Final" + (let x = argTypes.Length in x.ToString()), NonPublicStatics) #if DEBUG verifyMethodInfoWasTaken mi #else @@ -1103,7 +1103,7 @@ module internal PrintfImpl = mi.Invoke(null, args) let buildPlainChained(args : obj[], argTypes : Type[]) = - let mi = typeof>.GetMethod("Chained" + ((argTypes.Length - 1).ToString()), NonPublicStatics) + let mi = typeof>.GetMethod("Chained" + (let x = (argTypes.Length - 1) in x.ToString()), NonPublicStatics) #if DEBUG verifyMethodInfoWasTaken mi #else diff --git a/src/fsharp/FSharp.Core/reflect.fs b/src/fsharp/FSharp.Core/reflect.fs index 379e0bc79e5..9eee255d042 100644 --- a/src/fsharp/FSharp.Core/reflect.fs +++ b/src/fsharp/FSharp.Core/reflect.fs @@ -128,9 +128,9 @@ module internal Impl = let args = a.ConstructorArguments let flags = match args.Count with - | 1 -> ((args.[0].Value :?> SourceConstructFlags), 0, 0) - | 2 -> ((args.[0].Value :?> SourceConstructFlags), (args.[1].Value :?> int), 0) - | 3 -> ((args.[0].Value :?> SourceConstructFlags), (args.[1].Value :?> int), (args.[2].Value :?> int)) + | 1 -> ((let x = args.[0] in x.Value :?> SourceConstructFlags), 0, 0) + | 2 -> ((let x = args.[0] in x.Value :?> SourceConstructFlags), (let x = args.[1] in x.Value :?> int), 0) + | 3 -> ((let x = args.[0] in x.Value :?> SourceConstructFlags), (let x = args.[1] in x.Value :?> int), (let x = args.[2] in x.Value :?> int)) | _ -> (enum 0, 0, 0) res <- Some flags res From 782451a3cf82fd5e533e2fbc25e8d5583f1c89ac Mon Sep 17 00:00:00 2001 From: Libo Zeng Date: Tue, 20 Sep 2016 12:29:58 -0400 Subject: [PATCH 19/24] deferencing only once per function call (#1532) --- src/fsharp/FSharp.Core/prim-types.fs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/fsharp/FSharp.Core/prim-types.fs b/src/fsharp/FSharp.Core/prim-types.fs index a3b0f055e1d..5d1010cf4a4 100644 --- a/src/fsharp/FSharp.Core/prim-types.fs +++ b/src/fsharp/FSharp.Core/prim-types.fs @@ -5324,12 +5324,13 @@ namespace Microsoft.FSharp.Core // is undefined prior to the first call of MoveNext and post called to MoveNext // that return false (see https://msdn.microsoft.com/en-us/library/58e146b7%28v=vs.110%29.aspx) // so we should be able to just return value here, which would be faster - if !value < n then + let derefValue = !value + if derefValue < n then notStarted () - elif !value > m then + elif derefValue > m then alreadyFinished () else - !value + derefValue { new IEnumerator<'T> with member __.Dispose () = () @@ -5339,11 +5340,12 @@ namespace Microsoft.FSharp.Core member __.Current = box (current ()) member __.Reset () = value := n - LanguagePrimitives.GenericOne member __.MoveNext () = - if !value < m then - value := !value + LanguagePrimitives.GenericOne + let derefValue = !value + if derefValue < m then + value := derefValue + LanguagePrimitives.GenericOne true - elif !value = m then - value := m + LanguagePrimitives.GenericOne + elif derefValue = m then + value := derefValue + LanguagePrimitives.GenericOne false else false } From 85f3a40f14e4f9fc7baa8bcde81a257c1ef97ceb Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Tue, 20 Sep 2016 10:48:43 -0700 Subject: [PATCH 20/24] Update vccptools version # (#1554) --- packages.config | 2 +- tests/RunTests.cmd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages.config b/packages.config index aaddc3a204b..6b37a9859c4 100644 --- a/packages.config +++ b/packages.config @@ -20,5 +20,5 @@ - + diff --git a/tests/RunTests.cmd b/tests/RunTests.cmd index 9c50d7c9d05..687719a5229 100644 --- a/tests/RunTests.cmd +++ b/tests/RunTests.cmd @@ -18,7 +18,7 @@ if not exist "%~dp0..\packages\NUnit.Console.3.0.0\tools\" ( SET NUNIT3_CONSOLE=%~dp0..\packages\NUnit.Console.3.0.0\tools\nunit3-console.exe SET FSI_TOOL=%~dp0..\%FLAVOR%\net40\bin\Fsi.exe -set link_exe=%~dp0..\packages\VisualCppTools.14.0.24516-Pre\lib\native\bin\link.exe +set link_exe=%~dp0..\packages\VisualCppTools.14.0.24519-Pre\lib\native\bin\link.exe if not exist "%link_exe%" ( set saved_errorlevel=1 echo Error: failed to find '%link_exe%' use nuget to restore the VisualCppTools package From ca69e019a811648dd14575e32867747818ddef36 Mon Sep 17 00:00:00 2001 From: Steffen Forkmann Date: Tue, 20 Sep 2016 23:07:40 +0200 Subject: [PATCH 21/24] Cleanup Optimizer (#1519) * Cleanup Optimizer Thank you for taking care of this. * We don't need to check the lenght here * Don't convert list to array multiple times * Only fold the Flatlist * Optimize FlatList away * Revert code duplication * match => if * cleanup * DevirtualizeApplication doesn't need optimized Expression --- src/absil/illib.fs | 1 + src/fsharp/FlatList.fs | 64 ++++++++++----------- src/fsharp/Optimizer.fs | 124 +++++++++++++++++++++------------------- 3 files changed, 99 insertions(+), 90 deletions(-) diff --git a/src/absil/illib.fs b/src/absil/illib.fs index abb1c3090ad..91b44acd2b7 100644 --- a/src/absil/illib.fs +++ b/src/absil/illib.fs @@ -780,6 +780,7 @@ module NameMap = let exists f m = Map.foldBack (fun x y sofar -> sofar || f x y) m false let ofKeyedList f l = List.foldBack (fun x acc -> Map.add (f x) x acc) l Map.empty let ofList l : NameMap<'T> = Map.ofList l + let ofSeq l : NameMap<'T> = Map.ofSeq l let ofFlatList (l:FlatList<_>) : NameMap<'T> = FlatList.toMap l let toList (l: NameMap<'T>) = Map.toList l let layer (m1 : NameMap<'T>) m2 = Map.foldBack Map.add m1 m2 diff --git a/src/fsharp/FlatList.fs b/src/fsharp/FlatList.fs index ba9c8af6ab6..66e0f056b7c 100644 --- a/src/fsharp/FlatList.fs +++ b/src/fsharp/FlatList.fs @@ -198,38 +198,38 @@ type internal FlatList<'T> ='T list [] module internal FlatList = let empty<'T> : 'T list = [] - let collect (f: 'T -> FlatList<'T>) (x:FlatList<_>) = List.collect f x - let exists f (x:FlatList<_>) = List.exists f x - let filter f (x:FlatList<_>) = List.filter f x - let fold f acc (x:FlatList<_>) = List.fold f acc x - let fold2 f acc (x:FlatList<_>) (y:FlatList<_>) = List.fold2 f acc x y - let foldBack f (x:FlatList<_>) acc = List.foldBack f x acc - let foldBack2 f (x:FlatList<_>) (y:FlatList<_>) acc = List.foldBack2 f x y acc - let map2 f (x:FlatList<_>) (y:FlatList<_>) = List.map2 f x y - let forall f (x:FlatList<_>) = List.forall f x - let forall2 f (x1:FlatList<_>) (x2:FlatList<_>) = List.forall2 f x1 x2 - let iter2 f (x1:FlatList<_>) (x2:FlatList<_>) = List.iter2 f x1 x2 - let partition f (x:FlatList<_>) = List.partition f x - let (* inline *) sum (x:FlatList) = List.sum x - let (* inline *) sumBy (f: 'T -> int) (x:FlatList<'T>) = List.sumBy f x - let unzip (x:FlatList<_>) = List.unzip x - let physicalEquality (x:FlatList<_>) (y:FlatList<_>) = (LanguagePrimitives.PhysicalEquality x y) - let tryFind f (x:FlatList<_>) = List.tryFind f x - let concat (x:FlatList<_>) = List.concat x - let isEmpty (x:FlatList<_>) = List.isEmpty x - let one(x) = [x] - let toMap (x:FlatList<_>) = Map.ofList x - let length (x:FlatList<_>) = List.length x - let map f (x:FlatList<_>) = List.map f x - let mapi f (x:FlatList<_>) = List.mapi f x - let iter f (x:FlatList<_>) = List.iter f x - let iteri f (x:FlatList<_>) = List.iteri f x - let toList (x:FlatList<_>) = x - let ofSeq (x:seq<_>) = List.ofSeq x - let append(l1 : FlatList<'T>) (l2 : FlatList<'T>) = List.append l1 l2 - let ofList(l) = l - let init n f = List.init n f - let zip (x:FlatList<_>) (y:FlatList<_>) = List.zip x y + let inline collect (f: 'T -> FlatList<'T>) (x:FlatList<_>) = List.collect f x + let inline exists f (x:FlatList<_>) = List.exists f x + let inline filter f (x:FlatList<_>) = List.filter f x + let inline fold f acc (x:FlatList<_>) = List.fold f acc x + let inline fold2 f acc (x:FlatList<_>) (y:FlatList<_>) = List.fold2 f acc x y + let inline foldBack f (x:FlatList<_>) acc = List.foldBack f x acc + let inline foldBack2 f (x:FlatList<_>) (y:FlatList<_>) acc = List.foldBack2 f x y acc + let inline map2 f (x:FlatList<_>) (y:FlatList<_>) = List.map2 f x y + let inline forall f (x:FlatList<_>) = List.forall f x + let inline forall2 f (x1:FlatList<_>) (x2:FlatList<_>) = List.forall2 f x1 x2 + let inline iter2 f (x1:FlatList<_>) (x2:FlatList<_>) = List.iter2 f x1 x2 + let inline partition f (x:FlatList<_>) = List.partition f x + let inline sum (x:FlatList) = List.sum x + let inline sumBy (f: 'T -> int) (x:FlatList<'T>) = List.sumBy f x + let inline unzip (x:FlatList<_>) = List.unzip x + let inline physicalEquality (x:FlatList<_>) (y:FlatList<_>) = (LanguagePrimitives.PhysicalEquality x y) + let inline tryFind f (x:FlatList<_>) = List.tryFind f x + let inline concat (x:FlatList<_>) = List.concat x + let inline isEmpty (x:FlatList<_>) = List.isEmpty x + let inline one(x) = [x] + let inline toMap (x:FlatList<_>) = Map.ofList x + let inline length (x:FlatList<_>) = List.length x + let inline map f (x:FlatList<_>) = List.map f x + let inline mapi f (x:FlatList<_>) = List.mapi f x + let inline iter f (x:FlatList<_>) = List.iter f x + let inline iteri f (x:FlatList<_>) = List.iteri f x + let inline toList (x:FlatList<_>) = x + let inline ofSeq (x:seq<_>) = List.ofSeq x + let inline append(l1 : FlatList<'T>) (l2 : FlatList<'T>) = List.append l1 l2 + let inline ofList(l) = l + let inline init n f = List.init n f + let inline zip (x:FlatList<_>) (y:FlatList<_>) = List.zip x y #endif #if FLAT_LIST_AS_ARRAY diff --git a/src/fsharp/Optimizer.fs b/src/fsharp/Optimizer.fs index 9bb4ba0ecde..b547523882f 100644 --- a/src/fsharp/Optimizer.fs +++ b/src/fsharp/Optimizer.fs @@ -467,18 +467,20 @@ let rec BindValsInModuleOrNamespace cenv (mval:LazyModuleInfo) env = let env = (env, mval.ValInfos.Entries) ||> Seq.fold (fun env (v:ValRef, vval) -> BindExternalLocalVal cenv v.Deref vval env) env -let BindInternalValToUnknown cenv v env = +let inline BindInternalValToUnknown cenv v env = #if CHECKED BindInternalLocalVal cenv v UnknownValue env #else - ignore (cenv,v) + ignore cenv + ignore v env #endif -let BindInternalValsToUnknown cenv vs env = +let inline BindInternalValsToUnknown cenv vs env = #if CHECKED List.foldBack (BindInternalValToUnknown cenv) vs env #else - ignore (cenv,vs) + ignore cenv + ignore vs env #endif @@ -568,9 +570,11 @@ let GetInfoForNonLocalVal cenv env (vref:ValRef) = let GetInfoForVal cenv env m (vref:ValRef) = let res = - match vref.IsLocalRef with - | true -> GetInfoForLocalValue cenv env vref.binding m - | false -> GetInfoForNonLocalVal cenv env vref + if vref.IsLocalRef then + GetInfoForLocalValue cenv env vref.binding m + else + GetInfoForNonLocalVal cenv env vref + check (* "its stored value was incomplete" m *) vref res |> ignore res @@ -2032,7 +2036,7 @@ and OptimizeFastIntegerForLoop cenv env (spStart,v,e1,dir,e2,e3,m) = //------------------------------------------------------------------------- and OptimizeLetRec cenv env (binds,bodyExpr,m) = - let vs = binds |> FlatList.map (fun v -> v.Var) in + let vs = binds |> FlatList.map (fun v -> v.Var) let env = BindInternalValsToUnknown cenv vs env let binds',env = OptimizeBindings cenv true env binds let bodyExpr',einfo = OptimizeExpr cenv env bodyExpr @@ -2040,8 +2044,7 @@ and OptimizeLetRec cenv env (binds,bodyExpr,m) = // Eliminate any unused bindings, as in let case let binds'',bindinfos = let fvs0 = freeInExpr CollectLocals bodyExpr' - let fvsN = FlatList.map (fst >> freeInBindingRhs CollectLocals) binds' - let fvs = FlatList.fold unionFreeVars fvs0 fvsN + let fvs = FlatList.fold (fun acc x -> unionFreeVars acc (fst x |> freeInBindingRhs CollectLocals)) fvs0 binds' SplitValuesByIsUsedOrHasEffect cenv (fun () -> fvs.FreeLocals) binds' // Trim out any optimization info that involves escaping values let evalue' = AbstractExprInfoByVars (FlatList.toList vs,[]) einfo.Info @@ -2206,7 +2209,7 @@ and TryOptimizeVal cenv env (mustInline,valInfoForVal,m) = | SizeValue (_,detail) -> TryOptimizeVal cenv env (mustInline,detail,m) | ValValue (v',detail) -> // Inline values bound to other values immediately - match TryOptimizeVal cenv env (mustInline,detail,m) with + match TryOptimizeVal cenv env (mustInline,detail,m) with // Prefer to inline using the more specific info if possible | Some e -> Some e //If the more specific info didn't reveal an inline then use the value @@ -2300,9 +2303,9 @@ and TakeAddressOfStructArgumentIfNeeded cenv (vref:ValRef) ty args m = wrap, (objArgAddress::rest) | _ -> // no wrapper, args stay the same - (fun x -> x), args + id, args else - (fun x -> x), args + id, args and DevirtualizeApplication cenv env (vref:ValRef) ty tyargs args m = let wrap,args = TakeAddressOfStructArgumentIfNeeded cenv vref ty args m @@ -2579,50 +2582,51 @@ and TryInlineApplication cenv env (_f0',finfo) (tyargs: TType list,args: Expr li //------------------------------------------------------------------------- and OptimizeApplication cenv env (f0,f0ty,tyargs,args,m) = - let f0',finfo = OptimizeExpr cenv env f0 // trying to devirtualize match TryDevirtualizeApplication cenv env (f0,tyargs,args,m) with | Some res -> // devirtualized res | None -> - - match TryInlineApplication cenv env (f0',finfo) (tyargs,args,m) with + let newf0,finfo = OptimizeExpr cenv env f0 + match TryInlineApplication cenv env (newf0,finfo) (tyargs,args,m) with | Some res -> // inlined res | None -> let shapes = - match f0' with - | Expr.Val(vref,_,_) when Option.isSome vref.ValReprInfo -> - let (ValReprInfo(_kinds,detupArgsL,_)) = Option.get vref.ValReprInfo - let nargs = (args.Length) - let nDetupArgsL = detupArgsL.Length - let nShapes = min nargs nDetupArgsL - let detupArgsShapesL = - List.take nShapes detupArgsL |> List.map (fun detupArgs -> - match detupArgs with - | [] | [_] -> UnknownValue - | _ -> TupleValue(Array.ofList (List.map (fun _ -> UnknownValue) detupArgs))) - detupArgsShapesL @ List.replicate (nargs - nShapes) UnknownValue - - | _ -> args |> List.map (fun _ -> UnknownValue) - - let args',arginfos = OptimizeExprsThenReshapeAndConsiderSplits cenv env (List.zip shapes args) + match newf0 with + | Expr.Val(vref,_,_) -> + match vref.ValReprInfo with + | Some(ValReprInfo(_,detupArgsL,_)) -> + let nargs = args.Length + let nDetupArgsL = detupArgsL.Length + let nShapes = min nargs nDetupArgsL + let detupArgsShapesL = + List.take nShapes detupArgsL + |> List.map (fun detupArgs -> + match detupArgs with + | [] | [_] -> UnknownValue + | _ -> TupleValue(Array.ofList (List.map (fun _ -> UnknownValue) detupArgs))) + List.zip (detupArgsShapesL @ List.replicate (nargs - nShapes) UnknownValue) args + | _ -> args |> List.map (fun arg -> UnknownValue,arg) + | _ -> args |> List.map (fun arg -> UnknownValue,arg) + + let newArgs,arginfos = OptimizeExprsThenReshapeAndConsiderSplits cenv env shapes // beta reducing - let expr' = MakeApplicationAndBetaReduce cenv.g (f0',f0ty, [tyargs],args',m) + let newExpr = MakeApplicationAndBetaReduce cenv.g (newf0,f0ty, [tyargs],newArgs,m) - match f0', expr' with + match newf0, newExpr with | (Expr.Lambda _ | Expr.TyLambda _), Expr.Let _ -> // we beta-reduced, hence reoptimize - OptimizeExpr cenv env expr' + OptimizeExpr cenv env newExpr | _ -> // regular // Determine if this application is a critical tailcall let mayBeCriticalTailcall = - match f0' with + match newf0 with | KnownValApp(vref,_typeArgs,otherArgs) -> // Check if this is a call to a function of known arity that has been inferred to not be a critical tailcall when used as a direct call @@ -2633,13 +2637,13 @@ and OptimizeApplication cenv env (f0,f0ty,tyargs,args,m) = (let valInfoForVal = GetInfoForVal cenv env m vref in valInfoForVal.ValMakesNoCriticalTailcalls) || (match env.functionVal with | None -> false | Some (v,_) -> valEq vref.Deref v) if doesNotMakeCriticalTailcall then - let numArgs = otherArgs.Length + args'.Length + let numArgs = otherArgs.Length + newArgs.Length match vref.ValReprInfo with | Some i -> numArgs > i.NumCurriedArgs | None -> match env.functionVal with | Some (_v,i) -> numArgs > i.NumCurriedArgs - | None -> true // over-applicaiton of a known function, which presumably returns a function. This counts as an indirect call + | None -> true // over-application of a known function, which presumably returns a function. This counts as an indirect call else true // application of a function that may make a critical tailcall @@ -2647,11 +2651,11 @@ and OptimizeApplication cenv env (f0,f0ty,tyargs,args,m) = // All indirect calls (calls to unknown functions) are assumed to be critical tailcalls true - expr', { TotalSize=finfo.TotalSize + AddTotalSizes arginfos - FunctionSize=finfo.FunctionSize + AddFunctionSizes arginfos - HasEffect=true - MightMakeCriticalTailcall = mayBeCriticalTailcall - Info=ValueOfExpr expr' } + newExpr, { TotalSize=finfo.TotalSize + AddTotalSizes arginfos + FunctionSize=finfo.FunctionSize + AddFunctionSizes arginfos + HasEffect=true + MightMakeCriticalTailcall = mayBeCriticalTailcall + Info=ValueOfExpr newExpr } //------------------------------------------------------------------------- // Optimize/analyze a lambda expression @@ -2661,7 +2665,6 @@ and OptimizeLambdas (vspec: Val option) cenv env topValInfo e ety = match e with | Expr.Lambda (lambdaId,_,_,_,_,m,_) | Expr.TyLambda(lambdaId,_,_,m,_) -> - let isTopLevel = Option.isSome vspec && vspec.Value.IsCompiledAsTopLevel let tps,ctorThisValOpt,baseValOpt,vsl,body,bodyty = IteratedAdjustArityOfLambda cenv.g cenv.amap topValInfo e let env = { env with functionVal = (match vspec with None -> None | Some v -> Some (v,topValInfo)) } let env = Option.foldBack (BindInternalValToUnknown cenv) ctorThisValOpt env @@ -2709,13 +2712,18 @@ and OptimizeLambdas (vspec: Val option) cenv env topValInfo e ety = | Some baseVal -> let fvs = freeInExpr CollectLocals body' if fvs.UsesMethodLocalConstructs || fvs.FreeLocals.Contains baseVal then - UnknownValue + UnknownValue else let expr2 = mkMemberLambdas m tps ctorThisValOpt None vsl (body',bodyty) CurriedLambdaValue (lambdaId,arities,bsize,expr2,ety) - expr', { TotalSize=bsize + (if isTopLevel then methodDefnTotalSize else closureTotalSize) (* estimate size of new syntactic closure - expensive, in contrast to a method *) + let estimatedSize = + match vspec with + | Some v when v.IsCompiledAsTopLevel -> methodDefnTotalSize + | _ -> closureTotalSize + + expr', { TotalSize=bsize + estimatedSize (* estimate size of new syntactic closure - expensive, in contrast to a method *) FunctionSize=1 HasEffect=false MightMakeCriticalTailcall = false @@ -2739,9 +2747,10 @@ and OptimizeExprsThenConsiderSplits cenv env exprs = | [] -> NoExprs | _ -> OptimizeList (OptimizeExprThenConsiderSplit cenv env) exprs -and OptimizeFlatExprsThenConsiderSplits cenv env (exprs:FlatExprs) = - if FlatList.isEmpty exprs then NoFlatExprs - else OptimizeFlatList (OptimizeExprThenConsiderSplit cenv env) exprs +and OptimizeFlatExprsThenConsiderSplits cenv env exprs = + match exprs with + | [] -> NoFlatExprs + | _ -> OptimizeFlatList (OptimizeExprThenConsiderSplit cenv env) exprs and OptimizeExprThenReshapeAndConsiderSplit cenv env (shape,e) = OptimizeExprThenConsiderSplit cenv env (ReshapeExpr cenv (shape,e)) @@ -2753,7 +2762,8 @@ and ReshapeExpr cenv (shape,e) = match shape,e with | TupleValue(subshapes), Expr.Val(_vref,_vFlags,m) -> let tinst = destRefTupleTy cenv.g (tyOfExpr cenv.g e) - mkRefTupled cenv.g m (List.mapi (fun i subshape -> ReshapeExpr cenv (subshape,mkTupleFieldGet cenv.g (tupInfoRef,e,tinst,i,m))) (Array.toList subshapes)) tinst + let subshapes = Array.toList subshapes + mkRefTupled cenv.g m (List.mapi (fun i subshape -> ReshapeExpr cenv (subshape,mkTupleFieldGet cenv.g (tupInfoRef,e,tinst,i,m))) subshapes) tinst | _ -> e @@ -2868,8 +2878,7 @@ and OptimizeDecisionTree cenv env m x = let info = CombineValueInfosUnknown [rinfo;binfo] // try to fold the let-binding into a single result expression match rest with - | TDSuccess(es,n) when es.Length = 1 -> - let e = es.[0] + | TDSuccess([e],n) -> let e,_adjust = TryEliminateLet cenv env bind e m TDSuccess(FlatList.one e,n),info | _ -> @@ -3072,7 +3081,7 @@ and OptimizeModuleExpr cenv env x = new ModuleOrNamespaceType(kind=mtyp.ModuleOrNamespaceKind, vals= (mtyp.AllValsAndMembers |> QueueList.filter (Zset.memberOf deadSet >> not)), entities= mtyp.AllEntities) - mtyp.ModuleAndNamespaceDefinitions |> List.iter (fun mspec -> elimModSpec mspec) + mtyp.ModuleAndNamespaceDefinitions |> List.iter elimModSpec mty and elimModSpec (mspec:ModuleOrNamespace) = let mtyp = elimModTy mspec.ModuleOrNamespaceType @@ -3116,13 +3125,12 @@ and OptimizeModuleDef cenv (env,bindInfosColl) x = let binds = minfos |> List.choose (function Choice1Of2 (x,_) -> Some x | _ -> None) let binfos = minfos |> List.choose (function Choice1Of2 (_,x) -> Some x | _ -> None) let minfos = minfos |> List.choose (function Choice2Of2 x -> Some x | _ -> None) - - (* REVIEW: Eliminate let bindings on the way back up *) + (* REVIEW: Eliminate let bindings on the way back up *) (TMDefRec(isRec,tycons,mbinds,m), - notlazy { ValInfos= ValInfos(FlatList.map2 (fun bind binfo -> mkValBind bind (mkValInfo binfo bind.Var)) binds binfos) + notlazy { ValInfos = ValInfos(FlatList.map2 (fun bind binfo -> mkValBind bind (mkValInfo binfo bind.Var)) binds binfos) ModuleOrNamespaceInfos = NameMap.ofList minfos}), - (env,bindInfosColl) + (env,bindInfosColl) | TMAbstract(mexpr) -> let mexpr,info = OptimizeModuleExpr cenv env mexpr let env = BindValsInModuleOrNamespace cenv info env @@ -3132,7 +3140,7 @@ and OptimizeModuleDef cenv (env,bindInfosColl) x = (* REVIEW: Eliminate unused let bindings from modules *) (TMDefLet(bind',m), notlazy { ValInfos=ValInfos [mkValBind bind (mkValInfo binfo bind.Var)] - ModuleOrNamespaceInfos = NameMap.ofList []}), + ModuleOrNamespaceInfos = NameMap.empty }), (env ,([bindInfo]::bindInfosColl)) | TMDefDo(e,m) -> From 77ed7305a6e5432ec4f5d692d46e7ce982ae0e4c Mon Sep 17 00:00:00 2001 From: Omar Tawfik Date: Tue, 20 Sep 2016 14:14:21 -0700 Subject: [PATCH 22/24] Added VisualFSharpOpenSource project --- VisualFSharp.sln | 19 +- .../Source.extension.vsixmanifest | 63 ++++ .../VisualFSharpOpenSource.csproj | 316 ++++++++++++++++++ .../fsharp-vsintegration-vsix-build.proj | 1 + 4 files changed, 396 insertions(+), 3 deletions(-) create mode 100644 vsintegration/Vsix/VisualFSharpOpenSource/Source.extension.vsixmanifest create mode 100644 vsintegration/Vsix/VisualFSharpOpenSource/VisualFSharpOpenSource.csproj diff --git a/VisualFSharp.sln b/VisualFSharp.sln index 0dd516a06bd..d70655386d3 100644 --- a/VisualFSharp.sln +++ b/VisualFSharp.sln @@ -1,9 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.25302.0 -# Visual Studio 14 -VisualStudioVersion = 14.0.25123.0 +VisualStudioVersion = 15.0.25618.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Compiler", "src\fsharp\FSharp.Compiler\FSharp.Compiler.fsproj", "{2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}" EndProject @@ -131,6 +129,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisualFSharpFull", "vsinteg EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisualFSharpWeb", "vsintegration\Vsix\VisualFSharpWeb\VisualFSharpWeb.csproj", "{58730C8B-16F5-4956-9291-BB68E17C9142}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisualFSharpOpenSource", "vsintegration\Vsix\VisualFSharpOpenSource\VisualFSharpOpenSource.csproj", "{E6A45CDF-B408-420F-B475-74611BEFC52B}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -728,6 +728,18 @@ Global {58730C8B-16F5-4956-9291-BB68E17C9142}.Release|Any CPU.Build.0 = Release|Any CPU {58730C8B-16F5-4956-9291-BB68E17C9142}.Release|x86.ActiveCfg = Release|Any CPU {58730C8B-16F5-4956-9291-BB68E17C9142}.Release|x86.Build.0 = Release|Any CPU + {E6A45CDF-B408-420F-B475-74611BEFC52B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E6A45CDF-B408-420F-B475-74611BEFC52B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E6A45CDF-B408-420F-B475-74611BEFC52B}.Debug|x86.ActiveCfg = Debug|Any CPU + {E6A45CDF-B408-420F-B475-74611BEFC52B}.Debug|x86.Build.0 = Debug|Any CPU + {E6A45CDF-B408-420F-B475-74611BEFC52B}.Proto|Any CPU.ActiveCfg = Proto|Any CPU + {E6A45CDF-B408-420F-B475-74611BEFC52B}.Proto|Any CPU.Build.0 = Proto|Any CPU + {E6A45CDF-B408-420F-B475-74611BEFC52B}.Proto|x86.ActiveCfg = Proto|Any CPU + {E6A45CDF-B408-420F-B475-74611BEFC52B}.Proto|x86.Build.0 = Proto|Any CPU + {E6A45CDF-B408-420F-B475-74611BEFC52B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E6A45CDF-B408-420F-B475-74611BEFC52B}.Release|Any CPU.Build.0 = Release|Any CPU + {E6A45CDF-B408-420F-B475-74611BEFC52B}.Release|x86.ActiveCfg = Release|Any CPU + {E6A45CDF-B408-420F-B475-74611BEFC52B}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -787,5 +799,6 @@ Global {E7EC4A3E-9D57-45B8-83F5-EDDFD6CEF090} = {141F6C23-E1B1-4D89-9F10-F0B8AD58E71F} {59ADCE46-9740-4079-834D-9A03A3494EBC} = {141F6C23-E1B1-4D89-9F10-F0B8AD58E71F} {58730C8B-16F5-4956-9291-BB68E17C9142} = {141F6C23-E1B1-4D89-9F10-F0B8AD58E71F} + {E6A45CDF-B408-420F-B475-74611BEFC52B} = {141F6C23-E1B1-4D89-9F10-F0B8AD58E71F} EndGlobalSection EndGlobal diff --git a/vsintegration/Vsix/VisualFSharpOpenSource/Source.extension.vsixmanifest b/vsintegration/Vsix/VisualFSharpOpenSource/Source.extension.vsixmanifest new file mode 100644 index 00000000000..d8f04529fb4 --- /dev/null +++ b/vsintegration/Vsix/VisualFSharpOpenSource/Source.extension.vsixmanifest @@ -0,0 +1,63 @@ + + + + + + Visual F# Tools + Deploy Visual F# Tools templates to Visual Studio + ..\CommonExtensions\Microsoft\FSharp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vsintegration/Vsix/VisualFSharpOpenSource/VisualFSharpOpenSource.csproj b/vsintegration/Vsix/VisualFSharpOpenSource/VisualFSharpOpenSource.csproj new file mode 100644 index 00000000000..a4c64175707 --- /dev/null +++ b/vsintegration/Vsix/VisualFSharpOpenSource/VisualFSharpOpenSource.csproj @@ -0,0 +1,316 @@ + + + + + ..\..\..\src + net40 + 15.0 + 11.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + 15.0 + 2.0 + true + {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + + publish\ + true + Disk + false + Foreground + 7 + Days + true + false + true + 0 + v4.6 + false + false + false + false + false + false + false + false + true + None + Debug + AnyCPU + Library + Properties + FSharpDev + true + False + False + {E6A45CDF-B408-420F-B475-74611BEFC52B} + true + VisualFSharpOpenSource + $(FSharpSourcesRoot)\..\$(Configuration)\$(TargetFramework)\bin + VisualFSharpOpenSource + $(RootBinPath) + 15.4.1.0 + cs + + + Program + $(DevEnvDir)devenv.exe + /rootsuffix $(VSRootSuffix) /log + $(VSRootSuffix) + true + + + Program + $(DevEnvDir)devenv.exe + true + /rootsuffix $(VSRootSuffix) /log + $(VSRootSuffix) + + + + Designer + + + Always + true + RegisterFsharpPackage.pkgdef + + + PreserveNewest + true + + + + + False + Microsoft .NET Framework 4.6 %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + false + + + + + {649FA588-F02E-457C-9FCF-87E46407481E} + FSharp.Compiler.Interactive.Settings + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + True + + + {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06} + FSharp.Compiler.Server.Shared + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3bPkgDefProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + True + + + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3} + FSharp.Compiler + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + True + + + {DED3BBD7-53F4-428A-8C9F-27968E768605} + FSharp.Core + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + True + + + {A437A6EC-5323-47C2-8F86-E2CAC54FF152} + FSharp.LanguageService.Compiler + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3bPkgDefProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + True + + + {8B3E283D-B5FE-4055-9D80-7E3A32F3967B} + FsiAnyCPU + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + True + + + {D0E98C0D-490B-4C61-9329-0862F6E87645} + Fsi + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + True + + + {65e0e82a-eace-4787-8994-888674c2fe87} + FSharp.Editor + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3bPkgDefProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + True + + + {1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF} + FSharp.LanguageService.Base + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3bPkgDefProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + True + + + {EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F} + FSharp.LanguageService + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3bPkgDefProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + True + + + {B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7} + ProjectSystem.Base + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3bPkgDefProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + True + + + {6196B0F8-CAEA-4CF1-AF82-1B520F77FE44} + ProjectSystem + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3bPkgDefProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + True + + + {FCFB214C-462E-42B3-91CA-FC557EFEE74F} + FSharp.PropertiesPages + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3bPkgDefProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + True + + + {991DCF75-C2EB-42B6-9A0D-AA1D2409D519} + FSharp.VS.FSI + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3bPkgDefProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + True + + + {6ba13aa4-c25f-480f-856b-8e8000299a72} + AppConfig + ItemTemplates + TemplateProjectOutputGroup%3b + false + True + + + {12ac2813-e895-4aaa-ae6c-94e21da09f64} + CodeFile + ItemTemplates + TemplateProjectOutputGroup%3b + false + True + + + {a333b85a-dc23-49b6-9797-b89a7951e92d} + ScriptFile + ItemTemplates + TemplateProjectOutputGroup%3b + false + True + + + {e3fdd4ac-46b6-4b9f-b672-317d1202cc50} + SignatureFile + ItemTemplates + TemplateProjectOutputGroup%3b + false + True + + + {d11fc318-8f5d-4c8c-9287-ab40a016d13c} + TextFile + ItemTemplates + TemplateProjectOutputGroup%3b + false + True + + + {1fb1dd07-06aa-45b4-b5ac-20ff5bee98b6} + XMLFile + ItemTemplates + TemplateProjectOutputGroup%3b + false + True + + + {604f0daa-2d33-48dd-b162-edf0b672803d} + ConsoleProject + ProjectTemplates + TemplateProjectOutputGroup%3b + false + True + + + {01678cda-a11f-4dee-9344-2edf91cf1ae7} + LibraryProject + ProjectTemplates + TemplateProjectOutputGroup%3b + false + True + + + {d9d95330-3626-4199-b7af-17b8e4af6d87} + NetCore259Project + ProjectTemplates + TemplateProjectOutputGroup%3b + false + True + + + {1a8dbf70-4178-4ae3-af5f-39ddd5692210} + NetCore78Project + ProjectTemplates + TemplateProjectOutputGroup%3b + false + True + + + {5b739cf3-1116-4eb4-b598-6c16bea81ce5} + NetCoreProject + ProjectTemplates + TemplateProjectOutputGroup%3b + false + True + + + {db374a0c-7560-479f-9b21-d37c81f7624f} + PortableLibraryProject + ProjectTemplates + TemplateProjectOutputGroup%3b + false + True + + + {2facee44-48bd-40b5-a2ee-b54a0c9bb7c4} + TutorialProject + ProjectTemplates + TemplateProjectOutputGroup%3b + false + True + + + + + + + + + VsixSHA2 + + + + \ No newline at end of file diff --git a/vsintegration/fsharp-vsintegration-vsix-build.proj b/vsintegration/fsharp-vsintegration-vsix-build.proj index 96cc78da026..d2588f7bd66 100644 --- a/vsintegration/fsharp-vsintegration-vsix-build.proj +++ b/vsintegration/fsharp-vsintegration-vsix-build.proj @@ -8,6 +8,7 @@ + From 87bf48a176a80ee0757bafd597075410ba320c8d Mon Sep 17 00:00:00 2001 From: Omar Tawfik Date: Tue, 20 Sep 2016 16:53:28 -0700 Subject: [PATCH 23/24] Added Experimental flag on VisualFSharpOpenSource --- .../Vsix/VisualFSharpOpenSource/Source.extension.vsixmanifest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vsintegration/Vsix/VisualFSharpOpenSource/Source.extension.vsixmanifest b/vsintegration/Vsix/VisualFSharpOpenSource/Source.extension.vsixmanifest index d8f04529fb4..714758ace3b 100644 --- a/vsintegration/Vsix/VisualFSharpOpenSource/Source.extension.vsixmanifest +++ b/vsintegration/Vsix/VisualFSharpOpenSource/Source.extension.vsixmanifest @@ -7,7 +7,7 @@ Deploy Visual F# Tools templates to Visual Studio ..\CommonExtensions\Microsoft\FSharp - + From 0692a9c9c5e1eed5de387a138eecb908e733d561 Mon Sep 17 00:00:00 2001 From: Omar Tawfik Date: Wed, 21 Sep 2016 13:04:43 -0700 Subject: [PATCH 24/24] Resolve merge conflicts --- .../FSharp.Compiler.Server.Shared.fsproj | 11 ----------- .../FSharp.LanguageService.Compiler.fsproj | 5 ----- .../Source.extension.vsixmanifest | 3 +++ .../VisualFSharpOpenSource.csproj | 2 +- vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj | 6 +----- .../FSharp.LanguageService.Base.csproj | 4 +--- .../FSharp.LanguageService.fsproj | 7 ------- .../Project/ProjectSystem.Base.csproj | 3 --- .../FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj | 2 -- .../FSharp.PropertiesPages.vbproj | 6 +----- vsintegration/src/FSharp.VS.FSI/FSHarp.VS.FSI.fsproj | 5 ----- 11 files changed, 7 insertions(+), 47 deletions(-) diff --git a/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj b/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj index a4dec8a63db..62e8f108384 100644 --- a/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj +++ b/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj @@ -39,17 +39,6 @@ $(FSharpSourcesRoot)\..\packages\Microsoft.VisualStudio.Shell.$(RoslynVSBinariesVersion).$(RoslynVSPackagesVersion)\lib\Microsoft.VisualStudio.Shell.$(RoslynVSBinariesVersion).dll - - - - - - - - - - - diff --git a/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj b/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj index 517f3062188..394c76e7fa7 100644 --- a/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj +++ b/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj @@ -567,8 +567,6 @@ $(FSharpSourcesRoot)\..\packages\Microsoft.VisualStudio.Shell.$(RoslynVSBinariesVersion).$(RoslynVSPackagesVersion)\lib\Microsoft.VisualStudio.Shell.$(RoslynVSBinariesVersion).dll - - @@ -580,9 +578,6 @@ $(FSharpSourcesRoot)\..\packages\Microsoft.VisualStudio.Shell.Design.$(RoslynVSPackagesVersion)\lib\net45\Microsoft.VisualStudio.Shell.Design.dll - - - $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Framework.dll diff --git a/vsintegration/Vsix/VisualFSharpOpenSource/Source.extension.vsixmanifest b/vsintegration/Vsix/VisualFSharpOpenSource/Source.extension.vsixmanifest index 714758ace3b..24a4f84aadf 100644 --- a/vsintegration/Vsix/VisualFSharpOpenSource/Source.extension.vsixmanifest +++ b/vsintegration/Vsix/VisualFSharpOpenSource/Source.extension.vsixmanifest @@ -59,5 +59,8 @@ + + + \ No newline at end of file diff --git a/vsintegration/Vsix/VisualFSharpOpenSource/VisualFSharpOpenSource.csproj b/vsintegration/Vsix/VisualFSharpOpenSource/VisualFSharpOpenSource.csproj index a4c64175707..5b0cf6abe64 100644 --- a/vsintegration/Vsix/VisualFSharpOpenSource/VisualFSharpOpenSource.csproj +++ b/vsintegration/Vsix/VisualFSharpOpenSource/VisualFSharpOpenSource.csproj @@ -44,7 +44,7 @@ FSharpDev true False - False + True {E6A45CDF-B408-420F-B475-74611BEFC52B} true VisualFSharpOpenSource diff --git a/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj b/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj index 44b1dc96bc2..f304c930e6f 100644 --- a/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj +++ b/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj @@ -138,13 +138,9 @@ - + - - - - diff --git a/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj b/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj index a2b22c925a7..6fdb1acdee2 100644 --- a/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj +++ b/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj @@ -77,10 +77,8 @@ - + - - diff --git a/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj b/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj index 38fcce3a4b3..ed162cda832 100644 --- a/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj +++ b/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj @@ -79,19 +79,12 @@ - - - - - - - diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectSystem.Base.csproj b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectSystem.Base.csproj index 2ee51a71c0c..ff9b10857b8 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectSystem.Base.csproj +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectSystem.Base.csproj @@ -91,9 +91,6 @@ - - - diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj b/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj index 96d1d67b423..8391a931b99 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj @@ -70,8 +70,6 @@ - - diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.PropertiesPages.vbproj b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.PropertiesPages.vbproj index 7b6c8303d54..5618881e01c 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.PropertiesPages.vbproj +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.PropertiesPages.vbproj @@ -72,7 +72,7 @@ - + @@ -87,10 +87,6 @@ $(FSharpSourcesRoot)\..\packages\Microsoft.VisualStudio.Utilities.$(RoslynVSPackagesVersion)\lib\net45\Microsoft.VisualStudio.Utilities.dll - - - - diff --git a/vsintegration/src/FSharp.VS.FSI/FSHarp.VS.FSI.fsproj b/vsintegration/src/FSharp.VS.FSI/FSHarp.VS.FSI.fsproj index ba204fc9b84..62ca43be8c0 100644 --- a/vsintegration/src/FSharp.VS.FSI/FSHarp.VS.FSI.fsproj +++ b/vsintegration/src/FSharp.VS.FSI/FSHarp.VS.FSI.fsproj @@ -69,11 +69,6 @@ - - - - -