diff --git a/.gitignore b/.gitignore index eaaccc484a7..1c0ff437d77 100644 --- a/.gitignore +++ b/.gitignore @@ -98,3 +98,7 @@ ossreadme*.txt project.lock.json Tools/ Backup/ +tests/fsharp/core/array/dont.run.peverify +tests/fsharp/core/innerpoly/dont.run.peverify +tests/fsharp/typecheck/sigs/neg94-pre.dll +times diff --git a/BuildToolsVersion.txt b/BuildToolsVersion.txt index 7a2bca562e7..f03b16e5589 100644 --- a/BuildToolsVersion.txt +++ b/BuildToolsVersion.txt @@ -1 +1 @@ -1.0.25-prerelease-00517-05 +1.0.26-prerelease-00625-01 diff --git a/DEVGUIDE.md b/DEVGUIDE.md index cb88da6805c..d5b58b32757 100644 --- a/DEVGUIDE.md +++ b/DEVGUIDE.md @@ -31,9 +31,10 @@ There are various qualifiers: build.cmd debug -- build debug instead of release build.cmd proto -- force the rebuild of the Proto bootstrap compiler in addition to other things + build.cmd protofx -- build using a .NET Framework proto (no .NET Core is used) - build.cmd coreclr -- build/tests only the coreclr version compiler (not the Visual F# IDE Tools) - build.cmd compiler -- build/tests only the compiler (not the Visual F# IDE Tools) + build.cmd net40 -- build/tests for .NET Framework version of the compiler (not the Visual F# IDE Tools or .NET Core) + build.cmd coreclr -- build/tests only the coreclr version compiler (not the Visual F# IDE Tools or .NET Framework) build.cmd vs -- build/tests the Visual F# IDE Tools build.cmd pcls -- build/tests the PCL FSharp.Core libraries @@ -44,12 +45,16 @@ There are various qualifiers: build.cmd test-smoke -- build, run smoke tests build.cmd test-coreunit -- build, run FSharp.Core tests - build.cmd test-coreclr -- build, run CoreCLR tests + build.cmd test-coreclr -- build, run .NET Core tests build.cmd test-pcls -- build, run PCL tests build.cmd test-fsharp -- build, run tests\fsharp suite build.cmd test-fsharpqa -- build, run tests\fsharpqa suite build.cmd test-vs -- build, run Visual F# IDE Tools unit tests +**Notes** +To build and test Visual F# IDE Tools, you must use [Visual Studio "vNext" (aka "Dev15")](https://www.visualstudio.com/en-us/downloads/visual-studio-next-downloads-vs.aspx). This is the one after Visual Studio 2015 (aka "Dev 14"). You must also install Visual Studio SDK (also called _Visual Studio Extensibility SDK_ on the Visual Studio installer) before building Visual F# IDE Tools. +Please ensure that the Visual Studio SDK version is matched with your current Visual Studio to ensure successful builds. For example: Visual Studio 2015 Update 1 requires Visual Studio 2015 SDK Update 1. Any installation of Visual Studio 2015 and later provides Visual Studio SDK as part of the installation of Visual Studio 2015 as feature installation. + Combinations are also allowed: build.cmd debug,compiler,notests -- build the debug compiler and run smoke tests @@ -147,8 +152,13 @@ For **Release** this corresponds to these steps, which you can run individually ### 4. [Optional] Install the Visual F# IDE Tools -**Note:** This step will install a VSIX extension into Visual Studio 15 that changes the Visual F# IDE Tools -components installed into Visual Studio 15. You can revert this step by disabling or uninstalling the addin. +At time of writing, the Visual F# IDE Tools can only be installed into Visual Studio "Next" (aka "Dev15") releases. +The new builds of the Visual F# IDE Tools can no longer be installed into Visual Studio 2015. + +You can install VIsual Studio "Next (aka "Dev15") from https://www.visualstudio.com/en-us/downloads/visual-studio-next-downloads-vs.aspx. + +**Note:** This step will install a VSIX extension into Visual Studio "Next" (aka "Dev15") that changes the Visual F# IDE Tools +components installed in that VS installation. You can revert this step by disabling or uninstalling the addin. For **Debug**: diff --git a/UpgradeLog.htm b/UpgradeLog.htm new file mode 100644 index 00000000000..513006fe059 Binary files /dev/null and b/UpgradeLog.htm differ diff --git a/VisualFSharp.sln b/VisualFSharp.sln index 002dbd63f6b..0dd516a06bd 100644 --- a/VisualFSharp.sln +++ b/VisualFSharp.sln @@ -1,7 +1,9 @@  Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.25302.0 # Visual Studio 14 -VisualStudioVersion = 14.0.24720.0 +VisualStudioVersion = 14.0.25123.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 @@ -100,8 +102,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetCoreProject", "vsintegra EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PortableLibraryProject", "vsintegration\ProjectTemplates\PortableLibraryProject\PortableLibraryProject.csproj", "{DB374A0C-7560-479F-9B21-D37C81F7624F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SilverlightProject", "vsintegration\ProjectTemplates\SilverlightProject\SilverlightProject.csproj", "{15A57828-F9F5-4FB4-8E1E-AE7622A10F70}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TutorialProject", "vsintegration\ProjectTemplates\TutorialProject\TutorialProject.csproj", "{2FACEE44-48BD-40B5-A2EE-B54A0C9BB7C4}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ItemTemplates", "ItemTemplates", "{F6DAEE9A-8BE1-4C4A-BC83-09215517C7DA}" @@ -118,17 +118,20 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextFile", "vsintegration\I EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XMLFile", "vsintegration\ItemTemplates\XMLFile\XMLFile.csproj", "{1FB1DD07-06AA-45B4-B5AC-20FF5BEE98B6}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisualFSharpVsix", "vsintegration\VisualFSharpVsix\VisualFSharpVsix.csproj", "{E7EC4A3E-9D57-45B8-83F5-EDDFD6CEF090}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{A83A9A70-8C33-4253-BF6F-3AADB509F21C}" ProjectSection(SolutionItems) = preProject Performance1.psess = Performance1.psess EndProjectSection EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Vsix", "Vsix", "{141F6C23-E1B1-4D89-9F10-F0B8AD58E71F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisualFSharpDesktop", "vsintegration\Vsix\VisualFSharpDesktop\VisualFSharpDesktop.csproj", "{E7EC4A3E-9D57-45B8-83F5-EDDFD6CEF090}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisualFSharpFull", "vsintegration\Vsix\VisualFSharpFull\VisualFSharpFull.csproj", "{59ADCE46-9740-4079-834D-9A03A3494EBC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisualFSharpWeb", "vsintegration\Vsix\VisualFSharpWeb\VisualFSharpWeb.csproj", "{58730C8B-16F5-4956-9291-BB68E17C9142}" +EndProject Global - GlobalSection(Performance) = preSolution - HasPerformanceSessions = true - EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|x86 = Debug|x86 @@ -605,18 +608,6 @@ Global {DB374A0C-7560-479F-9B21-D37C81F7624F}.Release|Any CPU.Build.0 = Release|Any CPU {DB374A0C-7560-479F-9B21-D37C81F7624F}.Release|x86.ActiveCfg = Release|Any CPU {DB374A0C-7560-479F-9B21-D37C81F7624F}.Release|x86.Build.0 = Release|Any CPU - {15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.Debug|Any CPU.Build.0 = Debug|Any CPU - {15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.Debug|x86.ActiveCfg = Debug|Any CPU - {15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.Debug|x86.Build.0 = Debug|Any CPU - {15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.Proto|Any CPU.ActiveCfg = Proto|Any CPU - {15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.Proto|Any CPU.Build.0 = Proto|Any CPU - {15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.Proto|x86.ActiveCfg = Proto|Any CPU - {15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.Proto|x86.Build.0 = Proto|Any CPU - {15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.Release|Any CPU.ActiveCfg = Release|Any CPU - {15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.Release|Any CPU.Build.0 = Release|Any CPU - {15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.Release|x86.ActiveCfg = Release|Any CPU - {15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.Release|x86.Build.0 = Release|Any CPU {2FACEE44-48BD-40B5-A2EE-B54A0C9BB7C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2FACEE44-48BD-40B5-A2EE-B54A0C9BB7C4}.Debug|Any CPU.Build.0 = Debug|Any CPU {2FACEE44-48BD-40B5-A2EE-B54A0C9BB7C4}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -713,6 +704,30 @@ Global {E7EC4A3E-9D57-45B8-83F5-EDDFD6CEF090}.Release|Any CPU.Build.0 = Release|Any CPU {E7EC4A3E-9D57-45B8-83F5-EDDFD6CEF090}.Release|x86.ActiveCfg = Release|Any CPU {E7EC4A3E-9D57-45B8-83F5-EDDFD6CEF090}.Release|x86.Build.0 = Release|Any CPU + {59ADCE46-9740-4079-834D-9A03A3494EBC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {59ADCE46-9740-4079-834D-9A03A3494EBC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {59ADCE46-9740-4079-834D-9A03A3494EBC}.Debug|x86.ActiveCfg = Debug|Any CPU + {59ADCE46-9740-4079-834D-9A03A3494EBC}.Debug|x86.Build.0 = Debug|Any CPU + {59ADCE46-9740-4079-834D-9A03A3494EBC}.Proto|Any CPU.ActiveCfg = Proto|Any CPU + {59ADCE46-9740-4079-834D-9A03A3494EBC}.Proto|Any CPU.Build.0 = Proto|Any CPU + {59ADCE46-9740-4079-834D-9A03A3494EBC}.Proto|x86.ActiveCfg = Proto|Any CPU + {59ADCE46-9740-4079-834D-9A03A3494EBC}.Proto|x86.Build.0 = Proto|Any CPU + {59ADCE46-9740-4079-834D-9A03A3494EBC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {59ADCE46-9740-4079-834D-9A03A3494EBC}.Release|Any CPU.Build.0 = Release|Any CPU + {59ADCE46-9740-4079-834D-9A03A3494EBC}.Release|x86.ActiveCfg = Release|Any CPU + {59ADCE46-9740-4079-834D-9A03A3494EBC}.Release|x86.Build.0 = Release|Any CPU + {58730C8B-16F5-4956-9291-BB68E17C9142}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {58730C8B-16F5-4956-9291-BB68E17C9142}.Debug|Any CPU.Build.0 = Debug|Any CPU + {58730C8B-16F5-4956-9291-BB68E17C9142}.Debug|x86.ActiveCfg = Debug|Any CPU + {58730C8B-16F5-4956-9291-BB68E17C9142}.Debug|x86.Build.0 = Debug|Any CPU + {58730C8B-16F5-4956-9291-BB68E17C9142}.Proto|Any CPU.ActiveCfg = Proto|Any CPU + {58730C8B-16F5-4956-9291-BB68E17C9142}.Proto|Any CPU.Build.0 = Proto|Any CPU + {58730C8B-16F5-4956-9291-BB68E17C9142}.Proto|x86.ActiveCfg = Proto|Any CPU + {58730C8B-16F5-4956-9291-BB68E17C9142}.Proto|x86.Build.0 = Proto|Any CPU + {58730C8B-16F5-4956-9291-BB68E17C9142}.Release|Any CPU.ActiveCfg = Release|Any CPU + {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 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -760,7 +775,6 @@ Global {D9D95330-3626-4199-B7AF-17B8E4AF6D87} = {C9B1D3F5-4971-4F04-9C26-37E3AC809AB4} {5B739CF3-1116-4EB4-B598-6C16BEA81CE5} = {C9B1D3F5-4971-4F04-9C26-37E3AC809AB4} {DB374A0C-7560-479F-9B21-D37C81F7624F} = {C9B1D3F5-4971-4F04-9C26-37E3AC809AB4} - {15A57828-F9F5-4FB4-8E1E-AE7622A10F70} = {C9B1D3F5-4971-4F04-9C26-37E3AC809AB4} {2FACEE44-48BD-40B5-A2EE-B54A0C9BB7C4} = {C9B1D3F5-4971-4F04-9C26-37E3AC809AB4} {F6DAEE9A-8BE1-4C4A-BC83-09215517C7DA} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} {6BA13AA4-C25F-480F-856B-8E8000299A72} = {F6DAEE9A-8BE1-4C4A-BC83-09215517C7DA} @@ -769,6 +783,9 @@ Global {E3FDD4AC-46B6-4B9F-B672-317D1202CC50} = {F6DAEE9A-8BE1-4C4A-BC83-09215517C7DA} {D11FC318-8F5D-4C8C-9287-AB40A016D13C} = {F6DAEE9A-8BE1-4C4A-BC83-09215517C7DA} {1FB1DD07-06AA-45B4-B5AC-20FF5BEE98B6} = {F6DAEE9A-8BE1-4C4A-BC83-09215517C7DA} - {E7EC4A3E-9D57-45B8-83F5-EDDFD6CEF090} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} + {141F6C23-E1B1-4D89-9F10-F0B8AD58E71F} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} + {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} EndGlobalSection EndGlobal diff --git a/appveyor.yml b/appveyor.yml index 87ae05705b1..a2a47d401a3 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,5 +1,5 @@ os: Visual Studio 2015 - + environment: matrix: - BUILD_PROFILE: ci_part1 diff --git a/build-everything.proj b/build-everything.proj index cd06e0c802a..7818834e7ed 100644 --- a/build-everything.proj +++ b/build-everything.proj @@ -40,34 +40,34 @@ - + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + diff --git a/build.cmd b/build.cmd index 92765e2554f..8499758dce8 100644 --- a/build.cmd +++ b/build.cmd @@ -13,19 +13,26 @@ echo Build and run a subset of test suites echo. echo Usage: echo. -echo build.cmd ^ +echo build.cmd ^ +echo ^ echo. -echo No arguments default to 'build' +echo No arguments default to 'build' echo. echo To specify multiple values, separate strings by comma echo. +echo.This builds the net40 build of the compiler without running tests +echo. +echo. build net40 notests +echo. echo The example below run pcls, vs and qa: echo. -echo build.cmd pcls,vs,debug +echo build.cmd pcls,vs,debug exit /b 1 :ARGUMENTS_OK +set BUILD_PROTO_WITH_CORECLR_LKG=1 + set BUILD_PROTO=0 set BUILD_NET40=1 set BUILD_CORECLR=0 @@ -34,6 +41,7 @@ set BUILD_VS=0 set BUILD_CONFIG=release set BUILD_CONFIG_LOWERCASE=release set BUILD_DIAG= +set BUILD_PUBLICSIGN=0 set TEST_COMPILERUNIT=0 set TEST_NET40_COREUNIT=0 @@ -100,6 +108,11 @@ if /i '%ARG%' == 'all' ( set SKIP_EXPENSIVE_TESTS=0 ) +if /i '%ARG%' == 'protofx' ( + set BUILD_PROTO_WITH_CORECLR_LKG=0 + set BUILD_PROTO=1 +) + if /i '%ARG%' == 'microbuild' ( set BUILD_PROTO=1 set BUILD_NET40=1 @@ -141,7 +154,8 @@ if /i '%ARG%' == 'ci' ( set CONF_FSHARPQA_SUITE=Smoke ) -REM These divide 'ci' into three chunks which can be done in parallel + +REM These divide 'ci' into two chunks which can be done in parallel if /i '%ARG%' == 'ci_part1' ( set BUILD_PROTO=1 set SKIP_EXPENSIVE_TESTS=1 @@ -247,6 +261,10 @@ if /i '%ARG%' == 'test-fsharp' ( set TEST_FSHARP_SUITE=1 ) +if /i '%ARG%' == 'publicsign' ( + set BUILD_PUBLICSIGN=1 +) + goto :EOF :MAIN @@ -256,6 +274,7 @@ REM after this point, ARG variable should not be used, use only BUILD_* or TEST_ echo Build/Tests configuration: echo. echo BUILD_PROTO=%BUILD_PROTO% +echo BUILD_PROTO_WITH_CORECLR_LKG=%BUILD_PROTO_WITH_CORECLR_LKG% echo BUILD_NET40=%BUILD_NET40% echo BUILD_CORECLR=%BUILD_CORECLR% echo BUILD_PORTABLE=%BUILD_PORTABLE% @@ -263,6 +282,7 @@ echo BUILD_VS=%BUILD_VS% echo BUILD_SETUP=%BUILD_SETUP% echo BUILD_CONFIG=%BUILD_CONFIG% echo BUILD_CONFIG_LOWERCASE=%BUILD_CONFIG_LOWERCASE% +echo BUILD_PUBLICSIGN=%BUILD_PUBLICSIGN% echo. echo TEST_COMPILERUNIT=%TEST_COMPILERUNIT% echo TEST_NET40_COREUNIT=%TEST_NET40_COREUNIT% @@ -285,13 +305,17 @@ call src\update.cmd signonly :: Check prerequisites if not '%VisualStudioVersion%' == '' goto vsversionset if exist "%VS150COMNTOOLS%..\ide\devenv.exe" set VisualStudioVersion=15.0 -if exist "%ProgramFiles(x86)%\Microsoft Visual Studio 15.0\common7\ide\devenv.exe" set VisualStudioVersion=15.0 -if exist "%ProgramFiles%\Microsoft Visual Studio 15.0\common7\ide\devenv.exe" set VisualStudioVersion=15.0 if not '%VisualStudioVersion%' == '' goto vsversionset + +if not '%VisualStudioVersion%' == '' goto vsversionset +if exist "%VS150COMNTOOLS%..\..\ide\devenv.exe" set VisualStudioVersion=15.0 +if not '%VisualStudioVersion%' == '' goto vsversionset + if exist "%VS140COMNTOOLS%..\ide\devenv.exe" set VisualStudioVersion=14.0 if exist "%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\common7\ide\devenv.exe" set VisualStudioVersion=14.0 if exist "%ProgramFiles%\Microsoft Visual Studio 14.0\common7\ide\devenv.exe" set VisualStudioVersion=14.0 if not '%VisualStudioVersion%' == '' goto vsversionset + if exist "%VS120COMNTOOLS%..\ide\devenv.exe" set VisualStudioVersion=12.0 if exist "%ProgramFiles(x86)%\Microsoft Visual Studio 12.0\common7\ide\devenv.exe" set VisualStudioVersion=12.0 if exist "%ProgramFiles%\Microsoft Visual Studio 12.0\common7\ide\devenv.exe" set VisualStudioVersion=12.0 @@ -299,9 +323,22 @@ if exist "%ProgramFiles%\Microsoft Visual Studio 12.0\common7\ide\devenv.exe" se :vsversionset if '%VisualStudioVersion%' == '' echo Error: Could not find an installation of Visual Studio && goto :failure -if exist "%ProgramFiles(x86)%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" set _msbuildexe="%ProgramFiles(x86)%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" -if exist "%ProgramFiles%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" set _msbuildexe="%ProgramFiles%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" -if not exist %_msbuildexe% echo Error: Could not find MSBuild.exe. && goto :failure +if exist "%VS150COMNTOOLS%..\..\MSBuild\15.0\Bin\MSBuild.exe" ( + set _msbuildexe="%VS150COMNTOOLS%..\..\MSBuild\15.0\Bin\MSBuild.exe" + goto :havemsbuild +) +if exist "%ProgramFiles(x86)%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" ( + set _msbuildexe="%ProgramFiles(x86)%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" + goto :havemsbuild +) +if exist "%ProgramFiles%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" ( + set _msbuildexe="%ProgramFiles%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" + goto :havemsbuild +) +echo Error: Could not find MSBuild.exe. && goto :failure +goto :eof + +:havemsbuild set _nrswitch=/nr:false rem uncomment to use coreclr msbuild not ready yet!!!! @@ -326,34 +363,29 @@ 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' ( -:: Restore the Tools directory -call %~dp0init-tools.cmd + :: Restore the Tools directory + call %~dp0init-tools.cmd +) set _dotnetexe=%~dp0Tools\dotnetcli\dotnet.exe -pushd .\lkg & %_dotnetexe% restore &popd -@if ERRORLEVEL 1 echo Error: dotnet restore failed && goto :failure -pushd .\lkg & %_dotnetexe% publish project.json &popd -@if ERRORLEVEL 1 echo Error: dotnet publish failed && goto :failure +if '%BUILD_PROTO_WITH_CORECLR_LKG%' == '1' ( + + :: Restore the Tools directory + call %~dp0init-tools.cmd -rem rename fsc and coreconsole to allow fsc.exe to to start compiler -pushd .\lkg\bin\debug\dnxcore50\win7-x64\publish -fc fsc.exe corehost.exe >nul -@if ERRORLEVEL 1 ( - copy fsc.exe fsc.dll - copy corehost.exe fsc.exe + pushd .\lkg & %_dotnetexe% restore &popd + @if ERRORLEVEL 1 echo Error: dotnet restore failed && goto :failure + + pushd .\lkg & %_dotnetexe% publish project.json -o %~dp0\Tools\lkg -r win7-x64 &popd + @if ERRORLEVEL 1 echo Error: dotnet publish failed && goto :failure ) -popd -rem rename fsc and coreconsole to allow fsc.exe to to start compiler -pushd .\lkg\bin\debug\dnxcore50\win7-x64\publish -fc fsi.exe corehost.exe >nul -@if ERRORLEVEL 1 ( - copy fsi.exe fsi.dll - copy corehost.exe fsi.exe +if '%BUILD_PROTO_WITH_CORECLR_LKG%' == '0' ( + rmdir /s /q %~dp0\Tools\lkg ) -popd rem copy targestfile into tools directory ... temporary fix until packaging complete. copy src\fsharp\FSharp.Build\Microsoft.FSharp.targets tools\Microsoft.FSharp.targets @@ -371,8 +403,8 @@ if '%BUILD_PROTO%' == '1' ( @if ERRORLEVEL 1 echo Error: NGen of proto failed && goto :failure ) -%_msbuildexe% %msbuildflags% build-everything.proj /p:Configuration=%BUILD_CONFIG% %BUILD_DIAG% -@if ERRORLEVEL 1 echo Error: '%_msbuildexe% %msbuildflags% build-everything.proj /p:Configuration=%BUILD_CONFIG% %BUILD_DIAG%' failed && goto :failure +%_msbuildexe% %msbuildflags% build-everything.proj /p:Configuration=%BUILD_CONFIG% %BUILD_DIAG% /p:SIGNTYPE=%BUILD_PUBLICSIGN% +@if ERRORLEVEL 1 echo Error: '%_msbuildexe% %msbuildflags% build-everything.proj /p:Configuration=%BUILD_CONFIG% %BUILD_DIAG% /p:SIGNTYPE=%BUILD_PUBLICSIGN%' failed && goto :failure @echo on call src\update.cmd %BUILD_CONFIG_LOWERCASE% -ngen 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 1c3381272a8..b0f401edb50 100644 Binary files a/lkg/FSharp-14.0.23413.0/bin/FSharp.Build.dll and b/lkg/FSharp-14.0.23413.0/bin/FSharp.Build.dll differ diff --git a/lkg/FSharp-14.0.23413.0/bin/FSharp.Compiler.Interactive.Settings.dll b/lkg/FSharp-14.0.23413.0/bin/FSharp.Compiler.Interactive.Settings.dll index 6df56160452..4506394ae73 100644 Binary files a/lkg/FSharp-14.0.23413.0/bin/FSharp.Compiler.Interactive.Settings.dll and b/lkg/FSharp-14.0.23413.0/bin/FSharp.Compiler.Interactive.Settings.dll differ diff --git a/lkg/FSharp-14.0.23413.0/bin/FSharp.Compiler.Server.Shared.dll b/lkg/FSharp-14.0.23413.0/bin/FSharp.Compiler.Server.Shared.dll index e3e31edd830..150cefee278 100644 Binary files a/lkg/FSharp-14.0.23413.0/bin/FSharp.Compiler.Server.Shared.dll and b/lkg/FSharp-14.0.23413.0/bin/FSharp.Compiler.Server.Shared.dll differ diff --git a/lkg/FSharp-14.0.23413.0/bin/FSharp.Compiler.dll b/lkg/FSharp-14.0.23413.0/bin/FSharp.Compiler.dll index 13cf1c8bee2..a86e6288566 100644 Binary files a/lkg/FSharp-14.0.23413.0/bin/FSharp.Compiler.dll and b/lkg/FSharp-14.0.23413.0/bin/FSharp.Compiler.dll differ diff --git a/lkg/FSharp-14.0.23413.0/bin/FSharp.Core.dll b/lkg/FSharp-14.0.23413.0/bin/FSharp.Core.dll index d2ede9e9789..dd27e20384b 100644 Binary files a/lkg/FSharp-14.0.23413.0/bin/FSharp.Core.dll and b/lkg/FSharp-14.0.23413.0/bin/FSharp.Core.dll differ diff --git a/lkg/FSharp-14.0.23413.0/bin/FSharp.Core.optdata b/lkg/FSharp-14.0.23413.0/bin/FSharp.Core.optdata index 896507e6b38..b60370dde91 100644 Binary files a/lkg/FSharp-14.0.23413.0/bin/FSharp.Core.optdata and b/lkg/FSharp-14.0.23413.0/bin/FSharp.Core.optdata differ diff --git a/lkg/FSharp-14.0.23413.0/bin/FSharp.Core.sigdata b/lkg/FSharp-14.0.23413.0/bin/FSharp.Core.sigdata index a383f91dd43..f60546362e8 100644 Binary files a/lkg/FSharp-14.0.23413.0/bin/FSharp.Core.sigdata and b/lkg/FSharp-14.0.23413.0/bin/FSharp.Core.sigdata differ diff --git a/lkg/FSharp-14.0.23413.0/bin/FsLex.exe.config b/lkg/FSharp-14.0.23413.0/bin/FsLex.exe.config index 18a2d18726c..40ebedd13f1 100644 --- a/lkg/FSharp-14.0.23413.0/bin/FsLex.exe.config +++ b/lkg/FSharp-14.0.23413.0/bin/FsLex.exe.config @@ -6,10 +6,10 @@ - + - - + + diff --git a/lkg/FSharp-14.0.23413.0/bin/FsSrgen.exe.config b/lkg/FSharp-14.0.23413.0/bin/FsSrgen.exe.config new file mode 100644 index 00000000000..40ebedd13f1 --- /dev/null +++ b/lkg/FSharp-14.0.23413.0/bin/FsSrgen.exe.config @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/lkg/FSharp-14.0.23413.0/bin/FsYacc.exe.config b/lkg/FSharp-14.0.23413.0/bin/FsYacc.exe.config index 18a2d18726c..40ebedd13f1 100644 --- a/lkg/FSharp-14.0.23413.0/bin/FsYacc.exe.config +++ b/lkg/FSharp-14.0.23413.0/bin/FsYacc.exe.config @@ -6,10 +6,10 @@ - + - - + + diff --git a/lkg/FSharp-14.0.23413.0/bin/Fsc.exe b/lkg/FSharp-14.0.23413.0/bin/Fsc.exe index 39581542426..34360e6e09b 100644 Binary files a/lkg/FSharp-14.0.23413.0/bin/Fsc.exe and b/lkg/FSharp-14.0.23413.0/bin/Fsc.exe differ diff --git a/lkg/FSharp-14.0.23413.0/bin/Fsc.exe.config b/lkg/FSharp-14.0.23413.0/bin/Fsc.exe.config index a8879baed9d..eeda9de56cc 100644 --- a/lkg/FSharp-14.0.23413.0/bin/Fsc.exe.config +++ b/lkg/FSharp-14.0.23413.0/bin/Fsc.exe.config @@ -1,8 +1,8 @@ - + + oldVersion="2.0.0.0-4.4.1.0" + newVersion="4.4.1.0"/> diff --git a/lkg/FSharp-14.0.23413.0/bin/Fsi.exe b/lkg/FSharp-14.0.23413.0/bin/Fsi.exe index ac7a526773f..a2b14af7502 100644 Binary files a/lkg/FSharp-14.0.23413.0/bin/Fsi.exe and b/lkg/FSharp-14.0.23413.0/bin/Fsi.exe differ diff --git a/lkg/FSharp-14.0.23413.0/bin/Fsi.exe.config b/lkg/FSharp-14.0.23413.0/bin/Fsi.exe.config index 8735c678c34..e04b0a7caec 100644 --- a/lkg/FSharp-14.0.23413.0/bin/Fsi.exe.config +++ b/lkg/FSharp-14.0.23413.0/bin/Fsi.exe.config @@ -9,8 +9,8 @@ publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> + oldVersion="2.0.0.0-4.4.1.0" + newVersion="4.4.1.0"/> diff --git a/lkg/FSharp-14.0.23413.0/bin/FsiAnyCPU.exe b/lkg/FSharp-14.0.23413.0/bin/FsiAnyCPU.exe index 8c74377bdcb..91b5da37cbc 100644 Binary files a/lkg/FSharp-14.0.23413.0/bin/FsiAnyCPU.exe and b/lkg/FSharp-14.0.23413.0/bin/FsiAnyCPU.exe differ diff --git a/lkg/FSharp-14.0.23413.0/bin/FsiAnyCPU.exe.config b/lkg/FSharp-14.0.23413.0/bin/FsiAnyCPU.exe.config index 8735c678c34..e04b0a7caec 100644 --- a/lkg/FSharp-14.0.23413.0/bin/FsiAnyCPU.exe.config +++ b/lkg/FSharp-14.0.23413.0/bin/FsiAnyCPU.exe.config @@ -9,8 +9,8 @@ publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> + oldVersion="2.0.0.0-4.4.1.0" + newVersion="4.4.1.0"/> diff --git a/lkg/FSharp-14.0.23413.0/bin/Microsoft.DiaSymReader.PortablePdb.dll b/lkg/FSharp-14.0.23413.0/bin/Microsoft.DiaSymReader.PortablePdb.dll new file mode 100644 index 00000000000..d8feaf0ec3f Binary files /dev/null and b/lkg/FSharp-14.0.23413.0/bin/Microsoft.DiaSymReader.PortablePdb.dll differ diff --git a/lkg/FSharp-14.0.23413.0/bin/Microsoft.DiaSymReader.dll b/lkg/FSharp-14.0.23413.0/bin/Microsoft.DiaSymReader.dll new file mode 100644 index 00000000000..a6bce6fc38e Binary files /dev/null and b/lkg/FSharp-14.0.23413.0/bin/Microsoft.DiaSymReader.dll differ diff --git a/lkg/FSharp-14.0.23413.0/bin/Microsoft.FSharp.targets b/lkg/FSharp-14.0.23413.0/bin/Microsoft.FSharp.targets index 8d8aee9c5f9..59397eb010b 100644 --- a/lkg/FSharp-14.0.23413.0/bin/Microsoft.FSharp.targets +++ b/lkg/FSharp-14.0.23413.0/bin/Microsoft.FSharp.targets @@ -1,3 +1,5 @@ + + @@ -189,7 +189,7 @@ Copyright (C) Microsoft Corporation. All rights reserved. SubsystemVersion="$(SubsystemVersion)" HighEntropyVA="$(HighEntropyVA)" TargetProfile="$(TargetProfile)" - SqmSessionGuid="$(SqmSessionGuid)" + DotnetFscCompilerPath="$(DotnetFscCompilerPath)" /> @@ -201,14 +201,15 @@ Copyright (C) Microsoft Corporation. All rights reserved. - + ============================================================ + --> @@ -240,3 +241,4 @@ Copyright (C) Microsoft Corporation. All rights reserved. + diff --git a/lkg/FSharp-14.0.23413.0/bin/Microsoft.Portable.FSharp.targets b/lkg/FSharp-14.0.23413.0/bin/Microsoft.Portable.FSharp.targets index fae1d248294..4eb7e9ee40a 100644 --- a/lkg/FSharp-14.0.23413.0/bin/Microsoft.Portable.FSharp.targets +++ b/lkg/FSharp-14.0.23413.0/bin/Microsoft.Portable.FSharp.targets @@ -1,19 +1,10 @@ - + - + + diff --git a/lkg/FSharp-14.0.23413.0/bin/System.Reflection.Metadata.dll b/lkg/FSharp-14.0.23413.0/bin/System.Reflection.Metadata.dll new file mode 100644 index 00000000000..67c3785946d Binary files /dev/null and b/lkg/FSharp-14.0.23413.0/bin/System.Reflection.Metadata.dll differ diff --git a/lkg/FSharp-14.0.23413.0/bin/System.ValueTuple.dll b/lkg/FSharp-14.0.23413.0/bin/System.ValueTuple.dll new file mode 100644 index 00000000000..9b6bbf8db5f Binary files /dev/null and b/lkg/FSharp-14.0.23413.0/bin/System.ValueTuple.dll differ diff --git a/lkg/cg.bat b/lkg/cg.bat new file mode 100644 index 00000000000..b8460fc3d94 --- /dev/null +++ b/lkg/cg.bat @@ -0,0 +1,26 @@ +@echo off + +rem I need to figure out how to do crossgen again, since it's changed. +rem make sure we have a codegen +rem md %~dp0..\tools\crossgen +rem copy %~dp0..\packages\runtime.win7-x64.Microsoft.NETCore.Runtime.CoreCLR\1.0.2\tools\crossgen.exe %~dp0..\tools\dotnetcli\crossgen.exe +rem copy %~dp0..\packages\runtime.win7-x64.Microsoft.NETCore.Runtime.CoreCLR\1.0.2\runtimes\win7-x64\lib\netstandard1.0\*.* %~dp0..\tools\dotnetcli\*.* + +pushd %~dp0..\tools\lkg + call :crossgen /in fsharp.core.dll /Trusted_Platform_Assemblies .\..\System.Runtime.dll;.\..\System.Threading.Tasks.dll;.\..\System.Linq.dll;.\..\System.Reflection.dll;.\..\System.Linq.Expressions.dll;.\..\System.Reflection.TypeExtensions.dll;.\..\System.Net.Requests.dll;.\..\System.IO.dll;.\..\System.Reflection.Primitives.dll;.\..\System.Globalization.dll;.\..\System.Collections.dll;.\..\System.Diagnostics.Debug.dll;.\..\System.Resources.ResourceManager.dll;.\..\System.Runtime.Extensions.dll;.\..\System.Threading.dll;.\..\System.Threading.ThreadPool.dll;.\..\System.Console.dll;.\..\System.Reflection.Extensions.dll;.\..\System.Linq.Queryable.dll;.\..\System.Collections.Concurrent.dll;.\..\System.Threading.Thread.dll;.\..\System.Threading.Timer.dll;.\..\System.Text.RegularExpressions.dll;.\..\System.Text.Encoding.dll;.\..\System.Runtime.Numerics.dll;.\..\System.Threading.Tasks.Parallel.dll; + call :crossgen /in fsharp.compiler.dll /Trusted_Platform_Assemblies .\..\System.Runtime.dll;.\..\FSharp.Core.dll;.\..\System.Collections.dll;.\..\System.IO.dll;.\..\System.Reflection.dll;.\..\System.Runtime.Numerics.dll;.\..\System.Reflection.Primitives.dll;.\..\System.Reflection.Emit.dll;.\..\System.Reflection.Emit.ILGeneration.dll;.\..\System.Collections.Immutable.dll;.\..\System.Reflection.Metadata.dll;.\..\System.Security.Cryptography.Algorithms.dll;.\..\System.Threading.Tasks.dll;.\..\System.Threading.dll;.\..\System.Resources.ResourceManager.dll;.\..\System.Globalization.dll;.\..\System.Diagnostics.Debug.dll;.\..\System.Reflection.TypeExtensions.dll;.\..\System.Console.dll;.\..\System.Runtime.Extensions.dll;.\..\System.Text.Encoding.dll;.\..\System.Threading.Thread.dll;.\..\System.IO.FileSystem.dll;.\..\System.IO.FileSystem.Primitives.dll;.\..\System.AppContext.dll;.\..\System.Diagnostics.Process.dll;.\..\System.Runtime.Loader.dll;.\..\System.Reflection.Extensions.dll;.\..\System.Collections.Concurrent.dll;.\..\System.Text.Encoding.Extensions.dll;.\..\System.Security.Cryptography.Primitives.dll;.\..\System.Runtime.InteropServices.dll;.\..\System.Threading.ThreadPool.dll;.\..\System.Text.RegularExpressions.dll;.\..\System.Linq.dll; + call :crossgen /in fsc.dll /Trusted_Platform_Assemblies .\..\System.Runtime.dll;.\..\FSharp.Core.dll;.\..\FSharp.Compiler.dll;.\..\System.Console.dll; + call :crossgen /in FSharp.Compiler.Interactive.Settings.dll /Trusted_Platform_Assemblies .\..\System.Runtime.dll;.\..\FSharp.Core.dll;.\..\System.Threading.dll;.\..\System.Reflection.Primitives.dll;.\..\System.Globalization.dll;.\..\System.Reflection.dll;.\..\System.Resources.ResourceManager.dll;.\..\System.Diagnostics.Debug.dll;.\..\System.Reflection.TypeExtensions.dll;.\..\System.Threading.Thread.dll;.\..\System.Runtime.Extensions.dll;.\..\System.Runtime.Loader.dll;.\..\System.Reflection.Extensions.dll; + call :crossgen /in fsi.dll /Trusted_Platform_Assemblies .\..\System.Runtime.dll;.\..\FSharp.Core.dll;.\..\FSharp.Compiler.dll;.\..\System.Console.dll;.\..\System.Reflection.dll;.\..\System.Collections.dll;.\..\System.Reflection.Primitives.dll;.\..\System.Globalization.dll;.\..\System.Resources.ResourceManager.dll;.\..\System.Diagnostics.Debug.dll;.\..\System.Reflection.TypeExtensions.dll;.\..\System.Runtime.Extensions.dll;.\..\System.IO.dll;.\..\System.Threading.Thread.dll;.\..\FSharp.Compiler.Interactive.Settings.dll;.\..\System.Diagnostics.Process.dll;.\..\System.Reflection.Emit.dll;.\..\System.Reflection.Emit.ILGeneration.dll;.\..\System.Text.Encoding.dll;.\..\System.Threading.dll;.\..\System.IO.FileSystem.dll;.\..\System.AppContext.dll;.\..\System.Runtime.Loader.dll;.\..\System.Reflection.Extensions.dll; +popd +goto :eof + +:crossgen +@echo off +"%~dp0..\tools\dotnetcli\crossgen" %* >%2.out +if errorlevel 1 ( + set errorreply=%errorlevel% + type %1.out + exit /b %errorreply% +) +goto :eof \ No newline at end of file diff --git a/lkg/project.json b/lkg/project.json index 0cdec322199..1d33c32fd78 100644 --- a/lkg/project.json +++ b/lkg/project.json @@ -1,6 +1,10 @@ + { "dependencies": { - "Microsoft.FSharp.Compiler.Host.netcore": "1.0.0-alpha-160406", + "Microsoft.FSharp.Compiler.Host.netcore": "1.0.0-alpha-160807", + "Microsoft.NETCore.Runtime.CoreCLR": "1.0.2", + "Microsoft.NETCore.DotNetHostPolicy": "1.0.1", + "Microsoft.NETCore.DotNetHost": "1.0.1" }, "runtimes": { "win7-x86": { }, @@ -9,7 +13,7 @@ "ubuntu.14.04-x64": { } }, "frameworks": { - "dnxcore50": { + "netstandard1.6": { "imports": "portable-net45+win8" } } diff --git a/packages.config b/packages.config index f9559ed7b88..17afb4be70c 100644 --- a/packages.config +++ b/packages.config @@ -16,4 +16,6 @@ + + diff --git a/setup/FSharp.SDK/Common.Wix.Properties.wxs b/setup/FSharp.SDK/Common.Wix.Properties.wxs index 65166a349dd..6f947532403 100644 --- a/setup/FSharp.SDK/Common.Wix.Properties.wxs +++ b/setup/FSharp.SDK/Common.Wix.Properties.wxs @@ -2,12 +2,6 @@ - - - - - - @@ -18,64 +12,64 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -86,12 +80,14 @@ - + + + - + diff --git a/setup/FSharp.SDK/FSharp.SDK.wixproj b/setup/FSharp.SDK/FSharp.SDK.wixproj index 668e4592800..3814288bc8c 100644 --- a/setup/FSharp.SDK/FSharp.SDK.wixproj +++ b/setup/FSharp.SDK/FSharp.SDK.wixproj @@ -10,7 +10,7 @@ - FSharp.SDK + Microsoft.FSharp.SDK da0da41f-0e00-4598-8eee-b29d31b0ca04 Package net @@ -21,11 +21,14 @@ - $(DefineConstants);Lang=$(Lang) + $(DefineConstants);LocaleCode=$(LocaleCode) + $(DefineConstants);LocaleId=$(LocaleId) + $(DefineConstants);LocaleRegion=$(LocaleRegion) + $(DefineConstants);IsLangPack=$(IsLangPack) + $(DefineConstants);BinariesDir=$(BinariesDir) $(DefineConstants);FSharpTreeRoot=$(FSharpTreeRoot) - $(DefineConstants);FSharpCoreRedistDir=$(FSharpCoreRedistDir) - $(DefineConstants);FSharpTypeProvidersRedistDir=$(FSharpTypeProvidersRedistDir) + $(DefineConstants);NugetPackagesDir=$(NugetPackagesDir) @@ -43,10 +46,11 @@ - - - - + + + + + @@ -58,8 +62,11 @@ - - + + + + + @@ -67,6 +74,6 @@ - + \ No newline at end of file diff --git a/setup/FSharp.SDK/FSharp.SDK.wxs b/setup/FSharp.SDK/FSharp.SDK.wxs index 4967656f0bf..ca798e15ff6 100644 --- a/setup/FSharp.SDK/FSharp.SDK.wxs +++ b/setup/FSharp.SDK/FSharp.SDK.wxs @@ -6,37 +6,36 @@ - + - + - - - - - - - + + + + + - - + + + + + \ No newline at end of file diff --git a/setup/FSharp.SDK/component-groups/Compiler_LangPack.wxs b/setup/FSharp.SDK/component-groups/Compiler_LangPack.wxs new file mode 100644 index 00000000000..82e467a8dc4 --- /dev/null +++ b/setup/FSharp.SDK/component-groups/Compiler_LangPack.wxs @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/setup/FSharp.SDK/component-groups/Compiler_OtherResources.wxs b/setup/FSharp.SDK/component-groups/Compiler_OtherResources.wxs deleted file mode 100644 index 20fad81b1d1..00000000000 --- a/setup/FSharp.SDK/component-groups/Compiler_OtherResources.wxs +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/setup/FSharp.SDK/component-groups/Compiler_Redist.wxs b/setup/FSharp.SDK/component-groups/Compiler_Redist.wxs new file mode 100644 index 00000000000..df3f51a355d --- /dev/null +++ b/setup/FSharp.SDK/component-groups/Compiler_Redist.wxs @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/setup/FSharp.SDK/component-groups/Compiler_SDK.wxs b/setup/FSharp.SDK/component-groups/Compiler_SDK.wxs deleted file mode 100644 index 0c3ca0f90e8..00000000000 --- a/setup/FSharp.SDK/component-groups/Compiler_SDK.wxs +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/setup/FSharp.SDK/component-groups/Langpack_ManagedFiles.wxs b/setup/FSharp.SDK/component-groups/Langpack_ManagedFiles.wxs deleted file mode 100644 index 756e492a514..00000000000 --- a/setup/FSharp.SDK/component-groups/Langpack_ManagedFiles.wxs +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/setup/FSharp.SDK/component-groups/Redist_ManagedFiles.wxs b/setup/FSharp.SDK/component-groups/Redist_ManagedFiles.wxs deleted file mode 100644 index 73e8b104e7e..00000000000 --- a/setup/FSharp.SDK/component-groups/Redist_ManagedFiles.wxs +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/setup/FSharp.SDK/component-groups/Runtime_LangPack.wxs b/setup/FSharp.SDK/component-groups/Runtime_LangPack.wxs new file mode 100644 index 00000000000..8dc3c0d6bc9 --- /dev/null +++ b/setup/FSharp.SDK/component-groups/Runtime_LangPack.wxs @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/setup/FSharp.SDK/component-groups/Runtime_Redist.wxs b/setup/FSharp.SDK/component-groups/Runtime_Redist.wxs new file mode 100644 index 00000000000..89d5a7fdc8f --- /dev/null +++ b/setup/FSharp.SDK/component-groups/Runtime_Redist.wxs @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/setup/FSharp.Setup.props b/setup/FSharp.Setup.props index ea36f75549e..683a8929c52 100644 --- a/setup/FSharp.Setup.props +++ b/setup/FSharp.Setup.props @@ -1,23 +1,112 @@ - - 2.0 - 3.10 - 3.10.0.1503 - $(SetupRootFolder)\..\packages\WiX.Toolset.2015.$(WiXToolset2015Version)\tools\wix - $(SetupRootFolder)\..\packages\Microsoft.VisualFSharp.Core.Redist.1.0.0 - $(SetupRootFolder)\..\packages\Microsoft.VisualFSharp.Type.Providers.Redist.1.0.0 - - - net40 - Debug - AnyCPU - - - $(SetupRootFolder)\..\$(Configuration) - obj\$(Configuration)\ - $(BinariesDir)\setup - $(BinariesDir)\setup\$(Lang) - + + 2.0 + 3.10 + 3.10.0.1503 + $(SetupRootFolder)\..\packages\WiX.Toolset.2015.$(WiXToolset2015Version)\tools\wix + $(SetupRootFolder)\..\packages + + + + net40 + Debug + AnyCPU + + + + $(SetupRootFolder)\..\$(Configuration) + obj\$(Configuration)\ + $(BinariesDir)\setup + $(BinariesDir)\setup\$(Lang) + + + + + ENU + 1033 + en-us + false + + + CHT + 1028 + zh-tw + true + + + CSY + 1029 + cs-cz + true + + + DEU + 1031 + de-de + true + + + FRA + 1036 + fr-fr + true + + + ITA + 1040 + it-it + true + + + JPN + 1041 + ja-jp + true + + + KOR + 1042 + ko-kr + true + + + PLK + 1045 + pl-pl + true + + + PTB + 1046 + pt-br + true + + + RUS + 1049 + ru-ru + true + + + TRK + 1055 + tr-tr + true + + + CHS + 2052 + zh-cn + true + + + ESN + 3082 + es-es + true + + + diff --git a/setup/FSharp.Wix.Extensions/FSharpPreprocessorExtension.cs b/setup/FSharp.Wix.Extensions/FSharpPreprocessorExtension.cs index 27e7663be5a..d6736218edc 100644 --- a/setup/FSharp.Wix.Extensions/FSharpPreprocessorExtension.cs +++ b/setup/FSharp.Wix.Extensions/FSharpPreprocessorExtension.cs @@ -14,24 +14,6 @@ public class FSharpPreprocessorExtension : PreprocessorExtension { private readonly string[] prefixes = new string[] { "fsharp" }; - private readonly List supportedLanguages = new List() - { - new CultureInfo(1028), // CHT - new CultureInfo(1029), // CSY - new CultureInfo(1031), // DEU - new CultureInfo(1033), // ENU - new CultureInfo(1036), // FRA - new CultureInfo(1040), // ITA - new CultureInfo(1041), // JPN - new CultureInfo(1042), // KOR - new CultureInfo(1045), // PLK - new CultureInfo(1046), // PTB - new CultureInfo(1049), // RUS - new CultureInfo(1055), // TRK - new CultureInfo(2052), // CHS - new CultureInfo(3082), // ESN - }; - public override string[] Prefixes { get { return this.prefixes; } @@ -45,10 +27,6 @@ public override string EvaluateFunction(string prefix, string function, string[] { case "guid": return this.Guid(args); - case "localeToId": - return this.LocaleToId(args); - case "localeToCulture": - return this.LocaleToCulture(args); } } @@ -63,34 +41,5 @@ private string Guid(string[] args) return new Guid(output).ToString(); } - - private string LocaleToId(string[] args) - { - return this.GetSupportedLanguage(args).LCID.ToString(); - } - - private string LocaleToCulture(string[] args) - { - return this.GetSupportedLanguage(args).Name; - } - - private CultureInfo GetSupportedLanguage(string[] args) - { - if (args.Length != 1) - { - throw new ArgumentException("Exactly one argument (locale) should be provided."); - } - - var language = this.supportedLanguages.FirstOrDefault(l => l.ThreeLetterWindowsLanguageName.ToString() == args[0]); - - if (language == null) - { - throw new ArgumentException($"Locale '{args[0]}' is not supported."); - } - else - { - return language; - } - } } } diff --git a/setup/Swix/FSharp.SDK/FSharp.SDK.swixproj b/setup/Swix/FSharp.SDK/FSharp.SDK.swixproj deleted file mode 100644 index 4b66278ec8a..00000000000 --- a/setup/Swix/FSharp.SDK/FSharp.SDK.swixproj +++ /dev/null @@ -1,23 +0,0 @@ - - - - ..\..\..\src - neutral - false - manifest - true - Debug - $(FSharpSourcesRoot)\..\$(Configuration) - $(BinariesFolder)\insertion - - - - - - $(PackagePreprocessorDefinitions);BinariesFolder=$(BinariesFolder) - - - - - - diff --git a/setup/Swix/FSharp.SDK/Files.swr b/setup/Swix/FSharp.SDK/Files.swr deleted file mode 100644 index 9b9e952323b..00000000000 --- a/setup/Swix/FSharp.SDK/Files.swr +++ /dev/null @@ -1,15 +0,0 @@ -use vs - -package name=Microsoft.FSharp.Msi - version=4.1 - vs.package.type=msi - vs.package.chip=neutral - vs.package.language=neutral - -vs.localizedResources - vs.localizedResource language=en-us - title="Visual F# Tools" - description="Deploy Visual F# Tools templates to Visual Studio" - -vs.payloads - vs.payload source=$(BinariesFolder)\msi\FSharp.SDK.ENU.msi diff --git a/setup/Swix/Microsoft.FSharp.Dependencies/Files.swr b/setup/Swix/Microsoft.FSharp.Dependencies/Files.swr new file mode 100644 index 00000000000..3e3c55b7d0e --- /dev/null +++ b/setup/Swix/Microsoft.FSharp.Dependencies/Files.swr @@ -0,0 +1,31 @@ +use vs + +package name=Microsoft.FSharp.Dependencies.$(VSSku) + 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" + file "Microsoft.Portable.FSharp.targets" source="$(BinariesFolder)\setup\resources\Microsoft.Portable.FSharp.Shim.targets" + +folder "InstallDir:Common7\IDE\PublicAssemblies" + file source="$(BinariesFolder)\net40\bin\FSharp.Core.dll" vs.file.ngen=yes + file source="$(BinariesFolder)\net40\bin\FSharp.Core.optdata" + file source="$(BinariesFolder)\net40\bin\FSharp.Core.sigdata" + +folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp" + file source="$(PackagesFolder)\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Conversion.Core.dll" + file source="$(PackagesFolder)\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.dll" + file source="$(PackagesFolder)\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Engine.dll" + file source="$(PackagesFolder)\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Framework.dll" + file source="$(PackagesFolder)\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Tasks.Core.dll" + file source="$(PackagesFolder)\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Utilities.Core.dll" \ No newline at end of file diff --git a/setup/Swix/VisualFSharpVSIX/VisualFSharpVSIX.WebDevelopment.swixproj b/setup/Swix/Microsoft.FSharp.Dependencies/Microsoft.FSharp.Dependencies.swixproj similarity index 60% rename from setup/Swix/VisualFSharpVSIX/VisualFSharpVSIX.WebDevelopment.swixproj rename to setup/Swix/Microsoft.FSharp.Dependencies/Microsoft.FSharp.Dependencies.swixproj index 30414a951c3..071b86deb08 100644 --- a/setup/Swix/VisualFSharpVSIX/VisualFSharpVSIX.WebDevelopment.swixproj +++ b/setup/Swix/Microsoft.FSharp.Dependencies/Microsoft.FSharp.Dependencies.swixproj @@ -8,8 +8,9 @@ true Debug $(FSharpSourcesRoot)\..\$(Configuration) + $(FSharpSourcesRoot)\..\packages $(BinariesFolder)\insertion - VisualFSharpVSIX.WebDevelopment + Microsoft.FSharp.Dependencies.$(VSSku) $(MSBuildThisFileDirectory)obj @@ -17,19 +18,19 @@ $(PackagePreprocessorDefinitions);BinariesFolder=$(BinariesFolder) + $(PackagePreprocessorDefinitions);PackagesFolder=$(PackagesFolder) + $(PackagePreprocessorDefinitions);VSSku=$(VSSku) - - + - - - - VsixSHA2 - - + + + + + diff --git a/setup/Swix/Microsoft.FSharp.SDK/Files.swr b/setup/Swix/Microsoft.FSharp.SDK/Files.swr new file mode 100644 index 00000000000..d161ff0fb99 --- /dev/null +++ b/setup/Swix/Microsoft.FSharp.SDK/Files.swr @@ -0,0 +1,9 @@ +use vs + +package name=Microsoft.FSharp.SDK + version=4.1 + vs.package.type=msi + vs.package.language=$(LocaleRegion) + +vs.payloads + vs.payload source="$(BinariesFolder)\msi\Microsoft.FSharp.SDK.$(LocaleCode).msi" diff --git a/setup/Swix/Microsoft.FSharp.SDK/Microsoft.FSharp.SDK.swixproj b/setup/Swix/Microsoft.FSharp.SDK/Microsoft.FSharp.SDK.swixproj new file mode 100644 index 00000000000..3e836ccb657 --- /dev/null +++ b/setup/Swix/Microsoft.FSharp.SDK/Microsoft.FSharp.SDK.swixproj @@ -0,0 +1,39 @@ + + + + ..\..\..\src + neutral + false + manifest + Microsoft.FSharp.SDK.$(LocaleCode) + true + Debug + $(FSharpSourcesRoot)\..\$(Configuration) + $(BinariesFolder)\insertion + + + + + + $(PackagePreprocessorDefinitions);BinariesFolder=$(BinariesFolder) + $(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 new file mode 100644 index 00000000000..952aab4ebc4 --- /dev/null +++ b/setup/Swix/Microsoft.FSharp.Vsix/Core.Files.swr @@ -0,0 +1,9 @@ +use vs + +package name=Microsoft.FSharp.VSIX.$(VSSku) + version=4.1 + vs.package.type=vsix + vs.package.language=$(LocaleRegion) + +vs.payloads + vs.payload source="$(BinariesFolder)\net40\bin\VisualFSharp$(VSSku).vsix" \ No newline at end of file diff --git a/setup/Swix/Microsoft.FSharp.Vsix/LangPack.Desktop.Templates.swr b/setup/Swix/Microsoft.FSharp.Vsix/LangPack.Desktop.Templates.swr new file mode 100644 index 00000000000..a3977cc67f0 --- /dev/null +++ b/setup/Swix/Microsoft.FSharp.Vsix/LangPack.Desktop.Templates.swr @@ -0,0 +1,24 @@ +use vs + +package name=Microsoft.FSharp.VSIX.$(VSSku) + version=4.1 + vs.package.language=$(LocaleRegion) + +folder "InstallDir:Common7\IDE\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" + 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" + 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/LangPack.Files.swr b/setup/Swix/Microsoft.FSharp.Vsix/LangPack.Files.swr new file mode 100644 index 00000000000..fa907fa0edf --- /dev/null +++ b/setup/Swix/Microsoft.FSharp.Vsix/LangPack.Files.swr @@ -0,0 +1,21 @@ +use vs + +package name=Microsoft.FSharp.VSIX.$(VSSku) + version=4.1 + vs.package.language=$(LocaleRegion) + +folder "InstallDir:Common7\IDE\PublicAssemblies\$(LocaleRegion)" + file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\FSharp.Core.resources.dll" vs.file.ngen=yes + +folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp\$(LocaleRegion)" + 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 + file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\FSharp.LanguageService.Compiler.resources.dll" vs.file.ngen=yes + file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\FSharp.LanguageService.resources.dll" vs.file.ngen=yes + file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\FSharp.ProjectSystem.Base.resources.dll" vs.file.ngen=yes + file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\FSharp.ProjectSystem.FSharp.resources.dll" vs.file.ngen=yes + file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\FSharp.ProjectSystem.PropertyPages.resources.dll" vs.file.ngen=yes + file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\FSharp.VS.FSI.resources.dll" vs.file.ngen=yes + file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\fsi.resources.dll" vs.file.ngen=yes + file source="$(BinariesFolder)\net40\bin\localize\$(LocaleCode)\FsiAnyCPU.resources.dll" vs.file.ngen=yes diff --git a/setup/Swix/Microsoft.FSharp.Vsix/LangPack.Full.Templates.swr b/setup/Swix/Microsoft.FSharp.Vsix/LangPack.Full.Templates.swr new file mode 100644 index 00000000000..fa876a3fef3 --- /dev/null +++ b/setup/Swix/Microsoft.FSharp.Vsix/LangPack.Full.Templates.swr @@ -0,0 +1,52 @@ +use vs + +package name=Microsoft.FSharp.VSIX.$(VSSku) + version=4.1 + vs.package.language=$(LocaleRegion) + +folder "InstallDir:Common7\IDE\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" + 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" + 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" + 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" + 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" + 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" + 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/LangPack.Web.Templates.swr b/setup/Swix/Microsoft.FSharp.Vsix/LangPack.Web.Templates.swr new file mode 100644 index 00000000000..e9756006478 --- /dev/null +++ b/setup/Swix/Microsoft.FSharp.Vsix/LangPack.Web.Templates.swr @@ -0,0 +1,17 @@ +use vs + +package name=Microsoft.FSharp.VSIX.$(VSSku) + version=4.1 + vs.package.language=$(LocaleRegion) + +folder "InstallDir:Common7\IDE\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" + 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/Microsoft.FSharp.Vsix.swixproj b/setup/Swix/Microsoft.FSharp.Vsix/Microsoft.FSharp.Vsix.swixproj new file mode 100644 index 00000000000..9cc2d0f1199 --- /dev/null +++ b/setup/Swix/Microsoft.FSharp.Vsix/Microsoft.FSharp.Vsix.swixproj @@ -0,0 +1,54 @@ + + + + ..\..\..\src + neutral + false + true + Debug + $(FSharpSourcesRoot)\..\$(Configuration) + $(BinariesFolder)\insertion + Microsoft.FSharp.VSIX.$(VSSku).$(LocaleCode) + $(MSBuildThisFileDirectory)obj + + + + manifest + + + + vsix + + + + + + $(PackagePreprocessorDefinitions);BinariesFolder=$(BinariesFolder) + $(PackagePreprocessorDefinitions);VSSku=$(VSSku) + $(PackagePreprocessorDefinitions);LocaleCode=$(LocaleCode) + $(PackagePreprocessorDefinitions);LocaleId=$(LocaleId) + $(PackagePreprocessorDefinitions);LocaleRegion=$(LocaleRegion) + $(PackagePreprocessorDefinitions);IsLangPack=$(IsLangPack) + + + + + + + + + + + + + + + + + + + + + + + diff --git a/setup/Swix/Microsoft.FSharp.vsmanproj b/setup/Swix/Microsoft.FSharp.vsmanproj index 300150a6576..736ea5bdb51 100644 --- a/setup/Swix/Microsoft.FSharp.vsmanproj +++ b/setup/Swix/Microsoft.FSharp.vsmanproj @@ -1,19 +1,24 @@ - - ..\..\src - true - true - true - $(FSharpSourcesRoot)\..\$(Configuration)\insertion - - - - + + + + ..\..\src + true + true + true + $(FSharpSourcesRoot)\..\$(Configuration)\insertion + + + - - - - + + + + + + + + \ No newline at end of file diff --git a/setup/Swix/VisualFSharpVSIX/CommonFiles.swr b/setup/Swix/VisualFSharpVSIX/CommonFiles.swr deleted file mode 100644 index 6bba4346f6f..00000000000 --- a/setup/Swix/VisualFSharpVSIX/CommonFiles.swr +++ /dev/null @@ -1,51 +0,0 @@ -use vs - -package name=Microsoft.FSharp.Vsix - version=4.1 - vs.package.chip=neutral - vs.package.language=en-us - -vs.localizedResources - vs.localizedResource language=en-us - title="Visual F# Tools" - description="Deploy Visual F# Tools templates to Visual Studio" - -folder "InstallDir:MSBuild\Microsoft\VisualStudio\v15.0\FSharp" - file "Microsoft.FSharp.targets" source="$(BinariesFolder)\setup\resources\Microsoft.FSharp.Shim.targets" - file "Microsoft.Portable.FSharp.targets" source="$(BinariesFolder)\setup\resources\Microsoft.Portable.FSharp.Shim.targets" - -folder "InstallDir:Common7\IDE\PublicAssemblies" - file source="$(BinariesFolder)\net40\bin\FSharp.Core.dll" vs.file.ngen=yes - file source="$(BinariesFolder)\net40\bin\FSharp.Core.optdata" - file source="$(BinariesFolder)\net40\bin\FSharp.Core.sigdata" - -folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp" - file source="$(BinariesFolder)\net40\bin\FSharp.Compiler.dll" vs.file.ngen=yes - file source="$(BinariesFolder)\net40\bin\FSharp.Compiler.Interactive.Settings.dll" vs.file.ngen=yes - file source="$(BinariesFolder)\net40\bin\FSharp.Compiler.Server.Shared.dll" vs.file.ngen=yes - file source="$(BinariesFolder)\net40\bin\FSharp.Core.dll" vs.file.ngen=yes - file source="$(BinariesFolder)\net40\bin\FSharp.Editor.dll" vs.file.ngen=yes - file source="$(BinariesFolder)\net40\bin\FSharp.LanguageService.Base.dll" vs.file.ngen=yes - file source="$(BinariesFolder)\net40\bin\FSharp.LanguageService.Compiler.dll" vs.file.ngen=yes - file source="$(BinariesFolder)\net40\bin\FSharp.LanguageService.dll" vs.file.ngen=yes - file source="$(BinariesFolder)\net40\bin\FSharp.ProjectSystem.Base.dll" vs.file.ngen=yes - file source="$(BinariesFolder)\net40\bin\FSharp.ProjectSystem.FSharp.dll" vs.file.ngen=yes - file source="$(BinariesFolder)\net40\bin\FSharp.ProjectSystem.PropertyPages.dll" vs.file.ngen=yes - file source="$(BinariesFolder)\net40\bin\FSharp.VS.FSI.dll" vs.file.ngen=yes - file source="$(BinariesFolder)\net40\bin\fsi.exe" vs.file.ngen=yes - file source="$(BinariesFolder)\net40\bin\FsiAnyCPU.exe" vs.file.ngen=yes - file source="$(BinariesFolder)\net40\bin\FSharp.Core.optdata" - file source="$(BinariesFolder)\net40\bin\FSharp.Core.sigdata" - file source="$(BinariesFolder)\net40\bin\fsi.exe.config" - file source="$(BinariesFolder)\net40\bin\fsiAnyCpu.exe.config" - file source="$(BinariesFolder)\..\License.txt" - file source="$(BinariesFolder)\net40\bin\RegisterFsharpPackage.pkgdef" - file source="$(BinariesFolder)\net40\bin\FSharp.Compiler.Server.Shared.pkgdef" - file source="$(BinariesFolder)\net40\bin\FSharp.Editor.pkgdef" - file source="$(BinariesFolder)\net40\bin\FSharp.LanguageService.Base.pkgdef" - file source="$(BinariesFolder)\net40\bin\FSharp.LanguageService.Compiler.pkgdef" - file source="$(BinariesFolder)\net40\bin\FSharp.LanguageService.pkgdef" - file source="$(BinariesFolder)\net40\bin\FSharp.ProjectSystem.Base.pkgdef" - file source="$(BinariesFolder)\net40\bin\FSharp.ProjectSystem.FSharp.pkgdef" - file source="$(BinariesFolder)\net40\bin\FSharp.ProjectSystem.PropertyPages.pkgdef" - file source="$(BinariesFolder)\net40\bin\FSharp.VS.FSI.pkgdef" diff --git a/setup/Swix/VisualFSharpVSIX/DesktopTemplates.swr b/setup/Swix/VisualFSharpVSIX/DesktopTemplates.swr deleted file mode 100644 index 3e3beb3fdfc..00000000000 --- a/setup/Swix/VisualFSharpVSIX/DesktopTemplates.swr +++ /dev/null @@ -1,54 +0,0 @@ -use vs - -package name=Microsoft.FSharp.Vsix - version=4.1 - vs.package.chip=neutral - vs.package.language=en-us - -vs.localizedResources - vs.localizedResource language=en-us - title="Visual F# Tools" - description="Deploy Visual F# Tools templates to Visual Studio" - -folder "InstallDir:Common7\IDE\ItemTemplates\FSharp\AppConfig" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\AppConfig\App.config" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\AppConfig\AppConfig.vstemplate" - -folder "InstallDir:Common7\IDE\ItemTemplates\FSharp\CodeFile" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\CodeFile\CodeFile.vstemplate" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\CodeFile\File.fs" - -folder "InstallDir:Common7\IDE\ItemTemplates\FSharp\ScriptFile" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\ScriptFile\File.fsx" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\ScriptFile\ScriptFile.vstemplate" - -folder "InstallDir:Common7\IDE\ItemTemplates\FSharp\SignatureFile" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\SignatureFile\File.fsi" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\SignatureFile\SignatureFile.vstemplate" - -folder "InstallDir:Common7\IDE\ItemTemplates\FSharp\TextFile" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\TextFile\TextFile.txt" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\TextFile\TextFile.vstemplate" - -folder "InstallDir:Common7\IDE\ItemTemplates\FSharp\XMLFile" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\XMLFile\XMLFile.vstemplate" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\XMLFile\XMLFile.xml" - -folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\ConsoleProject" - file source="$(BinariesFolder)\net40\bin\ProjectTemplates\ConsoleProject\App.config" - file source="$(BinariesFolder)\net40\bin\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\ProjectTemplates\ConsoleProject\Program.fs" - -folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\LibraryProject" - file source="$(BinariesFolder)\net40\bin\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\ProjectTemplates\LibraryProject\Script.fsx" - -folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\TutorialProject" - file source="$(BinariesFolder)\net40\bin\ProjectTemplates\TutorialProject\Tutorial.fsproj" - file source="$(BinariesFolder)\net40\bin\ProjectTemplates\TutorialProject\Tutorial.fsx" - file source="$(BinariesFolder)\net40\bin\ProjectTemplates\TutorialProject\Tutorial.vstemplate" diff --git a/setup/Swix/VisualFSharpVSIX/ProfessionalTemplates.swr b/setup/Swix/VisualFSharpVSIX/ProfessionalTemplates.swr deleted file mode 100644 index e0e8a0e1e34..00000000000 --- a/setup/Swix/VisualFSharpVSIX/ProfessionalTemplates.swr +++ /dev/null @@ -1,89 +0,0 @@ -use vs - -package name=Microsoft.FSharp.Vsix - version=4.1 - vs.package.chip=neutral - vs.package.language=en-us - -vs.localizedResources - vs.localizedResource language=en-us - title="Visual F# Tools" - description="Deploy Visual F# Tools templates to Visual Studio" - -folder "InstallDir:Common7\IDE\ItemTemplates\FSharp\AppConfig" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\AppConfig\App.config" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\AppConfig\AppConfig.vstemplate" - -folder "InstallDir:Common7\IDE\ItemTemplates\FSharp\CodeFile" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\CodeFile\CodeFile.vstemplate" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\CodeFile\File.fs" - -folder "InstallDir:Common7\IDE\ItemTemplates\FSharp\ScriptFile" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\ScriptFile\File.fsx" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\ScriptFile\ScriptFile.vstemplate" - -folder "InstallDir:Common7\IDE\ItemTemplates\FSharp\SignatureFile" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\SignatureFile\File.fsi" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\SignatureFile\SignatureFile.vstemplate" - -folder "InstallDir:Common7\IDE\ItemTemplates\FSharp\TextFile" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\TextFile\TextFile.txt" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\TextFile\TextFile.vstemplate" - -folder "InstallDir:Common7\IDE\ItemTemplates\FSharp\XMLFile" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\XMLFile\XMLFile.vstemplate" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\XMLFile\XMLFile.xml" - -folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\ConsoleProject" - file source="$(BinariesFolder)\net40\bin\ProjectTemplates\ConsoleProject\App.config" - file source="$(BinariesFolder)\net40\bin\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\ProjectTemplates\ConsoleProject\Program.fs" - -folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\LibraryProject" - file source="$(BinariesFolder)\net40\bin\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\ProjectTemplates\LibraryProject\Script.fsx" - -folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\NetCore259Project" - file source="$(BinariesFolder)\net40\bin\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\ProjectTemplates\NetCore259Project\Script.fsx" - -folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\NetCore78Project" - file source="$(BinariesFolder)\net40\bin\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\ProjectTemplates\NetCore78Project\Script.fsx" - -folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\NetCoreProject" - file source="$(BinariesFolder)\net40\bin\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\ProjectTemplates\NetCoreProject\Script.fsx" - -folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\PortableLibraryProject" - file source="$(BinariesFolder)\net40\bin\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\ProjectTemplates\PortableLibraryProject\Script.fsx" - -folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\SilverlightProject" - file source="$(BinariesFolder)\net40\bin\ProjectTemplates\SilverlightProject\AssemblyInfo.fs" - file source="$(BinariesFolder)\net40\bin\ProjectTemplates\SilverlightProject\Library1.fs" - file source="$(BinariesFolder)\net40\bin\ProjectTemplates\SilverlightProject\Script.fsx" - file source="$(BinariesFolder)\net40\bin\ProjectTemplates\SilverlightProject\SilverlightLibrary.fsproj" - file source="$(BinariesFolder)\net40\bin\ProjectTemplates\SilverlightProject\SilverlightLibrary.vstemplate" - -folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\TutorialProject" - file source="$(BinariesFolder)\net40\bin\ProjectTemplates\TutorialProject\Tutorial.fsproj" - file source="$(BinariesFolder)\net40\bin\ProjectTemplates\TutorialProject\Tutorial.fsx" - file source="$(BinariesFolder)\net40\bin\ProjectTemplates\TutorialProject\Tutorial.vstemplate" diff --git a/setup/Swix/VisualFSharpVSIX/VisualFSharpVSIX.Desktop.swixproj b/setup/Swix/VisualFSharpVSIX/VisualFSharpVSIX.Desktop.swixproj deleted file mode 100644 index cc70a56b5e6..00000000000 --- a/setup/Swix/VisualFSharpVSIX/VisualFSharpVSIX.Desktop.swixproj +++ /dev/null @@ -1,35 +0,0 @@ - - - - ..\..\..\src - neutral - false - vsix - true - Debug - $(FSharpSourcesRoot)\..\$(Configuration) - $(BinariesFolder)\insertion - VisualFSharpVSIX.Desktop - $(MSBuildThisFileDirectory)obj - - - - - - $(PackagePreprocessorDefinitions);BinariesFolder=$(BinariesFolder) - - - - - - - - - - - - VsixSHA2 - - - - diff --git a/setup/Swix/VisualFSharpVSIX/VisualFSharpVSIX.Professional.swixproj b/setup/Swix/VisualFSharpVSIX/VisualFSharpVSIX.Professional.swixproj deleted file mode 100644 index 12cd1f9139e..00000000000 --- a/setup/Swix/VisualFSharpVSIX/VisualFSharpVSIX.Professional.swixproj +++ /dev/null @@ -1,35 +0,0 @@ - - - - ..\..\..\src - neutral - false - vsix - true - Debug - $(FSharpSourcesRoot)\..\$(Configuration) - $(BinariesFolder)\insertion - VisualFSharpVSIX.Professional - $(MSBuildThisFileDirectory)obj - - - - - - $(PackagePreprocessorDefinitions);BinariesFolder=$(BinariesFolder) - - - - - - - - - - - - VsixSHA2 - - - - diff --git a/setup/Swix/VisualFSharpVSIX/WebDevelopmentTemplates.swr b/setup/Swix/VisualFSharpVSIX/WebDevelopmentTemplates.swr deleted file mode 100644 index ef2bc075cc4..00000000000 --- a/setup/Swix/VisualFSharpVSIX/WebDevelopmentTemplates.swr +++ /dev/null @@ -1,54 +0,0 @@ -use vs - -package name=Microsoft.FSharp.Vsix - version=4.1 - vs.package.chip=neutral - vs.package.language=en-us - -vs.localizedResources - vs.localizedResource language=en-us - title="Visual F# Tools" - description="Deploy Visual F# Tools templates to Visual Studio" - -folder "InstallDir:Common7\IDE\ItemTemplates\FSharp\AppConfig" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\AppConfig\App.config" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\AppConfig\AppConfig.vstemplate" - -folder "InstallDir:Common7\IDE\ItemTemplates\FSharp\CodeFile" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\CodeFile\CodeFile.vstemplate" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\CodeFile\File.fs" - -folder "InstallDir:Common7\IDE\ItemTemplates\FSharp\ScriptFile" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\ScriptFile\File.fsx" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\ScriptFile\ScriptFile.vstemplate" - -folder "InstallDir:Common7\IDE\ItemTemplates\FSharp\SignatureFile" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\SignatureFile\File.fsi" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\SignatureFile\SignatureFile.vstemplate" - -folder "InstallDir:Common7\IDE\ItemTemplates\FSharp\TextFile" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\TextFile\TextFile.txt" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\TextFile\TextFile.vstemplate" - -folder "InstallDir:Common7\IDE\ItemTemplates\FSharp\XMLFile" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\XMLFile\XMLFile.vstemplate" - file source="$(BinariesFolder)\net40\bin\ItemTemplates\XMLFile\XMLFile.xml" - -folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\LibraryProject" - file source="$(BinariesFolder)\net40\bin\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\ProjectTemplates\LibraryProject\Script.fsx" - -folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\SilverlightProject" - file source="$(BinariesFolder)\net40\bin\ProjectTemplates\SilverlightProject\AssemblyInfo.fs" - file source="$(BinariesFolder)\net40\bin\ProjectTemplates\SilverlightProject\Library1.fs" - file source="$(BinariesFolder)\net40\bin\ProjectTemplates\SilverlightProject\Script.fsx" - file source="$(BinariesFolder)\net40\bin\ProjectTemplates\SilverlightProject\SilverlightLibrary.fsproj" - file source="$(BinariesFolder)\net40\bin\ProjectTemplates\SilverlightProject\SilverlightLibrary.vstemplate" - -folder "InstallDir:Common7\IDE\ProjectTemplates\FSharp\TutorialProject" - file source="$(BinariesFolder)\net40\bin\ProjectTemplates\TutorialProject\Tutorial.fsproj" - file source="$(BinariesFolder)\net40\bin\ProjectTemplates\TutorialProject\Tutorial.fsx" - file source="$(BinariesFolder)\net40\bin\ProjectTemplates\TutorialProject\Tutorial.vstemplate" diff --git a/setup/fsharp-setup-build.proj b/setup/fsharp-setup-build.proj index be9ad8f2a22..87ca1c6d400 100644 --- a/setup/fsharp-setup-build.proj +++ b/setup/fsharp-setup-build.proj @@ -6,61 +6,69 @@ . net40 - ENU Debug - - - - - - - - - - - - - - + + + + + FSharp.Wix.Extensions\FSharp.Wix.Extensions.csproj + + + + + + + + + + + + + + + + + + + + + + Swix\Microsoft.FSharp.Dependencies\Microsoft.FSharp.Dependencies.swixproj + Full + + + + Swix\Microsoft.FSharp.vsmanproj + + + - - + - - - - - - - - + - - - - - - - - - - + + - - - - - - - - - - + + diff --git a/src/FSharpSource.Settings.targets b/src/FSharpSource.Settings.targets index 0ce697c555c..abddcb1a6ff 100644 --- a/src/FSharpSource.Settings.targets +++ b/src/FSharpSource.Settings.targets @@ -25,11 +25,10 @@ - full + portable false prompt - AnyCPU - $(OtherFlags) --no-jit-optimize --jit-tracking + $(OtherFlags) --no-jit-optimize DEBUG;TRACE;CODE_ANALYSIS;$(DefineConstants) DEBUG=True,TRACE=True,CODE_ANALYSIS=True,$(DefineConstants) false @@ -56,6 +55,11 @@ 3 + + + obj\$(Configuration)\$(TargetFramework)\ + + $(DefineConstants),VS_VERSION_DEV12=True $(DefineConstants);VS_VERSION_DEV12 diff --git a/src/FSharpSource.targets b/src/FSharpSource.targets index f177a35fe24..12be192a518 100644 --- a/src/FSharpSource.targets +++ b/src/FSharpSource.targets @@ -1,20 +1,20 @@ - - true - 4.4.1.0 - 2.4.1.0 - 3.7.41.0 - 3.47.41.0 - 3.78.41.0 - 3.259.41.0 - - + + true + 4.4.1.0 + 2.4.1.0 + 3.7.41.0 + 3.47.41.0 + 3.78.41.0 + 3.259.41.0 + + - false - true + false + true @@ -24,7 +24,9 @@ true - $(OtherFlags) --delaysign+ --keyfile:"$(FSharpSourcesRoot)\fsharp\msft.pubkey" + $(OtherFlags) --delaysign+ + $(OtherFlags) --publicsign+ + $(OtherFlags) --keyfile:"$(FSharpSourcesRoot)\fsharp\msft.pubkey" STRONG_NAME_AND_DELAY_SIGN_FSHARP_COMPILER_WITH_MSFT_KEY;$(DefineConstants) true $(FSCoreVersion) @@ -33,7 +35,9 @@ - $(OtherFlags) --delaysign+ --keyfile:"$(FSharpSourcesRoot)\fsharp\msft.pubkey" + $(OtherFlags) --delaysign+ + $(OtherFlags) --publicsign+ + $(OtherFlags) --keyfile:"$(FSharpSourcesRoot)\fsharp\msft.pubkey" STRONG_NAME_AND_DELAY_SIGN_FSHARP_COMPILER_WITH_MSFT_KEY;$(DefineConstants) true 15.4.1.0 @@ -51,7 +55,9 @@ - $(OtherFlags) --delaysign+ --keyfile:"$(FSharpSourcesRoot)\fsharp\msft.pubkey" + $(OtherFlags) --delaysign+ + $(OtherFlags) --publicsign+ + $(OtherFlags) --keyfile:"$(FSharpSourcesRoot)\fsharp\msft.pubkey" STRONG_NAME_AND_DELAY_SIGN_FSHARP_COMPILER_WITH_MSFT_KEY;$(DefineConstants) true $(FSCoreVersion) @@ -90,36 +96,7 @@ NO_STRONG_NAMES;$(DefineConstants) - - DEBUG; $(DefineConstants) - false - - $(OtherFlags) --no-jit-optimize --jit-tracking - CODE_ANALYSIS; $(DefineConstants) - - - - true - - - - - true - DEBUG;NO_STRONG_NAMES;$(DefineConstants) - - - - - obj\$(Configuration)\$(TargetFramework)\ - - - - - $(OtherFlags) --debug:full - - - $(DefineConstants);OPEN_BUILD false @@ -134,30 +111,6 @@ $(FSharpSourcesRoot)\..\packages\FsCheck.$(FsCheckVersion)\lib\ - - - v3.5 - $(DefineConstants);FSHARP_CORE_2_0 - $(DefineConstants);RUNTIME - $(DefineConstants);FX_ATLEAST_35 - $(DefineConstants);FX_NO_STRUCTURAL_EQUALITY - $(DefineConstants);FX_NO_CANCELLATIONTOKEN_CLASSES - $(DefineConstants);FX_NO_EXCEPTIONDISPATCHINFO - $(DefineConstants);FX_NO_TASK - $(DefineConstants);FX_NO_IOBSERVABLE - $(DefineConstants);FX_NO_LAZY - $(DefineConstants);FX_NO_TUPLE - $(DefineConstants);FX_NO_MONITOR_REPORTS_LOCKTAKEN - $(DefineConstants);FX_NO_TPL_PARALLEL - $(DefineConstants);FX_NO_CUSTOMATTRIBUTEDATA - $(DefineConstants);FX_NO_BIGINT - $(DefineConstants);FX_NO_CONDITIONAL_WEAK_TABLE - $(DefineConstants);ENABLE_MONO_SUPPORT - $(DefineConstants);FX_MSBUILDRESOLVER_RUNTIMELIKE - $(DefineConstants);FX_LCIDFROMCODEPAGE - $(OtherFlags) --simpleresolution - - $(DefineConstants);FSHARP_CORE_4_5 $(DefineConstants);FX_ATLEAST_45 @@ -239,7 +192,6 @@ - $(DefineConstants);FSHARP_CORE_PORTABLE $(DefineConstants);FX_NO_CONCURRENT_DICTIONARY $(DefineConstants);FX_ATLEAST_PORTABLE @@ -289,6 +241,7 @@ $(DefineConstants);FX_NO_MISSINGMETHODEXCEPTION $(DefineConstants);DONT_INCLUDE_DEPRECATED $(DefineConstants);QUERIES_IN_FSLIB + $(DefineConstants);FX_ASSEMBLYLOADBYSTRING Profile47 v4.0 @@ -403,322 +356,6 @@ v4.5 - - - v3.0 - $(DefineConstants);SILVERLIGHT - $(DefineConstants);FX_NO_CANCELLATIONTOKEN_CLASSES - $(DefineConstants);FX_NO_EXCEPTIONDISPATCHINFO - $(DefineConstants);FX_NO_TASK - $(DefineConstants);FX_NO_ARRAY_LONG_LENGTH - $(DefineConstants);FX_NO_DEBUG_PROXIES - $(DefineConstants);FX_NO_EXIT - $(DefineConstants);FX_NO_CHAR_PARSE - $(DefineConstants);FX_NO_DEFAULT_DEPENDENCY_TYPE - $(DefineConstants);FX_SIMPLE_SECURITY_PERMISSIONS - $(DefineConstants);FX_NO_TRUNCATE - $(DefineConstants);FX_NO_CULTURE_INFO_ARGS - $(DefineConstants);FX_NO_REFLECTION_MODULE_HANDLES - $(DefineConstants);FX_NO_OPERATION_CANCELLED - $(DefineConstants);FX_NO_TO_LOWER_INVARIANT - $(DefineConstants);FX_NO_EXIT_CONTEXT_FLAGS - $(DefineConstants);FX_NO_BASED_ARRAYS - $(DefineConstants);FX_NO_DOUBLE_BIT_CONVERTER - $(DefineConstants);FX_NO_BINARY_SERIALIZATION - $(DefineConstants);FX_NO_ASCII_ENCODING - $(DefineConstants);FX_NO_DEFAULT_ENCODING - $(DefineConstants);FX_NO_FILE_OPTIONS - $(DefineConstants);FX_NO_NONBLOCK_IO - $(DefineConstants);FX_NO_COMMAND_LINE_ARGS - $(DefineConstants);FX_NO_ENVIRONMENT - $(DefineConstants);FX_NO_PROCESS_START - $(DefineConstants);FX_NO_APP_DOMAINS - $(DefineConstants);FX_NO_PROCESS_DIAGNOSTICS - $(DefineConstants);FX_NO_STRUCTURAL_EQUALITY - $(DefineConstants);FX_NO_IOBSERVABLE - $(DefineConstants);FX_NO_LAZY - $(DefineConstants);FX_NO_TUPLE - $(DefineConstants);PUT_TYPE_PROVIDERS_IN_FSCORE; - $(DefineConstants);FX_NO_CONCURRENT_DICTIONARY - Silverlight - false - v3.0 - - - - - $(DefineConstants);SILVERLIGHT - $(DefineConstants);FX_NO_ISIN_ON_PARAMETER_INFO - $(DefineConstants);FX_NO_CANCELLATIONTOKEN_CLASSES - $(DefineConstants);FX_NO_EXCEPTIONDISPATCHINFO - $(DefineConstants);FX_NO_TASK - $(DefineConstants);FX_NO_BIGINT - $(DefineConstants);FX_NO_CUSTOMATTRIBUTEDATA - $(DefineConstants);FX_NO_TPL_PARALLEL - $(DefineConstants);FX_NO_ARRAY_LONG_LENGTH - $(DefineConstants);FX_NO_DEBUG_PROXIES - $(DefineConstants);FX_NO_EXIT - $(DefineConstants);FX_NO_CHAR_PARSE - $(DefineConstants);FX_NO_DEFAULT_DEPENDENCY_TYPE - $(DefineConstants);FX_SIMPLE_SECURITY_PERMISSIONS - $(DefineConstants);FX_NO_TRUNCATE - $(DefineConstants);FX_NO_CULTURE_INFO_ARGS - $(DefineConstants);FX_NO_REFLECTION_MODULE_HANDLES - $(DefineConstants);FX_NO_OPERATION_CANCELLED - $(DefineConstants);FX_NO_TO_LOWER_INVARIANT - $(DefineConstants);FX_NO_EXIT_CONTEXT_FLAGS - $(DefineConstants);FX_NO_BASED_ARRAYS - $(DefineConstants);FX_NO_DOUBLE_BIT_CONVERTER - $(DefineConstants);FX_NO_BINARY_SERIALIZATION - $(DefineConstants);FX_NO_ASCII_ENCODING - $(DefineConstants);FX_NO_DEFAULT_ENCODING - $(DefineConstants);FX_NO_FILE_OPTIONS - $(DefineConstants);FX_NO_NONBLOCK_IO - $(DefineConstants);FX_NO_COMMAND_LINE_ARGS - $(DefineConstants);FX_NO_ENVIRONMENT - $(DefineConstants);FX_NO_PROCESS_START - $(DefineConstants);FX_NO_APP_DOMAINS - $(DefineConstants);FX_NO_PROCESS_DIAGNOSTICS - $(DefineConstants);FX_NO_IOBSERVABLE - $(DefineConstants);QUERIES_IN_FSLIB - $(DefineConstants);FX_NO_CONCURRENT_DICTIONARY - $(DefineConstants);PUT_TYPE_PROVIDERS_IN_FSCORE; - $(DefineConstants);FX_ATLEAST_LINQ - Silverlight - v4.0 - v4.0 - - - - - $(DefineConstants);SILVERLIGHT - $(DefineConstants);FX_ATLEAST_SILVERLIGHT_50 - $(DefineConstants);FX_NO_ARRAY_LONG_LENGTH - $(DefineConstants);FX_NO_BIGINT - $(DefineConstants);FX_NO_CUSTOMATTRIBUTEDATA - $(DefineConstants);FX_NO_TPL_PARALLEL - $(DefineConstants);FX_NO_IOBSERVABLE - $(DefineConstants);FX_NO_DEBUG_PROXIES - $(DefineConstants);FX_NO_EXIT - $(DefineConstants);FX_NO_CHAR_PARSE - $(DefineConstants);FX_NO_DEFAULT_DEPENDENCY_TYPE - $(DefineConstants);FX_SIMPLE_SECURITY_PERMISSIONS - $(DefineConstants);FX_NO_TRUNCATE - $(DefineConstants);FX_NO_CULTURE_INFO_ARGS - $(DefineConstants);FX_NO_REFLECTION_MODULE_HANDLES - $(DefineConstants);FX_NO_TO_LOWER_INVARIANT - $(DefineConstants);FX_NO_EXIT_CONTEXT_FLAGS - $(DefineConstants);FX_NO_BASED_ARRAYS - $(DefineConstants);FX_NO_DOUBLE_BIT_CONVERTER - $(DefineConstants);FX_NO_BINARY_SERIALIZATION - $(DefineConstants);FX_NO_ASCII_ENCODING - $(DefineConstants);FX_NO_DEFAULT_ENCODING - $(DefineConstants);FX_NO_FILE_OPTIONS - $(DefineConstants);FX_NO_NONBLOCK_IO - $(DefineConstants);FX_NO_COMMAND_LINE_ARGS - $(DefineConstants);FX_NO_ENVIRONMENT - $(DefineConstants);FX_NO_PROCESS_START - $(DefineConstants);FX_NO_APP_DOMAINS - $(DefineConstants);FX_NO_PROCESS_DIAGNOSTICS - $(DefineConstants);FX_NO_IOBSERVABLE - $(DefineConstants);DONT_INCLUDE_DEPRECATED - $(DefineConstants);QUERIES_IN_FSLIB - $(DefineConstants);FX_NO_CONCURRENT_DICTIONARY - $(DefineConstants);PUT_TYPE_PROVIDERS_IN_FSCORE; - $(DefineConstants);FX_ATLEAST_LINQ - $(DefineConstants);TARGET_SILVERLIGHT_5_0 - Silverlight - v5.0 - v5.0 - Software\Microsoft\Microsoft SDKs\$(TargetFrameworkIdentifier) - $(MSBuildExtensionsPath32)\..\Reference Assemblies\Microsoft\Framework\Silverlight\v5.0 - - - - v4.0 - WindowsPhone - Silverlight - $(DefineConstants);SILVERLIGHT - $(DefineConstants);FX_NO_CANCELLATIONTOKEN_CLASSES - $(DefineConstants);FX_NO_EXCEPTIONDISPATCHINFO - $(DefineConstants);FX_NO_TASK - $(DefineConstants);FX_NO_ARRAY_LONG_LENGTH - $(DefineConstants);FX_NO_DEBUG_PROXIES - $(DefineConstants);FX_NO_EXIT - $(DefineConstants);FX_NO_CHAR_PARSE - $(DefineConstants);FX_NO_DEFAULT_DEPENDENCY_TYPE - $(DefineConstants);FX_SIMPLE_SECURITY_PERMISSIONS - $(DefineConstants);FX_NO_TRUNCATE - $(DefineConstants);FX_NO_CULTURE_INFO_ARGS - $(DefineConstants);FX_NO_REFLECTION_MODULE_HANDLES - $(DefineConstants);FX_NO_OPERATION_CANCELLED - $(DefineConstants);FX_NO_TO_LOWER_INVARIANT - $(DefineConstants);FX_NO_EXIT_CONTEXT_FLAGS - $(DefineConstants);FX_NO_BASED_ARRAYS - $(DefineConstants);FX_NO_DOUBLE_BIT_CONVERTER - $(DefineConstants);FX_NO_BINARY_SERIALIZATION - $(DefineConstants);FX_NO_ASCII_ENCODING - $(DefineConstants);FX_NO_DEFAULT_ENCODING - $(DefineConstants);FX_NO_FILE_OPTIONS - $(DefineConstants);FX_NO_NONBLOCK_IO - $(DefineConstants);FX_NO_COMMAND_LINE_ARGS - $(DefineConstants);FX_NO_ENVIRONMENT - $(DefineConstants);FX_NO_PROCESS_START - $(DefineConstants);FX_NO_APP_DOMAINS - $(DefineConstants);FX_NO_PROCESS_DIAGNOSTICS - $(DefineConstants);FX_NO_STRUCTURAL_EQUALITY - $(DefineConstants);FX_NO_LAZY - $(DefineConstants);FX_NO_TUPLE - $(DefineConstants);FX_NO_REFLECTION_EMIT - $(DefineConstants);FX_NO_IOBSERVABLE - $(DefineConstants);FX_NO_WEB_REQUESTS - $(DefineConstants);FX_NO_CONCURRENT_DICTIONARY - $(DefineConstants);PUT_TYPE_PROVIDERS_IN_FSCORE; - $(DefineConstants);FX_ATLEAST_LINQ - false - $(TargetFrameworkVersion) - - $(OtherFlags) --simpleresolution -r:"C:\Program Files\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone\mscorlib.dll" - - - - - v2.0 - CompactFramework - $(DefineConstants);FX_ATLEAST_COMPACT_FRAMEWORK_20 - $(DefineConstants);FX_NO_CANCELLATIONTOKEN_CLASSES - $(DefineConstants);FX_NO_EXCEPTIONDISPATCHINFO - $(DefineConstants);FX_NO_TASK - $(DefineConstants);COMPACT_FRAMEWORK - $(DefineConstants);FX_NO_ARRAY_LONG_LENGTH - $(DefineConstants);FX_NO_DEBUG_PROXIES - $(DefineConstants);FX_NO_DEBUG_DISPLAYS - $(DefineConstants);FX_NO_EXIT - $(DefineConstants);FX_NO_CHAR_PARSE - $(DefineConstants);FX_NO_DEFAULT_DEPENDENCY_TYPE - $(DefineConstants);FX_NO_SECURITY_PERMISSIONS - $(DefineConstants);FX_NO_TRUNCATE - $(DefineConstants);FX_NO_CULTURE_INFO_ARGS - $(DefineConstants);FX_NO_DELEGATE_DYNAMIC_INVOKE - $(DefineConstants);FX_NO_DELEGATE_DYNAMIC_METHOD - $(DefineConstants);FX_MINIMAL_REFLECTION - $(DefineConstants);FX_NO_OPERATION_CANCELLED - $(DefineConstants);FX_NO_SYNC_CONTEXT - $(DefineConstants);FX_NO_BASED_ARRAYS - $(DefineConstants);FX_NO_TO_LOWER_INVARIANT - $(DefineConstants);FX_NO_REGISTERED_WAIT_HANDLES - $(DefineConstants);FX_NO_THREAD_STATIC - $(DefineConstants);FX_NO_GET_HASH_CODE_HELPER - $(DefineConstants);FX_NO_FILE_OPTIONS - $(DefineConstants);FX_NO_LOGN - $(DefineConstants);FX_NO_DOUBLE_BIT_CONVERTER - $(DefineConstants);FX_NO_BINARY_SERIALIZATION - $(DefineConstants);FX_NO_COMMAND_LINE_ARGS - $(DefineConstants);FX_NO_ENVIRONMENT - $(DefineConstants);FX_NO_PROCESS_DIAGNOSTICS - $(DefineConstants);FX_NO_STRING_SPLIT_OPTIONS - $(DefineConstants);FX_NO_APP_DOMAINS - $(DefineConstants);FX_NO_CREATE_DELEGATE - $(DefineConstants);FX_NO_WEB_REQUESTS - $(DefineConstants);FX_NO_WEB_CLIENT - $(DefineConstants);FX_NO_PARAMETERIZED_THREAD_START - $(DefineConstants);FX_NO_STRUCTURAL_EQUALITY - $(DefineConstants);FX_NO_IOBSERVABLE - $(DefineConstants);FX_NO_LAZY - $(DefineConstants);FX_NO_TUPLE - $(DefineConstants);FX_NO_DELEGATE_CREATE_DELEGATE_FROM_STATIC_METHOD - $(DefineConstants);FX_NO_CONDITIONAL_WEAK_TABLE - $(DefineConstants) - - $(OtherFlags) --simpleresolution -r:"C:\Program Files\Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE\mscorlib.dll" -r:"C:\Program Files\Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE\System.dll" - - - - - $(DefineConstants);XNA - $(DefineConstants);FX_NO_ARRAY_LONG_LENGTH - $(DefineConstants);FX_NO_DEBUG_PROXIES - $(DefineConstants);FX_NO_EXIT - $(DefineConstants);FX_NO_CHAR_PARSE - $(DefineConstants);FX_NO_DEFAULT_DEPENDENCY_TYPE - $(DefineConstants);FX_SIMPLE_SECURITY_PERMISSIONS - $(DefineConstants);FX_NO_TRUNCATE - $(DefineConstants);FX_NO_CULTURE_INFO_ARGS - $(DefineConstants);FX_NO_REFLECTION_MODULE_HANDLES - $(DefineConstants);FX_NO_OPERATION_CANCELLED - $(DefineConstants);FX_NO_TO_LOWER_INVARIANT - $(DefineConstants);FX_NO_EXIT_CONTEXT_FLAGS - $(DefineConstants);FX_NO_BASED_ARRAYS - $(DefineConstants);FX_NO_DOUBLE_BIT_CONVERTER - $(DefineConstants);FX_NO_BINARY_SERIALIZATION - $(DefineConstants);FX_NO_ASCII_ENCODING - $(DefineConstants);FX_NO_DEFAULT_ENCODING - $(DefineConstants);FX_NO_FILE_OPTIONS - $(DefineConstants);FX_NO_NONBLOCK_IO - $(DefineConstants);FX_NO_COMMAND_LINE_ARGS - $(DefineConstants);FX_NO_ENVIRONMENT - $(DefineConstants);FX_NO_PROCESS_START - $(DefineConstants);FX_NO_APP_DOMAINS - $(DefineConstants);FX_NO_PROCESS_DIAGNOSTICS - $(DefineConstants);FX_NO_WEB_REQUESTS - $(DefineConstants);FX_NO_REFLECTION_EMIT - $(DefineConstants);FX_NO_WEB_CLIENT - $(DefineConstants);FX_NO_STRUCTURAL_EQUALITY - $(DefineConstants);FX_NO_LAZY - $(DefineConstants);FX_NO_LINQ - $(DefineConstants);FX_NO_TUPLE - $(DefineConstants);FX_NO_IOBSERVABLE - - - - - v3.5 - CompactFramework - $(DefineConstants);FX_ATLEAST_COMPACT_FRAMEWORK_35 - $(DefineConstants);FX_NO_CANCELLATIONTOKEN_CLASSES - $(DefineConstants);FX_NO_EXCEPTIONDISPATCHINFO - $(DefineConstants);FX_NO_TASK - $(DefineConstants);COMPACT_FRAMEWORK - $(DefineConstants);FX_NO_ARRAY_LONG_LENGTH - $(DefineConstants);FX_NO_DEBUG_PROXIES - $(DefineConstants);FX_NO_DEBUG_DISPLAYS - $(DefineConstants);FX_NO_EXIT - $(DefineConstants);FX_NO_CHAR_PARSE - $(DefineConstants);FX_NO_DEFAULT_DEPENDENCY_TYPE - $(DefineConstants);FX_NO_SECURITY_PERMISSIONS - $(DefineConstants);FX_NO_TRUNCATE - $(DefineConstants);FX_NO_CULTURE_INFO_ARGS - $(DefineConstants);FX_NO_DELEGATE_DYNAMIC_INVOKE - $(DefineConstants);FX_MINIMAL_REFLECTION - $(DefineConstants);FX_NO_OPERATION_CANCELLED - $(DefineConstants);FX_NO_SYNC_CONTEXT - $(DefineConstants);FX_NO_BASED_ARRAYS - $(DefineConstants);FX_NO_TO_LOWER_INVARIANT - $(DefineConstants);FX_NO_REGISTERED_WAIT_HANDLES - $(DefineConstants);FX_NO_THREAD_STATIC - $(DefineConstants);FX_NO_GET_HASH_CODE_HELPER - $(DefineConstants);FX_NO_FILE_OPTIONS - $(DefineConstants);FX_NO_LOGN - $(DefineConstants);FX_NO_DOUBLE_BIT_CONVERTER - $(DefineConstants);FX_NO_BINARY_SERIALIZATION - $(DefineConstants);FX_NO_COMMAND_LINE_ARGS - $(DefineConstants);FX_NO_ENVIRONMENT - $(DefineConstants);FX_NO_PROCESS_DIAGNOSTICS - $(DefineConstants);FX_NO_STRING_SPLIT_OPTIONS - $(DefineConstants);FX_NO_APP_DOMAINS - $(DefineConstants);FX_NO_CREATE_DELEGATE - $(DefineConstants);FX_NO_WEB_REQUESTS - $(DefineConstants);FX_NO_WEB_CLIENT - $(DefineConstants);FX_NO_PARAMETERIZED_THREAD_START - $(DefineConstants);FX_NO_STRUCTURAL_EQUALITY - $(DefineConstants);FX_NO_IOBSERVABLE - $(DefineConstants);FX_NO_LAZY - $(DefineConstants);FX_NO_TUPLE - $(DefineConstants);FX_NO_DELEGATE_CREATE_DELEGATE_FROM_STATIC_METHOD - - $(OtherFlags) --simpleresolution -r:"C:\Program Files\Microsoft.NET\SDK\CompactFramework\v3.5\WindowsCE\mscorlib.dll" -r:"C:\Program Files\Microsoft.NET\SDK\CompactFramework\v3.5\WindowsCE\System.dll" - - -proto @@ -740,12 +377,27 @@ - - ..\lkg\FSharp-$(LkgVersion)\bin\Microsoft.FSharp.Targets - $(FSharpSourcesRoot)\..\lkg\bin\Debug\dnxcore50\win7-x64\publish - $(FSharpSourcesRoot)\..\lkg\FSharp-$(LkgVersion)\bin - $(FSLKGPath)\FSharp.Core.dll - + + + + ..\lkg\FSharp-$(LkgVersion)\bin\Microsoft.FSharp.Targets + $(FSharpSourcesRoot)\..\Tools\dotnetcli + dotnet.exe + $(FSharpSourcesRoot)\..\Tools\lkg\fsc.exe + $(FSharpSourcesRoot)\..\lkg\FSharp-$(LkgVersion)\bin + $(FSLKGPath)\FSharp.Core.dll + + + + + ..\lkg\FSharp-$(LkgVersion)\bin\Microsoft.FSharp.Targets + $(FSharpSourcesRoot)\..\lkg\FSharp-$(LkgVersion)\bin + + $(FSharpSourcesRoot)\..\lkg\FSharp-$(LkgVersion)\bin + $(FSLKGPath)\FSharp.Core.dll + + + @@ -764,20 +416,20 @@ - $(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\4.1\Framework\v4.0\Microsoft.FSharp.Targets + $(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\4.1\Framework\v4.0\Microsoft.FSharp.Targets - $(MSBuildExtensionsPath32)\..\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.4.1.0 - $(FSLKGPath)\FSharp.Core.dll + $(MSBuildExtensionsPath32)\..\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.4.1.0 + $(FSLKGPath)\FSharp.Core.dll - $(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\4.0\Framework\v4.0\Microsoft.FSharp.Targets + $(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\4.0\Framework\v4.0\Microsoft.FSharp.Targets - $(MSBuildExtensionsPath32)\..\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.4.0.0 - $(FSLKGPath)\FSharp.Core.dll + $(MSBuildExtensionsPath32)\..\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.4.0.0 + $(FSLKGPath)\FSharp.Core.dll @@ -785,26 +437,26 @@ $(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.1\Framework\v4.0\Microsoft.FSharp.Targets - $(MSBuildExtensionsPath32)\..\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.1.0 - $(FSLKGPath)\FSharp.Core.dll + $(MSBuildExtensionsPath32)\..\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.1.0 + $(FSLKGPath)\FSharp.Core.dll - $(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets + $(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets - $(MSBuildExtensionsPath32)\..\Reference Assemblies\Microsoft\FSharp\3.0\Runtime\v4.0 - $(FSLKGPath)\FSharp.Core.dll + $(MSBuildExtensionsPath32)\..\Reference Assemblies\Microsoft\FSharp\3.0\Runtime\v4.0 + $(FSLKGPath)\FSharp.Core.dll - $(MSBuildExtensionsPath32)\..\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.0.0 - $(FSLKGPath)\FSharp.Core.dll + $(MSBuildExtensionsPath32)\..\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.0.0 + $(FSLKGPath)\FSharp.Core.dll - $(MSBuildExtensionsPath32)\FSharp\1.0\Microsoft.FSharp.Targets + $(MSBuildExtensionsPath32)\FSharp\1.0\Microsoft.FSharp.Targets @@ -852,10 +504,7 @@ - + (g.obj_ty --> g.int_ty) let mkCompareTy g ty = (mkThisTy g ty) --> (ty --> g.int_ty) -let mkCompareWithComparerTy g ty = (mkThisTy g ty) --> ((mkTupleTy [g.obj_ty ; g.mk_IComparer_ty]) --> g.int_ty) +let mkCompareWithComparerTy g ty = (mkThisTy g ty) --> ((mkRefTupledTy g [g.obj_ty ; g.mk_IComparer_ty]) --> g.int_ty) let mkEqualsObjTy g ty = (mkThisTy g ty) --> (g.obj_ty --> g.bool_ty) let mkEqualsTy g ty = (mkThisTy g ty) --> (ty --> g.bool_ty) -let mkEqualsWithComparerTy g ty = (mkThisTy g ty) --> ((mkTupleTy [g.obj_ty ; g.mk_IEqualityComparer_ty]) --> g.bool_ty) +let mkEqualsWithComparerTy g ty = (mkThisTy g ty) --> ((mkRefTupledTy g [g.obj_ty ; g.mk_IEqualityComparer_ty]) --> g.bool_ty) let mkHashTy g ty = (mkThisTy g ty) --> (g.unit_ty --> g.int_ty) let mkHashWithComparerTy g ty = (mkThisTy g ty) --> (g.mk_IEqualityComparer_ty --> g.int_ty) @@ -850,24 +850,24 @@ let TyconIsCandidateForAugmentationWithHash g tycon = TyconIsCandidateForAugment //------------------------------------------------------------------------- let slotImplMethod (final,c,slotsig) : ValMemberInfo = - { ImplementedSlotSigs=[slotsig]; + { ImplementedSlotSigs=[slotsig] MemberFlags= - { IsInstance=true; - IsDispatchSlot=false; - IsFinal=final; - IsOverrideOrExplicitImpl=true; - MemberKind=MemberKind.Member}; - IsImplemented=false; + { IsInstance=true + IsDispatchSlot=false + IsFinal=final + IsOverrideOrExplicitImpl=true + MemberKind=MemberKind.Member} + IsImplemented=false ApparentParent=c} let nonVirtualMethod c : ValMemberInfo = - { ImplementedSlotSigs=[]; - MemberFlags={ IsInstance=true; - IsDispatchSlot=false; - IsFinal=false; - IsOverrideOrExplicitImpl=false; - MemberKind=MemberKind.Member}; - IsImplemented=false; + { ImplementedSlotSigs=[] + MemberFlags={ IsInstance=true + IsDispatchSlot=false + IsFinal=false + IsOverrideOrExplicitImpl=false + MemberKind=MemberKind.Member} + IsImplemented=false ApparentParent=c} let unitArg = ValReprInfo.unitArgData @@ -945,7 +945,7 @@ let MakeBindingsForCompareAugmentation g (tycon:Tycon) = let thisv,thatv,comparee = comparef g tcref tycon mkLambdas m tps [thisv;thatv] (comparee,g.int_ty) [ // This one must come first because it may be inlined into the second - mkCompGenBind vspec2 rhs2; + mkCompGenBind vspec2 rhs2 mkCompGenBind vspec1 rhs1; ] if tycon.IsUnionTycon then mkCompare mkUnionCompare elif tycon.IsRecordTycon || tycon.IsStructOrEnumTycon then mkCompare mkRecdCompare @@ -1016,8 +1016,8 @@ let MakeBindingsForEqualityWithComparerAugmentation g (tycon:Tycon) = mkLambdas m tps [thisv; unitv] (hashe,g.int_ty) - [(mkCompGenBind withcGetHashCodeVal.Deref withcGetHashCodeExpr) ; - (mkCompGenBind objGetHashCodeVal.Deref objGetHashCodeExpr) ; + [(mkCompGenBind withcGetHashCodeVal.Deref withcGetHashCodeExpr) + (mkCompGenBind objGetHashCodeVal.Deref objGetHashCodeExpr) (mkCompGenBind withcEqualsVal.Deref withcEqualsExpr)] if tycon.IsUnionTycon then mkStructuralEquatable mkUnionHashWithComparer mkUnionEqualityWithComparer elif (tycon.IsRecordTycon || tycon.IsStructOrEnumTycon) then mkStructuralEquatable mkRecdHashWithComparer mkRecdEqualityWithComparer @@ -1054,8 +1054,8 @@ let MakeBindingsForEqualsAugmentation g (tycon:Tycon) = mkLambdas m tps [thisv;thatobjv] (equalse,g.bool_ty) - [ mkCompGenBind nocEqualsVal.Deref nocEqualsExpr; - mkCompGenBind objEqualsVal.Deref objEqualsExpr; ] + [ mkCompGenBind nocEqualsVal.Deref nocEqualsExpr + mkCompGenBind objEqualsVal.Deref objEqualsExpr ] if tycon.IsExceptionDecl then mkEquals mkExnEquality elif tycon.IsUnionTycon then mkEquals mkUnionEquality elif tycon.IsRecordTycon || tycon.IsStructOrEnumTycon then mkEquals mkRecdEquality diff --git a/src/fsharp/CheckFormatStrings.fs b/src/fsharp/CheckFormatStrings.fs index d70062daf76..81bed8dd258 100644 --- a/src/fsharp/CheckFormatStrings.fs +++ b/src/fsharp/CheckFormatStrings.fs @@ -296,7 +296,7 @@ let parseFormatStringInternal (m:range) g (source: string option) fmt bty cty = let ParseFormatString m g source fmt bty cty dty = let argtys, specifierLocations = parseFormatStringInternal m g source fmt bty cty let aty = List.foldBack (-->) argtys dty - let ety = mkTupledTy g argtys + let ety = mkRefTupledTy g argtys (aty, ety), specifierLocations let TryCountFormatStringArguments m g fmt bty cty = diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs old mode 100755 new mode 100644 index f820d62d023..99966e12aaf --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -1102,7 +1102,7 @@ let OutputPhasedErrorR (os:System.Text.StringBuilder) (err:PhasedError) = #if DEBUG if not foundInContext then - Printf.bprintf os ". (no 'in' context found: %+A)" (List.map (List.map Parser.prodIdxToNonTerminal) ctxt.ReducibleProductions); + Printf.bprintf os ". (no 'in' context found: %+A)" (List.map (List.map Parser.prodIdxToNonTerminal) ctxt.ReducibleProductions) #else foundInContext |> ignore // suppress unused variable warning in RELEASE #endif @@ -1257,7 +1257,7 @@ let OutputPhasedErrorR (os:System.Text.StringBuilder) (err:PhasedError) = | LibraryUseOnly(_) -> os.Append(LibraryUseOnlyE().Format) |> ignore | MissingFields(sl,_) -> os.Append(MissingFieldsE().Format (String.concat "," sl + ".")) |> ignore | ValueRestriction(denv,hassig,v,_,_) -> - let denv = { denv with showImperativeTyparAnnotations=true; } + let denv = { denv with showImperativeTyparAnnotations=true } let tau = v.TauType if hassig then if isFunTy denv.g tau && (arityOfVal v).HasNoArgs then @@ -1476,10 +1476,10 @@ let CollectErrorOrWarning (implicitIncludeDir,showFullPaths,flattenErrors,errorS match err.Exception with | ReportedError _ -> - dprintf "Unexpected ReportedError" (* this should actually never happen *) + assert ("" = "Unexpected ReportedError") // this should never happen Seq.empty | StopProcessing -> - dprintf "Unexpected StopProcessing" (* this should actually never happen *) + assert ("" = "Unexpected StopProcessing") // this should never happen Seq.empty | _ -> let errors = ResizeArray() @@ -1493,8 +1493,8 @@ let CollectErrorOrWarning (implicitIncludeDir,showFullPaths,flattenErrors,errorS let text = match errorStyle with // Show the subcategory for --vserrors so that we can fish it out in Visual Studio and use it to determine error stickiness. - | ErrorStyle.VSErrors -> sprintf "%s %s FS%04d: " subcategory (if warn then "warning" else "error") errorNumber; - | _ -> sprintf "%s FS%04d: " (if warn then "warning" else "error") (GetErrorNumber err); + | ErrorStyle.VSErrors -> sprintf "%s %s FS%04d: " subcategory (if warn then "warning" else "error") errorNumber + | _ -> sprintf "%s FS%04d: " (if warn then "warning" else "error") (GetErrorNumber err) { ErrorNumber = errorNumber; Subcategory = subcategory; TextRepresentation = text} let mainError,relatedErrors = SplitRelatedErrors err @@ -1502,7 +1502,7 @@ let CollectErrorOrWarning (implicitIncludeDir,showFullPaths,flattenErrors,errorS let canonical = OutputCanonicalInformation(mainError,err.Subcategory(),GetErrorNumber mainError) let message = let os = System.Text.StringBuilder() - OutputPhasedError os mainError flattenErrors; + OutputPhasedError os mainError flattenErrors os.ToString() let entry : DetailedIssueInfo = { Location = where; Canonical = canonical; Message = message } @@ -1571,7 +1571,7 @@ let OutputErrorOrWarningContext prefix fileLineFn os err = let iA = m.StartColumn let iB = m.EndColumn let iLen = if lineA = lineB then max (iB - iA) 1 else 1 - Printf.bprintf os "%s%s\n" prefix line; + Printf.bprintf os "%s%s\n" prefix line Printf.bprintf os "%s%s%s\n" prefix (String.make iA '-') (String.make iLen '^') //---------------------------------------------------------------------------- @@ -1579,9 +1579,9 @@ let OutputErrorOrWarningContext prefix fileLineFn os err = let GetFSharpCoreLibraryName () = "FSharp.Core" type internal TypeInThisAssembly = class end -let GetFSharpCoreReferenceUsedByCompiler(useMonoResolution) = +let GetFSharpCoreReferenceUsedByCompiler(useSimpleResolution) = // On Mono, there is no good reference resolution - if useMonoResolution then + if useSimpleResolution then GetFSharpCoreLibraryName()+".dll" else let fsCoreName = GetFSharpCoreLibraryName() @@ -1618,22 +1618,28 @@ let DefaultBasicReferencesForOutOfProjectSources = yield "System.Runtime.Serialization.Formatters.Soap" yield "System.Data" yield "System.Drawing" - - // Don't reference System.Core for .NET 2.0 compilations. - // - // We only use a default reference to System.Core if one exists which we can load it into the compiler process. - // Note: this is not a partiuclarly good technique as it relying on the environment the compiler is executing in - // to determine the default references. However, System.Core will only fail to load on machines with only .NET 2.0, - // in which case the compiler will also be running as a .NET 2.0 process. - // - // NOTE: it seems this can now be removed now that .NET 4.x is minimally assumed when using this toolchain - if (try System.Reflection.Assembly.Load(new System.Reflection.AssemblyName("System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")) |> ignore; true with _ -> false) then - yield "System.Core" - - yield "System.Runtime" + yield "System.Core" + // These are the Portable-profile and .NET Standard 1.6 dependencies of FSharp.Core.dll. These are needed + // when an F# sript references an F# profile 7, 78, 259 or .NET Standard 1.6 component which in turn refers + // to FSharp.Core for profile 7, 78, 259 or .NET Standard. + yield "System.Runtime" // lots of types + yield "System.Linq" // System.Linq.Expressions.Expression + yield "System.Reflection" // System.Reflection.ParameterInfo + yield "System.Linq.Expressions" // System.Linq.IQueryable + yield "System.Threading.Tasks" // valuetype [System.Threading.Tasks]System.Threading.CancellationToken + yield "System.IO" // System.IO.TextWriter + //yield "System.Console" // System.Console.Out etc. + yield "System.Net.Requests" // System.Net.WebResponse etc. + yield "System.Collections" // System.Collections.Generic.List + yield "System.Runtime.Numerics" // BigInteger + yield "System.Threading" // OperationCanceledException + +#if !TODO_REWORK_ASSEMBLY_LOAD yield "System.Web" yield "System.Web.Services" - yield "System.Windows.Forms" ] + yield "System.Windows.Forms" +#endif + ] // Extra implicit references for .NET 4.0 let DefaultBasicReferencesForOutOfProjectSources40 = @@ -1660,6 +1666,7 @@ let SystemAssemblies primaryAssemblyName = yield "System.Runtime" yield "System.Observable" yield "System.Numerics" + yield "System.ValueTuple" // Additions for coreclr and portable profiles yield "System.Collections" @@ -1698,8 +1705,8 @@ let SystemAssemblies primaryAssemblyName = // // REVIEW: it isn't clear if there is any negative effect // of leaving an assembly off this list. -let BasicReferencesForScriptLoadClosure(useMonoResolution, useFsiAuxLib) = - ["mscorlib"; GetFSharpCoreReferenceUsedByCompiler(useMonoResolution) ] @ // Need to resolve these explicitly so they will be found in the reference assemblies directory which is where the .xml files are. +let BasicReferencesForScriptLoadClosure(useSimpleResolution, useFsiAuxLib) = + ["mscorlib"; GetFSharpCoreReferenceUsedByCompiler(useSimpleResolution) ] @ // Need to resolve these explicitly so they will be found in the reference assemblies directory which is where the .xml files are. DefaultBasicReferencesForOutOfProjectSources @ [ if useFsiAuxLib then yield GetFsiLibraryName () ] @@ -1723,7 +1730,7 @@ let TryResolveFileUsingPaths(paths,m,name) = let n = Path.Combine (path, name) if FileSystem.SafeExists n then Some n else None) - res + res /// Will raise FileNameNotResolved if the filename was not found let ResolveFileUsingPaths(paths,m,name) = @@ -1732,12 +1739,12 @@ let ResolveFileUsingPaths(paths,m,name) = | None -> let searchMessage = String.concat "\n " paths raise (FileNameNotResolved(name,searchMessage,m)) - + let GetWarningNumber(m,s:string) = try Some (int32 s) with err -> - warning(Error(FSComp.SR.buildInvalidWarningNumber(s),m)); + warning(Error(FSComp.SR.buildInvalidWarningNumber(s),m)) None let ComputeMakePathAbsolute implicitIncludeDir (path : string) = @@ -1752,7 +1759,7 @@ let ComputeMakePathAbsolute implicitIncludeDir (path : string) = //---------------------------------------------------------------------------- // Configuration -//-------------------------------------------------------------------------- +//---------------------------------------------------------------------------- type CompilerTarget = | WinExe @@ -1772,20 +1779,20 @@ type VersionFlag = let vstr = x.GetVersionString(implicitIncludeDir) try IL.parseILVersion vstr - with _ -> errorR(Error(FSComp.SR.buildInvalidVersionString(vstr),rangeStartup)) ; IL.parseILVersion "0.0.0.0" - + with _ -> errorR(Error(FSComp.SR.buildInvalidVersionString(vstr),rangeStartup)); IL.parseILVersion "0.0.0.0" + member x.GetVersionString(implicitIncludeDir) = match x with | VersionString s -> s | VersionFile s -> let s = if FileSystem.IsPathRootedShim(s) then s else Path.Combine(implicitIncludeDir,s) if not(FileSystem.SafeExists(s)) then - errorR(Error(FSComp.SR.buildInvalidVersionFile(s),rangeStartup)) ; "0.0.0.0" + errorR(Error(FSComp.SR.buildInvalidVersionFile(s),rangeStartup)); "0.0.0.0" else use is = System.IO.File.OpenText s is.ReadLine() | VersionNone -> "0.0.0.0" - + /// Represents a reference to an assembly. May be backed by a real assembly on disk, or a cross-project /// reference backed by information generated by the the compiler service. @@ -1837,24 +1844,24 @@ type ResolvedExtensionReference = ResolvedExtensionReference of string * Assembl #endif type ImportedBinary = - { FileName: string; - RawMetadata: IRawFSharpAssemblyData; + { FileName: string + RawMetadata: IRawFSharpAssemblyData #if EXTENSIONTYPING ProviderGeneratedAssembly: System.Reflection.Assembly option - IsProviderGenerated: bool; + IsProviderGenerated: bool ProviderGeneratedStaticLinkMap : ProvidedAssemblyStaticLinkingMap option #endif - ILAssemblyRefs : ILAssemblyRef list; + ILAssemblyRefs : ILAssemblyRef list ILScopeRef: ILScopeRef } type ImportedAssembly = - { ILScopeRef: ILScopeRef; - FSharpViewOfMetadata: CcuThunk; - AssemblyAutoOpenAttributes: string list; - AssemblyInternalsVisibleToAttributes: string list; + { ILScopeRef: ILScopeRef + FSharpViewOfMetadata: CcuThunk + AssemblyAutoOpenAttributes: string list + AssemblyInternalsVisibleToAttributes: string list #if EXTENSIONTYPING IsProviderGenerated: bool - mutable TypeProviders: Tainted list; + mutable TypeProviders: Tainted list #endif FSharpOptimizationData : Microsoft.FSharp.Control.Lazy> } @@ -1879,7 +1886,7 @@ type ISystemRuntimeCcuInitializer = abstract EndLoadingSystemRuntime : state : obj * resolver : (CcuLoadFailureAction -> AssemblyReference -> ImportedAssembly option) -> ImportedAssembly type NetCoreSystemRuntimeTraits(primaryAssembly) = - + let valueOf name hole = match hole with | Some assembly -> assembly @@ -1966,55 +1973,55 @@ let getSystemRuntimeInitializer (primaryAssembly: PrimaryAssembly) (mkReference type TcConfigBuilder = - { mutable primaryAssembly : PrimaryAssembly; - mutable autoResolveOpenDirectivesToDlls: bool; - mutable noFeedback: bool; - mutable stackReserveSize: int32 option; - mutable implicitIncludeDir: string; (* normally "." *) - mutable openBinariesInMemory: bool; (* false for command line, true for VS *) - mutable openDebugInformationForLaterStaticLinking: bool; (* only for --standalone *) - defaultFSharpBinariesDir: string; - mutable compilingFslib: bool; - mutable compilingFslib20: string option; - mutable compilingFslib40: bool; - mutable useIncrementalBuilder: bool; - mutable includes: string list; - mutable implicitOpens: string list; - mutable useFsiAuxLib: bool; - mutable framework: bool; + { mutable primaryAssembly : PrimaryAssembly + mutable autoResolveOpenDirectivesToDlls: bool + mutable noFeedback: bool + mutable stackReserveSize: int32 option + mutable implicitIncludeDir: string (* normally "." *) + mutable openBinariesInMemory: bool (* false for command line, true for VS *) + mutable openDebugInformationForLaterStaticLinking: bool (* only for --standalone *) + defaultFSharpBinariesDir: string + mutable compilingFslib: bool + mutable compilingFslib20: string option + mutable compilingFslib40: bool + mutable useIncrementalBuilder: bool + mutable includes: string list + mutable implicitOpens: string list + mutable useFsiAuxLib: bool + mutable framework: bool mutable resolutionEnvironment : Microsoft.FSharp.Compiler.MSBuildResolver.ResolutionEnvironment - mutable implicitlyResolveAssemblies: bool; - mutable addVersionSpecificFrameworkReferences: bool; - mutable light: bool option; - mutable conditionalCompilationDefines: string list; - mutable loadedSources: (range * string) list; - mutable referencedDLLs : AssemblyReference list; - mutable projectReferences : IProjectReference list; - mutable knownUnresolvedReferences : UnresolvedAssemblyReference list; - optimizeForMemory: bool; + mutable implicitlyResolveAssemblies: bool + mutable addVersionSpecificFrameworkReferences: bool + mutable light: bool option + mutable conditionalCompilationDefines: string list + mutable loadedSources: (range * string) list + mutable referencedDLLs : AssemblyReference list + mutable projectReferences : IProjectReference list + mutable knownUnresolvedReferences : UnresolvedAssemblyReference list + optimizeForMemory: bool mutable subsystemVersion : int * int mutable useHighEntropyVA : bool - mutable inputCodePage: int option; - mutable embedResources : string list; - mutable globalWarnAsError: bool; - mutable globalWarnLevel: int; - mutable specificWarnOff: int list; - mutable specificWarnOn: int list; + mutable inputCodePage: int option + mutable embedResources : string list + mutable globalWarnAsError: bool + mutable globalWarnLevel: int + mutable specificWarnOff: int list + mutable specificWarnOn: int list mutable specificWarnAsError: int list mutable specificWarnAsWarn : int list - mutable mlCompatibility: bool; - mutable checkOverflow: bool; - mutable showReferenceResolutions:bool; - mutable outputFile : string option; - mutable resolutionFrameworkRegistryBase : string; - mutable resolutionAssemblyFoldersSuffix : string; - mutable resolutionAssemblyFoldersConditions : string; - mutable platform : ILPlatform option; - mutable prefer32Bit : bool; - mutable useMonoResolution : bool + mutable mlCompatibility: bool + mutable checkOverflow: bool + mutable showReferenceResolutions:bool + mutable outputFile : string option + mutable resolutionFrameworkRegistryBase : string + mutable resolutionAssemblyFoldersSuffix : string + mutable resolutionAssemblyFoldersConditions : string + mutable platform : ILPlatform option + mutable prefer32Bit : bool + mutable useSimpleResolution : bool mutable target : CompilerTarget mutable debuginfo : bool - mutable testFlagEmitFeeFeeAs100001 : bool; + mutable testFlagEmitFeeFeeAs100001 : bool mutable dumpDebugInfo : bool mutable debugSymbolFile : string option (* Backend configuration *) @@ -2045,6 +2052,7 @@ type TcConfigBuilder = mutable onlyEssentialOptimizationData : bool mutable useOptimizationDataFile : bool mutable useSignatureDataFile : bool + mutable jitTracking : bool mutable portablePDB : bool mutable ignoreSymbolStoreSequencePoints : bool mutable internConstantStrings : bool @@ -2055,7 +2063,6 @@ type TcConfigBuilder = mutable includewin32manifest : bool mutable linkResources : string list - mutable showFullPaths : bool mutable errorStyle : ErrorStyle mutable utf8output : bool @@ -2131,56 +2138,52 @@ type TcConfigBuilder = System.Diagnostics.Debug.Assert(FileSystem.IsPathRootedShim(implicitIncludeDir), sprintf "implicitIncludeDir should be absolute: '%s'" implicitIncludeDir) if (String.IsNullOrEmpty(defaultFSharpBinariesDir)) then failwith "Expected a valid defaultFSharpBinariesDir" - { primaryAssembly = PrimaryAssembly.Mscorlib; // defaut value, can be overridden using the command line switch - light = None; - noFeedback=false; - stackReserveSize=None; - conditionalCompilationDefines=[]; - implicitIncludeDir = implicitIncludeDir; - autoResolveOpenDirectivesToDlls = false; - openBinariesInMemory = false; - openDebugInformationForLaterStaticLinking=false; - defaultFSharpBinariesDir=defaultFSharpBinariesDir; - compilingFslib=false; - compilingFslib20=None; - compilingFslib40=false; - useIncrementalBuilder=false; - useFsiAuxLib=false; - implicitOpens=[]; - includes=[]; + { primaryAssembly = PrimaryAssembly.Mscorlib // defaut value, can be overridden using the command line switch + light = None + noFeedback=false + stackReserveSize=None + conditionalCompilationDefines=[] + implicitIncludeDir = implicitIncludeDir + autoResolveOpenDirectivesToDlls = false + openBinariesInMemory = false + openDebugInformationForLaterStaticLinking=false + defaultFSharpBinariesDir=defaultFSharpBinariesDir + compilingFslib=false + compilingFslib20=None + compilingFslib40=false + useIncrementalBuilder=false + useFsiAuxLib=false + implicitOpens=[] + includes=[] resolutionEnvironment=MSBuildResolver.CompileTimeLike - framework=true; - implicitlyResolveAssemblies=true; - addVersionSpecificFrameworkReferences=false; - referencedDLLs = []; - projectReferences = []; - knownUnresolvedReferences = []; - loadedSources = []; - globalWarnAsError=false; - globalWarnLevel=3; - specificWarnOff=[]; - specificWarnOn=[]; + framework=true + implicitlyResolveAssemblies=true + addVersionSpecificFrameworkReferences=false + referencedDLLs = [] + projectReferences = [] + knownUnresolvedReferences = [] + loadedSources = [] + globalWarnAsError=false + globalWarnLevel=3 + specificWarnOff=[] + specificWarnOn=[] specificWarnAsError=[] specificWarnAsWarn=[] - embedResources = []; - inputCodePage=None; - optimizeForMemory=optimizeForMemory; + embedResources = [] + inputCodePage=None + optimizeForMemory=optimizeForMemory subsystemVersion = 4,0 // per spec for 357994 useHighEntropyVA = false - mlCompatibility=false; - checkOverflow=false; - showReferenceResolutions=false; - outputFile=None; - resolutionFrameworkRegistryBase = "Software\Microsoft\.NetFramework"; - resolutionAssemblyFoldersSuffix = "AssemblyFoldersEx"; - resolutionAssemblyFoldersConditions = ""; - platform = None; - prefer32Bit = false; -#if ENABLE_MONO_SUPPORT - useMonoResolution = runningOnMono -#else - useMonoResolution = false -#endif + mlCompatibility=false + checkOverflow=false + showReferenceResolutions=false + outputFile=None + resolutionFrameworkRegistryBase = "Software\Microsoft\.NetFramework" + resolutionAssemblyFoldersSuffix = "AssemblyFoldersEx" + resolutionAssemblyFoldersConditions = "" + platform = None + prefer32Bit = false + useSimpleResolution = runningOnMono target = ConsoleExe debuginfo = false testFlagEmitFeeFeeAs100001 = false @@ -2218,6 +2221,7 @@ type TcConfigBuilder = onlyEssentialOptimizationData = false useOptimizationDataFile = false useSignatureDataFile = false + jitTracking = true portablePDB = true ignoreSymbolStoreSequencePoints = false internConstantStrings = true @@ -2239,7 +2243,7 @@ type TcConfigBuilder = #endif showTerms = false writeTermsToFiles = false - + doDetuple = false doTLR = false doFinalSimplify = false @@ -2252,7 +2256,7 @@ type TcConfigBuilder = lcid = None #endif // See bug 6071 for product banner spec - productNameForBannerText = (FSComp.SR.buildProductName(FSharpEnvironment.DotNetBuildString)) + productNameForBannerText = (FSComp.SR.buildProductName(FSharpEnvironment.FSharpBannerVersion)) showBanner = true showTimes = false showLoadedAssemblies = false @@ -2283,7 +2287,7 @@ type TcConfigBuilder = /// Decide names of output file, pdb and assembly member tcConfigB.DecideNames sourceFiles = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parameter) - if sourceFiles = [] then errorR(Error(FSComp.SR.buildNoInputsSpecified(),rangeCmdArgs)); + if sourceFiles = [] then errorR(Error(FSComp.SR.buildNoInputsSpecified(),rangeCmdArgs)) let ext() = match tcConfigB.target with Dll -> ".dll" | Module -> ".netmodule" | ConsoleExe | WinExe -> ".exe" let implFiles = sourceFiles |> List.filter (fun lower -> List.exists (Filename.checkSuffix (String.lowercase lower)) FSharpImplFileSuffixes) let outfile = @@ -2305,7 +2309,7 @@ type TcConfigBuilder = #if ENABLE_MONO_SUPPORT | Some _ when runningOnMono -> // On Mono, the name of the debug file has to be ".mdb" so specifying it explicitly is an error - warning(Error(FSComp.SR.ilwriteMDBFileNameCannotBeChangedWarning(),rangeCmdArgs)) ; () + warning(Error(FSComp.SR.ilwriteMDBFileNameCannotBeChangedWarning(),rangeCmdArgs)) Microsoft.FSharp.Compiler.AbstractIL.ILPdbWriter.getDebugFileName outfile #endif | Some f -> f) @@ -2322,7 +2326,7 @@ type TcConfigBuilder = | None -> () | Some n -> // nowarn:62 turns on mlCompatibility, e.g. shows ML compat items in intellisense menus - if n = 62 then tcConfigB.mlCompatibility <- true; + if n = 62 then tcConfigB.mlCompatibility <- true tcConfigB.specificWarnOff <- ListSet.insert (=) n tcConfigB.specificWarnOff member tcConfigB.TurnWarningOn(m, s:string) = @@ -2331,7 +2335,7 @@ type TcConfigBuilder = | None -> () | Some n -> // warnon 62 turns on mlCompatibility, e.g. shows ML compat items in intellisense menus - if n = 62 then tcConfigB.mlCompatibility <- false; + if n = 62 then tcConfigB.mlCompatibility <- false tcConfigB.specificWarnOn <- ListSet.insert (=) n tcConfigB.specificWarnOn member tcConfigB.AddIncludePath (m,path,pathIncludedFrom) = @@ -2342,7 +2346,7 @@ type TcConfigBuilder = with e -> warning(Error(FSComp.SR.buildInvalidSearchDirectory(path),m)); None match existsOpt with | Some(exists) -> - if not exists then warning(Error(FSComp.SR.buildSearchDirectoryNotFound(absolutePath),m)); + if not exists then warning(Error(FSComp.SR.buildSearchDirectoryNotFound(absolutePath),m)) exists | None -> false if ok && not (List.contains absolutePath tcConfigB.includes) then @@ -2409,8 +2413,8 @@ let OpenILBinary(filename,optimizeForMemory,openBinariesInMemory,ilGlobalsOpt, p // fsc.exe does not uses optimizeForMemory (hence keeps MORE caches in AbstractIL) // fsi.exe does use optimizeForMemory (hence keeps FEWER caches in AbstractIL), because its long running // Visual Studio does use optimizeForMemory (hence keeps FEWER caches in AbstractIL), because its long running - ILBinaryReader.optimizeForMemory=optimizeForMemory; - ILBinaryReader.pdbPath = pdbPathOption; } + ILBinaryReader.optimizeForMemory=optimizeForMemory + ILBinaryReader.pdbPath = pdbPathOption } // Visual Studio uses OpenILModuleReaderAfterReadingAllBytes for all DLLs to avoid having to dispose of any readers explicitly if openBinariesInMemory // && not syslib @@ -2515,7 +2519,7 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = else // If the file doesn't exist, let reference resolution logic report the error later... defaultCoreLibraryReference, if r.Range =rangeStartup then Some(filename) else None - match data.referencedDLLs |> List.filter(fun assemblyReference -> assemblyReference.SimpleAssemblyNameIs libraryName) with + match data.referencedDLLs |> List.filter (fun assemblyReference -> assemblyReference.SimpleAssemblyNameIs libraryName) with | [r] -> nameOfDll r | [] -> defaultCoreLibraryReference, None @@ -2531,7 +2535,7 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = match fileNameOpt with | None -> // if FSharp.Core was not provided explicitly - use version that was referenced by compiler - AssemblyReference(range0, GetFSharpCoreReferenceUsedByCompiler(data.useMonoResolution), None), None + AssemblyReference(range0, GetFSharpCoreReferenceUsedByCompiler(data.useSimpleResolution), None), None | _ -> res let primaryAssemblyCcuInitializer = getSystemRuntimeInitializer data.primaryAssembly (computeKnownDllReference >> fst) @@ -2564,7 +2568,13 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = with _ -> error(Error(FSComp.SR.buildCannotReadAssembly(filename),rangeStartup)) | _ -> - None, MSBuildResolver.HighestInstalledNetFrameworkVersionMajorMinor(), false +#if !ENABLE_MONO_SUPPORT + // TODO: we have to get msbuild out of this + if data.useSimpleResolution then + None, (0, ""), false + else +#endif + None, MSBuildResolver.HighestInstalledNetFrameworkVersionMajorMinor(), false // Note: anycpu32bitpreferred can only be used with .Net version 4.5 and above // but now there is no way to discriminate between 4.0 and 4.5, @@ -2667,7 +2677,7 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = member x.resolutionAssemblyFoldersConditions = data. resolutionAssemblyFoldersConditions member x.platform = data.platform member x.prefer32Bit = data.prefer32Bit - member x.useMonoResolution = data.useMonoResolution + member x.useSimpleResolution = data.useSimpleResolution member x.target = data.target member x.debuginfo = data.debuginfo member x.testFlagEmitFeeFeeAs100001 = data.testFlagEmitFeeFeeAs100001 @@ -2699,6 +2709,7 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = member x.onlyEssentialOptimizationData = data.onlyEssentialOptimizationData member x.useOptimizationDataFile = data.useOptimizationDataFile member x.useSignatureDataFile = data.useSignatureDataFile + member x.jitTracking = data.jitTracking member x.portablePDB = data.portablePDB member x.ignoreSymbolStoreSequencePoints = data.ignoreSymbolStoreSequencePoints member x.internConstantStrings = data.internConstantStrings @@ -2805,9 +2816,7 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = else Some(m,path) with e -> errorRecovery e m; None tcConfig.loadedSources - |> List.map resolveLoadedSource - |> List.filter Option.isSome - |> List.map Option.get + |> List.choose resolveLoadedSource |> List.distinct /// A closed set of assemblies where, for any subset S: @@ -2826,7 +2835,7 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = (systemAssemblies |> List.exists (fun sysFile -> sysFile = fileNameWithoutExtension filename))) with _ -> false - + // This is not the complete set of search paths, it is just the set // that is special to F# (as compared to MSBuild resolution) member tcConfig.SearchPathsForLibraryFiles = @@ -2837,11 +2846,8 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = member tcConfig.MakePathAbsolute path = let result = ComputeMakePathAbsolute tcConfig.implicitIncludeDir path -#if TRACK_DOWN_EXTRA_BACKSLASHES - System.Diagnostics.Debug.Assert(not(result.Contains(@"\\")), "tcConfig.MakePathAbsolute results in a non-canonical filename with extra backslashes: "+result) -#endif result - + member tcConfig.TryResolveLibWithDirectories (r:AssemblyReference) = let m,nm = r.Range, r.Text use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parameter) @@ -2857,12 +2863,12 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = let sysdir = tcConfig.IsSystemAssembly resolved let fusionName = resolved Some - { originalReference = r; - resolvedPath = resolved; - resolvedFrom = Unknown; - fusionName = fusionName; - redist = null; - sysdir = sysdir; + { originalReference = r + resolvedPath = resolved + resolvedFrom = Unknown + fusionName = fusionName + redist = null + sysdir = sysdir ilAssemblyRef = ref None } | None -> @@ -2895,16 +2901,16 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = with e -> "" Some - { originalReference = r; - resolvedPath = resolved; - resolvedFrom = Unknown; - fusionName = fusionName; - redist = null; - sysdir = sysdir; + { originalReference = r + resolvedPath = resolved + resolvedFrom = Unknown + fusionName = fusionName + redist = null + sysdir = sysdir ilAssemblyRef = ref None } | None -> None else None - + member tcConfig.ResolveLibWithDirectories ccuLoadFaulureAction (r:AssemblyReference) = let m,nm = r.Range, r.Text use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parameter) @@ -2942,7 +2948,7 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = // NOTE!! if mode=ReportErrors then this method must not raise exceptions. It must just report the errors and recover static member TryResolveLibsUsingMSBuildRules (tcConfig:TcConfig,originalReferences:AssemblyReference list, errorAndWarningRange:range, mode:ResolveAssemblyReferenceMode) : AssemblyResolution list * UnresolvedAssemblyReference list = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parameter) - if tcConfig.useMonoResolution then + if tcConfig.useSimpleResolution then failwith "MSBuild resolution is not supported." if originalReferences=[] then [],[] else @@ -2962,6 +2968,7 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = let logmessage showMessages = if showMessages && tcConfig.showReferenceResolutions then (fun (message:string)->dprintf "%s\n" message) else ignore + let logwarning showMessages = (fun code message-> if showMessages && mode = ReportErrors then @@ -2975,6 +2982,7 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = | _ -> (if code = "MSB3245" then errorR else warning) (MSBuildReferenceResolutionWarning(code,message,errorAndWarningRange))) + let logerror showMessages = (fun code message -> if showMessages && mode = ReportErrors then @@ -2988,10 +2996,12 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = | Some(X86) -> "x86" | Some(AMD64) -> "amd64" | Some(IA64) -> "ia64" + let outputDirectory = match tcConfig.outputFile with | Some(outputFile) -> tcConfig.MakePathAbsolute outputFile | None -> tcConfig.implicitIncludeDir + let targetFrameworkDirectories = match tcConfig.clrRoot with | Some(clrRoot) -> [tcConfig.MakePathAbsolute clrRoot] @@ -3001,10 +3011,7 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = let resolvedAsFile = groupedReferences |>Array.map(fun (_filename,maxIndexOfReference,references)-> - let assemblyResolution = references - |> List.map tcConfig.TryResolveLibWithDirectories - |> List.filter Option.isSome - |> List.map Option.get + let assemblyResolution = references |> List.choose tcConfig.TryResolveLibWithDirectories (maxIndexOfReference, assemblyResolution)) |> Array.filter(fun (_,refs)->refs|>List.isEmpty|>not) @@ -3033,6 +3040,7 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = |> Array.map(fun i->(p13 groupedReferences.[i]),(p23 groupedReferences.[i]),i) |> Array.filter (fun (_,i0,_)->resolvedAsFile|>Array.exists(fun (i1,_) -> i0=i1)|>not) |> Array.map(fun (ref,_,i)->ref,string i) + let resolutions = Resolve(toMsBuild,(*showMessages*)true) // Map back to original assembly resolutions. @@ -3045,12 +3053,12 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = ms|>List.map(fun originalReference -> System.Diagnostics.Debug.Assert(FileSystem.IsPathRootedShim(resolvedFile.itemSpec), sprintf "msbuild-resolved path is not absolute: '%s'" resolvedFile.itemSpec) let canonicalItemSpec = FileSystem.GetFullPathShim(resolvedFile.itemSpec) - {originalReference=originalReference; - resolvedPath=canonicalItemSpec; - resolvedFrom=resolvedFile.resolvedFrom; + {originalReference=originalReference + resolvedPath=canonicalItemSpec + resolvedFrom=resolvedFile.resolvedFrom fusionName=resolvedFile.fusionName - redist=resolvedFile.redist; - sysdir= tcConfig.IsSystemAssembly canonicalItemSpec; + redist=resolvedFile.redist + sysdir= tcConfig.IsSystemAssembly canonicalItemSpec ilAssemblyRef = ref None}) (maxIndexOfReference, assemblyResolutions)) @@ -3149,7 +3157,7 @@ type ErrorLoggerFilteringByScopedPragmas (checkFile,scopedPragmas,errorLogger:Er (not checkFile || m.FileIndex = pragmaRange.FileIndex) && Range.posGeq m.Start pragmaRange.Start)) | None -> true - if report then errorLogger.WarnSink(err); + if report then errorLogger.WarnSink(err) override x.ErrorNumbers = errorLogger.ErrorNumbers override x.WarningNumbers = errorLogger.WarningNumbers @@ -3341,7 +3349,7 @@ let ParseInput (lexer,errorLogger:ErrorLogger,lexbuf:UnicodeLexing.Lexbuf,defaul try let input = if mlCompatSuffixes |> List.exists (Filename.checkSuffix lower) then - mlCompatWarning (FSComp.SR.buildCompilingExtensionIsForML()) rangeStartup; + mlCompatWarning (FSComp.SR.buildCompilingExtensionIsForML()) rangeStartup if FSharpImplFileSuffixes |> List.exists (Filename.checkSuffix lower) then let impl = Parser.implementationFile lexer lexbuf @@ -3371,23 +3379,23 @@ let ParseOneInputLexbuf (tcConfig:TcConfig,lexResourceManager,conditionalCompila let shortFilename = SanitizeFileName filename tcConfig.implicitIncludeDir let input = Lexhelp.usingLexbufForParsing (lexbuf,filename) (fun lexbuf -> - if verbose then dprintn ("Parsing... "+shortFilename); + if verbose then dprintn ("Parsing... "+shortFilename) let tokenizer = LexFilter.LexFilter(lightSyntaxStatus, tcConfig.compilingFslib, Lexer.token lexargs skip, lexbuf) if tcConfig.tokenizeOnly then while true do - printf "tokenize - getting one token from %s\n" shortFilename; + printf "tokenize - getting one token from %s\n" shortFilename let t = tokenizer.Lexer lexbuf - printf "tokenize - got %s @ %a\n" (Parser.token_to_string t) outputRange lexbuf.LexemeRange; - (match t with Parser.EOF _ -> exit 0 | _ -> ()); + printf "tokenize - got %s @ %a\n" (Parser.token_to_string t) outputRange lexbuf.LexemeRange + (match t with Parser.EOF _ -> exit 0 | _ -> ()) if lexbuf.IsPastEndOfStream then printf "!!! at end of stream\n" if tcConfig.testInteractionParser then while true do match (Parser.interaction tokenizer.Lexer lexbuf) with - | IDefns(l,m) -> dprintf "Parsed OK, got %d defs @ %a\n" l.Length outputRange m; - | IHash (_,m) -> dprintf "Parsed OK, got hash @ %a\n" outputRange m; - exit 0; + | IDefns(l,m) -> dprintf "Parsed OK, got %d defs @ %a\n" l.Length outputRange m + | IHash (_,m) -> dprintf "Parsed OK, got hash @ %a\n" outputRange m + exit 0 let res = ParseInput(tokenizer.Lexer,errorLogger,lexbuf,None,filename,isLastCompiland) @@ -3406,7 +3414,7 @@ let ParseOneInputLexbuf (tcConfig:TcConfig,lexResourceManager,conditionalCompila dprintf "parsing yielded %d definitions" (List.collect flattenModImpl impls).Length res ) - if verbose then dprintn ("Parsed "+shortFilename); + if verbose then dprintn ("Parsed "+shortFilename) Some input with e -> (* errorR(Failure("parse failed")); *) errorRecovery e rangeStartup; None @@ -3445,11 +3453,11 @@ type TcAssemblyResolutions(results : AssemblyResolution list, unresolved : Unres static member Resolve (tcConfig:TcConfig,assemblyList:AssemblyReference list, knownUnresolved:UnresolvedAssemblyReference list) : TcAssemblyResolutions = let resolved,unresolved = - if tcConfig.useMonoResolution then + if tcConfig.useSimpleResolution then let resolutions = assemblyList |> List.map (fun assemblyReference -> - try + try Choice1Of2 (tcConfig.ResolveLibWithDirectories CcuLoadFailureAction.RaiseError assemblyReference |> Option.get) with e -> errorRecovery e assemblyReference.Range @@ -3487,16 +3495,6 @@ type TcAssemblyResolutions(results : AssemblyResolution list, unresolved : Unres let resolutions = TcAssemblyResolutions.Resolve(tcConfig,assemblyList,tcConfig.knownUnresolvedReferences) let frameworkDLLs,nonFrameworkReferences = resolutions.GetAssemblyResolutions() |> List.partition (fun r -> r.sysdir) let unresolved = resolutions.GetUnresolvedReferences() -#if TRACK_DOWN_EXTRA_BACKSLASHES - frameworkDLLs |> List.iter(fun x -> - let path = x.resolvedPath - System.Diagnostics.Debug.Assert(not(path.Contains(@"\\")), "SplitNonFoundationalResolutions results in a non-canonical filename with extra backslashes: "+path) - ) - nonFrameworkReferences |> List.iter(fun x -> - let path = x.resolvedPath - System.Diagnostics.Debug.Assert(not(path.Contains(@"\\")), "SplitNonFoundationalResolutions results in a non-canonical filename with extra backslashes: "+path) - ) -#endif #if DEBUG let itFailed = ref false let addedText = "\nIf you want to debug this right now, attach a debugger, and put a breakpoint in 'CompileOps.fs' near the text '!itFailed', and you can re-step through the assembly resolution logic." @@ -3547,17 +3545,17 @@ type ILResource with | _-> error(InternalError("UnpickleFromResource",m)) let MakeILResource rname bytes = - { Name = rname; - Location = ILResourceLocation.Local (fun () -> bytes); - Access = ILResourceAccess.Public; + { Name = rname + Location = ILResourceLocation.Local (fun () -> bytes) + Access = ILResourceAccess.Public CustomAttrs = emptyILCustomAttrs } #if NO_COMPILER_BACKEND #else let PickleToResource file g scope rname p x = - { Name = rname; - Location = (let bytes = pickleObjWithDanglingCcus file g scope p x in ILResourceLocation.Local (fun () -> bytes)); - Access = ILResourceAccess.Public; + { Name = rname + Location = (let bytes = pickleObjWithDanglingCcus file g scope p x in ILResourceLocation.Local (fun () -> bytes)) + Access = ILResourceAccess.Public CustomAttrs = emptyILCustomAttrs } #endif @@ -3570,8 +3568,8 @@ let WriteSignatureData (tcConfig:TcConfig,tcGlobals,exportRemapping,ccu:CcuThunk let mspec = ccu.Contents let mspec = ApplyExportRemappingToEntity tcGlobals exportRemapping mspec PickleToResource file tcGlobals ccu (FSharpSignatureDataResourceName+"."+ccu.AssemblyName) pickleCcuInfo - { mspec=mspec; - compileTimeWorkingDir=tcConfig.implicitIncludeDir; + { mspec=mspec + compileTimeWorkingDir=tcConfig.implicitIncludeDir usesQuotations = ccu.UsesFSharp20PlusQuotations } #endif // NO_COMPILER_BACKEND @@ -3582,7 +3580,7 @@ let GetOptimizationData (file, ilScopeRef, ilModule, byteReader) = #else let WriteOptimizationData (tcGlobals, file, ccu,modulInfo) = #if DEBUG - if verbose then dprintf "Optimization data after remap:\n%s\n" (Layout.showL (Layout.squashTo 192 (Optimizer.moduleInfoL tcGlobals modulInfo))); + if verbose then dprintf "Optimization data after remap:\n%s\n" (Layout.showL (Layout.squashTo 192 (Optimizer.moduleInfoL tcGlobals modulInfo))) #endif PickleToResource file tcGlobals ccu (FSharpOptimizationDataResourceName+"."+ccu.AssemblyName) Optimizer.p_CcuOptimizationInfo modulInfo #endif @@ -3599,8 +3597,8 @@ type RawFSharpAssemblyDataBackedByFileOnDisk (ilModule: ILModuleDef, ilAssemblyR member __.GetRawFSharpSignatureData(m,ilShortAssemName,filename) = let resources = ilModule.Resources.AsList let sigDataReaders = - [ for iresource in resources do - if IsSignatureDataResource iresource then + [ for iresource in resources do + if IsSignatureDataResource iresource then let ccuName = GetSignatureDataResourceName iresource let byteReader = iresource.GetByteReader(m) yield (ccuName, byteReader()) ] @@ -3609,9 +3607,9 @@ type RawFSharpAssemblyDataBackedByFileOnDisk (ilModule: ILModuleDef, ilAssemblyR if List.contains ilShortAssemName externalSigAndOptData then let sigFileName = Path.ChangeExtension(filename, "sigdata") if not sigDataReaders.IsEmpty then - error(Error(FSComp.SR.buildDidNotExpectSigdataResource(),m)); - if not (FileSystem.SafeExists sigFileName) then - error(Error(FSComp.SR.buildExpectedSigdataFile(), m)); + error(Error(FSComp.SR.buildDidNotExpectSigdataResource(FileSystem.GetFullPathShim filename),m)) + if not (FileSystem.SafeExists sigFileName) then + error(Error(FSComp.SR.buildExpectedSigdataFile (FileSystem.GetFullPathShim sigFileName), m)) [ (ilShortAssemName, FileSystem.ReadAllBytesShim sigFileName)] else sigDataReaders @@ -3626,9 +3624,9 @@ type RawFSharpAssemblyDataBackedByFileOnDisk (ilModule: ILModuleDef, ilAssemblyR if List.contains ilShortAssemName externalSigAndOptData then let optDataFile = Path.ChangeExtension(filename, "optdata") if not optDataReaders.IsEmpty then - error(Error(FSComp.SR.buildDidNotExpectOptDataResource(),m)); + error(Error(FSComp.SR.buildDidNotExpectOptDataResource(FileSystem.GetFullPathShim filename),m)) if not (FileSystem.SafeExists optDataFile) then - error(Error(FSComp.SR.buildExpectedFileAlongSideFSharpCore(optDataFile),m)); + error(Error(FSComp.SR.buildExpectedFileAlongSideFSharpCore(optDataFile,FileSystem.GetFullPathShim optDataFile),m)) [ (ilShortAssemName, (fun () -> FileSystem.ReadAllBytesShim optDataFile))] else optDataReaders @@ -3729,13 +3727,13 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti member tcImports.RegisterCcu(ccuInfo) = CheckDisposed() - ccuInfos <- ccuInfos ++ ccuInfo; + ccuInfos <- ccuInfos ++ ccuInfo // Assembly Ref Resolution: remove this use of ccu.AssemblyName ccuTable <- NameMap.add (ccuInfo.FSharpViewOfMetadata.AssemblyName) ccuInfo ccuTable member tcImports.RegisterDll(dllInfo) = CheckDisposed() - dllInfos <- dllInfos ++ dllInfo; + dllInfos <- dllInfos ++ dllInfo dllTable <- NameMap.add (getNameOfScopeRef dllInfo.ILScopeRef) dllInfo dllTable member tcImports.GetDllInfos() = @@ -3763,7 +3761,7 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti match look tcImports with | Some res -> Some res | None -> - tcImports.ImplicitLoadIfAllowed(m,assemblyName,lookupOnly); + tcImports.ImplicitLoadIfAllowed(m,assemblyName,lookupOnly) look tcImports @@ -3800,7 +3798,7 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti match look tcImports with | Some res -> ResolvedImportedAssembly(res) | None -> - tcImports.ImplicitLoadIfAllowed(m,assemblyName,lookupOnly); + tcImports.ImplicitLoadIfAllowed(m,assemblyName,lookupOnly) match look tcImports with | Some res -> ResolvedImportedAssembly(res) | None -> UnresolvedImportedAssembly(assemblyName) @@ -3849,16 +3847,16 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti let theActualAssembly = assembly.PUntaint((fun x -> x.Handle),m) let dllinfo = { RawMetadata= RawFSharpAssemblyDataBackedByFileOnDisk (ilModule, ilAssemblyRefs) - FileName=fileName; + FileName=fileName ProviderGeneratedAssembly=Some theActualAssembly - IsProviderGenerated=true; + IsProviderGenerated=true ProviderGeneratedStaticLinkMap= if g.isInteractive then None else Some (ProvidedAssemblyStaticLinkingMap.CreateNew()) - ILScopeRef = ilScopeRef; + ILScopeRef = ilScopeRef ILAssemblyRefs = ilAssemblyRefs } - tcImports.RegisterDll(dllinfo); + tcImports.RegisterDll(dllinfo) let ccuData : CcuData = - { IsFSharp=false; - UsesFSharp20PlusQuotations=false; + { IsFSharp=false + UsesFSharp20PlusQuotations=false InvalidateEvent=(new Event<_>()).Publish IsProviderGenerated = true QualifiedName= Some (assembly.PUntaint((fun a -> a.FullName), m)) @@ -4121,7 +4119,7 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti match providers with | [] -> - warning(Error(FSComp.SR.etHostingAssemblyFoundWithoutHosts(fileNameOfRuntimeAssembly,typeof.FullName),m)); + warning(Error(FSComp.SR.etHostingAssemblyFoundWithoutHosts(fileNameOfRuntimeAssembly,typeof.FullName),m)) | _ -> if typeProviderEnvironment.showResolutionMessages then @@ -4244,9 +4242,9 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti let dir = minfo.compileTimeWorkingDir let knownLibraryLocation = @"src\fsharp\" // Help highlighting... " let knownLibarySuffixes = - [ @"FSharp.Core"; - @"FSharp.PowerPack"; - @"FSharp.PowerPack.Linq"; + [ @"FSharp.Core" + @"FSharp.PowerPack" + @"FSharp.PowerPack.Linq" @"FSharp.PowerPack.Metadata" ] match knownLibarySuffixes |> List.tryFind (fun x -> dir.EndsWith(knownLibraryLocation + x,StringComparison.OrdinalIgnoreCase)) with | None -> @@ -4394,10 +4392,10 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti let tryFile speculativeFileName = let foundFile = tcImports.TryResolveAssemblyReference (AssemblyReference (m, speculativeFileName, None), ResolveAssemblyReferenceMode.Speculative) match foundFile with - | OkResult (warns, res) -> - ReportWarnings warns - tcImports.DoRegisterAndImportReferencedAssemblies(res) - true + | OkResult (warns, res) -> + ReportWarnings warns + tcImports.DoRegisterAndImportReferencedAssemblies(res) + true | ErrorResult (_warns, _err) -> // Throw away warnings and errors - this is speculative loading false @@ -4444,7 +4442,7 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti | Some assemblyResolution -> ResultD [assemblyResolution] | None -> - if tcConfigP.Get().useMonoResolution then + if tcConfigP.Get().useSimpleResolution then let action = match mode with | ResolveAssemblyReferenceMode.ReportErrors -> CcuLoadFailureAction.RaiseError @@ -4453,7 +4451,7 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti | Some resolved -> resolutions <- resolutions.AddResolutionResults [resolved] ResultD [resolved] - | None -> + | None -> ErrorD(AssemblyNotResolved(assemblyReference.Text,assemblyReference.Range)) else // This is a previously unencounterd assembly. Resolve it and add it to the list. @@ -4548,19 +4546,20 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti | ILScopeRef.Local | ILScopeRef.Module _ -> error(InternalError("not ILScopeRef.Assembly",rangeStartup))) fslibCcuInfo.FSharpViewOfMetadata + let sysCcus = + [| yield sysCcu.FSharpViewOfMetadata + yield! frameworkTcImports.GetCcusInDeclOrder() + for dllName in SystemAssemblies tcConfig.primaryAssembly.Name do + match frameworkTcImports.CcuTable.TryFind dllName with + | Some sysCcu -> yield sysCcu.FSharpViewOfMetadata + | None -> () |] + // Search for a type let getTypeCcu nsname typeName = if ccuHasType sysCcu.FSharpViewOfMetadata nsname typeName then sysCcu.FSharpViewOfMetadata else - let search = - seq { yield sysCcu.FSharpViewOfMetadata - yield! frameworkTcImports.GetCcusInDeclOrder() - for dllName in SystemAssemblies tcConfig.primaryAssembly.Name do - match frameworkTcImports.CcuTable.TryFind dllName with - | Some sysCcu -> yield sysCcu.FSharpViewOfMetadata - | None -> () } - |> Seq.tryFind (fun ccu -> ccuHasType ccu nsname typeName) + let search = sysCcus |> Array.tryFind (fun ccu -> ccuHasType ccu nsname typeName) match search with | Some x -> x | None -> fslibCcu @@ -4718,7 +4717,7 @@ let ProcessMetaCommandsFromInput | _ -> - (* warning(Error("This meta-command has been ignored",m)); *) + (* warning(Error("This meta-command has been ignored",m)) *) state with e -> errorRecovery e matchedm; state @@ -4820,10 +4819,12 @@ type CodeContext = module private ScriptPreprocessClosure = open Internal.Utilities.Text.Lexing - type ClosureDirective = - | SourceFile of string * range * string // filename, range, source text - | ClosedSourceFile of string * range * ParsedInput option * PhasedError list * PhasedError list * (string * range) list // filename, range, errors, warnings, nowarns + /// Represents an input to the closure finding process + type ClosureSource = ClosureSource of filename: string * referenceRange: range * sourceText: string * parseRequired: bool + /// Represents an output of the closure finding process + type ClosureFile = ClosureFile of string * range * ParsedInput option * PhasedError list * PhasedError list * (string * range) list // filename, range, errors, warnings, nowarns + type Observed() = let seen = System.Collections.Generic.Dictionary<_,bool>() member ob.SetSeen(check) = @@ -4852,7 +4853,7 @@ module private ScriptPreprocessClosure = ParseOneInputLexbuf (tcConfig,lexResourceManager,defines,lexbuf,filename,isLastCompiland,errorLogger) /// Create a TcConfig for load closure starting from a single .fsx file - let CreateScriptSourceTcConfig (filename:string, codeContext, useMonoResolution, useFsiAuxLib, basicReferences, applyCommandLineArgs) = + let CreateScriptSourceTcConfig (filename:string, codeContext, useSimpleResolution, useFsiAuxLib, basicReferences, applyCommandLineArgs) = let projectDir = Path.GetDirectoryName(filename) let isInteractive = (codeContext = CodeContext.Evaluation) let isInvalidationSupported = (codeContext = CodeContext.Editing) @@ -4860,7 +4861,7 @@ module private ScriptPreprocessClosure = let tcConfigB = TcConfigBuilder.CreateNew(Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler.Value, true (* optimize for memory *), projectDir, isInteractive, isInvalidationSupported) applyCommandLineArgs tcConfigB match basicReferences with - | None -> BasicReferencesForScriptLoadClosure(useMonoResolution, useFsiAuxLib) |> List.iter(fun f->tcConfigB.AddReferencedAssemblyByPath(range0,f)) // Add script references + | None -> BasicReferencesForScriptLoadClosure(useSimpleResolution, useFsiAuxLib) |> List.iter(fun f->tcConfigB.AddReferencedAssemblyByPath(range0,f)) // Add script references | Some rs -> for m,r in rs do tcConfigB.AddReferencedAssemblyByPath(m,r) tcConfigB.resolutionEnvironment <- @@ -4878,7 +4879,7 @@ module private ScriptPreprocessClosure = tcConfigB.implicitlyResolveAssemblies <- false TcConfig.Create(tcConfigB,validate=true) - let SourceFileOfFilename(filename,m,inputCodePage:int option) : ClosureDirective list = + let ClosureSourceOfFilename(filename,m,inputCodePage,parseRequired) = try let filename = FileSystem.GetFullPathShim(filename) use stream = FileSystem.FileStreamReadShim filename @@ -4887,7 +4888,7 @@ module private ScriptPreprocessClosure = | None -> new StreamReader(stream,true) | Some n -> new StreamReader(stream,Encoding.GetEncodingShim(n)) let source = reader.ReadToEnd() - [SourceFile(filename,m,source)] + [ClosureSource(filename,m,source,parseRequired)] with e -> errorRecovery e m [] @@ -4911,89 +4912,95 @@ module private ScriptPreprocessClosure = let tcConfigB = tcConfig.CloneOfOriginalBuilder TcConfig.Create(tcConfigB,validate=false),nowarns - let FindClosureDirectives(closureDirectives,tcConfig:TcConfig,codeContext,lexResourceManager:Lexhelp.LexResourceManager) = + let FindClosureFiles(closureSources,tcConfig:TcConfig,codeContext,lexResourceManager:Lexhelp.LexResourceManager) = let tcConfig = ref tcConfig let observedSources = Observed() - let rec FindClosure (closureDirective:ClosureDirective) : ClosureDirective list = - match closureDirective with - | ClosedSourceFile _ as csf -> [csf] - | SourceFile(filename,m,source) -> - let filename = FileSystem.GetFullPathShim(filename) - if observedSources.HaveSeen(filename) then [] - else + let rec loop (ClosureSource(filename,m,source,parseRequired)) = + [ if not (observedSources.HaveSeen(filename)) then observedSources.SetSeen(filename) - - let errors = ref [] - let warnings = ref [] - let errorLogger = - { new ErrorLogger("FindClosure") with - member x.ErrorSinkImpl(e) = errors := e :: !errors - member x.WarnSinkImpl(e) = warnings := e :: !warnings - member x.ErrorCount = (!errors).Length } - - use unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> errorLogger) - let pathOfMetaCommandSource = Path.GetDirectoryName(filename) - match ParseScriptText(filename,source,!tcConfig,codeContext,lexResourceManager,errorLogger) with - | Some(input) -> - let tcConfigResult, noWarns = ApplyMetaCommandsFromInputToTcConfigAndGatherNoWarn !tcConfig (input,pathOfMetaCommandSource) - tcConfig := tcConfigResult - - let AddFileIfNotSeen(m,filename) = - if observedSources.HaveSeen(filename) then [] - else - if IsScript(filename) then SourceFileOfFilename(filename,m,tcConfigResult.inputCodePage) - else - observedSources.SetSeen(filename) - [ClosedSourceFile(filename,m,None,[],[],[])] // Don't traverse into .fs leafs. + //printfn "visiting %s" filename + if IsScript(filename) || parseRequired then + let errors = ref [] + let warnings = ref [] + let errorLogger = + { new ErrorLogger("FindClosure") with + member x.ErrorSinkImpl(e) = errors := e :: !errors + member x.WarnSinkImpl(e) = warnings := e :: !warnings + member x.ErrorCount = (!errors).Length } + + use _unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> errorLogger) + let pathOfMetaCommandSource = Path.GetDirectoryName(filename) + match ParseScriptText(filename,source,!tcConfig,codeContext,lexResourceManager,errorLogger) with + | Some parsedScriptAst -> + let preSources = (!tcConfig).GetAvailableLoadedSources() + + let tcConfigResult, noWarns = ApplyMetaCommandsFromInputToTcConfigAndGatherNoWarn !tcConfig (parsedScriptAst,pathOfMetaCommandSource) + tcConfig := tcConfigResult // We accumulate the tcConfig in order to collect assembly references - let loadedSources = (!tcConfig).GetAvailableLoadedSources() |> List.rev |> List.map AddFileIfNotSeen |> List.concat - ClosedSourceFile(filename,m,Some(input),!errors,!warnings,!noWarns) :: loadedSources |> List.map FindClosure |> List.concat // Final closure is in reverse order. Keep the closed source at the top. - | None -> [ClosedSourceFile(filename,m,None,!errors,!warnings,[])] + let postSources = (!tcConfig).GetAvailableLoadedSources() + let sources = if preSources.Length < postSources.Length then postSources.[preSources.Length..] else [] + + //for (_,subFile) in sources do + // printfn "visiting %s - has subsource of %s " filename subFile + + for (m,subFile) in sources do + if IsScript(subFile) then + for subSource in ClosureSourceOfFilename(subFile,m,tcConfigResult.inputCodePage,false) do + yield! loop subSource + else + yield ClosureFile(subFile, m, None, [], [], []) + + //printfn "yielding source %s" filename + yield ClosureFile(filename, m, Some parsedScriptAst, !errors, !warnings, !noWarns) + + | None -> + //printfn "yielding source %s (failed parse)" filename + yield ClosureFile(filename, m, None, !errors, !warnings, []) + else + // Don't traverse into .fs leafs. + //printfn "yielding non-script source %s" filename + yield ClosureFile(filename, m, None, [], [], []) ] - closureDirectives |> List.map FindClosure |> List.concat, !tcConfig + closureSources |> List.map loop |> List.concat, !tcConfig /// Reduce the full directive closure into LoadClosure - let GetLoadClosure(rootFilename,closureDirectives,(tcConfig:TcConfig),codeContext) = + let GetLoadClosure(rootFilename,closureFiles,tcConfig:TcConfig,codeContext) = - // Mark the last file as isLastCompiland. closureDirectives is currently reversed. - let closureDirectives = - match closureDirectives with - | ClosedSourceFile(filename,m,Some(ParsedInput.ImplFile(ParsedImplFileInput(name,isScript,qualNameOfFile,scopedPragmas,hashDirectives,implFileFlags,_))),errs,warns,nowarns)::rest -> - ClosedSourceFile(filename,m,Some(ParsedInput.ImplFile(ParsedImplFileInput(name,isScript,qualNameOfFile,scopedPragmas,hashDirectives,implFileFlags,(true, tcConfig.target.IsExe)))),errs,warns,nowarns)::rest - | x -> x + // Mark the last file as isLastCompiland. + let closureFiles = + if isNil closureFiles then + closureFiles + else + match List.frontAndBack closureFiles with + | rest, ClosureFile(filename,m,Some(ParsedInput.ImplFile(ParsedImplFileInput(name,isScript,qualNameOfFile,scopedPragmas,hashDirectives,implFileFlags,_))),errs,warns,nowarns) -> + rest @ [ClosureFile(filename,m,Some(ParsedInput.ImplFile(ParsedImplFileInput(name,isScript,qualNameOfFile,scopedPragmas,hashDirectives,implFileFlags,(true, tcConfig.target.IsExe)))),errs,warns,nowarns)] + | _ -> closureFiles // Get all source files. - let sourceFiles = ref [] - let sourceInputs = ref [] - let globalNoWarns = ref [] - for directive in closureDirectives do - match directive with - | ClosedSourceFile(filename,m,input,_,_,noWarns) -> - let filename = FileSystem.GetFullPathShim(filename) - sourceFiles := (filename,m) :: !sourceFiles - globalNoWarns := (!globalNoWarns @ noWarns) - sourceInputs := (filename,input) :: !sourceInputs - | _ -> failwith "Unexpected" - + let sourceFiles = [ for (ClosureFile(filename,m,_,_,_,_)) in closureFiles -> (filename,m) ] + let sourceInputs = [ for (ClosureFile(filename,_,input,_,_,_)) in closureFiles -> (filename,input) ] + let globalNoWarns = closureFiles |> List.collect (fun (ClosureFile(_,_,_,_,_,noWarns)) -> noWarns) + // Resolve all references. - let resolutionErrors = ref [] - let resolutionWarnings = ref [] - let errorLogger = - { new ErrorLogger("GetLoadClosure") with - member x.ErrorSinkImpl(e) = resolutionErrors := e :: !resolutionErrors - member x.WarnSinkImpl(e) = resolutionWarnings := e :: !resolutionWarnings - member x.ErrorCount = (!resolutionErrors).Length } + let references, unresolvedReferences, resolutionWarnings, resolutionErrors = + let resolutionErrors = ref [] + let resolutionWarnings = ref [] + let errorLogger = + { new ErrorLogger("GetLoadClosure") with + member x.ErrorSinkImpl(e) = resolutionErrors := e :: !resolutionErrors + member x.WarnSinkImpl(e) = resolutionWarnings := e :: !resolutionWarnings + member x.ErrorCount = (!resolutionErrors).Length } - let references,unresolvedReferences = use unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> errorLogger) - GetAssemblyResolutionInformation(tcConfig) - let references = references |> List.map (fun ar -> ar.resolvedPath,ar) - - // Root errors and warnings + let references,unresolvedReferences = GetAssemblyResolutionInformation(tcConfig) + let references = references |> List.map (fun ar -> ar.resolvedPath,ar) + references, unresolvedReferences, resolutionWarnings, resolutionErrors + + // Root errors and warnings - look at the last item in the closureFiles list let rootErrors, rootWarnings = - match closureDirectives with - | ClosedSourceFile(_,_,_,errors,warnings,_) :: _ -> errors @ !resolutionErrors, warnings @ !resolutionWarnings + match List.rev closureFiles with + | ClosureFile(_,_,_,errors,warnings,_) :: _ -> errors @ !resolutionErrors, warnings @ !resolutionWarnings | _ -> [],[] // When no file existed. let isRootRange exn = @@ -5010,47 +5017,47 @@ module private ScriptPreprocessClosure = let rootWarnings = rootWarnings |> List.filter isRootRange let result : LoadClosure = - { SourceFiles = List.groupByFirst !sourceFiles + { SourceFiles = List.groupByFirst sourceFiles References = List.groupByFirst references UnresolvedReferences = unresolvedReferences - Inputs = !sourceInputs - NoWarns = List.groupByFirst !globalNoWarns + Inputs = sourceInputs + NoWarns = List.groupByFirst globalNoWarns RootErrors = rootErrors RootWarnings = rootWarnings} result /// Given source text, find the full load closure. Used from service.fs, when editing a script file - let GetFullClosureOfScriptSource(filename,source,codeContext,useMonoResolution,useFsiAuxLib,lexResourceManager:Lexhelp.LexResourceManager,applyCommmandLineArgs) = + let GetFullClosureOfScriptSource(filename,source,codeContext,useSimpleResolution,useFsiAuxLib,lexResourceManager:Lexhelp.LexResourceManager,applyCommmandLineArgs) = // Resolve the basic references such as FSharp.Core.dll first, before processing any #I directives in the script // // This is tries to mimic the action of running the script in F# Interactive - the initial context for scripting is created // first, then #I and other directives are processed. let references0 = - let tcConfig = CreateScriptSourceTcConfig(filename,codeContext,useMonoResolution,useFsiAuxLib,None,applyCommmandLineArgs) + let tcConfig = CreateScriptSourceTcConfig(filename,codeContext,useSimpleResolution,useFsiAuxLib,None,applyCommmandLineArgs) let resolutions0,_unresolvedReferences = GetAssemblyResolutionInformation(tcConfig) let references0 = resolutions0 |> List.map (fun r->r.originalReference.Range,r.resolvedPath) |> Seq.distinct |> List.ofSeq references0 - let tcConfig = CreateScriptSourceTcConfig(filename,codeContext,useMonoResolution,useFsiAuxLib,Some references0,applyCommmandLineArgs) + let tcConfig = CreateScriptSourceTcConfig(filename,codeContext,useSimpleResolution,useFsiAuxLib,Some references0,applyCommmandLineArgs) - let protoClosure = [SourceFile(filename,range0,source)] - let finalClosure,tcConfig = FindClosureDirectives(protoClosure,tcConfig,codeContext,lexResourceManager) - GetLoadClosure(filename,finalClosure,tcConfig,codeContext) + let closureSources = [ClosureSource(filename,range0,source,true)] + let closureFiles,tcConfig = FindClosureFiles(closureSources,tcConfig,codeContext,lexResourceManager) + GetLoadClosure(filename,closureFiles,tcConfig,codeContext) /// Given source filename, find the full load closure /// Used from fsi.fs and fsc.fs, for #load and command line let GetFullClosureOfScriptFiles(tcConfig:TcConfig,files:(string*range) list,codeContext,_useDefaultScriptingReferences:bool,lexResourceManager:Lexhelp.LexResourceManager) = - let mainFile = fst (List.head files) - let protoClosure = files |> List.map (fun (filename,m)->SourceFileOfFilename(filename,m,tcConfig.inputCodePage)) |> List.concat |> List.rev // Reverse to put them in the order they will be extracted later - let finalClosure,tcConfig = FindClosureDirectives(protoClosure,tcConfig,codeContext,lexResourceManager) - GetLoadClosure(mainFile,finalClosure,tcConfig,codeContext) + let mainFile = fst (List.last files) + let closureSources = files |> List.map (fun (filename,m) -> ClosureSourceOfFilename(filename,m,tcConfig.inputCodePage,true)) |> List.concat + let closureFiles,tcConfig = FindClosureFiles(closureSources,tcConfig,codeContext,lexResourceManager) + GetLoadClosure(mainFile,closureFiles,tcConfig,codeContext) type LoadClosure with // Used from service.fs, when editing a script file - static member ComputeClosureOfSourceText(filename:string, source:string, codeContext, useMonoResolution:bool, useFsiAuxLib, lexResourceManager:Lexhelp.LexResourceManager, applyCommmandLineArgs) : LoadClosure = + static member ComputeClosureOfSourceText(filename:string, source:string, codeContext, useSimpleResolution:bool, useFsiAuxLib, lexResourceManager:Lexhelp.LexResourceManager, applyCommmandLineArgs) : LoadClosure = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parse) - ScriptPreprocessClosure.GetFullClosureOfScriptSource(filename,source,codeContext,useMonoResolution,useFsiAuxLib, lexResourceManager, applyCommmandLineArgs) + ScriptPreprocessClosure.GetFullClosureOfScriptSource(filename,source,codeContext,useSimpleResolution,useFsiAuxLib, lexResourceManager, applyCommmandLineArgs) /// Used from fsi.fs and fsc.fs, for #load and command line. /// The resulting references are then added to a TcConfig. @@ -5076,12 +5083,11 @@ let GetInitialTcEnv (thisAssemblyName:string, initm:range, tcConfig:TcConfig, tc let tcEnv = CreateInitialTcEnv(tcGlobals, amap, initm, thisAssemblyName, ccus) - let tcEnv = - if tcConfig.checkOverflow then - TcOpenDecl TcResultsSink.NoSink tcGlobals amap initm initm tcEnv (pathToSynLid initm (splitNamespace FSharpLib.CoreOperatorsCheckedName)) - else - tcEnv - tcEnv + if tcConfig.checkOverflow then + try TcOpenDecl TcResultsSink.NoSink tcGlobals amap initm initm tcEnv (pathToSynLid initm (splitNamespace FSharpLib.CoreOperatorsCheckedName)) + with e -> errorRecovery e initm; tcEnv + else + tcEnv //---------------------------------------------------------------------------- // Fault injection @@ -5318,7 +5324,7 @@ let TypeCheckSingleInputAndFinishEventually(checkForErrors, tcConfig: TcConfig, return TypeCheckMultipleInputsFinish([results],tcState) } -let TypeCheckClosedInputSetFinish (mimpls, tcState) = +let TypeCheckClosedInputSetFinish (declaredImpls: TypedImplFile list, tcState) = // Publish the latest contents to the CCU tcState.tcsCcu.Deref.Contents <- tcState.tcsCcuType @@ -5328,12 +5334,11 @@ let TypeCheckClosedInputSetFinish (mimpls, tcState) = if not (Zset.contains qualNameOfFile rootImpls) then errorR(Error(FSComp.SR.buildSignatureWithoutImplementation(qualNameOfFile.Text), qualNameOfFile.Range))) - let tassembly = TAssembly(mimpls) - tcState, tassembly + tcState, declaredImpls let TypeCheckClosedInputSet (checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, tcState, inputs) = // tcEnvAtEndOfLastFile is the environment required by fsi.exe when incrementally adding definitions let (tcEnvAtEndOfLastFile, topAttrs, mimpls),tcState = TypeCheckMultipleInputs (checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, tcState, inputs) - let tcState,tassembly = TypeCheckClosedInputSetFinish (mimpls, tcState) - tcState, topAttrs, tassembly, tcEnvAtEndOfLastFile + let tcState, declaredImpls = TypeCheckClosedInputSetFinish (mimpls, tcState) + tcState, topAttrs, declaredImpls, tcEnvAtEndOfLastFile diff --git a/src/fsharp/CompileOps.fsi b/src/fsharp/CompileOps.fsi index b80b4dfc236..1d00cd89d98 100755 --- a/src/fsharp/CompileOps.fsi +++ b/src/fsharp/CompileOps.fsi @@ -273,7 +273,7 @@ type TcConfigBuilder = mutable resolutionAssemblyFoldersConditions : string mutable platform : ILPlatform option mutable prefer32Bit : bool - mutable useMonoResolution : bool + mutable useSimpleResolution : bool mutable target : CompilerTarget mutable debuginfo : bool mutable testFlagEmitFeeFeeAs100001 : bool @@ -304,6 +304,7 @@ type TcConfigBuilder = mutable onlyEssentialOptimizationData : bool mutable useOptimizationDataFile : bool mutable useSignatureDataFile : bool + mutable jitTracking : bool mutable portablePDB : bool mutable ignoreSymbolStoreSequencePoints : bool mutable internConstantStrings : bool @@ -425,7 +426,7 @@ type TcConfig = member resolutionAssemblyFoldersConditions : string member platform : ILPlatform option member prefer32Bit : bool - member useMonoResolution : bool + member useSimpleResolution : bool member target : CompilerTarget member debuginfo : bool member testFlagEmitFeeFeeAs100001 : bool @@ -456,6 +457,7 @@ type TcConfig = member onlyEssentialOptimizationData : bool member useOptimizationDataFile : bool member useSignatureDataFile : bool + member jitTracking : bool member portablePDB : bool member ignoreSymbolStoreSequencePoints : bool member internConstantStrings : bool @@ -594,7 +596,7 @@ type TcImports = member GetCcusExcludingBase : unit -> CcuThunk list member FindDllInfo : range * string -> ImportedBinary member TryFindDllInfo : range * string * lookupOnly: bool -> option - member FindCcuFromAssemblyRef : range * ILAssemblyRef -> Tast.CcuResolutionResult + member FindCcuFromAssemblyRef : range * ILAssemblyRef -> CcuResolutionResult #if EXTENSIONTYPING member ProviderGeneratedTypeRoots : ProviderGeneratedType list #endif @@ -661,8 +663,7 @@ val ProcessMetaCommandsFromInput : val ApplyMetaCommandsFromInputToTcConfig : TcConfig -> (Ast.ParsedInput * string) -> TcConfig /// Process the #nowarn in an input -val ApplyNoWarnsToTcConfig : TcConfig -> (Ast.ParsedInput*string) -> TcConfig - +val ApplyNoWarnsToTcConfig : TcConfig -> (Ast.ParsedInput * string) -> TcConfig //---------------------------------------------------------------------------- // Scoped pragmas @@ -717,23 +718,21 @@ val GetInitialTcState : /// Check one input, returned as an Eventually computation val TypeCheckOneInputEventually : (unit -> bool) * TcConfig * TcImports * TcGlobals * Ast.LongIdent option * NameResolution.TcResultsSink * TcState * Ast.ParsedInput - -> Eventually<(TcEnv * TopAttribs * Tast.TypedImplFile list) * TcState> + -> Eventually<(TcEnv * TopAttribs * TypedImplFile list) * TcState> /// Finish the checking of multiple inputs val TypeCheckMultipleInputsFinish : (TcEnv * TopAttribs * 'T list) list * TcState -> (TcEnv * TopAttribs * 'T list) * TcState /// Finish the checking of a closed set of inputs -val TypeCheckClosedInputSetFinish : TypedImplFile list * TcState -> TcState * TypedAssembly +val TypeCheckClosedInputSetFinish : TypedImplFile list * TcState -> TcState * TypedImplFile list /// Check a closed set of inputs -val TypeCheckClosedInputSet : - (unit -> bool) * TcConfig * TcImports * TcGlobals * Ast.LongIdent option * TcState * Ast.ParsedInput list - -> TcState * TopAttribs * Tast.TypedAssembly * TcEnv +val TypeCheckClosedInputSet :(unit -> bool) * TcConfig * TcImports * TcGlobals * Ast.LongIdent option * TcState * Ast.ParsedInput list -> TcState * TopAttribs * TypedImplFile list * TcEnv /// Check a single input and finish the checking val TypeCheckSingleInputAndFinishEventually : (unit -> bool) * TcConfig * TcImports * TcGlobals * Ast.LongIdent option * NameResolution.TcResultsSink * TcState * Ast.ParsedInput - -> Eventually<(TcEnv * TopAttribs * Tast.TypedImplFile list) * TcState> + -> Eventually<(TcEnv * TopAttribs * TypedImplFile list) * TcState> /// Indicates if we should report a warning val ReportWarning : globalWarnLevel: int * specificWarnOff: int list * specificWarnOn: int list -> PhasedError -> bool @@ -775,7 +774,7 @@ type LoadClosure = RootWarnings : PhasedError list } // Used from service.fs, when editing a script file - static member ComputeClosureOfSourceText : filename: string * source: string * implicitDefines:CodeContext * useMonoResolution: bool * useFsiAuxLib: bool * lexResourceManager: Lexhelp.LexResourceManager * applyCompilerOptions: (TcConfigBuilder -> unit) -> LoadClosure + static member ComputeClosureOfSourceText : filename: string * source: string * implicitDefines:CodeContext * useSimpleResolution: bool * useFsiAuxLib: bool * lexResourceManager: Lexhelp.LexResourceManager * applyCompilerOptions: (TcConfigBuilder -> unit) -> LoadClosure /// Used from fsi.fs and fsc.fs, for #load and command line. The resulting references are then added to a TcConfig. static member ComputeClosureOfSourceFiles : tcConfig:TcConfig * (string * range) list * implicitDefines:CodeContext * useDefaultScriptingReferences : bool * lexResourceManager : Lexhelp.LexResourceManager -> LoadClosure diff --git a/src/fsharp/CompileOptions.fs b/src/fsharp/CompileOptions.fs index 11a178d9cea..c6a91ea4aad 100644 --- a/src/fsharp/CompileOptions.fs +++ b/src/fsharp/CompileOptions.fs @@ -107,7 +107,7 @@ let compilerOptionUsage (CompilerOption(s,tag,spec,_,_)) = | OptionGeneral _ -> if tag="" then sprintf "%s" s else sprintf "%s:%s" s tag (* still being decided *) let PrintCompilerOption (CompilerOption(_s,_tag,_spec,_,help) as compilerOption) = - let flagWidth = 30 // fixed width for printing of flags, e.g. --warnaserror: + let flagWidth = 30 // fixed width for printing of flags, e.g. --warnaserror: let defaultLineWidth = 80 // the fallback width let lineWidth = try @@ -474,11 +474,11 @@ let SetDebugSwitch (tcConfigB : TcConfigBuilder) (dtype : string option) (s : Op match dtype with | Some(s) -> match s with - | "portable" -> tcConfigB.portablePDB <- true - | "pdbonly" -> tcConfigB.portablePDB <- false - | "full" -> tcConfigB.portablePDB <- false + | "portable" -> tcConfigB.portablePDB <- true ; tcConfigB.jitTracking <- true + | "pdbonly" -> tcConfigB.portablePDB <- false; tcConfigB.jitTracking <- false + | "full" -> tcConfigB.portablePDB <- false; tcConfigB.jitTracking <- true | _ -> error(Error(FSComp.SR.optsUnrecognizedDebugType(s), rangeCmdArgs)) - | None -> tcConfigB.portablePDB <- false + | None -> tcConfigB.portablePDB <- false; tcConfigB.jitTracking <- s = OptionSwitch.On; tcConfigB.debuginfo <- s = OptionSwitch.On let setOutFileName tcConfigB s = @@ -520,6 +520,7 @@ let PrintOptionInfo (tcConfigB:TcConfigBuilder) = printfn " doDetuple . . . . . . : %+A" tcConfigB.doDetuple printfn " doTLR . . . . . . . . : %+A" tcConfigB.doTLR printfn " doFinalSimplify. . . . : %+A" tcConfigB.doFinalSimplify + printfn " jitTracking . . . . . : %+A" tcConfigB.jitTracking printfn " portablePDB. . . . . . : %+A" tcConfigB.portablePDB printfn " debuginfo . . . . . . : %+A" tcConfigB.debuginfo printfn " resolutionEnvironment : %+A" tcConfigB.resolutionEnvironment @@ -588,45 +589,45 @@ let outputFileFlagsFsc (tcConfigB : TcConfigBuilder) = Some (FSComp.SR.optsNameOfOutputFile()) ); CompilerOption("target", tagExe, OptionString (SetTarget tcConfigB), None, - Some (FSComp.SR.optsBuildConsole())); + Some (FSComp.SR.optsBuildConsole())) CompilerOption("target", tagWinExe, OptionString (SetTarget tcConfigB), None, - Some (FSComp.SR.optsBuildWindows())); + Some (FSComp.SR.optsBuildWindows())) CompilerOption("target", tagLibrary, OptionString (SetTarget tcConfigB), None, - Some (FSComp.SR.optsBuildLibrary())); + Some (FSComp.SR.optsBuildLibrary())) CompilerOption("target", tagModule, OptionString (SetTarget tcConfigB), None, - Some (FSComp.SR.optsBuildModule())); + Some (FSComp.SR.optsBuildModule())) CompilerOption("delaysign", tagNone, OptionSwitch (fun s -> tcConfigB.delaysign <- (s = OptionSwitch.On)), None, - Some (FSComp.SR.optsDelaySign())); + Some (FSComp.SR.optsDelaySign())) CompilerOption("publicsign", tagNone, OptionSwitch (fun s -> tcConfigB.publicsign <- (s = OptionSwitch.On)), None, - Some (FSComp.SR.optsPublicSign())); + Some (FSComp.SR.optsPublicSign())) CompilerOption("doc", tagFile, OptionString (fun s -> tcConfigB.xmlDocOutputFile <- Some s), None, - Some (FSComp.SR.optsWriteXml())); + Some (FSComp.SR.optsWriteXml())) CompilerOption("keyfile", tagFile, OptionString (fun s -> tcConfigB.signer <- Some(s)), None, - Some (FSComp.SR.optsStrongKeyFile())); + Some (FSComp.SR.optsStrongKeyFile())) CompilerOption("keycontainer", tagString, OptionString(fun s -> tcConfigB.container <- Some(s)),None, - Some(FSComp.SR.optsStrongKeyContainer())); + Some(FSComp.SR.optsStrongKeyContainer())) CompilerOption("platform", tagString, OptionString (fun s -> tcConfigB.platform <- match s with | "x86" -> Some X86 | "x64" -> Some AMD64 | "Itanium" -> Some IA64 | "anycpu32bitpreferred" -> (tcConfigB.prefer32Bit <- true; None) | "anycpu" -> None | _ -> error(Error(FSComp.SR.optsUnknownPlatform(s),rangeCmdArgs))), None, - Some(FSComp.SR.optsPlatform())) ; + Some(FSComp.SR.optsPlatform())) CompilerOption("nooptimizationdata", tagNone, OptionUnit (fun () -> tcConfigB.onlyEssentialOptimizationData <- true), None, - Some (FSComp.SR.optsNoOpt())); + Some (FSComp.SR.optsNoOpt())) CompilerOption("nointerfacedata", tagNone, OptionUnit (fun () -> tcConfigB.noSignatureData <- true), None, - Some (FSComp.SR.optsNoInterface())); + Some (FSComp.SR.optsNoInterface())) CompilerOption("sig", tagFile, OptionString (setSignatureFile tcConfigB), None, - Some (FSComp.SR.optsSig())); + Some (FSComp.SR.optsSig())) - CompilerOption("nocopyfsharpcore", tagNone, OptionUnit (fun () -> tcConfigB.copyFSharpCore <- false), None, Some (FSComp.SR.optsNoCopyFsharpCore())); + CompilerOption("nocopyfsharpcore", tagNone, OptionUnit (fun () -> tcConfigB.copyFSharpCore <- false), None, Some (FSComp.SR.optsNoCopyFsharpCore())) ] @@ -637,41 +638,41 @@ let resourcesFlagsFsi (_tcConfigB : TcConfigBuilder) = [] let resourcesFlagsFsc (tcConfigB : TcConfigBuilder) = [ CompilerOption("win32res", tagFile, OptionString (fun s -> tcConfigB.win32res <- s), None, - Some (FSComp.SR.optsWin32res())); + Some (FSComp.SR.optsWin32res())) CompilerOption("win32manifest", tagFile, OptionString (fun s -> tcConfigB.win32manifest <- s), None, - Some (FSComp.SR.optsWin32manifest())); + Some (FSComp.SR.optsWin32manifest())) CompilerOption("nowin32manifest", tagNone, OptionUnit (fun () -> tcConfigB.includewin32manifest <- false), None, - Some (FSComp.SR.optsNowin32manifest())); + Some (FSComp.SR.optsNowin32manifest())) CompilerOption("resource", tagResInfo, OptionString (fun s -> tcConfigB.AddEmbeddedResource s), None, - Some (FSComp.SR.optsResource())); + Some (FSComp.SR.optsResource())) CompilerOption("linkresource", tagResInfo, OptionString (fun s -> tcConfigB.linkResources <- tcConfigB.linkResources ++ s), None, - Some (FSComp.SR.optsLinkresource())); + Some (FSComp.SR.optsLinkresource())) ] // OptionBlock: Code generation //----------------------------- -let codeGenerationFlags (tcConfigB : TcConfigBuilder) = +let codeGenerationFlags isFsi (tcConfigB : TcConfigBuilder) = [ CompilerOption("debug", tagNone, OptionSwitch (SetDebugSwitch tcConfigB None), None, - Some (FSComp.SR.optsDebugPM())); + Some (FSComp.SR.optsDebugPM())) CompilerOption("debug", tagFullPDBOnlyPortable, OptionString (fun s -> SetDebugSwitch tcConfigB (Some(s)) OptionSwitch.On), None, - Some (FSComp.SR.optsDebug())); + Some (FSComp.SR.optsDebug(if isFsi then "pdbonly" else "full"))) CompilerOption("optimize", tagNone, OptionSwitch (SetOptimizeSwitch tcConfigB) , None, - Some (FSComp.SR.optsOptimize())); + Some (FSComp.SR.optsOptimize())) CompilerOption("tailcalls", tagNone, OptionSwitch (SetTailcallSwitch tcConfigB), None, - Some (FSComp.SR.optsTailcalls())); + Some (FSComp.SR.optsTailcalls())) CompilerOption("crossoptimize", tagNone, OptionSwitch (crossOptimizeSwitch tcConfigB), None, - Some (FSComp.SR.optsCrossoptimize())); + Some (FSComp.SR.optsCrossoptimize())) ] @@ -687,9 +688,9 @@ let mlCompatibilityFlag (tcConfigB : TcConfigBuilder) = let languageFlags tcConfigB = [ CompilerOption("checked", tagNone, OptionSwitch (fun switch -> tcConfigB.checkOverflow <- (switch = OptionSwitch.On)), None, - Some (FSComp.SR.optsChecked())); + Some (FSComp.SR.optsChecked())) CompilerOption("define", tagString, OptionString (defineSymbol tcConfigB), None, - Some (FSComp.SR.optsDefine())); + Some (FSComp.SR.optsDefine())) mlCompatibilityFlag tcConfigB ] @@ -717,7 +718,7 @@ let codePageFlag (tcConfigB : TcConfigBuilder) = #if PREFERRED_UI_LANG let preferredUiLang (tcConfigB: TcConfigBuilder) = - CompilerOption("preferreduilang", tagString, OptionString (fun s -> tcConfigB.preferredUiLang <- Some(s)), None, Some(FSComp.SR.optsStrongKeyContainer())); + CompilerOption("preferreduilang", tagString, OptionString (fun s -> tcConfigB.preferredUiLang <- Some(s)), None, Some(FSComp.SR.optsStrongKeyContainer())) #endif let utf8OutputFlag (tcConfigB: TcConfigBuilder) = @@ -734,18 +735,18 @@ let cliRootFlag (_tcConfigB : TcConfigBuilder) = let advancedFlagsBoth tcConfigB = [ - codePageFlag tcConfigB; - utf8OutputFlag tcConfigB; + codePageFlag tcConfigB + utf8OutputFlag tcConfigB #if PREFERRED_UI_LANG - preferredUiLang tcConfigB; + preferredUiLang tcConfigB #endif - fullPathsFlag tcConfigB; - libFlag tcConfigB; + fullPathsFlag tcConfigB + libFlag tcConfigB ] let noFrameworkFlag isFsc tcConfigB = CompilerOption("noframework", tagNone, OptionUnit (fun () -> - tcConfigB.framework <- false; + tcConfigB.framework <- false if isFsc then tcConfigB.implicitlyResolveAssemblies <- false), None, Some (FSComp.SR.optsNoframework())) @@ -761,27 +762,27 @@ let setTargetProfile tcConfigB v = let advancedFlagsFsc tcConfigB = advancedFlagsBoth tcConfigB @ [ - yield CompilerOption("baseaddress", tagAddress, OptionString (fun s -> tcConfigB.baseAddress <- Some(int32 s)), None, Some (FSComp.SR.optsBaseaddress())); - yield noFrameworkFlag true tcConfigB; + yield CompilerOption("baseaddress", tagAddress, OptionString (fun s -> tcConfigB.baseAddress <- Some(int32 s)), None, Some (FSComp.SR.optsBaseaddress())) + yield noFrameworkFlag true tcConfigB yield CompilerOption("standalone", tagNone, OptionUnit (fun _ -> - tcConfigB.openDebugInformationForLaterStaticLinking <- true; - tcConfigB.standalone <- true; + tcConfigB.openDebugInformationForLaterStaticLinking <- true + tcConfigB.standalone <- true tcConfigB.implicitlyResolveAssemblies <- true), None, - Some (FSComp.SR.optsStandalone())); + Some (FSComp.SR.optsStandalone())) yield CompilerOption("staticlink", tagFile, OptionString (fun s -> tcConfigB.extraStaticLinkRoots <- tcConfigB.extraStaticLinkRoots @ [s]), None, - Some (FSComp.SR.optsStaticlink())); + Some (FSComp.SR.optsStaticlink())) #if ENABLE_MONO_SUPPORT if runningOnMono then yield CompilerOption("resident", tagFile, OptionUnit (fun () -> ()), None, - Some (FSComp.SR.optsResident())); + Some (FSComp.SR.optsResident())) #endif yield CompilerOption("pdb", tagString, OptionString (fun s -> tcConfigB.debugSymbolFile <- Some s), None, - Some (FSComp.SR.optsPdb())); - yield CompilerOption("simpleresolution", tagNone, OptionUnit (fun () -> tcConfigB.useMonoResolution<-true), None, - Some (FSComp.SR.optsSimpleresolution())); + Some (FSComp.SR.optsPdb())) + yield CompilerOption("simpleresolution", tagNone, OptionUnit (fun () -> tcConfigB.useSimpleResolution<-true), None, + Some (FSComp.SR.optsSimpleresolution())) yield CompilerOption("highentropyva", tagNone, OptionSwitch (useHighEntropyVASwitch tcConfigB), None, Some (FSComp.SR.optsUseHighEntropyVA())) yield CompilerOption("subsystemversion", tagString, OptionString (subSystemVersionSwitch tcConfigB), None, Some (FSComp.SR.optsSubSystemVersion())) yield CompilerOption("targetprofile", tagString, OptionString (setTargetProfile tcConfigB), None, Some(FSComp.SR.optsTargetProfile())) @@ -811,70 +812,70 @@ let testFlag tcConfigB = // not shown in fsc.exe help, no warning on use, motiviation is for use from VS let vsSpecificFlags (tcConfigB: TcConfigBuilder) = - [ CompilerOption("vserrors", tagNone, OptionUnit (fun () -> tcConfigB.errorStyle <- ErrorStyle.VSErrors), None, None); - CompilerOption("validate-type-providers", tagNone, OptionUnit (id), None, None); // preserved for compatibility's sake, no longer has any effect + [ CompilerOption("vserrors", tagNone, OptionUnit (fun () -> tcConfigB.errorStyle <- ErrorStyle.VSErrors), None, None) + CompilerOption("validate-type-providers", tagNone, OptionUnit (id), None, None) // preserved for compatibility's sake, no longer has any effect #if PREFERRED_UI_LANG - CompilerOption("LCID", tagInt, OptionInt (fun _n -> ()), None, None); + CompilerOption("LCID", tagInt, OptionInt (fun _n -> ()), None, None) #else - CompilerOption("LCID", tagInt, OptionInt (fun n -> tcConfigB.lcid <- Some(n)), None, None); + CompilerOption("LCID", tagInt, OptionInt (fun n -> tcConfigB.lcid <- Some(n)), None, None) #endif - CompilerOption("flaterrors", tagNone, OptionUnit (fun () -> tcConfigB.flatErrors <- true), None, None); - CompilerOption("sqmsessionguid", tagNone, OptionString (fun s -> tcConfigB.sqmSessionGuid <- try System.Guid(s) |> Some with e -> None), None, None); - CompilerOption("gccerrors", tagNone, OptionUnit (fun () -> tcConfigB.errorStyle <- ErrorStyle.GccErrors), None, None); - CompilerOption("exename", tagNone, OptionString (fun s -> tcConfigB.exename <- Some(s)), None, None); - CompilerOption("maxerrors", tagInt, OptionInt (fun n -> tcConfigB.maxErrors <- n), None, None); ] + CompilerOption("flaterrors", tagNone, OptionUnit (fun () -> tcConfigB.flatErrors <- true), None, None) + CompilerOption("sqmsessionguid", tagNone, OptionString (fun s -> tcConfigB.sqmSessionGuid <- try System.Guid(s) |> Some with e -> None), None, None) + CompilerOption("gccerrors", tagNone, OptionUnit (fun () -> tcConfigB.errorStyle <- ErrorStyle.GccErrors), None, None) + CompilerOption("exename", tagNone, OptionString (fun s -> tcConfigB.exename <- Some(s)), None, None) + CompilerOption("maxerrors", tagInt, OptionInt (fun n -> tcConfigB.maxErrors <- n), None, None) ] let internalFlags (tcConfigB:TcConfigBuilder) = [ - CompilerOption("stamps", tagNone, OptionUnit (fun () -> ()), Some(InternalCommandLineOption("--stamps", rangeCmdArgs)), None); - CompilerOption("ranges", tagNone, OptionSet Tastops.DebugPrint.layoutRanges, Some(InternalCommandLineOption("--ranges", rangeCmdArgs)), None); - CompilerOption("terms" , tagNone, OptionUnit (fun () -> tcConfigB.showTerms <- true), Some(InternalCommandLineOption("--terms", rangeCmdArgs)), None); - CompilerOption("termsfile" , tagNone, OptionUnit (fun () -> tcConfigB.writeTermsToFiles <- true), Some(InternalCommandLineOption("--termsfile", rangeCmdArgs)), None); + CompilerOption("stamps", tagNone, OptionUnit (fun () -> ()), Some(InternalCommandLineOption("--stamps", rangeCmdArgs)), None) + CompilerOption("ranges", tagNone, OptionSet Tastops.DebugPrint.layoutRanges, Some(InternalCommandLineOption("--ranges", rangeCmdArgs)), None) + CompilerOption("terms" , tagNone, OptionUnit (fun () -> tcConfigB.showTerms <- true), Some(InternalCommandLineOption("--terms", rangeCmdArgs)), None) + CompilerOption("termsfile" , tagNone, OptionUnit (fun () -> tcConfigB.writeTermsToFiles <- true), Some(InternalCommandLineOption("--termsfile", rangeCmdArgs)), None) #if DEBUG - CompilerOption("debug-parse", tagNone, OptionUnit (fun () -> Internal.Utilities.Text.Parsing.Flags.debug <- true), Some(InternalCommandLineOption("--debug-parse", rangeCmdArgs)), None); - CompilerOption("ilfiles", tagNone, OptionUnit (fun () -> tcConfigB.writeGeneratedILFiles <- true), Some(InternalCommandLineOption("--ilfiles", rangeCmdArgs)), None); + CompilerOption("debug-parse", tagNone, OptionUnit (fun () -> Internal.Utilities.Text.Parsing.Flags.debug <- true), Some(InternalCommandLineOption("--debug-parse", rangeCmdArgs)), None) + CompilerOption("ilfiles", tagNone, OptionUnit (fun () -> tcConfigB.writeGeneratedILFiles <- true), Some(InternalCommandLineOption("--ilfiles", rangeCmdArgs)), None) #endif - CompilerOption("pause", tagNone, OptionUnit (fun () -> tcConfigB.pause <- true), Some(InternalCommandLineOption("--pause", rangeCmdArgs)), None); - CompilerOption("detuple", tagNone, OptionInt (setFlag (fun v -> tcConfigB.doDetuple <- v)), Some(InternalCommandLineOption("--detuple", rangeCmdArgs)), None); - CompilerOption("simulateException", tagNone, OptionString (fun s -> tcConfigB.simulateException <- Some(s)), Some(InternalCommandLineOption("--simulateException", rangeCmdArgs)), Some "Simulate an exception from some part of the compiler"); - CompilerOption("stackReserveSize", tagNone, OptionString (fun s -> tcConfigB.stackReserveSize <- Some(int32 s)), Some(InternalCommandLineOption("--stackReserveSize", rangeCmdArgs)), Some ("for an exe, set stack reserve size")); - CompilerOption("tlr", tagInt, OptionInt (setFlag (fun v -> tcConfigB.doTLR <- v)), Some(InternalCommandLineOption("--tlr", rangeCmdArgs)), None); - CompilerOption("finalSimplify", tagInt, OptionInt (setFlag (fun v -> tcConfigB.doFinalSimplify <- v)), Some(InternalCommandLineOption("--finalSimplify", rangeCmdArgs)), None); + CompilerOption("pause", tagNone, OptionUnit (fun () -> tcConfigB.pause <- true), Some(InternalCommandLineOption("--pause", rangeCmdArgs)), None) + CompilerOption("detuple", tagNone, OptionInt (setFlag (fun v -> tcConfigB.doDetuple <- v)), Some(InternalCommandLineOption("--detuple", rangeCmdArgs)), None) + CompilerOption("simulateException", tagNone, OptionString (fun s -> tcConfigB.simulateException <- Some(s)), Some(InternalCommandLineOption("--simulateException", rangeCmdArgs)), Some "Simulate an exception from some part of the compiler") + CompilerOption("stackReserveSize", tagNone, OptionString (fun s -> tcConfigB.stackReserveSize <- Some(int32 s)), Some(InternalCommandLineOption("--stackReserveSize", rangeCmdArgs)), Some ("for an exe, set stack reserve size")) + CompilerOption("tlr", tagInt, OptionInt (setFlag (fun v -> tcConfigB.doTLR <- v)), Some(InternalCommandLineOption("--tlr", rangeCmdArgs)), None) + CompilerOption("finalSimplify", tagInt, OptionInt (setFlag (fun v -> tcConfigB.doFinalSimplify <- v)), Some(InternalCommandLineOption("--finalSimplify", rangeCmdArgs)), None) #if TLR_LIFT - CompilerOption("tlrlift", tagNone, OptionInt (setFlag (fun v -> InnerLambdasToTopLevelFuncs.liftTLR := v)), Some(InternalCommandLineOption("--tlrlift", rangeCmdArgs)), None); + CompilerOption("tlrlift", tagNone, OptionInt (setFlag (fun v -> InnerLambdasToTopLevelFuncs.liftTLR := v)), Some(InternalCommandLineOption("--tlrlift", rangeCmdArgs)), None) #endif - CompilerOption("parseonly", tagNone, OptionUnit (fun () -> tcConfigB.parseOnly <- true), Some(InternalCommandLineOption("--parseonly", rangeCmdArgs)), None); - CompilerOption("typecheckonly", tagNone, OptionUnit (fun () -> tcConfigB.typeCheckOnly <- true), Some(InternalCommandLineOption("--typecheckonly", rangeCmdArgs)), None); - CompilerOption("ast", tagNone, OptionUnit (fun () -> tcConfigB.printAst <- true), Some(InternalCommandLineOption("--ast", rangeCmdArgs)), None); - CompilerOption("tokenize", tagNone, OptionUnit (fun () -> tcConfigB.tokenizeOnly <- true), Some(InternalCommandLineOption("--tokenize", rangeCmdArgs)), None); - CompilerOption("testInteractionParser", tagNone, OptionUnit (fun () -> tcConfigB.testInteractionParser <- true), Some(InternalCommandLineOption("--testInteractionParser", rangeCmdArgs)), None); - CompilerOption("testparsererrorrecovery", tagNone, OptionUnit (fun () -> tcConfigB.reportNumDecls <- true), Some(InternalCommandLineOption("--testparsererrorrecovery", rangeCmdArgs)), None); - CompilerOption("inlinethreshold", tagInt, OptionInt (fun n -> tcConfigB.optSettings <- { tcConfigB.optSettings with lambdaInlineThreshold = n }), Some(InternalCommandLineOption("--inlinethreshold", rangeCmdArgs)), None); - CompilerOption("extraoptimizationloops", tagNone, OptionInt (fun n -> tcConfigB.extraOptimizationIterations <- n), Some(InternalCommandLineOption("--extraoptimizationloops", rangeCmdArgs)), None); - CompilerOption("abortonerror", tagNone, OptionUnit (fun () -> tcConfigB.abortOnError <- true), Some(InternalCommandLineOption("--abortonerror", rangeCmdArgs)), None); - CompilerOption("implicitresolution", tagNone, OptionUnit (fun _ -> tcConfigB.implicitlyResolveAssemblies <- true), Some(InternalCommandLineOption("--implicitresolution", rangeCmdArgs)), None); - - CompilerOption("resolutions", tagNone, OptionUnit (fun () -> tcConfigB.showReferenceResolutions <- true), Some(InternalCommandLineOption("", rangeCmdArgs)), None); // "Display assembly reference resolution information") ; - CompilerOption("resolutionframeworkregistrybase", tagString, OptionString (fun s -> tcConfigB.resolutionFrameworkRegistryBase<-s), Some(InternalCommandLineOption("", rangeCmdArgs)), None); // "The base registry key to use for assembly resolution. This part in brackets here: HKEY_LOCAL_MACHINE\[SOFTWARE\Microsoft\.NETFramework]\v2.0.50727\AssemblyFoldersEx"); - CompilerOption("resolutionassemblyfoldersuffix", tagString, OptionString (fun s -> tcConfigB.resolutionAssemblyFoldersSuffix<-s), Some(InternalCommandLineOption("resolutionassemblyfoldersuffix", rangeCmdArgs)), None); // "The base registry key to use for assembly resolution. This part in brackets here: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727\[AssemblyFoldersEx]"); - CompilerOption("resolutionassemblyfoldersconditions", tagString, OptionString (fun s -> tcConfigB.resolutionAssemblyFoldersConditions <- ","^s), Some(InternalCommandLineOption("resolutionassemblyfoldersconditions", rangeCmdArgs)), None); // "Additional reference resolution conditions. For example \"OSVersion=5.1.2600.0,PlatformID=id"); - CompilerOption("msbuildresolution", tagNone, OptionUnit (fun () -> tcConfigB.useMonoResolution<-false), Some(InternalCommandLineOption("msbuildresolution", rangeCmdArgs)), None); // "Resolve assembly references using MSBuild resolution rules rather than directory based (Default=true except when running fsc.exe under mono)"); - CompilerOption("alwayscallvirt",tagNone,OptionSwitch(callVirtSwitch tcConfigB),Some(InternalCommandLineOption("alwayscallvirt",rangeCmdArgs)), None); - CompilerOption("nodebugdata",tagNone, OptionUnit (fun () -> tcConfigB.noDebugData<-true),Some(InternalCommandLineOption("--nodebugdata",rangeCmdArgs)), None); + CompilerOption("parseonly", tagNone, OptionUnit (fun () -> tcConfigB.parseOnly <- true), Some(InternalCommandLineOption("--parseonly", rangeCmdArgs)), None) + CompilerOption("typecheckonly", tagNone, OptionUnit (fun () -> tcConfigB.typeCheckOnly <- true), Some(InternalCommandLineOption("--typecheckonly", rangeCmdArgs)), None) + CompilerOption("ast", tagNone, OptionUnit (fun () -> tcConfigB.printAst <- true), Some(InternalCommandLineOption("--ast", rangeCmdArgs)), None) + CompilerOption("tokenize", tagNone, OptionUnit (fun () -> tcConfigB.tokenizeOnly <- true), Some(InternalCommandLineOption("--tokenize", rangeCmdArgs)), None) + CompilerOption("testInteractionParser", tagNone, OptionUnit (fun () -> tcConfigB.testInteractionParser <- true), Some(InternalCommandLineOption("--testInteractionParser", rangeCmdArgs)), None) + CompilerOption("testparsererrorrecovery", tagNone, OptionUnit (fun () -> tcConfigB.reportNumDecls <- true), Some(InternalCommandLineOption("--testparsererrorrecovery", rangeCmdArgs)), None) + CompilerOption("inlinethreshold", tagInt, OptionInt (fun n -> tcConfigB.optSettings <- { tcConfigB.optSettings with lambdaInlineThreshold = n }), Some(InternalCommandLineOption("--inlinethreshold", rangeCmdArgs)), None) + CompilerOption("extraoptimizationloops", tagNone, OptionInt (fun n -> tcConfigB.extraOptimizationIterations <- n), Some(InternalCommandLineOption("--extraoptimizationloops", rangeCmdArgs)), None) + CompilerOption("abortonerror", tagNone, OptionUnit (fun () -> tcConfigB.abortOnError <- true), Some(InternalCommandLineOption("--abortonerror", rangeCmdArgs)), None) + CompilerOption("implicitresolution", tagNone, OptionUnit (fun _ -> tcConfigB.implicitlyResolveAssemblies <- true), Some(InternalCommandLineOption("--implicitresolution", rangeCmdArgs)), None) + + CompilerOption("resolutions", tagNone, OptionUnit (fun () -> tcConfigB.showReferenceResolutions <- true), Some(InternalCommandLineOption("", rangeCmdArgs)), None) // "Display assembly reference resolution information") + CompilerOption("resolutionframeworkregistrybase", tagString, OptionString (fun s -> tcConfigB.resolutionFrameworkRegistryBase<-s), Some(InternalCommandLineOption("", rangeCmdArgs)), None) // "The base registry key to use for assembly resolution. This part in brackets here: HKEY_LOCAL_MACHINE\[SOFTWARE\Microsoft\.NETFramework]\v2.0.50727\AssemblyFoldersEx") + CompilerOption("resolutionassemblyfoldersuffix", tagString, OptionString (fun s -> tcConfigB.resolutionAssemblyFoldersSuffix<-s), Some(InternalCommandLineOption("resolutionassemblyfoldersuffix", rangeCmdArgs)), None) // "The base registry key to use for assembly resolution. This part in brackets here: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727\[AssemblyFoldersEx]") + CompilerOption("resolutionassemblyfoldersconditions", tagString, OptionString (fun s -> tcConfigB.resolutionAssemblyFoldersConditions <- ","+s), Some(InternalCommandLineOption("resolutionassemblyfoldersconditions", rangeCmdArgs)), None) // "Additional reference resolution conditions. For example \"OSVersion=5.1.2600.0,PlatformID=id") + CompilerOption("msbuildresolution", tagNone, OptionUnit (fun () -> tcConfigB.useSimpleResolution<-false), Some(InternalCommandLineOption("msbuildresolution", rangeCmdArgs)), None) // "Resolve assembly references using MSBuild resolution rules rather than directory based (Default=true except when running fsc.exe under mono)") + CompilerOption("alwayscallvirt",tagNone,OptionSwitch(callVirtSwitch tcConfigB),Some(InternalCommandLineOption("alwayscallvirt",rangeCmdArgs)), None) + CompilerOption("nodebugdata",tagNone, OptionUnit (fun () -> tcConfigB.noDebugData<-true),Some(InternalCommandLineOption("--nodebugdata",rangeCmdArgs)), None) testFlag tcConfigB ] @ vsSpecificFlags tcConfigB @ - [ CompilerOption("jit", tagNone, OptionSwitch (jitoptimizeSwitch tcConfigB), Some(InternalCommandLineOption("jit", rangeCmdArgs)), None); - CompilerOption("localoptimize", tagNone, OptionSwitch(localoptimizeSwitch tcConfigB),Some(InternalCommandLineOption("localoptimize", rangeCmdArgs)), None); - CompilerOption("splitting", tagNone, OptionSwitch(splittingSwitch tcConfigB),Some(InternalCommandLineOption("splitting", rangeCmdArgs)), None); - CompilerOption("versionfile", tagString, OptionString (fun s -> tcConfigB.version <- VersionFile s), Some(InternalCommandLineOption("versionfile", rangeCmdArgs)), None); - CompilerOption("times" , tagNone, OptionUnit (fun () -> tcConfigB.showTimes <- true), Some(InternalCommandLineOption("times", rangeCmdArgs)), None); // "Display timing profiles for compilation"); + [ CompilerOption("jit", tagNone, OptionSwitch (jitoptimizeSwitch tcConfigB), Some(InternalCommandLineOption("jit", rangeCmdArgs)), None) + CompilerOption("localoptimize", tagNone, OptionSwitch(localoptimizeSwitch tcConfigB),Some(InternalCommandLineOption("localoptimize", rangeCmdArgs)), None) + CompilerOption("splitting", tagNone, OptionSwitch(splittingSwitch tcConfigB),Some(InternalCommandLineOption("splitting", rangeCmdArgs)), None) + CompilerOption("versionfile", tagString, OptionString (fun s -> tcConfigB.version <- VersionFile s), Some(InternalCommandLineOption("versionfile", rangeCmdArgs)), None) + CompilerOption("times" , tagNone, OptionUnit (fun () -> tcConfigB.showTimes <- true), Some(InternalCommandLineOption("times", rangeCmdArgs)), None) // "Display timing profiles for compilation") #if EXTENSIONTYPING - CompilerOption("showextensionresolution" , tagNone, OptionUnit (fun () -> tcConfigB.showExtensionTypeMessages <- true), Some(InternalCommandLineOption("showextensionresolution", rangeCmdArgs)), None); // "Display information about extension type resolution"); + CompilerOption("showextensionresolution" , tagNone, OptionUnit (fun () -> tcConfigB.showExtensionTypeMessages <- true), Some(InternalCommandLineOption("showextensionresolution", rangeCmdArgs)), None) // "Display information about extension type resolution") #endif (* BEGIN: Consider as public Retail option? *) // Some System.Console do not have operational colors, make this available in Retail? - CompilerOption("metadataversion", tagString, OptionString (fun s -> tcConfigB.metadataVersion <- Some(s)), Some(InternalCommandLineOption("metadataversion", rangeCmdArgs)), None); + CompilerOption("metadataversion", tagString, OptionString (fun s -> tcConfigB.metadataVersion <- Some(s)), Some(InternalCommandLineOption("metadataversion", rangeCmdArgs)), None) ] @@ -882,14 +883,14 @@ let internalFlags (tcConfigB:TcConfigBuilder) = //-------------------------------------------------- let compilingFsLibFlag (tcConfigB : TcConfigBuilder) = - CompilerOption("compiling-fslib", tagNone, OptionUnit (fun () -> tcConfigB.compilingFslib <- true; - tcConfigB.TurnWarningOff(rangeStartup,"42"); - ErrorLogger.reportLibraryOnlyFeatures <- false; + CompilerOption("compiling-fslib", tagNone, OptionUnit (fun () -> tcConfigB.compilingFslib <- true + tcConfigB.TurnWarningOff(rangeStartup,"42") + ErrorLogger.reportLibraryOnlyFeatures <- false IlxSettings.ilxCompilingFSharpCoreLib := true), Some(InternalCommandLineOption("--compiling-fslib", rangeCmdArgs)), None) let compilingFsLib20Flag (tcConfigB : TcConfigBuilder) = - CompilerOption("compiling-fslib-20", tagNone, OptionString (fun s -> tcConfigB.compilingFslib20 <- Some s; ), Some(InternalCommandLineOption("--compiling-fslib-20", rangeCmdArgs)), None) + CompilerOption("compiling-fslib-20", tagNone, OptionString (fun s -> tcConfigB.compilingFslib20 <- Some s ), Some(InternalCommandLineOption("--compiling-fslib-20", rangeCmdArgs)), None) let compilingFsLib40Flag (tcConfigB : TcConfigBuilder) = - CompilerOption("compiling-fslib-40", tagNone, OptionUnit (fun () -> tcConfigB.compilingFslib40 <- true; ), Some(InternalCommandLineOption("--compiling-fslib-40", rangeCmdArgs)), None) + CompilerOption("compiling-fslib-40", tagNone, OptionUnit (fun () -> tcConfigB.compilingFslib40 <- true ), Some(InternalCommandLineOption("--compiling-fslib-40", rangeCmdArgs)), None) let mlKeywordsFlag = CompilerOption("ml-keywords", tagNone, OptionUnit (fun () -> ()), Some(DeprecatedCommandLineOptionNoDescription("--ml-keywords", rangeCmdArgs)), None) @@ -898,40 +899,40 @@ let gnuStyleErrorsFlag tcConfigB = let deprecatedFlagsBoth tcConfigB = [ - CompilerOption("light", tagNone, OptionUnit (fun () -> tcConfigB.light <- Some(true)), Some(DeprecatedCommandLineOptionNoDescription("--light", rangeCmdArgs)), None); - CompilerOption("indentation-syntax", tagNone, OptionUnit (fun () -> tcConfigB.light <- Some(true)), Some(DeprecatedCommandLineOptionNoDescription("--indentation-syntax", rangeCmdArgs)), None); - CompilerOption("no-indentation-syntax", tagNone, OptionUnit (fun () -> tcConfigB.light <- Some(false)), Some(DeprecatedCommandLineOptionNoDescription("--no-indentation-syntax", rangeCmdArgs)), None); + CompilerOption("light", tagNone, OptionUnit (fun () -> tcConfigB.light <- Some(true)), Some(DeprecatedCommandLineOptionNoDescription("--light", rangeCmdArgs)), None) + CompilerOption("indentation-syntax", tagNone, OptionUnit (fun () -> tcConfigB.light <- Some(true)), Some(DeprecatedCommandLineOptionNoDescription("--indentation-syntax", rangeCmdArgs)), None) + CompilerOption("no-indentation-syntax", tagNone, OptionUnit (fun () -> tcConfigB.light <- Some(false)), Some(DeprecatedCommandLineOptionNoDescription("--no-indentation-syntax", rangeCmdArgs)), None) ] let deprecatedFlagsFsi tcConfigB = deprecatedFlagsBoth tcConfigB let deprecatedFlagsFsc tcConfigB = deprecatedFlagsBoth tcConfigB @ [ - cliRootFlag tcConfigB; - CompilerOption("jit-optimize", tagNone, OptionUnit (fun _ -> tcConfigB.optSettings <- { tcConfigB.optSettings with jitOptUser = Some true }), Some(DeprecatedCommandLineOptionNoDescription("--jit-optimize", rangeCmdArgs)), None); - CompilerOption("no-jit-optimize", tagNone, OptionUnit (fun _ -> tcConfigB.optSettings <- { tcConfigB.optSettings with jitOptUser = Some false }), Some(DeprecatedCommandLineOptionNoDescription("--no-jit-optimize", rangeCmdArgs)), None); - CompilerOption("jit-tracking", tagNone, OptionUnit (fun _ -> () ), Some(DeprecatedCommandLineOptionNoDescription("--jit-tracking", rangeCmdArgs)), None); - CompilerOption("no-jit-tracking", tagNone, OptionUnit (fun _ -> () ), Some(DeprecatedCommandLineOptionNoDescription("--no-jit-tracking", rangeCmdArgs)), None); - CompilerOption("progress", tagNone, OptionUnit (fun () -> progress := true), Some(DeprecatedCommandLineOptionNoDescription("--progress", rangeCmdArgs)), None); - (compilingFsLibFlag tcConfigB) ; - (compilingFsLib20Flag tcConfigB) ; - (compilingFsLib40Flag tcConfigB) ; - CompilerOption("version", tagString, OptionString (fun s -> tcConfigB.version <- VersionString s), Some(DeprecatedCommandLineOptionNoDescription("--version", rangeCmdArgs)), None); -// "--clr-mscorlib", OptionString (fun s -> warning(Some(DeprecatedCommandLineOptionNoDescription("--clr-mscorlib", rangeCmdArgs))) ; tcConfigB.Build.mscorlib_assembly_name <- s), "\n\tThe name of mscorlib on the target CLR"; - CompilerOption("local-optimize", tagNone, OptionUnit (fun _ -> tcConfigB.optSettings <- { tcConfigB.optSettings with localOptUser = Some true }), Some(DeprecatedCommandLineOptionNoDescription("--local-optimize", rangeCmdArgs)), None); - CompilerOption("no-local-optimize", tagNone, OptionUnit (fun _ -> tcConfigB.optSettings <- { tcConfigB.optSettings with localOptUser = Some false }), Some(DeprecatedCommandLineOptionNoDescription("--no-local-optimize", rangeCmdArgs)), None); - CompilerOption("cross-optimize", tagNone, OptionUnit (fun _ -> tcConfigB.optSettings <- { tcConfigB.optSettings with crossModuleOptUser = Some true }), Some(DeprecatedCommandLineOptionNoDescription("--cross-optimize", rangeCmdArgs)), None); - CompilerOption("no-cross-optimize", tagNone, OptionUnit (fun _ -> tcConfigB.optSettings <- { tcConfigB.optSettings with crossModuleOptUser = Some false }), Some(DeprecatedCommandLineOptionNoDescription("--no-cross-optimize", rangeCmdArgs)), None); - CompilerOption("no-string-interning", tagNone, OptionUnit (fun () -> tcConfigB.internConstantStrings <- false), Some(DeprecatedCommandLineOptionNoDescription("--no-string-interning", rangeCmdArgs)), None); - CompilerOption("statistics", tagNone, OptionUnit (fun () -> tcConfigB.stats <- true), Some(DeprecatedCommandLineOptionNoDescription("--statistics", rangeCmdArgs)), None); - CompilerOption("generate-filter-blocks", tagNone, OptionUnit (fun () -> tcConfigB.generateFilterBlocks <- true), Some(DeprecatedCommandLineOptionNoDescription("--generate-filter-blocks", rangeCmdArgs)), None); - //CompilerOption("no-generate-filter-blocks", tagNone, OptionUnit (fun () -> tcConfigB.generateFilterBlocks <- false), Some(DeprecatedCommandLineOptionNoDescription("--generate-filter-blocks", rangeCmdArgs)), None); - CompilerOption("max-errors", tagInt, OptionInt (fun n -> tcConfigB.maxErrors <- n), Some(DeprecatedCommandLineOptionSuggestAlternative("--max-errors", "--maxerrors", rangeCmdArgs)),None); - CompilerOption("debug-file", tagNone, OptionString (fun s -> tcConfigB.debugSymbolFile <- Some s), Some(DeprecatedCommandLineOptionSuggestAlternative("--debug-file", "--pdb", rangeCmdArgs)), None); - CompilerOption("no-debug-file", tagNone, OptionUnit (fun () -> tcConfigB.debuginfo <- false), Some(DeprecatedCommandLineOptionSuggestAlternative("--no-debug-file", "--debug-", rangeCmdArgs)), None); - CompilerOption("Ooff", tagNone, OptionUnit (fun () -> SetOptimizeOff(tcConfigB)), Some(DeprecatedCommandLineOptionSuggestAlternative("-Ooff", "--optimize-", rangeCmdArgs)), None); - mlKeywordsFlag ; - gnuStyleErrorsFlag tcConfigB; + cliRootFlag tcConfigB + CompilerOption("jit-optimize", tagNone, OptionUnit (fun _ -> tcConfigB.optSettings <- { tcConfigB.optSettings with jitOptUser = Some true }), Some(DeprecatedCommandLineOptionNoDescription("--jit-optimize", rangeCmdArgs)), None) + CompilerOption("no-jit-optimize", tagNone, OptionUnit (fun _ -> tcConfigB.optSettings <- { tcConfigB.optSettings with jitOptUser = Some false }), Some(DeprecatedCommandLineOptionNoDescription("--no-jit-optimize", rangeCmdArgs)), None) + CompilerOption("jit-tracking", tagNone, OptionUnit (fun _ -> (tcConfigB.jitTracking <- true) ), Some(DeprecatedCommandLineOptionNoDescription("--jit-tracking", rangeCmdArgs)), None) + CompilerOption("no-jit-tracking", tagNone, OptionUnit (fun _ -> (tcConfigB.jitTracking <- false) ), Some(DeprecatedCommandLineOptionNoDescription("--no-jit-tracking", rangeCmdArgs)), None) + CompilerOption("progress", tagNone, OptionUnit (fun () -> progress := true), Some(DeprecatedCommandLineOptionNoDescription("--progress", rangeCmdArgs)), None) + (compilingFsLibFlag tcConfigB) + (compilingFsLib20Flag tcConfigB) + (compilingFsLib40Flag tcConfigB) + CompilerOption("version", tagString, OptionString (fun s -> tcConfigB.version <- VersionString s), Some(DeprecatedCommandLineOptionNoDescription("--version", rangeCmdArgs)), None) +// "--clr-mscorlib", OptionString (fun s -> warning(Some(DeprecatedCommandLineOptionNoDescription("--clr-mscorlib", rangeCmdArgs))) tcConfigB.Build.mscorlib_assembly_name <- s), "\n\tThe name of mscorlib on the target CLR" + CompilerOption("local-optimize", tagNone, OptionUnit (fun _ -> tcConfigB.optSettings <- { tcConfigB.optSettings with localOptUser = Some true }), Some(DeprecatedCommandLineOptionNoDescription("--local-optimize", rangeCmdArgs)), None) + CompilerOption("no-local-optimize", tagNone, OptionUnit (fun _ -> tcConfigB.optSettings <- { tcConfigB.optSettings with localOptUser = Some false }), Some(DeprecatedCommandLineOptionNoDescription("--no-local-optimize", rangeCmdArgs)), None) + CompilerOption("cross-optimize", tagNone, OptionUnit (fun _ -> tcConfigB.optSettings <- { tcConfigB.optSettings with crossModuleOptUser = Some true }), Some(DeprecatedCommandLineOptionNoDescription("--cross-optimize", rangeCmdArgs)), None) + CompilerOption("no-cross-optimize", tagNone, OptionUnit (fun _ -> tcConfigB.optSettings <- { tcConfigB.optSettings with crossModuleOptUser = Some false }), Some(DeprecatedCommandLineOptionNoDescription("--no-cross-optimize", rangeCmdArgs)), None) + CompilerOption("no-string-interning", tagNone, OptionUnit (fun () -> tcConfigB.internConstantStrings <- false), Some(DeprecatedCommandLineOptionNoDescription("--no-string-interning", rangeCmdArgs)), None) + CompilerOption("statistics", tagNone, OptionUnit (fun () -> tcConfigB.stats <- true), Some(DeprecatedCommandLineOptionNoDescription("--statistics", rangeCmdArgs)), None) + CompilerOption("generate-filter-blocks", tagNone, OptionUnit (fun () -> tcConfigB.generateFilterBlocks <- true), Some(DeprecatedCommandLineOptionNoDescription("--generate-filter-blocks", rangeCmdArgs)), None) + //CompilerOption("no-generate-filter-blocks", tagNone, OptionUnit (fun () -> tcConfigB.generateFilterBlocks <- false), Some(DeprecatedCommandLineOptionNoDescription("--generate-filter-blocks", rangeCmdArgs)), None) + CompilerOption("max-errors", tagInt, OptionInt (fun n -> tcConfigB.maxErrors <- n), Some(DeprecatedCommandLineOptionSuggestAlternative("--max-errors", "--maxerrors", rangeCmdArgs)),None) + CompilerOption("debug-file", tagNone, OptionString (fun s -> tcConfigB.debugSymbolFile <- Some s), Some(DeprecatedCommandLineOptionSuggestAlternative("--debug-file", "--pdb", rangeCmdArgs)), None) + CompilerOption("no-debug-file", tagNone, OptionUnit (fun () -> tcConfigB.debuginfo <- false), Some(DeprecatedCommandLineOptionSuggestAlternative("--no-debug-file", "--debug-", rangeCmdArgs)), None) + CompilerOption("Ooff", tagNone, OptionUnit (fun () -> SetOptimizeOff(tcConfigB)), Some(DeprecatedCommandLineOptionSuggestAlternative("-Ooff", "--optimize-", rangeCmdArgs)), None) + mlKeywordsFlag + gnuStyleErrorsFlag tcConfigB ] @@ -946,17 +947,17 @@ let DisplayBannerText tcConfigB = /// FSC only help. (FSI has it's own help function). let displayHelpFsc tcConfigB (blocks:CompilerOptionBlock list) = - DisplayBannerText tcConfigB; + DisplayBannerText tcConfigB PrintCompilerOptionBlocks blocks exit 0 let miscFlagsBoth tcConfigB = - [ CompilerOption("nologo", tagNone, OptionUnit (fun () -> tcConfigB.showBanner <- false), None, Some (FSComp.SR.optsNologo())); + [ CompilerOption("nologo", tagNone, OptionUnit (fun () -> tcConfigB.showBanner <- false), None, Some (FSComp.SR.optsNologo())) ] let miscFlagsFsc tcConfigB = miscFlagsBoth tcConfigB @ - [ CompilerOption("help", tagNone, OptionHelp (fun blocks -> displayHelpFsc tcConfigB blocks), None, Some (FSComp.SR.optsHelp())); + [ CompilerOption("help", tagNone, OptionHelp (fun blocks -> displayHelpFsc tcConfigB blocks), None, Some (FSComp.SR.optsHelp())) CompilerOption("@", tagNone, OptionUnit ignore, None, Some (FSComp.SR.optsResponseFile())) ] let miscFlagsFsi tcConfigB = miscFlagsBoth tcConfigB @@ -967,23 +968,23 @@ let miscFlagsFsi tcConfigB = miscFlagsBoth tcConfigB let abbreviatedFlagsBoth tcConfigB = [ - CompilerOption("d", tagString, OptionString (defineSymbol tcConfigB), None, Some(FSComp.SR.optsShortFormOf("--define"))); - CompilerOption("O", tagNone, OptionSwitch (SetOptimizeSwitch tcConfigB) , None, Some(FSComp.SR.optsShortFormOf("--optimize[+|-]"))); - CompilerOption("g", tagNone, OptionSwitch (SetDebugSwitch tcConfigB None), None, Some(FSComp.SR.optsShortFormOf("--debug"))); - CompilerOption("i", tagString, OptionUnit (fun () -> tcConfigB.printSignature <- true), None, Some(FSComp.SR.optsShortFormOf("--sig"))); - referenceFlagAbbrev tcConfigB; (* -r *) - libFlagAbbrev tcConfigB; (* -I *) + CompilerOption("d", tagString, OptionString (defineSymbol tcConfigB), None, Some(FSComp.SR.optsShortFormOf("--define"))) + CompilerOption("O", tagNone, OptionSwitch (SetOptimizeSwitch tcConfigB) , None, Some(FSComp.SR.optsShortFormOf("--optimize[+|-]"))) + CompilerOption("g", tagNone, OptionSwitch (SetDebugSwitch tcConfigB None), None, Some(FSComp.SR.optsShortFormOf("--debug"))) + CompilerOption("i", tagString, OptionUnit (fun () -> tcConfigB.printSignature <- true), None, Some(FSComp.SR.optsShortFormOf("--sig"))) + referenceFlagAbbrev tcConfigB (* -r *) + libFlagAbbrev tcConfigB (* -I *) ] let abbreviatedFlagsFsi tcConfigB = abbreviatedFlagsBoth tcConfigB let abbreviatedFlagsFsc tcConfigB = abbreviatedFlagsBoth tcConfigB @ [ (* FSC only abbreviated options *) - CompilerOption("o", tagString, OptionString (setOutFileName tcConfigB), None, Some(FSComp.SR.optsShortFormOf("--out"))); - CompilerOption("a", tagString, OptionUnit (fun () -> tcConfigB.target <- Dll), None, Some(FSComp.SR.optsShortFormOf("--target library"))); + CompilerOption("o", tagString, OptionString (setOutFileName tcConfigB), None, Some(FSComp.SR.optsShortFormOf("--out"))) + CompilerOption("a", tagString, OptionUnit (fun () -> tcConfigB.target <- Dll), None, Some(FSComp.SR.optsShortFormOf("--target library"))) (* FSC help abbreviations. FSI has it's own help options... *) - CompilerOption("?" , tagNone, OptionHelp (fun blocks -> displayHelpFsc tcConfigB blocks), None, Some(FSComp.SR.optsShortFormOf("--help"))); - CompilerOption("help" , tagNone, OptionHelp (fun blocks -> displayHelpFsc tcConfigB blocks), None, Some(FSComp.SR.optsShortFormOf("--help"))); + CompilerOption("?" , tagNone, OptionHelp (fun blocks -> displayHelpFsc tcConfigB blocks), None, Some(FSComp.SR.optsShortFormOf("--help"))) + CompilerOption("help" , tagNone, OptionHelp (fun blocks -> displayHelpFsc tcConfigB blocks), None, Some(FSComp.SR.optsShortFormOf("--help"))) CompilerOption("full-help", tagNone, OptionHelp (fun blocks -> displayHelpFsc tcConfigB blocks), None, Some(FSComp.SR.optsShortFormOf("--help"))) ] @@ -992,7 +993,7 @@ let GetAbbrevFlagSet tcConfigB isFsc = for c in ((if isFsc then abbreviatedFlagsFsc else abbreviatedFlagsFsi) tcConfigB) do match c with | CompilerOption(arg,_,OptionString _,_,_) - | CompilerOption(arg,_,OptionStringList _,_,_) -> argList <- argList @ ["-"^arg;"/"^arg] + | CompilerOption(arg,_,OptionStringList _,_,_) -> argList <- argList @ ["-"+arg;"/"+arg] | _ -> () Set.ofList argList @@ -1006,10 +1007,10 @@ let PostProcessCompilerArgs (abbrevArgs : string Set) (args : string []) = while i < len do if not(abbrevArgs.Contains(args.[i])) || i = (len - 1) then - arga.[idx] <- args.[i] ; + arga.[idx] <- args.[i] i <- i+1 else - arga.[idx] <- args.[i] ^ ":" ^ args.[i+1] + arga.[idx] <- args.[i] + ":" + args.[i+1] i <- i + 2 idx <- idx + 1 Array.toList arga.[0 .. (idx - 1)] @@ -1057,17 +1058,17 @@ let testingAndQAFlags _tcConfigB = /// The core/common options used by fsc.exe. [not currently extended by fsc.fs]. let GetCoreFscCompilerOptions (tcConfigB: TcConfigBuilder) = - [ PublicOptions(FSComp.SR.optsHelpBannerOutputFiles(), outputFileFlagsFsc tcConfigB); - PublicOptions(FSComp.SR.optsHelpBannerInputFiles(), inputFileFlagsFsc tcConfigB); - PublicOptions(FSComp.SR.optsHelpBannerResources(), resourcesFlagsFsc tcConfigB); - PublicOptions(FSComp.SR.optsHelpBannerCodeGen(), codeGenerationFlags tcConfigB); - PublicOptions(FSComp.SR.optsHelpBannerErrsAndWarns(), errorsAndWarningsFlags tcConfigB); - PublicOptions(FSComp.SR.optsHelpBannerLanguage(), languageFlags tcConfigB); - PublicOptions(FSComp.SR.optsHelpBannerMisc(), miscFlagsFsc tcConfigB); - PublicOptions(FSComp.SR.optsHelpBannerAdvanced(), advancedFlagsFsc tcConfigB); - PrivateOptions(List.concat [ internalFlags tcConfigB; - abbreviatedFlagsFsc tcConfigB; - deprecatedFlagsFsc tcConfigB; + [ PublicOptions(FSComp.SR.optsHelpBannerOutputFiles(), outputFileFlagsFsc tcConfigB) + PublicOptions(FSComp.SR.optsHelpBannerInputFiles(), inputFileFlagsFsc tcConfigB) + PublicOptions(FSComp.SR.optsHelpBannerResources(), resourcesFlagsFsc tcConfigB) + PublicOptions(FSComp.SR.optsHelpBannerCodeGen(), codeGenerationFlags false tcConfigB) + PublicOptions(FSComp.SR.optsHelpBannerErrsAndWarns(), errorsAndWarningsFlags tcConfigB) + PublicOptions(FSComp.SR.optsHelpBannerLanguage(), languageFlags tcConfigB) + PublicOptions(FSComp.SR.optsHelpBannerMisc(), miscFlagsFsc tcConfigB) + PublicOptions(FSComp.SR.optsHelpBannerAdvanced(), advancedFlagsFsc tcConfigB) + PrivateOptions(List.concat [ internalFlags tcConfigB + abbreviatedFlagsFsc tcConfigB + deprecatedFlagsFsc tcConfigB testingAndQAFlags tcConfigB]) ] @@ -1079,18 +1080,18 @@ let GetCoreServiceCompilerOptions (tcConfigB:TcConfigBuilder) = /// The core/common options used by fsi.exe. [note, some additional options are added in fsi.fs]. let GetCoreFsiCompilerOptions (tcConfigB: TcConfigBuilder) = - [ PublicOptions(FSComp.SR.optsHelpBannerOutputFiles() , outputFileFlagsFsi tcConfigB); - PublicOptions(FSComp.SR.optsHelpBannerInputFiles() , inputFileFlagsFsi tcConfigB); - PublicOptions(FSComp.SR.optsHelpBannerResources() , resourcesFlagsFsi tcConfigB); - PublicOptions(FSComp.SR.optsHelpBannerCodeGen() , codeGenerationFlags tcConfigB); - PublicOptions(FSComp.SR.optsHelpBannerErrsAndWarns() , errorsAndWarningsFlags tcConfigB); - PublicOptions(FSComp.SR.optsHelpBannerLanguage() , languageFlags tcConfigB); + [ PublicOptions(FSComp.SR.optsHelpBannerOutputFiles() , outputFileFlagsFsi tcConfigB) + PublicOptions(FSComp.SR.optsHelpBannerInputFiles() , inputFileFlagsFsi tcConfigB) + PublicOptions(FSComp.SR.optsHelpBannerResources() , resourcesFlagsFsi tcConfigB) + PublicOptions(FSComp.SR.optsHelpBannerCodeGen() , codeGenerationFlags true tcConfigB) + PublicOptions(FSComp.SR.optsHelpBannerErrsAndWarns() , errorsAndWarningsFlags tcConfigB) + PublicOptions(FSComp.SR.optsHelpBannerLanguage() , languageFlags tcConfigB) // Note: no HTML block for fsi.exe - PublicOptions(FSComp.SR.optsHelpBannerMisc() , miscFlagsFsi tcConfigB); - PublicOptions(FSComp.SR.optsHelpBannerAdvanced() , advancedFlagsFsi tcConfigB); - PrivateOptions(List.concat [ internalFlags tcConfigB; - abbreviatedFlagsFsi tcConfigB; - deprecatedFlagsFsi tcConfigB; + PublicOptions(FSComp.SR.optsHelpBannerMisc() , miscFlagsFsi tcConfigB) + PublicOptions(FSComp.SR.optsHelpBannerAdvanced() , advancedFlagsFsi tcConfigB) + PrivateOptions(List.concat [ internalFlags tcConfigB + abbreviatedFlagsFsi tcConfigB + deprecatedFlagsFsi tcConfigB testingAndQAFlags tcConfigB]) ] @@ -1105,15 +1106,15 @@ let showTermFileCount = ref 0 let PrintWholeAssemblyImplementation (tcConfig:TcConfig) outfile header expr = if tcConfig.showTerms then if tcConfig.writeTermsToFiles then - let filename = outfile ^ ".terms" + let filename = outfile + ".terms" let n = !showTermFileCount - showTermFileCount := n+1; - use f = System.IO.File.CreateText (filename ^ "-" ^ string n ^ "-" ^ header) - Layout.outL f (Layout.squashTo 192 (DebugPrint.assemblyL expr)); + showTermFileCount := n+1 + use f = System.IO.File.CreateText (filename + "-" + string n + "-" + header) + Layout.outL f (Layout.squashTo 192 (DebugPrint.implFilesL expr)) else - dprintf "\n------------------\nshowTerm: %s:\n" header; - Layout.outL stderr (Layout.squashTo 192 (DebugPrint.assemblyL expr)); - dprintf "\n------------------\n"; + dprintf "\n------------------\nshowTerm: %s:\n" header + Layout.outL stderr (Layout.squashTo 192 (DebugPrint.implFilesL expr)) + dprintf "\n------------------\n" //---------------------------------------------------------------------------- // ReportTime @@ -1127,8 +1128,8 @@ let ReportTime (tcConfig:TcConfig) descr = | None -> () | Some prevDescr -> if tcConfig.pause then - dprintf "[done '%s', entering '%s'] press to continue... " prevDescr descr; - System.Console.ReadLine() |> ignore; + dprintf "[done '%s', entering '%s'] press to continue... " prevDescr descr + System.Console.ReadLine() |> ignore // Intentionally putting this right after the pause so a debugger can be attached. match tcConfig.simulateException with | Some("fsc-oom") -> raise(System.OutOfMemoryException()) @@ -1175,7 +1176,7 @@ let ReportTime (tcConfig:TcConfig) descr = let spanGC = [| for i in 0 .. maxGen -> System.GC.CollectionCount(i) - gcPrev.[i] |] dprintf "TIME: %4.1f Delta: %4.1f Mem: %3d" timeNow (timeNow - timePrev) - wsNow; + wsNow dprintf " G0: %3d G1: %2d G2: %2d [%s]\n" spanGC.[Operators.min 0 maxGen] spanGC.[Operators.min 1 maxGen] spanGC.[Operators.min 2 maxGen] prevDescr @@ -1206,56 +1207,55 @@ let GetInitialOptimizationEnv (tcImports:TcImports, tcGlobals:TcGlobals) = let optEnv = List.fold (AddExternalCcuToOpimizationEnv tcGlobals) optEnv ccuinfos optEnv -let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importMap, isIncrementalFragment, optEnv, ccu:CcuThunk, tassembly:TypedAssembly) = +let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importMap, isIncrementalFragment, optEnv, ccu:CcuThunk, implFiles) = // NOTE: optEnv - threads through // // Always optimize once - the results of this step give the x-module optimization // info. Subsequent optimization steps choose representations etc. which we don't // want to save in the x-module info (i.e. x-module info is currently "high level"). - PrintWholeAssemblyImplementation tcConfig outfile "pass-start" tassembly; + PrintWholeAssemblyImplementation tcConfig outfile "pass-start" implFiles #if DEBUG - if tcConfig.showOptimizationData then dprintf "Expression prior to optimization:\n%s\n" (Layout.showL (Layout.squashTo 192 (DebugPrint.assemblyL tassembly))); - if tcConfig.showOptimizationData then dprintf "CCU prior to optimization:\n%s\n" (Layout.showL (Layout.squashTo 192 (DebugPrint.entityL ccu.Contents))); + if tcConfig.showOptimizationData then dprintf "Expression prior to optimization:\n%s\n" (Layout.showL (Layout.squashTo 192 (DebugPrint.implFilesL implFiles))) + if tcConfig.showOptimizationData then dprintf "CCU prior to optimization:\n%s\n" (Layout.showL (Layout.squashTo 192 (DebugPrint.entityL ccu.Contents))) #endif let optEnv0 = optEnv - let (TAssembly(implFiles)) = tassembly - ReportTime tcConfig ("Optimizations"); + ReportTime tcConfig ("Optimizations") + + // Only do abstract_big_targets on the first pass! Only do it when TLR is on! + let optSettings = tcConfig.optSettings + let optSettings = { optSettings with abstractBigTargets = tcConfig.doTLR } + let optSettings = { optSettings with reportingPhase = true } + let results,(optEnvFirstLoop,_,_,_) = ((optEnv0,optEnv0,optEnv0,SignatureHidingInfo.Empty),implFiles) ||> List.mapFold (fun (optEnvFirstLoop,optEnvExtraLoop,optEnvFinalSimplify,hidden) implFile -> - // Only do abstract_big_targets on the first pass! Only do it when TLR is on! - let optSettings = tcConfig.optSettings - let optSettings = { optSettings with abstractBigTargets = tcConfig.doTLR } - let optSettings = { optSettings with reportingPhase = true } - - //ReportTime tcConfig ("Initial simplify"); - let optEnvFirstLoop,implFile,implFileOptData,hidden = - Optimizer.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal, importMap,optEnvFirstLoop,isIncrementalFragment,tcConfig.emitTailcalls,hidden,implFile) + //ReportTime tcConfig ("Initial simplify") + let (optEnvFirstLoop,implFile,implFileOptData,hidden), optimizeDuringCodeGen = + Optimizer.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal,importMap,optEnvFirstLoop,isIncrementalFragment,tcConfig.emitTailcalls,hidden,implFile) let implFile = AutoBox.TransformImplFile tcGlobals importMap implFile // Only do this on the first pass! - let optSettings = { optSettings with abstractBigTargets = false } - let optSettings = { optSettings with reportingPhase = false } + let optSettings = { optSettings with abstractBigTargets = false; reportingPhase = false } #if DEBUG - if tcConfig.showOptimizationData then dprintf "Optimization implFileOptData:\n%s\n" (Layout.showL (Layout.squashTo 192 (Optimizer.moduleInfoL tcGlobals implFileOptData))); + if tcConfig.showOptimizationData then dprintf "Optimization implFileOptData:\n%s\n" (Layout.showL (Layout.squashTo 192 (Optimizer.moduleInfoL tcGlobals implFileOptData))) #endif let implFile,optEnvExtraLoop = if tcConfig.extraOptimizationIterations > 0 then - //ReportTime tcConfig ("Extra simplification loop"); - let optEnvExtraLoop,implFile, _, _ = Optimizer.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal, importMap,optEnvExtraLoop,isIncrementalFragment,tcConfig.emitTailcalls,hidden,implFile) - //PrintWholeAssemblyImplementation tcConfig outfile (sprintf "extra-loop-%d" n) implFile; + //ReportTime tcConfig ("Extra simplification loop") + let (optEnvExtraLoop,implFile, _, _), _ = Optimizer.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal, importMap,optEnvExtraLoop,isIncrementalFragment,tcConfig.emitTailcalls,hidden,implFile) + //PrintWholeAssemblyImplementation tcConfig outfile (sprintf "extra-loop-%d" n) implFile implFile,optEnvExtraLoop else implFile,optEnvExtraLoop let implFile = if tcConfig.doDetuple then - //ReportTime tcConfig ("Detupled optimization"); + //ReportTime tcConfig ("Detupled optimization") let implFile = implFile |> Detuple.DetupleImplFile ccu tcGlobals - //PrintWholeAssemblyImplementation tcConfig outfile "post-detuple" implFile; + //PrintWholeAssemblyImplementation tcConfig outfile "post-detuple" implFile implFile else implFile @@ -1269,21 +1269,22 @@ let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importM let implFile,optEnvFinalSimplify = if tcConfig.doFinalSimplify then - //ReportTime tcConfig ("Final simplify pass"); - let optEnvFinalSimplify,implFile, _, _ = Optimizer.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal, importMap,optEnvFinalSimplify,isIncrementalFragment,tcConfig.emitTailcalls,hidden,implFile) - //PrintWholeAssemblyImplementation tcConfig outfile "post-rec-opt" implFile; + //ReportTime tcConfig ("Final simplify pass") + let (optEnvFinalSimplify,implFile, _, _),_ = Optimizer.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal, importMap,optEnvFinalSimplify,isIncrementalFragment,tcConfig.emitTailcalls,hidden,implFile) + //PrintWholeAssemblyImplementation tcConfig outfile "post-rec-opt" implFile implFile,optEnvFinalSimplify else implFile,optEnvFinalSimplify - (implFile,implFileOptData),(optEnvFirstLoop,optEnvExtraLoop,optEnvFinalSimplify,hidden)) + + ((implFile,optimizeDuringCodeGen),implFileOptData),(optEnvFirstLoop,optEnvExtraLoop,optEnvFinalSimplify,hidden)) let implFiles,implFileOptDatas = List.unzip results let assemblyOptData = Optimizer.UnionOptimizationInfos implFileOptDatas - let tassembly = TAssembly(implFiles) - PrintWholeAssemblyImplementation tcConfig outfile "pass-end" tassembly; - ReportTime tcConfig ("Ending Optimizations"); + let tassembly = TypedAssemblyAfterOptimization(implFiles) + PrintWholeAssemblyImplementation tcConfig outfile "pass-end" (List.map fst implFiles) + ReportTime tcConfig ("Ending Optimizations") - tassembly, assemblyOptData,optEnvFirstLoop + tassembly, assemblyOptData, optEnvFirstLoop //---------------------------------------------------------------------------- @@ -1297,20 +1298,20 @@ let CreateIlxAssemblyGenerator (_tcConfig:TcConfig,tcImports:TcImports,tcGlobals ilxGenerator let GenerateIlxCode (ilxBackend, isInteractiveItExpr, isInteractiveOnMono, tcConfig:TcConfig, topAttrs, optimizedImpls, fragName, netFxHasSerializableAttribute, ilxGenerator : IlxAssemblyGenerator) = - if !progress then dprintf "Generating ILX code...\n"; + if !progress then dprintf "Generating ILX code...\n" let ilxGenOpts : IlxGenOptions = - { generateFilterBlocks = tcConfig.generateFilterBlocks; - emitConstantArraysUsingStaticDataBlobs = not isInteractiveOnMono; - workAroundReflectionEmitBugs=tcConfig.isInteractive; // REVIEW: is this still required? - generateDebugSymbols= tcConfig.debuginfo; - fragName = fragName; - localOptimizationsAreOn= tcConfig.optSettings.localOpt (); - testFlagEmitFeeFeeAs100001 = tcConfig.testFlagEmitFeeFeeAs100001; - mainMethodInfo= (if (tcConfig.target = Dll || tcConfig.target = Module) then None else Some topAttrs.mainMethodAttrs); - ilxBackend = ilxBackend; - isInteractive = tcConfig.isInteractive; - isInteractiveItExpr = isInteractiveItExpr; - netFxHasSerializableAttribute = netFxHasSerializableAttribute; + { generateFilterBlocks = tcConfig.generateFilterBlocks + emitConstantArraysUsingStaticDataBlobs = not isInteractiveOnMono + workAroundReflectionEmitBugs=tcConfig.isInteractive // REVIEW: is this still required? + generateDebugSymbols= tcConfig.debuginfo + fragName = fragName + localOptimizationsAreOn= tcConfig.optSettings.localOpt () + testFlagEmitFeeFeeAs100001 = tcConfig.testFlagEmitFeeFeeAs100001 + mainMethodInfo= (if (tcConfig.target = Dll || tcConfig.target = Module) then None else Some topAttrs.mainMethodAttrs) + ilxBackend = ilxBackend + isInteractive = tcConfig.isInteractive + isInteractiveItExpr = isInteractiveItExpr + netFxHasSerializableAttribute = netFxHasSerializableAttribute alwaysCallVirt = tcConfig.alwaysCallVirt } ilxGenerator.GenerateCode (ilxGenOpts, optimizedImpls, topAttrs.assemblyAttrs,topAttrs.netModuleAttrs) @@ -1355,7 +1356,7 @@ let DoWithErrorColor isWarn f = try let warnColor = if Console.BackgroundColor = ConsoleColor.White then ConsoleColor.DarkBlue else ConsoleColor.Cyan let errorColor = ConsoleColor.Red - ignoreFailureOnMono1_1_16 (fun () -> Console.ForegroundColor <- (if isWarn then warnColor else errorColor)); - f(); + ignoreFailureOnMono1_1_16 (fun () -> Console.ForegroundColor <- (if isWarn then warnColor else errorColor)) + f() finally ignoreFailureOnMono1_1_16 (fun () -> Console.ForegroundColor <- c) diff --git a/src/fsharp/CompileOptions.fsi b/src/fsharp/CompileOptions.fsi index 57f87228ec8..75ff4227c3c 100644 --- a/src/fsharp/CompileOptions.fsi +++ b/src/fsharp/CompileOptions.fsi @@ -81,11 +81,11 @@ val GetGeneratedILModuleName : CompilerTarget -> string -> string #else val GetInitialOptimizationEnv : TcImports * TcGlobals -> IncrementalOptimizationEnv val AddExternalCcuToOpimizationEnv : TcGlobals -> IncrementalOptimizationEnv -> ImportedAssembly -> IncrementalOptimizationEnv -val ApplyAllOptimizations : TcConfig * TcGlobals * ConstraintSolver.TcValF * string * ImportMap * bool * IncrementalOptimizationEnv * CcuThunk * TypedAssembly -> TypedAssembly * Optimizer.LazyModuleInfo * IncrementalOptimizationEnv +val ApplyAllOptimizations : TcConfig * TcGlobals * ConstraintSolver.TcValF * string * ImportMap * bool * IncrementalOptimizationEnv * CcuThunk * TypedImplFile list -> TypedAssemblyAfterOptimization * Optimizer.LazyModuleInfo * IncrementalOptimizationEnv val CreateIlxAssemblyGenerator : TcConfig * TcImports * TcGlobals * ConstraintSolver.TcValF * CcuThunk -> IlxGen.IlxAssemblyGenerator -val GenerateIlxCode : IlxGen.IlxGenBackend * bool * bool * TcConfig * TypeChecker.TopAttribs * TypedAssembly * string * bool * IlxGen.IlxAssemblyGenerator -> IlxGen.IlxGenResults +val GenerateIlxCode : IlxGen.IlxGenBackend * bool * bool * TcConfig * TypeChecker.TopAttribs * TypedAssemblyAfterOptimization * string * bool * IlxGen.IlxAssemblyGenerator -> IlxGen.IlxGenResults #endif // Used during static linking diff --git a/src/fsharp/ConstraintSolver.fs b/src/fsharp/ConstraintSolver.fs index c34e18d20cd..21129b89106 100644 --- a/src/fsharp/ConstraintSolver.fs +++ b/src/fsharp/ConstraintSolver.fs @@ -80,7 +80,7 @@ let NewErrorTypar () = NewCompGenTypar (TyparKind.Type,TyparRigidity.Flexible,No let NewErrorMeasureVar () = NewCompGenTypar (TyparKind.Measure,TyparRigidity.Flexible,NoStaticReq,TyparDynamicReq.No,true) let NewInferenceType () = mkTyparTy (NewTypar (TyparKind.Type,TyparRigidity.Flexible,Typar(compgen_id,NoStaticReq,true),false,TyparDynamicReq.No,[],false,false)) let NewErrorType () = mkTyparTy (NewErrorTypar ()) -let NewErrorMeasure () = MeasureVar (NewErrorMeasureVar ()) +let NewErrorMeasure () = Measure.Var (NewErrorMeasureVar ()) let NewInferenceTypes l = l |> List.map (fun _ -> NewInferenceType ()) @@ -160,31 +160,32 @@ type TcValF = (ValRef -> ValUseFlag -> TType list -> range -> Expr * TType) type ConstraintSolverState = { - g: TcGlobals; - amap: Import.ImportMap; - InfoReader : InfoReader; + g: TcGlobals + amap: Import.ImportMap + InfoReader : InfoReader TcVal : TcValF /// This table stores all unsolved, ungeneralized trait constraints, indexed by free type variable. /// That is, there will be one entry in this table for each free type variable in /// each outstanding, unsolved, ungeneralized trait constraint. Constraints are removed from the table and resolved /// each time a solution to an index variable is found. - mutable ExtraCxs: HashMultiMap; + mutable ExtraCxs: HashMultiMap } static member New(g,amap,infoReader, tcVal) = - { g=g; amap=amap; + { g=g + amap=amap ExtraCxs= HashMultiMap(10, HashIdentity.Structural) InfoReader=infoReader - TcVal = tcVal } ; + TcVal = tcVal } type ConstraintSolverEnv = { - SolverState: ConstraintSolverState; + SolverState: ConstraintSolverState eContextInfo: ContextInfo MatchingOnly : bool - m: range; - EquivEnv: TypeEquivEnv; + m: range + EquivEnv: TypeEquivEnv DisplayEnv : DisplayEnv } member csenv.InfoReader = csenv.SolverState.InfoReader @@ -192,12 +193,12 @@ type ConstraintSolverEnv = member csenv.amap = csenv.SolverState.amap let MakeConstraintSolverEnv contextInfo css m denv = - { SolverState=css; - m=m; + { SolverState=css + m=m eContextInfo = contextInfo // Indicates that when unifiying ty1 = ty2, only type variables in ty1 may be solved - MatchingOnly=false; - EquivEnv=TypeEquivEnv.Empty; + MatchingOnly=false + EquivEnv=TypeEquivEnv.Empty DisplayEnv = denv } @@ -212,7 +213,7 @@ let rec occursCheck g un ty = match stripTyEqns g ty with | TType_ucase(_,l) | TType_app (_,l) - | TType_tuple l -> List.exists (occursCheck g un) l + | TType_tuple (_,l) -> List.exists (occursCheck g un) l | TType_fun (d,r) -> occursCheck g un d || occursCheck g un r | TType_var r -> typarEq un r | TType_forall (_,tau) -> occursCheck g un tau @@ -276,7 +277,7 @@ let GetMeasureOfType g ty = | AppTy g (tcref,[tyarg]) -> match stripTyEqns g tyarg with | TType_measure ms -> - if measureEquiv g ms MeasureOne then None else Some (tcref,ms) + if measureEquiv g ms Measure.One then None else Some (tcref,ms) | _ -> None | _ -> None @@ -303,9 +304,10 @@ let BakedInTraitConstraintNames = // Run the constraint solver with undo (used during method overload resolution) type Trace = - | Trace of (unit -> unit) list ref - static member New () = Trace (ref []) - member t.Undo () = let (Trace trace) = t in List.iter (fun a -> a ()) !trace + { mutable actions: (unit -> unit) list } + static member New () = { actions = [] } + member t.Undo () = List.iter (fun a -> a ()) t.actions + member t.Push f = t.actions <- f :: t.actions type OptionalTrace = | NoTrace @@ -417,7 +419,7 @@ let rec TransactStaticReq (csenv:ConstraintSolverEnv) trace (tpr:Typar) req = let orig = tpr.StaticReq match trace with | NoTrace -> () - | WithTrace (Trace actions) -> actions := (fun () -> tpr.SetStaticReq orig) :: !actions + | WithTrace trace -> trace.Push (fun () -> tpr.SetStaticReq orig) tpr.SetStaticReq req; CompleteD @@ -446,7 +448,7 @@ let rec TransactDynamicReq trace (tpr:Typar) req = let orig = tpr.DynamicReq match trace with | NoTrace -> () - | WithTrace (Trace actions) -> actions := (fun () -> tpr.SetDynamicReq orig) :: !actions + | WithTrace trace -> trace.Push (fun () -> tpr.SetDynamicReq orig) tpr.SetDynamicReq req; CompleteD @@ -465,12 +467,12 @@ let SubstMeasureWarnIfRigid (csenv:ConstraintSolverEnv) trace (v:Typar) ms = let tpnmOpt = if v.IsCompilerGenerated then None else Some v.Name SolveTypStaticReq csenv trace v.StaticReq (TType_measure ms) ++ (fun () -> SubstMeasure v ms; - WarnD(NonRigidTypar(csenv.DisplayEnv,tpnmOpt,v.Range,TType_measure (MeasureVar v), TType_measure ms,csenv.m))) + WarnD(NonRigidTypar(csenv.DisplayEnv,tpnmOpt,v.Range,TType_measure (Measure.Var v), TType_measure ms,csenv.m))) else // Propagate static requirements from 'tp' to 'ty' SolveTypStaticReq csenv trace v.StaticReq (TType_measure ms) ++ (fun () -> SubstMeasure v ms; - if v.Rigidity = TyparRigidity.Anon && measureEquiv csenv.g ms MeasureOne then + if v.Rigidity = TyparRigidity.Anon && measureEquiv csenv.g ms Measure.One then WarnD(Error(FSComp.SR.csCodeLessGeneric(),v.Range)) else CompleteD) @@ -488,18 +490,18 @@ let UnifyMeasureWithOne (csenv:ConstraintSolverEnv) trace ms = match FindPreferredTypar nonRigidVars with | (v,e)::vs -> let unexpandedCons = ListMeasureConOccsWithNonZeroExponents csenv.g false ms - let newms = ProdMeasures (List.map (fun (c,e') -> MeasureRationalPower (MeasureCon c, NegRational (DivRational e' e))) unexpandedCons - @ List.map (fun (v,e') -> MeasureRationalPower (MeasureVar v, NegRational (DivRational e' e))) (vs @ rigidVars)) + let newms = ProdMeasures (List.map (fun (c,e') -> Measure.RationalPower (Measure.Con c, NegRational (DivRational e' e))) unexpandedCons + @ List.map (fun (v,e') -> Measure.RationalPower (Measure.Var v, NegRational (DivRational e' e))) (vs @ rigidVars)) SubstMeasureWarnIfRigid csenv trace v newms // Otherwise we require ms to be 1 | [] -> - if measureEquiv csenv.g ms MeasureOne then CompleteD else localAbortD + if measureEquiv csenv.g ms Measure.One then CompleteD else localAbortD /// Imperatively unify unit-of-measure expression ms1 against ms2 let UnifyMeasures (csenv:ConstraintSolverEnv) trace ms1 ms2 = - UnifyMeasureWithOne csenv trace (MeasureProd(ms1,MeasureInv ms2)) + UnifyMeasureWithOne csenv trace (Measure.Prod(ms1,Measure.Inv ms2)) /// Simplify a unit-of-measure expression ms that forms part of a type scheme. /// We make substitutions for vars, which are the (remaining) bound variables @@ -514,9 +516,9 @@ let SimplifyMeasure g vars ms = let newvar = if v.IsCompilerGenerated then NewAnonTypar (TyparKind.Measure,v.Range,TyparRigidity.Flexible,v.StaticReq,v.DynamicReq) else NewNamedInferenceMeasureVar (v.Range,TyparRigidity.Flexible,v.StaticReq,v.Id) let remainingvars = ListSet.remove typarEq v vars - let newvarExpr = if SignRational e < 0 then MeasureInv (MeasureVar newvar) else MeasureVar newvar - let newms = (ProdMeasures (List.map (fun (c,e') -> MeasureRationalPower (MeasureCon c, NegRational (DivRational e' e))) (ListMeasureConOccsWithNonZeroExponents g false ms) - @ List.map (fun (v',e') -> if typarEq v v' then newvarExpr else MeasureRationalPower (MeasureVar v', NegRational (DivRational e' e))) (ListMeasureVarOccsWithNonZeroExponents ms))); + let newvarExpr = if SignRational e < 0 then Measure.Inv (Measure.Var newvar) else Measure.Var newvar + let newms = (ProdMeasures (List.map (fun (c,e') -> Measure.RationalPower (Measure.Con c, NegRational (DivRational e' e))) (ListMeasureConOccsWithNonZeroExponents g false ms) + @ List.map (fun (v',e') -> if typarEq v v' then newvarExpr else Measure.RationalPower (Measure.Var v', NegRational (DivRational e' e))) (ListMeasureVarOccsWithNonZeroExponents ms))); SubstMeasure v newms; match vs with | [] -> (remainingvars, Some newvar) @@ -530,7 +532,7 @@ let rec SimplifyMeasuresInType g resultFirst ((generalizable, generalized) as pa match stripTyparEqns ty with | TType_ucase(_,l) | TType_app (_,l) - | TType_tuple l -> SimplifyMeasuresInTypes g param l + | TType_tuple (_,l) -> SimplifyMeasuresInTypes g param l | TType_fun (d,r) -> if resultFirst then SimplifyMeasuresInTypes g param [r;d] else SimplifyMeasuresInTypes g param [d;r] | TType_var _ -> param @@ -566,7 +568,7 @@ let rec GetMeasureVarGcdInType v ty = match stripTyparEqns ty with | TType_ucase(_,l) | TType_app (_,l) - | TType_tuple l -> GetMeasureVarGcdInTypes v l + | TType_tuple (_,l) -> GetMeasureVarGcdInTypes v l | TType_fun (d,r) -> GcdRational (GetMeasureVarGcdInType v d) (GetMeasureVarGcdInType v r) | TType_var _ -> ZeroRational @@ -589,7 +591,7 @@ let NormalizeExponentsInTypeScheme uvars ty = then v else let v' = NewAnonTypar (TyparKind.Measure,v.Range,TyparRigidity.Flexible,v.StaticReq,v.DynamicReq) - SubstMeasure v (MeasureRationalPower (MeasureVar v', DivRational OneRational expGcd)) + SubstMeasure v (Measure.RationalPower (Measure.Var v', DivRational OneRational expGcd)) v') @@ -631,7 +633,7 @@ let SimplifyMeasuresInTypeScheme g resultFirst (generalizable:Typar list) ty con let generalized' = NormalizeExponentsInTypeScheme generalized ty vars @ List.rev generalized' -let freshMeasure () = MeasureVar (NewInferenceMeasurePar ()) +let freshMeasure () = Measure.Var (NewInferenceMeasurePar ()) let CheckWarnIfRigid (csenv:ConstraintSolverEnv) ty1 (r:Typar) ty = let g = csenv.g @@ -657,7 +659,7 @@ let rec SolveTyparEqualsTyp (csenv:ConstraintSolverEnv) ndeep m2 trace ty1 ty = DepthCheck ndeep m ++ (fun () -> match ty1 with - | TType_var r | TType_measure (MeasureVar r) -> + | TType_var r | TType_measure (Measure.Var r) -> // The types may still be equivalent due to abbreviations, which we are trying not to eliminate if typeEquiv csenv.g ty1 ty then CompleteD else @@ -673,7 +675,7 @@ let rec SolveTyparEqualsTyp (csenv:ConstraintSolverEnv) ndeep m2 trace ty1 ty = let tpdata = r.Data match trace with | NoTrace -> () - | WithTrace (Trace actions) -> actions := (fun () -> tpdata.typar_solution <- None) :: !actions + | WithTrace trace -> trace.Push (fun () -> tpdata.typar_solution <- None) tpdata.typar_solution <- Some ty; (* dprintf "setting typar %d to type %s at %a\n" r.Stamp ((DebugPrint.showType ty)) outputRange m; *) @@ -747,13 +749,15 @@ and SolveTypEqualsTyp (csenv:ConstraintSolverEnv) ndeep m2 (trace: OptionalTrace // Catch float<_>=float<1>, float32<_>=float32<1> and decimal<_>=decimal<1> | (_, TType_app (tc2,[ms])) when (tc2.IsMeasureableReprTycon && typeEquiv csenv.g sty1 (reduceTyconRefMeasureableOrProvided csenv.g tc2 [ms])) - -> SolveTypEqualsTyp csenv ndeep m2 trace ms (TType_measure MeasureOne) + -> SolveTypEqualsTyp csenv ndeep m2 trace ms (TType_measure Measure.One) | (TType_app (tc2,[ms]), _) when (tc2.IsMeasureableReprTycon && typeEquiv csenv.g sty2 (reduceTyconRefMeasureableOrProvided csenv.g tc2 [ms])) - -> SolveTypEqualsTyp csenv ndeep m2 trace ms (TType_measure MeasureOne) + -> SolveTypEqualsTyp csenv ndeep m2 trace ms (TType_measure Measure.One) | TType_app (tc1,l1) ,TType_app (tc2,l2) when tyconRefEq g tc1 tc2 -> SolveTypEqualsTypEqns csenv ndeep m2 trace l1 l2 | TType_app (_,_) ,TType_app (_,_) -> localAbortD - | TType_tuple l1 ,TType_tuple l2 -> SolveTypEqualsTypEqns csenv ndeep m2 trace l1 l2 + | TType_tuple (tupInfo1,l1) ,TType_tuple (tupInfo2,l2) -> + if evalTupInfoIsStruct tupInfo1 <> evalTupInfoIsStruct tupInfo2 then ErrorD (ConstraintSolverError(FSComp.SR.tcTupleStructMismatch(), csenv.m,m2)) else + SolveTypEqualsTypEqns csenv ndeep m2 trace l1 l2 | TType_fun (d1,r1) ,TType_fun (d2,r2) -> SolveFunTypEqn csenv ndeep m2 trace d1 d2 r1 r2 | TType_measure ms1 ,TType_measure ms2 -> UnifyMeasures csenv trace ms1 ms2 | TType_forall(tps1,rty1), TType_forall(tps2,rty2) -> @@ -810,15 +814,17 @@ and SolveTypSubsumesTyp (csenv:ConstraintSolverEnv) ndeep m2 (trace: OptionalTra | TType_var r1, TType_var r2 when typarEq r1 r2 -> CompleteD | _, TType_var r when not csenv.MatchingOnly -> SolveTyparSubtypeOfType csenv ndeep m2 trace r ty1 | TType_var _ , _ -> SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace ty1 ty2 - | TType_tuple l1 ,TType_tuple l2 -> SolveTypEqualsTypEqns csenv ndeep m2 trace l1 l2 (* nb. can unify since no variance *) + | TType_tuple (tupInfo1,l1) ,TType_tuple (tupInfo2,l2) -> + if evalTupInfoIsStruct tupInfo1 <> evalTupInfoIsStruct tupInfo2 then ErrorD (ConstraintSolverError(FSComp.SR.tcTupleStructMismatch(), csenv.m,m2)) else + SolveTypEqualsTypEqns csenv ndeep m2 trace l1 l2 (* nb. can unify since no variance *) | TType_fun (d1,r1) ,TType_fun (d2,r2) -> SolveFunTypEqn csenv ndeep m2 trace d1 d2 r1 r2 (* nb. can unify since no variance *) | TType_measure ms1, TType_measure ms2 -> UnifyMeasures csenv trace ms1 ms2 // Enforce the identities float=float<1>, float32=float32<1> and decimal=decimal<1> | (_, TType_app (tc2,[ms])) when (tc2.IsMeasureableReprTycon && typeEquiv csenv.g sty1 (reduceTyconRefMeasureableOrProvided csenv.g tc2 [ms])) - -> SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace ms (TType_measure MeasureOne) + -> SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace ms (TType_measure Measure.One) | (TType_app (tc2,[ms]), _) when (tc2.IsMeasureableReprTycon && typeEquiv csenv.g sty2 (reduceTyconRefMeasureableOrProvided csenv.g tc2 [ms])) - -> SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace ms (TType_measure MeasureOne) + -> SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace ms (TType_measure Measure.One) | TType_app (tc1,l1) ,TType_app (tc2,l2) when tyconRefEq g tc1 tc2 -> SolveTypEqualsTypEqns csenv ndeep m2 trace l1 l2 @@ -893,7 +899,7 @@ and DepthCheck ndeep m = and SolveDimensionlessNumericType (csenv:ConstraintSolverEnv) ndeep m2 trace ty = match GetMeasureOfType csenv.g ty with | Some (tcref, _) -> - SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace ty (mkAppTy tcref [TType_measure MeasureOne]) + SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace ty (mkAppTy tcref [TType_measure Measure.One]) | None -> CompleteD @@ -980,14 +986,14 @@ and SolveMemberConstraint (csenv:ConstraintSolverEnv) permitWeakResolution ndeep | Some (tcref,ms1) -> let ms2 = freshMeasure () SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace argty2 (mkAppTy tcref [TType_measure ms2]) ++ (fun () -> - SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace rty (mkAppTy tcref [TType_measure (MeasureProd(ms1,if nm = "op_Multiply" then ms2 else MeasureInv ms2))]) ++ (fun () -> + SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace rty (mkAppTy tcref [TType_measure (Measure.Prod(ms1,if nm = "op_Multiply" then ms2 else Measure.Inv ms2))]) ++ (fun () -> ResultD TTraitBuiltIn)) | _ -> match GetMeasureOfType g argty2 with | Some (tcref,ms2) -> let ms1 = freshMeasure () SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace argty1 (mkAppTy tcref [TType_measure ms1]) ++ (fun () -> - SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace rty (mkAppTy tcref [TType_measure (MeasureProd(ms1, if nm = "op_Multiply" then ms2 else MeasureInv ms2))]) ++ (fun () -> + SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace rty (mkAppTy tcref [TType_measure (Measure.Prod(ms1, if nm = "op_Multiply" then ms2 else Measure.Inv ms2))]) ++ (fun () -> ResultD TTraitBuiltIn)) | _ -> SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace argty2 argty1 ++ (fun () -> @@ -1111,7 +1117,7 @@ and SolveMemberConstraint (csenv:ConstraintSolverEnv) permitWeakResolution ndeep match GetMeasureOfType g argty1 with | Some (tcref, _) -> let ms1 = freshMeasure () - SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace argty1 (mkAppTy tcref [TType_measure (MeasureProd (ms1,ms1))]) ++ (fun () -> + SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace argty1 (mkAppTy tcref [TType_measure (Measure.Prod (ms1,ms1))]) ++ (fun () -> SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace rty (mkAppTy tcref [TType_measure ms1]) ++ (fun () -> ResultD TTraitBuiltIn)) | None -> @@ -1159,7 +1165,7 @@ and SolveMemberConstraint (csenv:ConstraintSolverEnv) permitWeakResolution ndeep SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace argty2 argty1 ++ (fun () -> match GetMeasureOfType g argty1 with | None -> SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace rty argty1 - | Some (tcref, _) -> SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace rty (mkAppTy tcref [TType_measure MeasureOne])) ++ (fun () -> + | Some (tcref, _) -> SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace rty (mkAppTy tcref [TType_measure Measure.One])) ++ (fun () -> ResultD TTraitBuiltIn) | _ -> @@ -1194,7 +1200,7 @@ and SolveMemberConstraint (csenv:ConstraintSolverEnv) permitWeakResolution ndeep | [], None when not (tys |> List.exists (isAnyParTy g)) -> if tys |> List.exists (isFunTy g) then ErrorD (ConstraintSolverError(FSComp.SR.csExpectTypeWithOperatorButGivenFunction(DecompileOpName nm),m,m2)) - elif tys |> List.exists (isTupleTy g) then + elif tys |> List.exists (isAnyTupleTy g) then ErrorD (ConstraintSolverError(FSComp.SR.csExpectTypeWithOperatorButGivenTuple(DecompileOpName nm),m,m2)) else match nm, argtys with @@ -1343,7 +1349,7 @@ and TransactMemberConstraintSolution traitInfo trace sln = traitInfo.Solution <- Some sln match trace with | NoTrace -> () - | WithTrace (Trace actions) -> actions := (fun () -> traitInfo.Solution <- prev) :: !actions + | WithTrace trace -> trace.Push (fun () -> traitInfo.Solution <- prev) /// Only consider overload resolution if canonicalizing or all the types are now nominal. /// That is, don't perform resolution if more nominal information may influence the set of available overloads @@ -1410,7 +1416,7 @@ and SolveRelevantMemberConstraintsForTypar (csenv:ConstraintSolverEnv) ndeep per match trace with | NoTrace -> () - | WithTrace (Trace actions) -> actions := (fun () -> cxs |> List.iter (fun cx -> cxst.Add(tpn,cx))) :: !actions + | WithTrace trace -> trace.Push (fun () -> cxs |> List.iter (fun cx -> cxst.Add(tpn,cx))) cxs |> AtLeastOneD (fun (traitInfo,m2) -> let csenv = { csenv with m = m2 } @@ -1437,7 +1443,7 @@ and AddMemberConstraint (csenv:ConstraintSolverEnv) ndeep m2 trace traitInfo sup if not (cxs |> List.exists (fun (traitInfo2,_) -> traitsAEquiv g aenv traitInfo traitInfo2)) then match trace with | NoTrace -> () - | WithTrace (Trace actions) -> actions := (fun () -> csenv.SolverState.ExtraCxs.Remove tpn) :: !actions + | WithTrace trace -> trace.Push (fun () -> csenv.SolverState.ExtraCxs.Remove tpn) csenv.SolverState.ExtraCxs.Add (tpn,(traitInfo,m2)) ); @@ -1611,11 +1617,10 @@ and AddConstraint (csenv:ConstraintSolverEnv) ndeep m2 trace tp newConstraint = // Record a entry in the undo trace if one is provided let d = tp.Data let orig = d.typar_constraints - begin match trace with + match trace with | NoTrace -> () - | WithTrace (Trace actions) -> actions := (fun () -> d.typar_constraints <- orig) :: !actions - end; - d.typar_constraints <- newConstraints; + | WithTrace trace -> trace.Push (fun () -> d.typar_constraints <- orig) + d.typar_constraints <- newConstraints CompleteD))) @@ -1911,8 +1916,8 @@ and CanMemberSigsMatchUpToCheck methodRetTy else let outArgTys = unnamedCalledOutArgs |> List.map (fun calledArg -> destByrefTy g calledArg.CalledArgumentType) - if isUnitTy g methodRetTy then mkTupledTy g outArgTys - else mkTupledTy g (methodRetTy :: outArgTys) + if isUnitTy g methodRetTy then mkRefTupledTy g outArgTys + else mkRefTupledTy g (methodRetTy :: outArgTys) unifyTypes reqdRetTy methodRetTy ))))) //------------------------------------------------------------------------- @@ -1922,11 +1927,6 @@ and CanMemberSigsMatchUpToCheck //------------------------------------------------------------------------- -and private DefinitelyEquiv (csenv:ConstraintSolverEnv) isConstraint calledArg (CallerArg(callerArgTy,m,_,_) as callerArg) = - let calledArgTy = AdjustCalledArgType csenv.InfoReader isConstraint calledArg callerArg - if not (typeEquiv csenv.g calledArgTy callerArgTy) then ErrorD(Error(FSComp.SR.csArgumentTypesDoNotMatch(),m)) else - CompleteD - // Assert a subtype constraint, and wrap an ErrorsFromAddingSubsumptionConstraint error around any failure // to allow us to report the outer types involved in the constraint and private SolveTypSubsumesTypWithReport (csenv:ConstraintSolverEnv) ndeep m trace ty1 ty2 = @@ -2010,10 +2010,22 @@ and ReportNoCandidatesError (csenv:ConstraintSolverEnv) (nUnnamedCallerArgs,nNam // One method, incorrect name/arg assignment | _,_,_,_,([],[cmeth]) -> - let msgNum,msgText = FSComp.SR.csRequiredSignatureIs(NicePrint.stringOfMethInfo amap m denv cmeth.Method) + let minfo = cmeth.Method + let msgNum,msgText = FSComp.SR.csRequiredSignatureIs(NicePrint.stringOfMethInfo amap m denv minfo) let msgNum,msgText,msgRange = match cmeth.UnassignedNamedArgs with - | CallerNamedArg(id,_) :: _ -> (msgNum,FSComp.SR.csMemberHasNoArgumentOrReturnProperty(methodName, id.idText, msgText),id.idRange) + | CallerNamedArg(id,_) :: _ -> + if minfo.IsConstructor then + let typ = minfo.DeclaringEntityRef + + let predictions = + typ.AllInstanceFieldsAsList + |> List.map (fun p -> p.Name.Replace("@","")) + |> ErrorResolutionHints.FilterPredictions id.idText + + msgNum,FSComp.SR.csCtorHasNoArgumentOrReturnProperty(methodName, id.idText, msgText, ErrorResolutionHints.FormatPredictions predictions),id.idRange + else + msgNum,FSComp.SR.csMemberHasNoArgumentOrReturnProperty(methodName, id.idText, msgText),id.idRange | [] -> (msgNum,msgText,m) ErrorD (Error ((msgNum,msgText),msgRange)) @@ -2056,8 +2068,7 @@ and ReportNoCandidatesError (csenv:ConstraintSolverEnv) (nUnnamedCallerArgs,nNam // One or more accessible, all the same arity, none correct | ((cmeth :: cmeths2),_),_,_,_,_ when not cmeth.HasCorrectArity && cmeths2 |> List.forall (fun cmeth2 -> cmeth.TotalNumUnnamedCalledArgs = cmeth2.TotalNumUnnamedCalledArgs) -> - ErrorD (Error (FSComp.SR.csMemberNotAccessible(methodName, (cmeth.ArgSets |> List.sumBy (fun x -> x.NumUnnamedCalledArgs)), methodName, cmeth.TotalNumUnnamedCalledArgs),m)) - + ErrorD (Error (FSComp.SR.csMemberNotAccessible(methodName, nUnnamedCallerArgs, methodName, cmeth.TotalNumUnnamedCalledArgs),m)) // Many methods, all with incorrect number of generic arguments | _,_,_,([],(cmeth :: _)),_ -> let msg = FSComp.SR.csIncorrectGenericInstantiation((ShowAccessDomain ad), methodName, cmeth.NumCallerTyArgs) @@ -2406,10 +2417,10 @@ let EliminateConstraintsForGeneralizedTypars csenv trace (generalizedTypars: Typ let cxs = cxst.FindAll tpn if isNil cxs then () else cxs |> List.iter (fun cx -> - cxst.Remove tpn; + cxst.Remove tpn match trace with | NoTrace -> () - | WithTrace (Trace actions) -> actions := (fun () -> (csenv.SolverState.ExtraCxs.Add (tpn,cx))) :: !actions) + | WithTrace trace -> trace.Push (fun () -> (csenv.SolverState.ExtraCxs.Add (tpn,cx)))) ) diff --git a/src/fsharp/ConstraintSolver.fsi b/src/fsharp/ConstraintSolver.fsi index 63238ec1c49..6e277f188fa 100644 --- a/src/fsharp/ConstraintSolver.fsi +++ b/src/fsharp/ConstraintSolver.fsi @@ -32,7 +32,7 @@ val NewInferenceType : unit -> TType val NewErrorType : unit -> TType /// Create an inference type variable representing an error condition when checking a measure -val NewErrorMeasure : unit -> MeasureExpr +val NewErrorMeasure : unit -> Measure /// Create a list of inference type variables, one for each element in the input list val NewInferenceTypes : 'a list -> TType list @@ -98,7 +98,8 @@ val BakedInTraitConstraintNames : string list val MakeConstraintSolverEnv : ContextInfo -> ConstraintSolverState -> range -> DisplayEnv -> ConstraintSolverEnv -type Trace = Trace of (unit -> unit) list ref +[] +type Trace type OptionalTrace = | NoTrace diff --git a/src/fsharp/DetupleArgs.fs b/src/fsharp/DetupleArgs.fs index 640459eb3a0..8b96ebb196d 100644 --- a/src/fsharp/DetupleArgs.fs +++ b/src/fsharp/DetupleArgs.fs @@ -227,13 +227,13 @@ module GlobalUsageAnalysis = let logNonRecBinding z (bind:Binding) = let v = bind.Var let vs = FlatList.one v - {z with RecursiveBindings = Zmap.add v (false,vs) z.RecursiveBindings; + {z with RecursiveBindings = Zmap.add v (false,vs) z.RecursiveBindings Defns = Zmap.add v bind.Expr z.Defns } /// Log the definition of a recursive binding let logRecBindings z binds = let vs = valsOfBinds binds - {z with RecursiveBindings = (z.RecursiveBindings,vs) ||> FlatList.fold (fun mubinds v -> Zmap.add v (true,vs) mubinds); + {z with RecursiveBindings = (z.RecursiveBindings,vs) ||> FlatList.fold (fun mubinds v -> Zmap.add v (true,vs) mubinds) Defns = (z.Defns,binds) ||> FlatList.fold (fun eqns bind -> Zmap.add bind.Var bind.Expr eqns) } /// Work locally under a lambda of some kind @@ -285,7 +285,7 @@ module GlobalUsageAnalysis = | _ -> // NO: app but function is not val None - | Expr.Op(TOp.TupleFieldGet (n),ts,[x],_) -> + | Expr.Op(TOp.TupleFieldGet (tupInfo,n),ts,[x],_) when not (evalTupInfoIsStruct tupInfo) -> let context = TupleGet (n,ts) :: context recognise context x @@ -366,12 +366,14 @@ let checkTS = function /// explicit tuple-structure in expr let rec uncheckedExprTS expr = match expr with - | Expr.Op(TOp.Tuple,_tys,args,_) -> TupleTS (List.map uncheckedExprTS args) - | _ -> UnknownTS + | Expr.Op(TOp.Tuple tupInfo,_tys,args,_) when not (evalTupInfoIsStruct tupInfo) -> + TupleTS (List.map uncheckedExprTS args) + | _ -> + UnknownTS let rec uncheckedTypeTS g ty = - if isTupleTy g ty then - let tys = destTupleTy g ty + if isRefTupleTy g ty then + let tys = destRefTupleTy g ty TupleTS (List.map (uncheckedTypeTS g) tys) else UnknownTS @@ -387,12 +389,12 @@ let rebuildTS g m ts vs = | vs ,TupleTS tss -> let xtys,vs = List.mapFold rebuild vs tss let xs,tys = List.unzip xtys - let x = mkTupled g m xs tys - let ty = mkTupledTy g tys + let x = mkRefTupled g m xs tys + let ty = mkRefTupledTy g tys (x,ty),vs let (x,_ty),vs = rebuild vs ts - if vs.Length <> 0 then internalError "rebuildTS: had more fringe vars than fringe. REPORT BUG" else (); + if vs.Length <> 0 then internalError "rebuildTS: had more fringe vars than fringe. REPORT BUG" x /// CallPattern is tuple-structure for each argument position. @@ -505,8 +507,8 @@ let zipCallPatternArgTys m g (callPattern : TupleStructure list) (vss : Val list // (a) (restricted) tuple-structure, and // (b) type fringe for each arg position. match ts with - | TupleTS tss when isTupleTy g typ -> - let tys = destTupleTy g typ + | TupleTS tss when isRefTupleTy g typ -> + let tys = destRefTupleTy g typ let tss,tyfringe = zipTSListTypList tss tys TupleTS tss,tyfringe | _ -> @@ -674,7 +676,7 @@ let buildProjections env bindings x xtys = xtys |> List.mapi (fun i xty -> let vi,vix = newLocalN env i xty - let bind = mkBind NoSequencePointAtInvisibleBinding vi (mkTupleFieldGet (x,xtys,i,env.m)) + let bind = mkBind NoSequencePointAtInvisibleBinding vi (mkTupleFieldGet env.eg (tupInfoRef,x,xtys,i,env.m)) bind,vix) |> List.unzip @@ -689,7 +691,7 @@ let rec collapseArg env bindings ts (x:Expr) = | UnknownTS ,x -> let bindings,vx = noEffectExpr env bindings x bindings,[vx] - | TupleTS tss,Expr.Op(TOp.Tuple,_xtys,xs,_) -> + | TupleTS tss,Expr.Op(TOp.Tuple tupInfo,_xtys,xs,_) when not (evalTupInfoIsStruct tupInfo) -> let env = suffixE env "'" collapseArgs env bindings 1 tss xs | TupleTS tss,x -> @@ -697,9 +699,9 @@ let rec collapseArg env bindings ts (x:Expr) = let bindings,x = noEffectExpr env bindings x let env = suffixE env "_p" let xty = tyOfExpr env.eg x - let xtys = destTupleTy env.eg xty + let xtys = destRefTupleTy env.eg xty let bindings,xs = buildProjections env bindings x xtys - collapseArg env bindings (TupleTS tss) (mkTupled env.eg m xs xtys) + collapseArg env bindings (TupleTS tss) (mkRefTupled env.eg m xs xtys) and collapseArgs env bindings n (callPattern) args = match callPattern,args with @@ -759,7 +761,7 @@ let transRebind ybi xi = match xi,ybi with | _ ,SameArg -> [] (* no rebinding, reused original formal *) | [u],NewArgs (_vs,x) -> [mkCompGenBind u x] - | us ,NewArgs (_vs,x) -> List.map2 mkCompGenBind us (tryDestTuple x) + | us ,NewArgs (_vs,x) -> List.map2 mkCompGenBind us (tryDestRefTupleExpr x) //------------------------------------------------------------------------- @@ -794,7 +796,7 @@ let passBind penv (TBind(fOrig,repr,letSeqPtOpt) as bind) = // fCBody - parts - formals let transformedFormals = trans.transformedFormals let p = transformedFormals.Length - if (vss.Length < p) then internalError "passBinds: |vss|

' in F#" 412,chkErrorUseOfByref,"A type instantiation involves a byref type. This is not permitted by the rules of Common IL." 413,chkErrorContainsCallToRethrow,"Calls to 'reraise' may only occur directly in a handler of a try-with" @@ -334,6 +335,7 @@ csGenericConstructRequiresPublicDefaultConstructor,"A generic construct requires 492,csMethodIsNotAStaticMethod,"%s is not a static method" 493,csMethodIsNotAnInstanceMethod,"%s is not an instance method" csMemberHasNoArgumentOrReturnProperty,"The member or object constructor '%s' has no argument or settable return property '%s'. %s." +csCtorHasNoArgumentOrReturnProperty,"The object constructor '%s' has no argument or settable return property '%s'. %s. %s" 495,csRequiredSignatureIs,"The required signature is %s" 496,csMemberSignatureMismatch,"The member or object constructor '%s' requires %d argument(s). The required signature is '%s'." 497,csMemberSignatureMismatch2,"The member or object constructor '%s' requires %d additional argument(s). The required signature is '%s'." @@ -342,7 +344,7 @@ csMemberHasNoArgumentOrReturnProperty,"The member or object constructor '%s' has 500,csMemberSignatureMismatchArityNamed,"The member or object constructor '%s' requires %d argument(s) but is here given %d unnamed and %d named argument(s). The required signature is '%s'." 501,csMemberSignatureMismatchArity,"The member or object constructor '%s' takes %d argument(s) but is here given %d. The required signature is '%s'." 502,csMemberSignatureMismatchArityType,"The member or object constructor '%s' takes %d type argument(s) but is here given %d. The required signature is '%s'." -503,csMemberNotAccessible,"The member or object constructor '%s' taking %d arguments are not accessible from this code location. All accessible versions of method '%s' take %d arguments." +503,csMemberNotAccessible,"A member or object constructor '%s' taking %d arguments is not accessible from this code location. All accessible versions of method '%s' take %d arguments." 504,csIncorrectGenericInstantiation,"Incorrect generic instantiation. No %s member named '%s' takes %d generic arguments." 505,csMemberOverloadArityMismatch,"The member or object constructor '%s' does not take %d argument(s). An overload was found taking %d arguments." 506,csNoMemberTakesTheseArguments,"No %s member or object constructor named '%s' takes %d arguments" @@ -464,7 +466,7 @@ tcUnexpectedConstByteArray,"Unexpected Const_bytearray" 641,tcReturnValuesCannotHaveNames,"Return values cannot have names" tcMemberKindPropertyGetSetNotExpected,"MemberKind.PropertyGetSet only expected in parse trees" 201,tcNamespaceCannotContainValues,"Namespaces cannot contain values. Consider using a module to hold your value declarations." -644,tcNamespaceCannotContainExtensionMembers,"Namespaces cannot contain extension members except in the same file and namespace where the type is defined. Consider using a module to hold declarations of extension members." +644,tcNamespaceCannotContainExtensionMembers,"Namespaces cannot contain extension members except in the same file and namespace declaration group where the type is defined. Consider using a module to hold declarations of extension members." 645,tcMultipleVisibilityAttributes,"Multiple visibility attributes have been specified for this identifier" 646,tcMultipleVisibilityAttributesWithLet,"Multiple visibility attributes have been specified for this identifier. 'let' bindings in classes are always private, as are any 'let' bindings inside expressions." tcInvalidMethodNameForRelationalOperator,"The name '(%s)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name '%s' instead." @@ -589,9 +591,10 @@ tcExpressionWithIfRequiresParenthesis,"This list or array expression includes an 764,tcFieldRequiresAssignment,"No assignment given for field '%s' of type '%s'" 765,tcExtraneousFieldsGivenValues,"Extraneous fields have been given values" 766,tcObjectExpressionsCanOnlyOverrideAbstractOrVirtual,"Only overrides of abstract and virtual members may be specified in object expressions" -767,tcNoAbstractOrVirtualMemberFound,"The member '%s' does not correspond to any abstract or virtual method available to override or implement" -768,tcArgumentArityMismatch,"The member '%s' does not accept the correct number of arguments, %d arguments are expected" -769,tcArgumentArityMismatchOneOverload,"The member '%s' does not accept the correct number of arguments. One overload accepts %d arguments." +767,tcNoAbstractOrVirtualMemberFound,"The member '%s' does not correspond to any abstract or virtual method available to override or implement.%s" +767,tcMemberFoundIsNotAbstractOrVirtual,"The type %s contains the member '%s' but it is not a virtual or abstract method that is available to override or implement.%s" +768,tcArgumentArityMismatch,"The member '%s' does not accept the correct number of arguments. %d argument(s) are expected, but %d were given. The required signature is '%s'.%s" +769,tcArgumentArityMismatchOneOverload,"The member '%s' does not accept the correct number of arguments. One overload accepts %d arguments, but %d were given. The required signature is '%s'.%s" 770,tcSimpleMethodNameRequired,"A simple method name is required here" 771,tcPredefinedTypeCannotBeUsedAsSuperType,"The types System.ValueType, System.Enum, System.Delegate, System.MulticastDelegate and System.Array cannot be used as super types in an object expression or class" 772,tcNewMustBeUsedWithNamedType,"'new' must be used with a named type" @@ -715,6 +718,7 @@ tcUnnamedArgumentsDoNotFormPrefix,"The unnamed arguments do not form a prefix of 893,tcOpenUsedWithPartiallyQualifiedPath,"This declaration opens the namespace or module '%s' through a partially qualified path. Adjust this code to use the full path of the namespace. This change will make your code more robust as new constructs are added to the F# and CLI libraries." 894,tcLocalClassBindingsCannotBeInline,"Local class bindings cannot be marked inline. Consider lifting the definition out of the class or else do not mark it as inline." 895,tcTypeAbbreviationsMayNotHaveMembers,"Type abbreviations cannot have members" +tcTypeAbbreviationsCheckedAtCompileTime,"As of F# 4.1, the accessibility of type abbreviations is checked at compile-time. Consider changing the accessibility of the type abbreviation. Ignoring this warning might lead to runtime errors." 896,tcEnumerationsMayNotHaveMembers,"Enumerations cannot have members" 897,tcMeasureDeclarationsRequireStaticMembers,"Measure declarations may have only static members" tcStructsMayNotContainDoBindings,"Structs cannot contain 'do' bindings because the default constructor for structs would not execute these bindings" @@ -835,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. ('full' is the default and enables attaching a debugger to a running program. 'portable' is a cross-platform format)." +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)." optsOptimize,"Enable optimizations (Short form: -O)" optsTailcalls,"Enable or disable tailcalls" optsCrossoptimize,"Enable or disable cross-module optimizations" @@ -956,7 +960,6 @@ lexfltSeparatorTokensOfPatternMatchMisaligned,"The '|' tokens separating rules o 1126,nrGlobalUsedOnlyAsFirstName,"'global' may only be used as the first name in a qualified path" 1127,nrIsNotConstructorOrLiteral,"This is not a constructor or literal, or a constructor is being used incorrectly" 1128,nrUnexpectedEmptyLongId,"Unexpected empty long identifier" -1129,nrTypeDoesNotContainSuchField,"The type '%s' does not contain a field '%s'" 1129,nrRecordDoesNotContainSuchLabel,"The record type '%s' does not contain a label '%s'." 1130,nrInvalidFieldLabel,"Invalid field label" 1132,nrInvalidExpression,"Invalid expression '%s'" @@ -986,7 +989,7 @@ lexUnexpectedChar,"Unexpected character '%s'" 1153,lexInvalidFloat,"Invalid floating point number" 1154,lexOusideDecimal,"This number is outside the allowable range for decimal literals" 1155,lexOusideThirtyTwoBitFloat,"This number is outside the allowable range for 32-bit floats" -1156,lexInvalidNumericLiteral,"This is not a valid numeric literal. Valid numeric literals include 1, 0x1, 0b0001 (int), 1u (uint32), 1L (int64), 1UL (uint64), 1s (int16), 1y (sbyte), 1ui (byte), 1.0 (float), 1.0f (float32), 1.0m (decimal), 1I (BigInteger)." +1156,lexInvalidNumericLiteral,"This is not a valid numeric literal. Valid numeric literals include 1, 0x1, 0b0001 (int), 1u (uint32), 1L (int64), 1UL (uint64), 1s (int16), 1y (sbyte), 1uy (byte), 1.0 (float), 1.0f (float32), 1.0m (decimal), 1I (BigInteger)." 1157,lexInvalidByteLiteral,"This is not a valid byte literal" 1158,lexInvalidCharLiteral,"This is not a valid character literal" 1159,lexThisUnicodeOnlyInStringLiterals,"This Unicode encoding is only valid in string literals" @@ -1061,10 +1064,10 @@ lexIndentOffForML,"Consider using a file with extension '.ml' or '.mli' instead" 1220,chkNoReflectedDefinitionOnStructMember,"ReflectedDefinitionAttribute may not be applied to an instance member on a struct type, because the instance member takes an implicit 'this' byref parameter" 1221,tcDllImportNotAllowed,"DLLImport bindings must be static members in a class or function definitions in a module" 1222,buildExplicitCoreLibRequiresNoFramework,"When mscorlib.dll or FSharp.Core.dll is explicitly referenced the %s option must also be passed" -1223,buildExpectedSigdataFile,"FSharp.Core.sigdata not found alongside FSharp.Core" -1224,buildDidNotExpectOptDataResource,"Did not expect to find optdata resource in FSharp.Core.dll" -1225,buildExpectedFileAlongSideFSharpCore,"File '%s' not found alongside FSharp.Core" -1226,buildDidNotExpectSigdataResource,"Did not expect to find sigdata resource in FSharp.Core.dll" +1223,buildExpectedSigdataFile,"FSharp.Core.sigdata not found alongside FSharp.Core. File expected in %s." +1224,buildDidNotExpectOptDataResource,"Did not expect to find optdata resource in FSharp.Core.dll at %s." +1225,buildExpectedFileAlongSideFSharpCore,"File '%s' not found alongside FSharp.Core. File expected in %s." +1226,buildDidNotExpectSigdataResource,"Did not expect to find sigdata resource in FSharp.Core.dll at %s." 1227,buildUnexpectedFileNameCharacter,"Filename '%s' contains invalid character '%s'" 1228,tcInvalidUseBangBinding,"'use!' bindings must be of the form 'use! = '" 1230,crefNoInnerGenericsInQuotations,"Inner generic functions are not permitted in quoted expressions. Consider adding some type constraints until this function is no longer generic." @@ -1302,6 +1305,7 @@ estApplyStaticArgumentsForMethodNotImplemented,"A type provider implemented GetS 3194,optsResponseFileNotFound,"Response file '%s' not found in '%s'" 3195,optsResponseFileNameInvalid,"Response file name '%s' is empty, contains invalid characters, has a drive specification without an absolute path, or is too long" 3196,fsharpCoreNotFoundToBeCopied,"Cannot find FSharp.Core.dll in compiler's directory" +tcTupleStructMismatch,"One tuple type is a struct tuple, the other is a reference tuple" 3197,etMissingStaticArgumentsToMethod,"This provided method requires static parameters" 3198,considerUpcast,"The conversion from %s to %s is a compile-time safe upcast, not a downcast. Consider using 'upcast' instead of 'downcast'." 3198,considerUpcastOperator,"The conversion from %s to %s is a compile-time safe upcast, not a downcast. Consider using the :> (upcast) operator instead of the :?> (downcast) operator." @@ -1310,8 +1314,8 @@ estApplyStaticArgumentsForMethodNotImplemented,"A type provider implemented GetS 3201,tcModuleAbbrevFirstInMutRec,"In a recursive declaration group, module abbreviations must come after all 'open' declarations and before other declarations" 3202,tcUnsupportedMutRecDecl,"This declaration is not supported in recursive declaration groups" 3203,parsInvalidUseOfRec,"Invalid use of 'rec' keyword" -3204,tcStructUnionMultiCase,"A union type which is a struct must have only one case." -3205,tcUseMayNotBeMutable,"This feature is deprecated. A 'use' binding may not be marked 'mutable'." +3204,tcStructUnionMultiCaseDistinctFields,"If a union type has more than one case and is a struct, then all fields within the union type must be given unique names." 3206,CallerMemberNameIsOverriden,"The CallerMemberNameAttribute applied to parameter '%s' will have no effect. It is overridden by the CallerFilePathAttribute." 3207,tcFixedNotAllowed,"Invalid use of 'fixed'. 'fixed' may only be used in a declaration of the form 'use x = fixed expr' where the expression is an array, the address of a field, the address of an array element or a string'" 3208,tcCouldNotFindOffsetToStringData,"Could not find method System.Runtime.CompilerServices.OffsetToStringData in references when building 'fixed' expression." +3209,chkNoByrefReturnOfLocal,"The address of the variable '%s' cannot be used at this point. A method or function may not return the address of this local value." diff --git a/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj b/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj index d8db6885063..d2b034ccb39 100644 --- a/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj +++ b/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj @@ -47,11 +47,18 @@ - - - - - + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Framework.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Utilities.Core.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Tasks.Core.dll + diff --git a/src/fsharp/FSharp.Build/FSharp.Build.fsproj b/src/fsharp/FSharp.Build/FSharp.Build.fsproj index 407bc789856..4a7892308d3 100644 --- a/src/fsharp/FSharp.Build/FSharp.Build.fsproj +++ b/src/fsharp/FSharp.Build/FSharp.Build.fsproj @@ -55,11 +55,18 @@ - - - - - + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Framework.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Utilities.Core.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Tasks.Core.dll + diff --git a/src/fsharp/FSharp.Build/Fsc.fs b/src/fsharp/FSharp.Build/Fsc.fs index 1e5b022962d..9b42f425cf1 100644 --- a/src/fsharp/FSharp.Build/Fsc.fs +++ b/src/fsharp/FSharp.Build/Fsc.fs @@ -5,6 +5,7 @@ namespace Microsoft.FSharp.Build open System open System.Text open System.Diagnostics.CodeAnalysis +open System.IO open System.Reflection open Microsoft.Build.Framework open Microsoft.Build.Utilities @@ -21,7 +22,8 @@ do() open Microsoft.FSharp.Core.ReflectionAdapters #endif -type FscCommandLineBuilder() = +type FscCommandLineBuilder () = + // In addition to generating a command-line that will be handed to cmd.exe, we also generate // an array of individual arguments. The former needs to be quoted (and cmd.exe will strip the // quotes while parsing), whereas the latter is not. See bug 4357 for background; this helper @@ -30,14 +32,11 @@ type FscCommandLineBuilder() = let builder = new CommandLineBuilder() let mutable args = [] // in reverse order let mutable srcs = [] // in reverse order - let mutable alreadyCalledWithFilenames = false /// Return a list of the arguments (with no quoting for the cmd.exe shell) member x.CapturedArguments() = - assert(not alreadyCalledWithFilenames) List.rev args /// Return a list of the sources (with no quoting for the cmd.exe shell) member x.CapturedFilenames() = - assert(alreadyCalledWithFilenames) List.rev srcs /// Return a full command line (with quoting for the cmd.exe shell) override x.ToString() = @@ -52,7 +51,6 @@ type FscCommandLineBuilder() = let s = tmp.ToString() if s <> String.Empty then srcs <- tmp.ToString() :: srcs - alreadyCalledWithFilenames <- true member x.AppendSwitchIfNotNull(switch:string, values:string array, sep:string) = builder.AppendSwitchIfNotNull(switch, values, sep) @@ -104,6 +102,12 @@ type FscCommandLineBuilder() = builder.AppendSwitch(switch) args <- switch :: args + member internal x.GetCapturedArguments() = + [| + yield! x.CapturedArguments() + yield! x.CapturedFilenames() + |] + //There are a lot of flags on fsc.exe. //For now, not all of them are represented in the "Fsc class" object model. //The goal is to have the most common/important flags available via the Fsc class, and the @@ -153,13 +157,152 @@ type [ null + | "PORTABLE" -> "portable" + | "PDBONLY" -> "pdbonly" + | "FULL" -> "full" + | _ -> null) + // NoFramework + if noFramework then + builder.AppendSwitch("--noframework") + // BaseAddress + builder.AppendSwitchIfNotNull("--baseaddress:", baseAddress) + // DefineConstants + for item in defineConstants do + builder.AppendSwitchIfNotNull("--define:", item.ItemSpec) + // DocumentationFile + builder.AppendSwitchIfNotNull("--doc:", documentationFile) + // GenerateInterfaceFile + builder.AppendSwitchIfNotNull("--sig:", generateInterfaceFile) + // KeyFile + builder.AppendSwitchIfNotNull("--keyfile:", keyFile) + // Optimize + if optimize then + builder.AppendSwitch("--optimize+") + else + builder.AppendSwitch("--optimize-") + if not tailcalls then + builder.AppendSwitch("--tailcalls-") + // PdbFile + builder.AppendSwitchIfNotNull("--pdb:", pdbFile) + // Platform + builder.AppendSwitchIfNotNull("--platform:", + let ToUpperInvariant (s:string) = if s = null then null else s.ToUpperInvariant() + match ToUpperInvariant(platform), prefer32bit, ToUpperInvariant(targetType) with + | "ANYCPU", true, "EXE" + | "ANYCPU", true, "WINEXE" -> "anycpu32bitpreferred" + | "ANYCPU", _, _ -> "anycpu" + | "X86" , _, _ -> "x86" + | "X64" , _, _ -> "x64" + | "ITANIUM", _, _ -> "Itanium" + | _ -> null) + // Resources + for item in resources do + builder.AppendSwitchIfNotNull("--resource:", item.ItemSpec) + // VersionFile + builder.AppendSwitchIfNotNull("--versionfile:", versionFile) + // References + for item in references do + builder.AppendSwitchIfNotNull("-r:", item.ItemSpec) + // ReferencePath + let referencePathArray = // create a array of strings + match referencePath with + | null -> null + | _ -> referencePath.Split([|';'; ','|], StringSplitOptions.RemoveEmptyEntries) + + builder.AppendSwitchIfNotNull("--lib:", referencePathArray, ",") + // TargetType + builder.AppendSwitchIfNotNull("--target:", + if targetType = null then null else + match targetType.ToUpperInvariant() with + | "LIBRARY" -> "library" + | "EXE" -> "exe" + | "WINEXE" -> "winexe" + | "MODULE" -> "module" + | _ -> null) + + // NoWarn + match disabledWarnings with + | null -> () + | _ -> builder.AppendSwitchIfNotNull("--nowarn:", disabledWarnings.Split([|' '; ';'; ','; '\r'; '\n'|], StringSplitOptions.RemoveEmptyEntries), ",") + + // WarningLevel + builder.AppendSwitchIfNotNull("--warn:", warningLevel) + + // TreatWarningsAsErrors + if treatWarningsAsErrors then + builder.AppendSwitch("--warnaserror") + + // WarningsAsErrors + // Change warning 76, HashReferenceNotAllowedInNonScript/HashDirectiveNotAllowedInNonScript/HashIncludeNotAllowedInNonScript, into an error + // REVIEW: why is this logic here? In any case these are errors already by default! + let warningsAsErrorsArray = + match warningsAsErrors with + | null -> [|"76"|] + | _ -> (warningsAsErrors + " 76 ").Split([|' '; ';'; ','|], StringSplitOptions.RemoveEmptyEntries) + + builder.AppendSwitchIfNotNull("--warnaserror:", warningsAsErrorsArray, ",") + + // Win32ResourceFile + builder.AppendSwitchIfNotNull("--win32res:", win32res) + + // Win32ManifestFile + builder.AppendSwitchIfNotNull("--win32manifest:", win32manifest) + + // VisualStudioStyleErrors + if vserrors then + builder.AppendSwitch("--vserrors") + + builder.AppendSwitchIfNotNull("--LCID:", vslcid) + if utf8output then + builder.AppendSwitch("--utf8output") + + // When building using the fsc task, always emit the "fullpaths" flag to make the output easier + // for the user to parse + builder.AppendSwitch("--fullpaths") + + // When building using the fsc task, also emit "flaterrors" to ensure that multi-line error messages + // aren't trimmed + builder.AppendSwitch("--flaterrors") + + builder.AppendSwitchIfNotNull("--subsystemversion:", subsystemVersion) + if highEntropyVA then + builder.AppendSwitch("--highentropyva+") + else + builder.AppendSwitch("--highentropyva-") + + builder.AppendSwitchIfNotNull("--targetprofile:", targetProfile) + + // OtherFlags - must be second-to-last + builder.AppendSwitchUnquotedIfNotNull("", otherFlags) + capturedArguments <- builder.CapturedArguments() + + // Sources - these have to go last + builder.AppendFileNamesIfNotNull(sources, " ") + capturedFilenames <- builder.CapturedFilenames() + + builder + // --baseaddress member fsc.BaseAddress with get() = baseAddress @@ -332,21 +475,21 @@ type [ null - | "PORTABLE" -> "portable" - | "PDBONLY" -> "pdbonly" - | "FULL" -> "full" - | _ -> null) - // NoFramework - if noFramework then - builder.AppendSwitch("--noframework") - // BaseAddress - builder.AppendSwitchIfNotNull("--baseaddress:", baseAddress) - // DefineConstants - for item in defineConstants do - builder.AppendSwitchIfNotNull("--define:", item.ItemSpec) - // DocumentationFile - builder.AppendSwitchIfNotNull("--doc:", documentationFile) - // GenerateInterfaceFile - builder.AppendSwitchIfNotNull("--sig:", generateInterfaceFile) - // KeyFile - builder.AppendSwitchIfNotNull("--keyfile:", keyFile) - // Optimize - if optimize then - builder.AppendSwitch("--optimize+") - else - builder.AppendSwitch("--optimize-") - if not tailcalls then - builder.AppendSwitch("--tailcalls-") - // PdbFile - builder.AppendSwitchIfNotNull("--pdb:", pdbFile) - // Platform - builder.AppendSwitchIfNotNull("--platform:", - let ToUpperInvariant (s:string) = if s = null then null else s.ToUpperInvariant() - match ToUpperInvariant(platform), prefer32bit, ToUpperInvariant(targetType) with - | "ANYCPU", true, "EXE" - | "ANYCPU", true, "WINEXE" -> "anycpu32bitpreferred" - | "ANYCPU", _, _ -> "anycpu" - | "X86" , _, _ -> "x86" - | "X64" , _, _ -> "x64" - | "ITANIUM", _, _ -> "Itanium" - | _ -> null) - // Resources - for item in resources do - builder.AppendSwitchIfNotNull("--resource:", item.ItemSpec) - // VersionFile - builder.AppendSwitchIfNotNull("--versionfile:", versionFile) - // References - for item in references do - builder.AppendSwitchIfNotNull("-r:", item.ItemSpec) - // ReferencePath - let referencePathArray = // create a array of strings - match referencePath with - | null -> null - | _ -> referencePath.Split([|';'; ','|], StringSplitOptions.RemoveEmptyEntries) - - builder.AppendSwitchIfNotNull("--lib:", referencePathArray, ",") - // TargetType - builder.AppendSwitchIfNotNull("--target:", - if targetType = null then null else - match targetType.ToUpperInvariant() with - | "LIBRARY" -> "library" - | "EXE" -> "exe" - | "WINEXE" -> "winexe" - | "MODULE" -> "module" - | _ -> null) - - // NoWarn - match disabledWarnings with - | null -> () - | _ -> builder.AppendSwitchIfNotNull("--nowarn:", disabledWarnings.Split([|' '; ';'; ','; '\r'; '\n'|], StringSplitOptions.RemoveEmptyEntries), ",") - - // WarningLevel - builder.AppendSwitchIfNotNull("--warn:", warningLevel) - - // TreatWarningsAsErrors - if treatWarningsAsErrors then - builder.AppendSwitch("--warnaserror") - - // WarningsAsErrors - // Change warning 76, HashReferenceNotAllowedInNonScript/HashDirectiveNotAllowedInNonScript/HashIncludeNotAllowedInNonScript, into an error - // REVIEW: why is this logic here? In any case these are errors already by default! - let warningsAsErrorsArray = - match warningsAsErrors with - | null -> [|"76"|] - | _ -> (warningsAsErrors + " 76 ").Split([|' '; ';'; ','|], StringSplitOptions.RemoveEmptyEntries) - - builder.AppendSwitchIfNotNull("--warnaserror:", warningsAsErrorsArray, ",") - - - // Win32ResourceFile - builder.AppendSwitchIfNotNull("--win32res:", win32res) - - // Win32ManifestFile - builder.AppendSwitchIfNotNull("--win32manifest:", win32manifest) - - // VisualStudioStyleErrors - if vserrors then - builder.AppendSwitch("--vserrors") - - builder.AppendSwitchIfNotNull("--LCID:", vslcid) - if utf8output then - builder.AppendSwitch("--utf8output") - - // When building using the fsc task, always emit the "fullpaths" flag to make the output easier - // for the user to parse - builder.AppendSwitch("--fullpaths") - - // When building using the fsc task, also emit "flaterrors" to ensure that multi-line error messages - // aren't trimmed - builder.AppendSwitch("--flaterrors") - - builder.AppendSwitchIfNotNull("--subsystemversion:", subsystemVersion) - if highEntropyVA then - builder.AppendSwitch("--highentropyva+") - else - builder.AppendSwitch("--highentropyva-") + if not (String.IsNullOrEmpty(dotnetFscCompilerPath)) then builder.AppendSwitch(dotnetFscCompilerPath) + builder.ToString() - builder.AppendSwitchIfNotNull("--sqmsessionguid:", sqmSessionGuid) + override fsc.GenerateResponseFileCommands() = + let builder = generateCommandLineBuilder () + builder.GetCapturedArguments() |> Seq.fold(fun acc f -> acc + f + Environment.NewLine) "" - builder.AppendSwitchIfNotNull("--targetprofile:", targetProfile) - - // OtherFlags - must be second-to-last - builder.AppendSwitchUnquotedIfNotNull("", otherFlags) - capturedArguments <- builder.CapturedArguments() - - // Sources - these have to go last - builder.AppendFileNamesIfNotNull(sources, " ") - capturedFilenames <- builder.CapturedFilenames() - let s = builder.ToString() - s // expose this to internal components (for nunit testing) member internal fsc.InternalGenerateCommandLineCommands() = fsc.GenerateCommandLineCommands() + + // expose this to internal components (for nunit testing) + member internal fsc.InternalGenerateResponseFileCommands() = + fsc.GenerateResponseFileCommands() + member internal fsc.InternalExecuteTool(pathToTool, responseFileCommands, commandLineCommands) = fsc.ExecuteTool(pathToTool, responseFileCommands, commandLineCommands) + member internal fsc.GetCapturedArguments() = [| yield! capturedArguments diff --git a/src/fsharp/FSharp.Build/Fsc.fsi b/src/fsharp/FSharp.Build/Fsc.fsi index e06ce0c57a6..813f314a645 100644 --- a/src/fsharp/FSharp.Build/Fsc.fsi +++ b/src/fsharp/FSharp.Build/Fsc.fsi @@ -13,6 +13,7 @@ type Fsc = class member internal InternalGenerateFullPathToTool : unit -> System.String member internal InternalGenerateCommandLineCommands : unit -> System.String + member internal InternalGenerateResponseFileCommands : unit -> System.String member internal InternalExecuteTool : string * string * string -> int member internal GetCapturedArguments : unit -> string[] member BaseAddress : string with get,set @@ -54,5 +55,5 @@ type Fsc = class member SubsystemVersion : string with get,set member HighEntropyVA : bool with get,set member TargetProfile : string with get,set - member SqmSessionGuid : string with get,set + member DotnetFscCompilerPath : string with get,set end diff --git a/src/fsharp/FSharp.Build/Microsoft.FSharp.targets b/src/fsharp/FSharp.Build/Microsoft.FSharp.targets index b81b7dedf99..a25cfe1ba1d 100644 --- a/src/fsharp/FSharp.Build/Microsoft.FSharp.targets +++ b/src/fsharp/FSharp.Build/Microsoft.FSharp.targets @@ -189,7 +189,7 @@ this file. SubsystemVersion="$(SubsystemVersion)" HighEntropyVA="$(HighEntropyVA)" TargetProfile="$(TargetProfile)" - SqmSessionGuid="$(SqmSessionGuid)" + DotnetFscCompilerPath="$(DotnetFscCompilerPath)" /> diff --git a/src/fsharp/FSharp.Build/project.json b/src/fsharp/FSharp.Build/project.json index 40df8833427..cdec2ffe079 100644 --- a/src/fsharp/FSharp.Build/project.json +++ b/src/fsharp/FSharp.Build/project.json @@ -1,22 +1,22 @@ -{ - "dependencies": { - "Microsoft.Build": "0.1.0-preview-00022", - "Microsoft.Build.Framework": "0.1.0-preview-00022", - "Microsoft.Build.Tasks.Core": "0.1.0-preview-00022", - "Microsoft.Build.Utilities.Core": "0.1.0-preview-00022", - "Microsoft.NETCore.Platforms": "1.0.1-rc2-24027", - "Microsoft.Win32.Registry": { - "version": "4.0.0-rc2-24027", - "exclude": "Compile" - }, - "System.AppContext": "4.1.0-rc2-24027", - "System.Diagnostics.Tools": "4.0.1-rc2-24027", - "System.Reflection.Primitives": "4.0.1-rc2-24027", - "System.Resources.ResourceManager": "4.0.1-rc2-24027" - }, - "frameworks": { - "dnxcore50": { +{ + "dependencies": { + "Microsoft.Build": "0.1.0-preview-00028-160627", + "Microsoft.Build.Framework": "0.1.0-preview-00028-160627", + "Microsoft.Build.Tasks.Core": "0.1.0-preview-00028-160627", + "Microsoft.Build.Utilities.Core": "0.1.0-preview-00028-160627", + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.Win32.Registry": { + "version": "4.0.0", + "exclude": "Compile" + }, + "System.AppContext": "4.1.0", + "System.Diagnostics.Tools": "4.0.1", + "System.Reflection.Primitives": "4.0.1", + "System.Resources.ResourceManager": "4.0.1" + }, + "frameworks": { + "netstandard1.6": { "imports": "portable-net45+win8" - } - } -} \ No newline at end of file + } + } +} \ No newline at end of file diff --git a/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj b/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj index 8e5334f9b90..4886c9db278 100644 --- a/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj +++ b/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj @@ -434,12 +434,6 @@ IlxGen.fs - - TraceCall.fsi - - - TraceCall.fs - CompileOps.fsi @@ -467,16 +461,23 @@ - - - - - - + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Framework.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Utilities.Core.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Tasks.Core.dll + ..\..\..\packages\Microsoft.DiaSymReader.PortablePdb.1.1.0\lib\portable-net45+win8\Microsoft.DiaSymReader.PortablePdb.dll ..\..\..\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 + ..\..\..\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.dll diff --git a/src/fsharp/FSharp.Compiler.Unittests/EditDistance.fs b/src/fsharp/FSharp.Compiler.Unittests/EditDistance.fs new file mode 100644 index 00000000000..a8a598b505c --- /dev/null +++ b/src/fsharp/FSharp.Compiler.Unittests/EditDistance.fs @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +namespace FSharp.Compiler.Unittests + +open System +open System.Text +open NUnit.Framework +open Microsoft.FSharp.Compiler + +[] +module EditDistance = + open Internal.Utilities.EditDistance + + [] + [] + let RestrictedEditDistance (str1 : string, str2 : string) : int = + CalcEditDistance (str1, str2) diff --git a/src/fsharp/FSharp.Compiler.Unittests/FSharp.Compiler.Unittests.fsproj b/src/fsharp/FSharp.Compiler.Unittests/FSharp.Compiler.Unittests.fsproj index 28721abe8c2..20f9c1fbbc0 100644 --- a/src/fsharp/FSharp.Compiler.Unittests/FSharp.Compiler.Unittests.fsproj +++ b/src/fsharp/FSharp.Compiler.Unittests/FSharp.Compiler.Unittests.fsproj @@ -42,9 +42,9 @@ 3 - - True - $(NUnitLibDir)\nunit.framework.dll + + True + $(NUnitLibDir)\nunit.framework.dll @@ -54,6 +54,9 @@ + + ..\..\..\packages\System.ValueTuple.4.0.0-rc3-24212-01\lib\netstandard1.1\System.ValueTuple.dll + @@ -62,6 +65,7 @@ + diff --git a/src/fsharp/FSharp.Compiler.netcore.nuget/Microsoft.FSharp.Compiler.netcore.nuspec b/src/fsharp/FSharp.Compiler.netcore.nuget/Microsoft.FSharp.Compiler.netcore.nuspec index 849d54eac48..aa72f482b0f 100644 --- a/src/fsharp/FSharp.Compiler.netcore.nuget/Microsoft.FSharp.Compiler.netcore.nuspec +++ b/src/fsharp/FSharp.Compiler.netcore.nuget/Microsoft.FSharp.Compiler.netcore.nuspec @@ -19,6 +19,7 @@ + @@ -32,6 +33,7 @@ + @@ -43,5 +45,8 @@ + + + diff --git a/src/fsharp/FSharp.Compiler.netcore.nuget/layoutfscnuget.fsx b/src/fsharp/FSharp.Compiler.netcore.nuget/layoutfscnuget.fsx index da8720bcf6e..47750df8f1d 100644 --- a/src/fsharp/FSharp.Compiler.netcore.nuget/layoutfscnuget.fsx +++ b/src/fsharp/FSharp.Compiler.netcore.nuget/layoutfscnuget.fsx @@ -66,6 +66,9 @@ try yield Path.Combine(bindir, "default.win32manifest") yield Path.Combine(bindir, "fsi.exe") yield Path.Combine(bindir, "FSharp.Compiler.Interactive.Settings.dll") + yield Path.Combine(bindir, "FSharp.Build.dll") + yield Path.Combine(bindir, "Microsoft.FSharp.targets") + yield Path.Combine(bindir, "Microsoft.Portable.FSharp.targets") } //Clean intermediate directoriy diff --git a/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj b/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj index 0e8e0e69532..24d87a98c01 100644 --- a/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj +++ b/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj @@ -141,12 +141,6 @@ Utilities\lib.fs - - Utilities\TraceCall.fsi - - - Utilities\TraceCall.fs - Utilities\rational.fsi @@ -518,15 +512,23 @@ - - - - - + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Framework.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Utilities.Core.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Tasks.Core.dll + ..\..\..\packages\Microsoft.DiaSymReader.PortablePdb.1.1.0\lib\portable-net45+win8\Microsoft.DiaSymReader.PortablePdb.dll ..\..\..\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 + ..\..\..\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 @@ -537,7 +539,6 @@ - diff --git a/src/fsharp/FSharp.Compiler/project.json b/src/fsharp/FSharp.Compiler/project.json index 5ee32fdfe28..0f86db2be0a 100644 --- a/src/fsharp/FSharp.Compiler/project.json +++ b/src/fsharp/FSharp.Compiler/project.json @@ -18,7 +18,8 @@ "System.Threading.Thread": "4.0.0", "System.Threading.ThreadPool": "4.0.10", "Microsoft.DiaSymReader.PortablePdb": "1.1.0", - "Microsoft.DiaSymReader": "1.0.8" + "Microsoft.DiaSymReader": "1.0.8", + "System.ValueTuple": "4.0.0-rc3-24212-01", }, "runtimes": { "win7-x86": { }, diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core.Unittests.fsproj b/src/fsharp/FSharp.Core.Unittests/FSharp.Core.Unittests.fsproj index 4fc578c8f05..ce345f5da96 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core.Unittests.fsproj +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core.Unittests.fsproj @@ -62,6 +62,13 @@ {DED3BBD7-53F4-428A-8C9F-27968E768605} FSharp.Core + + ..\..\..\packages\System.ValueTuple.4.0.0-rc3-24212-01\lib\netstandard1.1\System.ValueTuple.dll + + + True + ..\..\..\src\fsharp\FSharp.Core.Unittests\FSharp.Core\SampleTuples\TupleSample.dll + @@ -120,6 +127,7 @@ + @@ -130,6 +138,7 @@ + diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayProperties.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayProperties.fs index 8327346ec57..cc49547a05e 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayProperties.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayProperties.fs @@ -6,6 +6,7 @@ open System open System.Collections.Generic open NUnit.Framework open FsCheck +open Utils let isStable sorted = sorted |> Seq.pairwise |> Seq.forall (fun ((ia, a),(ib, b)) -> if a = b then ia < ib else true) @@ -15,6 +16,18 @@ let distinctByStable<'a when 'a : comparison> (xs : 'a []) = isStable sorted [] -let ``Seq.distinctBy is stable`` () = +let ``Array.distinctBy is stable`` () = Check.QuickThrowOnFailure distinctByStable Check.QuickThrowOnFailure distinctByStable + +let blitWorksLikeCopy<'a when 'a : comparison> (source : 'a [], sourceIndex, target : 'a [], targetIndex, count) = + let target1 = Array.copy target + let target2 = Array.copy target + let a = runAndCheckIfAnyError (fun () -> Array.blit source sourceIndex target1 targetIndex count) + let b = runAndCheckIfAnyError (fun () -> Array.Copy(source, sourceIndex, target2, targetIndex, count)) + a = b && target1 = target2 + +[] +let ``Array.blit works like Array.Copy`` () = + Check.QuickThrowOnFailure blitWorksLikeCopy + Check.QuickThrowOnFailure blitWorksLikeCopy diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/CollectionModulesConsistency.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/CollectionModulesConsistency.fs index eeb64835a40..1763cb82454 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/CollectionModulesConsistency.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/CollectionModulesConsistency.fs @@ -34,9 +34,9 @@ let ``append is consistent`` () = let averageFloat (xs : NormalFloat []) = let xs = xs |> Array.map float - let s = run (fun () -> xs |> Seq.average) - let l = run (fun () -> xs |> List.ofArray |> List.average) - let a = run (fun () -> xs |> Array.average) + let s = runAndCheckErrorType (fun () -> xs |> Seq.average) + let l = runAndCheckErrorType (fun () -> xs |> List.ofArray |> List.average) + let a = runAndCheckErrorType (fun () -> xs |> Array.average) s = a && l = a [] @@ -46,9 +46,9 @@ let ``average is consistent`` () = let averageBy (xs : float []) f = let xs = xs |> Array.map float let f x = (f x : NormalFloat) |> float - let s = run (fun () -> xs |> Seq.averageBy f) - let l = run (fun () -> xs |> List.ofArray |> List.averageBy f) - let a = run (fun () -> xs |> Array.averageBy f) + let s = runAndCheckErrorType (fun () -> xs |> Seq.averageBy f) + let l = runAndCheckErrorType (fun () -> xs |> List.ofArray |> List.averageBy f) + let a = runAndCheckErrorType (fun () -> xs |> Array.averageBy f) s = a && l = a [] diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule.fs index dc3f88ab1d3..ea2be48ea48 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule.fs @@ -224,11 +224,11 @@ type ListModule() = member this.Choose() = // int List let intSrc:int list = [ 1..100 ] - let funcInt x = if (x%5=0) then Some x else None + let funcInt x = if (x%5=0) then Some (x*x) else None let intChosen = List.choose funcInt intSrc - Assert.AreEqual(5, intChosen.[0]) - Assert.AreEqual(10, intChosen.[1]) - Assert.AreEqual(15, intChosen.[2]) + Assert.AreEqual(25, intChosen.[0]) + Assert.AreEqual(100, intChosen.[1]) + Assert.AreEqual(225, intChosen.[2]) // string List let stringSrc: string list = [ "List"; "this"; "is" ;"str"; "list" ] @@ -240,6 +240,11 @@ type ListModule() = Assert.AreEqual("list", strChosen.[0].ToLower()) Assert.AreEqual("list", strChosen.[1].ToLower()) + // always None + let emptySrc :int list = [ ] + let emptyChosen = List.choose (fun i -> Option.None) intSrc + Assert.AreEqual(emptySrc, emptyChosen) + // empty List let emptySrc :int list = [ ] let emptyChosen = List.choose funcInt emptySrc @@ -1019,6 +1024,6 @@ type ListModule() = member this.``pairwise should return pairs of the input list``() = Assert.AreEqual(([] : (obj*obj) list), List.pairwise []) Assert.AreEqual(([] : (int*int) list), List.pairwise [1]) - Assert.AreEqual([1,2],List.pairwise [1;2]) - Assert.AreEqual([1,2; 2,3],List.pairwise [1;2;3]) - Assert.AreEqual(["H","E"; "E","L"; "L","L"; "L","O"],List.pairwise ["H";"E";"L";"L";"O"]) + Assert.AreEqual([1,2], List.pairwise [1;2]) + Assert.AreEqual([1,2; 2,3], List.pairwise [1;2;3]) + Assert.AreEqual(["H","E"; "E","L"; "L","L"; "L","O"], List.pairwise ["H";"E";"L";"L";"O"]) diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule2.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule2.fs index a8e59e79590..9697fe5a0bd 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule2.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule2.fs @@ -97,6 +97,13 @@ type ListModule02() = let resultStr = List.map3 funcStr ["A";"B";"C";"D"] ["a";"b";"c";"d"] ["1";"2";"3";"4"] Assert.AreEqual(["Aa1";"Bb2";"Cc3";"Dd4"], resultStr) + // lists of different length + let shortList = [1] + let longerList = [1; 2] + CheckThrowsArgumentException (fun () -> List.map3 funcInt shortList shortList longerList |> ignore) + CheckThrowsArgumentException (fun () -> List.map3 funcInt shortList longerList shortList |> ignore) + CheckThrowsArgumentException (fun () -> List.map3 funcInt shortList shortList longerList |> ignore) + // empty List let resultEpt = List.map3 funcInt List.empty List.empty List.empty Assert.AreEqual(List.empty, resultEpt) @@ -176,6 +183,12 @@ type ListModule02() = let resultStr = List.mapi2 funcStr [3;6;9;11] ["a";"b";"c";"d"] Assert.AreEqual([4;8;12;15], resultStr) + // lists of different length + let shortList = [1] + let longerList = [1; 2] + CheckThrowsArgumentException (fun () -> List.mapi2 funcInt shortList longerList |> ignore) + CheckThrowsArgumentException (fun () -> List.mapi2 funcInt longerList shortList |> ignore) + // empty List let emptyArr:int list = [ ] let resultEpt = List.mapi2 funcInt emptyArr emptyArr diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/AsyncModule.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/AsyncModule.fs index cfa03d36597..9c2eae6437e 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/AsyncModule.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/AsyncModule.fs @@ -420,9 +420,10 @@ type AsyncModule() = member this.``RaceBetweenCancellationAndError.Sleep``() = testErrorAndCancelRace (Async.Sleep (-5)) -#if !(FSHARP_CORE_PORTABLE || FSHARP_CORE_NETCORE_PORTABLE) +#if !(FSHARP_CORE_PORTABLE || FSHARP_CORE_NETCORE_PORTABLE || coreclr) [] // takes 3 minutes! member this.``Async.Choice specification test``() = + ThreadPool.SetMinThreads(100,100) |> ignore Check.QuickThrowOnFailure (normalize >> runChoice) #endif @@ -584,96 +585,4 @@ type AsyncModule() = Assert.AreEqual(0, !okCount) Assert.AreEqual(0, !errCount) #endif -#endif - -#if FSHARP_CORE_PORTABLE -// nothing -#else -#if FSHARP_CORE_2_0 -// nothing -#else -#if FSHARP_CORE_NETCORE_PORTABLE || coreclr -//nothing -#else -// we are on the desktop - member this.RunExeAndExpectOutput(exeName, expected:string) = - let curDir = (new Uri(System.Reflection.Assembly.GetExecutingAssembly().CodeBase)).LocalPath |> System.IO.Path.GetDirectoryName - let psi = System.Diagnostics.ProcessStartInfo(exeName) - psi.WorkingDirectory <- curDir - psi.RedirectStandardOutput <- true - psi.UseShellExecute <- false - let p = System.Diagnostics.Process.Start(psi) - let out = p.StandardOutput.ReadToEnd() - p.WaitForExit() - let out = out.Replace("\r\n", "\n") - let expected = expected.Replace("\r\n", "\n") - Assert.AreEqual(expected, out) -#if OPEN_BUILD -#else - [] - member this.``ContinuationsThreadingDetails.AsyncWithSyncContext``() = - this.RunExeAndExpectOutput("AsyncWithSyncContext.exe", """ -EmptyParallel [|("ok", true); ("caught:boom", true)|] -NonEmptyParallel [|("ok", true); ("form exception:boom", true)|] -ParallelSeqArgumentThrows [|("error", true)|] -Sleep1Return [|("ok", true); ("form exception:boom", true)|] -Sleep0Return [|("ok", true); ("form exception:boom", true)|] -Return [|("ok", true); ("caught:boom", true)|] -FromContinuationsSuccess [|("ok", true); ("caught:boom", true)|] -FromContinuationsError [|("error", true)|] -FromContinuationsCancel [|("cancel", true)|] -FromContinuationsThrows [|("error", true)|] -FromContinuationsSchedulesFutureSuccess [|("ok", false); ("unhandled", false)|] -FromContinuationsSchedulesFutureError [|("error", false)|] -FromContinuationsSchedulesFutureCancel [|("cancel", false)|] -FromContinuationsSchedulesFutureSuccessAndThrowsQuickly [|("error", true); ("unhandled", false)|] -FromContinuationsSchedulesFutureErrorAndThrowsQuickly [|("error", true); ("unhandled", false)|] -FromContinuationsSchedulesFutureCancelAndThrowsQuickly [|("error", true); ("unhandled", false)|] -FromContinuationsSchedulesFutureSuccessAndThrowsSlowly [|("ok", false); ("unhandled", false); - ("caught:A continuation provided by Async.FromContinuations was invoked multiple times", - true)|] -FromContinuationsSchedulesFutureErrorAndThrowsSlowly [|("error", false); - ("caught:A continuation provided by Async.FromContinuations was invoked multiple times", - true)|] -FromContinuationsSchedulesFutureCancelAndThrowsSlowly [|("cancel", false); - ("caught:A continuation provided by Async.FromContinuations was invoked multiple times", - true)|] -AwaitWaitHandleAlreadySignaled0 [|("ok", true); ("caught:boom", true)|] -AwaitWaitHandleAlreadySignaled1 [|("ok", true); ("form exception:boom", true)|] -""" ) - [] - member this.``ContinuationsThreadingDetails.AsyncSansSyncContext``() = - this.RunExeAndExpectOutput("AsyncSansSyncContext.exe", """ -EmptyParallel [|("ok", true); ("caught:boom", true)|] -NonEmptyParallel [|("ok", false); ("unhandled", false)|] -ParallelSeqArgumentThrows [|("error", true)|] -Sleep1Return [|("ok", false); ("unhandled", false)|] -Sleep0Return [|("ok", false); ("unhandled", false)|] -Return [|("ok", true); ("caught:boom", true)|] -FromContinuationsSuccess [|("ok", true); ("caught:boom", true)|] -FromContinuationsError [|("error", true)|] -FromContinuationsCancel [|("cancel", true)|] -FromContinuationsThrows [|("error", true)|] -FromContinuationsSchedulesFutureSuccess [|("ok", false); ("unhandled", false)|] -FromContinuationsSchedulesFutureError [|("error", false)|] -FromContinuationsSchedulesFutureCancel [|("cancel", false)|] -FromContinuationsSchedulesFutureSuccessAndThrowsQuickly [|("error", true); ("unhandled", false)|] -FromContinuationsSchedulesFutureErrorAndThrowsQuickly [|("error", true); ("unhandled", false)|] -FromContinuationsSchedulesFutureCancelAndThrowsQuickly [|("error", true); ("unhandled", false)|] -FromContinuationsSchedulesFutureSuccessAndThrowsSlowly [|("ok", false); ("unhandled", false); - ("caught:A continuation provided by Async.FromContinuations was invoked multiple times", - true)|] -FromContinuationsSchedulesFutureErrorAndThrowsSlowly [|("error", false); - ("caught:A continuation provided by Async.FromContinuations was invoked multiple times", - true)|] -FromContinuationsSchedulesFutureCancelAndThrowsSlowly [|("cancel", false); - ("caught:A continuation provided by Async.FromContinuations was invoked multiple times", - true)|] -AwaitWaitHandleAlreadySignaled0 [|("ok", true); ("caught:boom", true)|] -AwaitWaitHandleAlreadySignaled1 [|("ok", false); ("unhandled", false)|] -""" ) -#endif - -#endif -#endif #endif \ No newline at end of file diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/ResultTests.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/ResultTests.fs new file mode 100644 index 00000000000..e159aebe69a --- /dev/null +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/ResultTests.fs @@ -0,0 +1,85 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +// Various tests for: +// Microsoft.FSharp.Core.Result + +namespace FSharp.Core.Unittests.FSharp_Core.Microsoft_FSharp_Core + +open System +open FSharp.Core.Unittests.LibraryTestFx +open NUnit.Framework + +type EmailValidation= + | Empty + | NoAt + +open Result + +[] +type ResultTests() = + + let fail_if_empty email= + if String.IsNullOrEmpty(email) then Error Empty else Ok email + + let fail_if_not_at (email:string)= + if (email.Contains("@")) then Ok email else Error NoAt + + let validate_email = + fail_if_empty + >> bind fail_if_not_at + + let test_validate_email email (expected:Result) = + let actual = validate_email email + Assert.AreEqual(expected, actual) + + let toUpper (v:string) = v.ToUpper() + + let shouldBeOkWithValue expected maybeOk = match maybeOk with | Error e-> failwith "Expected Ok, got Error!" | Ok v->Assert.AreEqual(expected, v) + + let shouldBeErrorWithValue expected maybeError = match maybeError with | Error e-> Assert.AreEqual(expected, e) | Ok v-> failwith "Expected Error, got Ok!" + + let addOneOk (v:int) = Ok (v+1) + + [] + member this.CanChainTogetherSuccessiveValidations() = + test_validate_email "" (Error Empty) + test_validate_email "something_else" (Error NoAt) + test_validate_email "some@email.com" (Ok "some@email.com") + + [] + member this.MapWillTransformOkValues() = + Ok "some@email.com" + |> map toUpper + |> shouldBeOkWithValue "SOME@EMAIL.COM" + + [] + member this.MapWillNotTransformErrorValues() = + Error "my error" + |> map toUpper + |> shouldBeErrorWithValue "my error" + + [] + member this.MapErrorWillTransformErrorValues() = + Error "my error" + |> mapError toUpper + |> shouldBeErrorWithValue "MY ERROR" + + [] + member this.MapErrorWillNotTransformOkValues() = + Ok "some@email.com" + |> mapError toUpper + |> shouldBeOkWithValue "some@email.com" + + [] + member this.BindShouldModifyOkValue() = + Ok 42 + |> bind addOneOk + |> shouldBeOkWithValue 43 + + [] + member this.BindErrorShouldNotModifyError() = + Error "Error" + |> bind addOneOk + |> shouldBeErrorWithValue "Error" + + diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/SampleTuples/Properties/AssemblyInfo.cs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/SampleTuples/Properties/AssemblyInfo.cs new file mode 100644 index 00000000000..965e73aa9e5 --- /dev/null +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/SampleTuples/Properties/AssemblyInfo.cs @@ -0,0 +1,16 @@ +using System.Reflection; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ClassLibrary3")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ClassLibrary3")] +[assembly: AssemblyCopyright("Copyright © 2016")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/SampleTuples/System.ValueTuple.dll b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/SampleTuples/System.ValueTuple.dll new file mode 100644 index 00000000000..9b6bbf8db5f Binary files /dev/null and b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/SampleTuples/System.ValueTuple.dll differ diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/SampleTuples/TupleSample.cs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/SampleTuples/TupleSample.cs new file mode 100644 index 00000000000..f7ff4689285 --- /dev/null +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/SampleTuples/TupleSample.cs @@ -0,0 +1,131 @@ +using System; + +namespace TupleSample +{ + public class TupleReturns + { + // Basic Tuple + public static (int, int) GetTuple(int one, int two) + { + return (one, two); + } + // Basic Tuple with three elements + public static (int, int, int) GetTuple(int one, int two, int three) + { + return (one, two, three); + } + // Basic Tuple with four elements + public static (int, int, int, int) GetTuple(int one, int two, int three, int four) + { + return (one, two, three, four); + } + // Basic Tuple with five elements + public static (int, int, int, int, int) GetTuple(int one, int two, int three, int four, int five) + { + return (one, two, three, four, five); + } + // Basic Tuple with six elements + public static (int, int, int, int, int, int) GetTuple(int one, int two, int three, int four, int five, int six) + { + return (one, two, three, four, five, six); + } + // Basic Tuple with seven elements + public static (int, int, int, int, int, int, int) GetTuple(int one, int two, int three, int four, int five, int six, int seven) + { + return (one, two, three, four, five, six, seven); + } + // Basic Tuple with eight elements 7tuple+1tuple via .Rest + public static (int, int, int, int, int, int, int, int) GetTuple(int one, int two, int three, int four, int five, int six, int seven, int eight) + { + return (one, two, three, four, five, six, seven, eight); + } + // Basic Tuple with nine elements 7tuple+2ttuple via .Rest + public static (int, int, int, int, int, int, int, int, int) GetTuple(int one, int two, int three, int four, int five, int six, int seven, int eight, int nine) + { + return (one, two, three, four, five, six, seven, eight, nine); + } + // Basic Tuple with ten elements 7tuple+3ttuple via .Rest + public static (int, int, int, int, int, int, int, int, int, int) GetTuple(int one, int two, int three, int four, int five, int six, int seven, int eight, int nine, int ten) + { + return (one, two, three, four, five, six, seven, eight, nine, ten); + } + // Basic Tuple with fifteen elements 7tuple+7ttuple+1tuple via .Rest + public static (int, int, int, int, int, int, int, int, int, int, int, int, int, int, int) GetTuple(int one, int two, int three, int four, int five, int six, int seven, int eight, int nine, int ten, int eleven, int twelve, int thirteen, int fourteen, int fifteen) + { + return (one, two, three, four, five, six, seven, eight, nine, ten, eleven, twelve, thirteen, fourteen, fifteen); + } + // Basic Tuple with sixteen elements 7tuple+7ttuple+2tuple via .Rest + public static (int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int) GetTuple(int one, int two, int three, int four, int five, int six, int seven, int eight, int nine, int ten, int eleven, int twelve, int thirteen, int fourteen, int fifteen, int sixteen) + { + return (one, two, three, four, five, six, seven, eight, nine, ten, eleven, twelve, thirteen, fourteen, fifteen, sixteen); + } + // Tuple with various field types + public static (int, float, double, string, int[], object) GetTuple(int one, float two, double three, string four, int[] five, object six) + { + return (one, two, three, four, five, six); + } + } + public class TupleArguments + { + // Basic Tuple + public static (int, int) GetTuple( (int, int) t) + { + return (t.Item1, t.Item2); + } + // Basic Tuple with three elements + public static (int, int, int) GetTuple( (int, int , int) t) + { + return (t.Item1, t.Item2, t.Item3); + } + // Basic Tuple with four elements + public static (int, int, int, int) GetTuple( (int, int, int , int) t) + { + return (t.Item1, t.Item2, t.Item3, t.Item4); + } + // Basic Tuple with five elements + public static (int, int, int, int, int) GetTuple( (int, int, int, int, int) t) + { + return (t.Item1, t.Item2, t.Item3, t.Item4, t.Item5); + } + // Basic Tuple with six elements + public static (int, int, int, int, int, int) GetTuple( (int, int, int, int, int, int) t) + { + return (t.Item1, t.Item2, t.Item3, t.Item4, t.Item5, t.Item6); + } + // Basic Tuple with seven elements + public static (int, int, int, int, int, int, int) GetTuple((int, int, int, int, int, int, int) t) + { + return (t.Item1, t.Item2, t.Item3, t.Item4, t.Item5, t.Item6, t.Item7); + } + // Basic Tuple with eight elements 7tuple+1tuple via .Rest + public static (int, int, int, int, int, int, int, int) GetTuple((int, int, int, int, int, int, int, int) t) + { + return (t.Item1, t.Item2, t.Item3, t.Item4, t.Item5, t.Item6, t.Item7, t.Item8); + } + // Basic Tuple with nine elements 7tuple+2ttuple via .Rest + public static (int, int, int, int, int, int, int, int, int) GetTuple((int, int, int, int, int, int, int, int, int) t) + { + return (t.Item1, t.Item2, t.Item3, t.Item4, t.Item5, t.Item6, t.Item7, t.Item8, t.Item9); + } + // Basic Tuple with ten elements 7tuple+3ttuple via .Rest + public static (int, int, int, int, int, int, int, int, int, int) GetTuple((int, int, int, int, int, int, int, int, int, int) t) + { + return (t.Item1, t.Item2, t.Item3, t.Item4, t.Item5, t.Item6, t.Item7, t.Item8, t.Item9, t.Item10); + } + // Basic Tuple with fifteen elements 7tuple+7ttuple+1tuple via .Rest + public static (int, int, int, int, int, int, int, int, int, int, int, int, int, int, int) GetTuple((int, int, int, int, int, int, int, int, int, int, int, int, int, int, int) t) + { + return (t.Item1, t.Item2, t.Item3, t.Item4, t.Item5, t.Item6, t.Item7, t.Item8, t.Item9, t.Item10, t.Item11, t.Item12, t.Item13, t.Item14, t.Item15); + } + // Basic Tuple with sixteen elements 7tuple+7ttuple+2tuple via .Rest + public static (int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int) GetTuple((int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int) t) + { + return (t.Item1, t.Item2, t.Item3, t.Item4, t.Item5, t.Item6, t.Item7, t.Item8, t.Item9, t.Item10, t.Item11, t.Item12, t.Item13, t.Item14, t.Item15, t.Item16); + } + // Tuple with various field types + public static (int, float, double, string, int[], object) GetTuple( (int, float, double, string, int[], object) t) + { + return (t.Item1, t.Item2, t.Item3, t.Item4, t.Item5, t.Item6); + } + } +} diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/SampleTuples/TupleSample.csproj b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/SampleTuples/TupleSample.csproj new file mode 100644 index 00000000000..29b42c8a75c --- /dev/null +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/SampleTuples/TupleSample.csproj @@ -0,0 +1,42 @@ + + + + + 11.0 + Debug + AnyCPU + Library + Properties + TupleSample + TupleSample + en-US + Profile7 + v4.5 + 512 + + + pdbonly + true + . + TRACE + prompt + 4 + + + + ..\..\..\..\..\packages\System.ValueTuple.4.0.0-rc3-24212-01\lib\netstandard1.1\System.ValueTuple.dll + + + + + + + + + \ No newline at end of file diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/SampleTuples/TupleSample.dll b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/SampleTuples/TupleSample.dll new file mode 100644 index 00000000000..123ff42e605 Binary files /dev/null and b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/SampleTuples/TupleSample.dll differ diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/SampleTuples/TupleSample.pdb b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/SampleTuples/TupleSample.pdb new file mode 100644 index 00000000000..22da5c5a9e4 Binary files /dev/null and b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/SampleTuples/TupleSample.pdb differ diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/SampleTuples/TupleSample.sln b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/SampleTuples/TupleSample.sln new file mode 100644 index 00000000000..6784a00171d --- /dev/null +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/SampleTuples/TupleSample.sln @@ -0,0 +1,19 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.25518.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TupleSample", "TupleSample.csproj", "{224C7102-CD32-4B92-AEA7-9147F8E70E44}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {224C7102-CD32-4B92-AEA7-9147F8E70E44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {224C7102-CD32-4B92-AEA7-9147F8E70E44}.Debug|Any CPU.Build.0 = Debug|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/SampleTuples/readme b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/SampleTuples/readme new file mode 100644 index 00000000000..dacf30d0771 --- /dev/null +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/SampleTuples/readme @@ -0,0 +1,9 @@ +Readme for Tuple samples +========================= + +Used to verify interop between C# Value tuples and the F# struct tuple type. + +Sampletuple.dll is checked in directly and is compiled against the System.Runtime.dll contracts. So should be completely portable. + + + diff --git a/src/fsharp/FSharp.Core.Unittests/LibraryTestFx.fs b/src/fsharp/FSharp.Core.Unittests/LibraryTestFx.fs index af62c8ffb75..548cd02f04c 100644 --- a/src/fsharp/FSharp.Core.Unittests/LibraryTestFx.fs +++ b/src/fsharp/FSharp.Core.Unittests/LibraryTestFx.fs @@ -126,12 +126,7 @@ module SurfaceArea = // verify public surface area matches expected let verify expected platform fileName = - let workDir = - #if OPEN_BUILD - TestContext.CurrentContext.WorkDirectory - #else - "" - #endif + let workDir = TestContext.CurrentContext.WorkDirectory let logFile = sprintf "%s\\CoreUnit_%s_Xml.xml" workDir platform let normalize (s:string) = Regex.Replace(s, "(\\r\\n|\\n)+", "\r\n").Trim([|'\r';'\n'|]) @@ -139,4 +134,4 @@ module SurfaceArea = let actual = actualNotNormalized |> normalize let expected = expected |> normalize - Assert.AreEqual(expected, actual, sprintf "\r\nAssembly: %A\r\n\r\n%s\r\n\r\n Expected and actual surface area don't match. To see the delta, run\r\nwindiff %s %s" asm actual fileName logFile) + Assert.AreEqual(expected, actual, sprintf "\r\nAssembly: %A\r\n--------------------- ACTUAL -------------------\r\n%s\r\n--------------------EXPECTED--------------------\r\n%s\r\n-----------------\r\n Expected and actual surface area don't match. To see the delta, run\r\nwindiff %s %s" asm actual expected fileName logFile) diff --git a/src/fsharp/FSharp.Core.Unittests/StructTuples.fs b/src/fsharp/FSharp.Core.Unittests/StructTuples.fs new file mode 100644 index 00000000000..d65b4800f1c --- /dev/null +++ b/src/fsharp/FSharp.Core.Unittests/StructTuples.fs @@ -0,0 +1,141 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +// Various tests for Microsoft.FSharp.Core type forwarding + +namespace FSharp.Core.Unittests.FSharpStructTuples + +open System +open FSharp.Core.Unittests.LibraryTestFx +open NUnit.Framework +open TupleSample + +[] +type StructTuplesCSharpInterop() = + + [] + member this.ValueTupleDirect () = + + // Basic Tuple Two Values + let struct (one,two) = System.ValueTuple.Create(1,2) + Assert.IsTrue( ((one=1) && (two=2)) ) + + // Basic Tuple Three Values + let struct (one,two,three) = System.ValueTuple.Create(1, 2, 3) + Assert.IsTrue( (one=1) && (two=2) && (three=3) ) + + // Basic Tuple Four Values + let struct (one,two,three,four) = System.ValueTuple.Create(1, 2, 3, 4) + Assert.IsTrue( (one=1) && (two=2) && (three=3) && (four=4) ) + + // Basic Tuple Five Values + let struct (one,two,three,four,five) = System.ValueTuple.Create(1, 2, 3, 4, 5) + Assert.IsTrue( (one=1) && (two=2) && (three=3) && (four=4) && (five=5)) + + // Basic Tuple six Values + let struct (one,two,three,four,five,six) = System.ValueTuple.Create(1, 2, 3, 4, 5, 6) + Assert.IsTrue( (one=1) && (two=2) && (three=3) && (four=4) && (five=5) && (six=6) ) + + // Basic Tuple seven Values + let struct (one,two,three,four,five,six,seven) = System.ValueTuple.Create(1, 2, 3, 4, 5, 6, 7) + Assert.IsTrue( (one=1) && (two=2) && (three=3) && (four=4) && (five=5) && (six=6) && (seven=7) ) + + // Basic Tuple eight Values + let struct (one,two,three,four,five,six,seven,eight) = System.ValueTuple.Create(1, 2, 3, 4, 5, 6, 7, 8) + Assert.IsTrue( (one=1) && (two=2) && (three=3) && (four=4) && (five=5) && (six=6) && (seven=7) && (eight=8)) + () + + [] + member this.CSharpInteropTupleReturns () = + + // Basic Tuple Two Values + let struct (one,two) = TupleReturns.GetTuple(1, 2) + Assert.IsTrue( ((one=1) && (two=2)) ) + + // Basic Tuple Three Values + let struct (one,two,three) = TupleReturns.GetTuple(1, 2, 3) + Assert.IsTrue( (one=1) && (two=2) && (three=3) ) + + // Basic Tuple Four Values + let struct (one,two,three,four) = TupleReturns.GetTuple(1, 2, 3, 4) + Assert.IsTrue( (one=1) && (two=2) && (three=3) && (four=4) ) + + // Basic Tuple Five Values + let struct (one,two,three,four,five) = TupleReturns.GetTuple(1, 2, 3, 4, 5) + Assert.IsTrue( (one=1) && (two=2) && (three=3) && (four=4) && (five = 5) ) + + // Basic Tuple six Values + let struct (one,two,three,four,five,six) = TupleReturns.GetTuple(1, 2, 3, 4, 5, 6) + Assert.IsTrue( (one=1) && (two=2) && (three=3) && (four=4) && (five = 5) && (six=6) ) + + // Basic Tuple seven Values + let struct (one,two,three,four,five,six,seven) = TupleReturns.GetTuple(1, 2, 3, 4, 5, 6, 7) + Assert.IsTrue( (one=1) && (two=2) && (three=3) && (four=4) && (five = 5) && (six=6) && (seven=7) ) + + // Basic Tuple eight Values + let struct (one,two,three,four,five,six,seven,eight) = TupleReturns.GetTuple(1, 2, 3, 4, 5, 6, 7, 8) + Assert.IsTrue( (one=1) && (two=2) && (three=3) && (four=4) && (five = 5) && (six=6) && (seven=7) && (eight=8) ) + + // Basic Tuple nine Values + let struct (one,two,three,four,five,six,seven,eight,nine) = TupleReturns.GetTuple(1, 2, 3, 4, 5, 6, 7, 8, 9) + Assert.IsTrue( (one=1) && (two=2) && (three=3) && (four=4) && (five = 5) && (six=6) && (seven=7) && (eight=8) && (nine=9)) + + // Basic Tuple ten Values + let struct (one,two,three,four,five,six,seven,eight,nine,ten) = TupleReturns.GetTuple(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) + Assert.IsTrue( (one=1) && (two=2) && (three=3) && (four=4) && (five = 5) && (six=6) && (seven=7) && (eight=8) && (nine=9) && (ten=10) ) + + // Basic Tuple fifteen Values + 7T + 7T + 1T + let struct (one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve,thirteen,fourteen,fifteen) = TupleReturns.GetTuple(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15) + Assert.IsTrue( (one=1) && (two=2) && (three=3) && (four=4) && (five = 5) && (six=6) && (seven=7) && (eight=8) && (nine=9) && (ten=10) && (eleven=11) && (twelve=12) && (thirteen=13) && (fourteen=14) && (fifteen=15) ) + + // Basic Tuple sixteen Values + 7T + 7T + 2T + let struct (one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve,thirteen,fourteen,fifteen,sixteen) = TupleReturns.GetTuple(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) + Assert.IsTrue( (one=1) && (two=2) && (three=3) && (four=4) && (five = 5) && (six=6) && (seven=7) && (eight=8) && (nine=9) && (ten=10) && (eleven=11) && (twelve=12) && (thirteen=13) && (fourteen=14) && (fifteen=15) && (sixteen=16) ) + () + + [] + member this.CSharpInteropTupleArguments () = + + // Basic Tuple Two Values + let struct (one,two) = TupleArguments.GetTuple( struct (1, 2) ) + Assert.IsTrue( (one=1) && (two=2) ) + + // Basic Tuple Three Values + let struct (one,two,three) = TupleArguments.GetTuple( struct (1, 2, 3) ) + Assert.IsTrue( (one=1) && (two=2) && (three=3) ) + + // Basic Tuple Four Values + let struct (one,two,three,four) = TupleArguments.GetTuple( struct (1, 2, 3, 4) ) + Assert.IsTrue( (one=1) && (two=2) && (three=3) && (four=4) ) + + // Basic Tuple Five Values + let struct (one,two,three,four,five) = TupleArguments.GetTuple(struct (1, 2, 3, 4, 5) ) + Assert.IsTrue( (one=1) && (two=2) && (three=3) && (four=4) && (five = 5) ) + + // Basic Tuple six Values + let struct (one,two,three,four,five,six) = TupleArguments.GetTuple( struct (1, 2, 3, 4, 5, 6) ) + Assert.IsTrue( (one=1) && (two=2) && (three=3) && (four=4) && (five = 5) && (six=6) ) + + // Basic Tuple seven Values + let struct (one,two,three,four,five,six,seven) = TupleArguments.GetTuple( struct (1, 2, 3, 4, 5, 6, 7) ) + Assert.IsTrue( (one=1) && (two=2) && (three=3) && (four=4) && (five = 5) && (six=6) && (seven=7) ) + + // Basic Tuple eight Values + let struct (one,two,three,four,five,six,seven,eight) = TupleArguments.GetTuple( struct (1, 2, 3, 4, 5, 6, 7, 8) ) + Assert.IsTrue( (one=1) && (two=2) && (three=3) && (four=4) && (five = 5) && (six=6) && (seven=7) && (eight=8) ) + + // Basic Tuple nine Values + let struct (one,two,three,four,five,six,seven,eight,nine) = TupleArguments.GetTuple( struct (1, 2, 3, 4, 5, 6, 7, 8, 9) ) + Assert.IsTrue( (one=1) && (two=2) && (three=3) && (four=4) && (five = 5) && (six=6) && (seven=7) && (eight=8) && (nine=9)) + + // Basic Tuple ten Values + let struct (one,two,three,four,five,six,seven,eight,nine,ten) = TupleArguments.GetTuple( struct (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) ) + Assert.IsTrue( (one=1) && (two=2) && (three=3) && (four=4) && (five = 5) && (six=6) && (seven=7) && (eight=8) && (nine=9) && (ten=10) ) + + // Basic Tuple fifteen Values + 7T + 7T + 1T + let struct (one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve,thirteen,fourteen,fifteen) = TupleArguments.GetTuple( struct (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15) ) + Assert.IsTrue( (one=1) && (two=2) && (three=3) && (four=4) && (five = 5) && (six=6) && (seven=7) && (eight=8) && (nine=9) && (ten=10) && (eleven=11) && (twelve=12) && (thirteen=13) && (fourteen=14) && (fifteen=15) ) + + // Basic Tuple sixteen Values + 7T + 7T + 2T + let struct (one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve,thirteen,fourteen,fifteen,sixteen) = TupleArguments.GetTuple( struct (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) ) + Assert.IsTrue( (one=1) && (two=2) && (three=3) && (four=4) && (five = 5) && (six=6) && (seven=7) && (eight=8) && (nine=9) && (ten=10) && (eleven=11) && (twelve=12) && (thirteen=13) && (fourteen=14) && (fifteen=15) && (sixteen=16) ) + () diff --git a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.Silverlight.2.0.fs b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.Silverlight.2.0.fs deleted file mode 100644 index 3d933f40517..00000000000 --- a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.Silverlight.2.0.fs +++ /dev/null @@ -1,2914 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -namespace FSharp.Core.Unittests.SurfaceArea -open System.IO -open NUnit.Framework - -(* This is unused yet, as I could not get it working (always a problem with System.dll) - - Will need to add to .proj file: - - - $(_NTTREE)\SuiteBin\FSharp - - - - - - - - -*) - -// We don't have auotmated unit tests for Silverlight, so do a reflection-only version of silverlight checking as part of -// the 4.0 tests. -[] -type SilverlightSurfaceAreaTest() = - [] - member this.VerifyArea() = - let asm = typeof.Assembly - - let types = asm.GetExportedTypes() - - let actual = new System.Text.StringBuilder() - actual.Append("\r\n") |> ignore - - let values = - types - |> Array.collect (fun t -> t.GetMembers()) - |> Array.map (fun v -> sprintf "%s: %s" (v.ReflectedType.ToString()) (v.ToString())) - |> Array.sort - |> Array.iter (fun s -> actual.Append(s) |> ignore - actual.Append("\r\n") |> ignore) - - let expected = @" -Microsoft.FSharp.Collections.Array2DModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.Array2DModule: Int32 Base1[T](T[,]) -Microsoft.FSharp.Collections.Array2DModule: Int32 Base2[T](T[,]) -Microsoft.FSharp.Collections.Array2DModule: Int32 GetHashCode() -Microsoft.FSharp.Collections.Array2DModule: Int32 Length1[T](T[,]) -Microsoft.FSharp.Collections.Array2DModule: Int32 Length2[T](T[,]) -Microsoft.FSharp.Collections.Array2DModule: System.String ToString() -Microsoft.FSharp.Collections.Array2DModule: System.Type GetType() -Microsoft.FSharp.Collections.Array2DModule: T Get[T](T[,], Int32, Int32) -Microsoft.FSharp.Collections.Array2DModule: TResult[,] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]]], T[,]) -Microsoft.FSharp.Collections.Array2DModule: TResult[,] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[,]) -Microsoft.FSharp.Collections.Array2DModule: T[,] Copy[T](T[,]) -Microsoft.FSharp.Collections.Array2DModule: T[,] Create[T](Int32, Int32, T) -Microsoft.FSharp.Collections.Array2DModule: T[,] Initialize[T](Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]) -Microsoft.FSharp.Collections.Array2DModule: T[,] Rebase[T](T[,]) -Microsoft.FSharp.Collections.Array2DModule: T[,] ZeroCreate[T](Int32, Int32) -Microsoft.FSharp.Collections.Array2DModule: Void CopyTo[T](T[,], Int32, Int32, T[,], Int32, Int32, Int32, Int32) -Microsoft.FSharp.Collections.Array2DModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]]], T[,]) -Microsoft.FSharp.Collections.Array2DModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[,]) -Microsoft.FSharp.Collections.Array2DModule: Void Set[T](T[,], Int32, Int32, T) -Microsoft.FSharp.Collections.Array3DModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.Array3DModule: Int32 GetHashCode() -Microsoft.FSharp.Collections.Array3DModule: Int32 Length1[T](T[,,]) -Microsoft.FSharp.Collections.Array3DModule: Int32 Length2[T](T[,,]) -Microsoft.FSharp.Collections.Array3DModule: Int32 Length3[T](T[,,]) -Microsoft.FSharp.Collections.Array3DModule: System.String ToString() -Microsoft.FSharp.Collections.Array3DModule: System.Type GetType() -Microsoft.FSharp.Collections.Array3DModule: T Get[T](T[,,], Int32, Int32, Int32) -Microsoft.FSharp.Collections.Array3DModule: TResult[,,] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]]]], T[,,]) -Microsoft.FSharp.Collections.Array3DModule: TResult[,,] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[,,]) -Microsoft.FSharp.Collections.Array3DModule: T[,,] Create[T](Int32, Int32, Int32, T) -Microsoft.FSharp.Collections.Array3DModule: T[,,] Initialize[T](Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]]) -Microsoft.FSharp.Collections.Array3DModule: T[,,] ZeroCreate[T](Int32, Int32, Int32) -Microsoft.FSharp.Collections.Array3DModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]]]], T[,,]) -Microsoft.FSharp.Collections.Array3DModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[,,]) -Microsoft.FSharp.Collections.Array3DModule: Void Set[T](T[,,], Int32, Int32, Int32, T) -Microsoft.FSharp.Collections.Array4DModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.Array4DModule: Int32 GetHashCode() -Microsoft.FSharp.Collections.Array4DModule: Int32 Length1[T](T[,,,]) -Microsoft.FSharp.Collections.Array4DModule: Int32 Length2[T](T[,,,]) -Microsoft.FSharp.Collections.Array4DModule: Int32 Length3[T](T[,,,]) -Microsoft.FSharp.Collections.Array4DModule: Int32 Length4[T](T[,,,]) -Microsoft.FSharp.Collections.Array4DModule: System.String ToString() -Microsoft.FSharp.Collections.Array4DModule: System.Type GetType() -Microsoft.FSharp.Collections.Array4DModule: T Get[T](T[,,,], Int32, Int32, Int32, Int32) -Microsoft.FSharp.Collections.Array4DModule: T[,,,] Create[T](Int32, Int32, Int32, Int32, T) -Microsoft.FSharp.Collections.Array4DModule: T[,,,] Initialize[T](Int32, Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]]]) -Microsoft.FSharp.Collections.Array4DModule: T[,,,] ZeroCreate[T](Int32, Int32, Int32, Int32) -Microsoft.FSharp.Collections.Array4DModule: Void Set[T](T[,,,], Int32, Int32, Int32, Int32, T) -Microsoft.FSharp.Collections.ArrayModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.ArrayModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) -Microsoft.FSharp.Collections.ArrayModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) -Microsoft.FSharp.Collections.ArrayModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule: Boolean IsEmpty[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule: Int32 GetHashCode() -Microsoft.FSharp.Collections.ArrayModule: Int32 Length[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) -Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: System.String ToString() -Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T1,T2][] Zip[T1,T2](T1[], T2[]) -Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T1[],T2[]] Unzip[T1,T2](System.Tuple`2[T1,T2][]) -Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1,T2,T3][] Zip3[T1,T2,T3](T1[], T2[], T3[]) -Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1[],T2[],T3[]] Unzip3[T1,T2,T3](System.Tuple`3[T1,T2,T3][]) -Microsoft.FSharp.Collections.ArrayModule: System.Type GetType() -Microsoft.FSharp.Collections.ArrayModule: T Average[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule: T Get[T](T[], Int32) -Microsoft.FSharp.Collections.ArrayModule: T MaxBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) -Microsoft.FSharp.Collections.ArrayModule: T Max[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) -Microsoft.FSharp.Collections.ArrayModule: T Min[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: T ReduceBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T[]) -Microsoft.FSharp.Collections.ArrayModule: T Reduce[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T[]) -Microsoft.FSharp.Collections.ArrayModule: T Sum[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: TResult AverageBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) -Microsoft.FSharp.Collections.ArrayModule: TResult Pick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) -Microsoft.FSharp.Collections.ArrayModule: TResult SumBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) -Microsoft.FSharp.Collections.ArrayModule: TResult[] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) -Microsoft.FSharp.Collections.ArrayModule: TResult[] Collect[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult[]], T[]) -Microsoft.FSharp.Collections.ArrayModule: TResult[] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], T1[], T2[]) -Microsoft.FSharp.Collections.ArrayModule: TResult[] MapIndexed2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]], T1[], T2[]) -Microsoft.FSharp.Collections.ArrayModule: TResult[] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], T[]) -Microsoft.FSharp.Collections.ArrayModule: TResult[] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) -Microsoft.FSharp.Collections.ArrayModule: TState Fold2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TState]]], TState, T1[], T2[]) -Microsoft.FSharp.Collections.ArrayModule: TState FoldBack2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]]], T1[], T2[], TState) -Microsoft.FSharp.Collections.ArrayModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], T[], TState) -Microsoft.FSharp.Collections.ArrayModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, T[]) -Microsoft.FSharp.Collections.ArrayModule: TState[] ScanBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], T[], TState) -Microsoft.FSharp.Collections.ArrayModule: TState[] Scan[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, T[]) -Microsoft.FSharp.Collections.ArrayModule: T[] Append[T](T[], T[]) -Microsoft.FSharp.Collections.ArrayModule: T[] Concat[T](System.Collections.Generic.IEnumerable`1[T[]]) -Microsoft.FSharp.Collections.ArrayModule: T[] Copy[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: T[] Create[T](Int32, T) -Microsoft.FSharp.Collections.ArrayModule: T[] Empty[T]() -Microsoft.FSharp.Collections.ArrayModule: T[] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule: T[] GetSubArray[T](T[], Int32, Int32) -Microsoft.FSharp.Collections.ArrayModule: T[] Initialize[T](Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) -Microsoft.FSharp.Collections.ArrayModule: T[] OfList[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ArrayModule: T[] OfSeq[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.ArrayModule: T[] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], T[]) -Microsoft.FSharp.Collections.ArrayModule: T[] Reverse[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: T[] SortBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) -Microsoft.FSharp.Collections.ArrayModule: T[] SortWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[]) -Microsoft.FSharp.Collections.ArrayModule: T[] Sort[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: T[] ZeroCreate[T](Int32) -Microsoft.FSharp.Collections.ArrayModule: Void CopyTo[T](T[], Int32, T[], Int32, Int32) -Microsoft.FSharp.Collections.ArrayModule: Void Fill[T](T[], Int32, Int32, T) -Microsoft.FSharp.Collections.ArrayModule: Void Iterate2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]], T1[], T2[]) -Microsoft.FSharp.Collections.ArrayModule: Void IterateIndexed2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]]], T1[], T2[]) -Microsoft.FSharp.Collections.ArrayModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], T[]) -Microsoft.FSharp.Collections.ArrayModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[]) -Microsoft.FSharp.Collections.ArrayModule: Void Set[T](T[], Int32, T) -Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) -Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[]) -Microsoft.FSharp.Collections.ArrayModule: Void SortInPlace[T](T[]) -Microsoft.FSharp.Collections.ComparisonIdentity: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.ComparisonIdentity: Int32 GetHashCode() -Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] FromFunction[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]]) -Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] Structural[T]() -Microsoft.FSharp.Collections.ComparisonIdentity: System.String ToString() -Microsoft.FSharp.Collections.ComparisonIdentity: System.Type GetType() -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 Cons -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 Empty -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 GetHashCode() -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: System.String ToString() -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: System.Type GetType() -Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean IsCons -Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean IsEmpty -Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean get_IsCons() -Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean get_IsEmpty() -Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 CompareTo(Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 Length -Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 Tag -Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 get_Length() -Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 get_Tag() -Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1+Tags[T] -Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] Cons(T, Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] Empty -Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] Tail -Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] TailOrNull -Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_Empty() -Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_Tail() -Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_TailOrNull() -Microsoft.FSharp.Collections.FSharpList`1[T]: System.String ToString() -Microsoft.FSharp.Collections.FSharpList`1[T]: System.Type GetType() -Microsoft.FSharp.Collections.FSharpList`1[T]: T Head -Microsoft.FSharp.Collections.FSharpList`1[T]: T HeadOrDefault -Microsoft.FSharp.Collections.FSharpList`1[T]: T Item [Int32] -Microsoft.FSharp.Collections.FSharpList`1[T]: T get_Head() -Microsoft.FSharp.Collections.FSharpList`1[T]: T get_HeadOrDefault() -Microsoft.FSharp.Collections.FSharpList`1[T]: T get_Item(Int32) -Microsoft.FSharp.Collections.FSharpList`1[T]: Void .ctor(T, Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Boolean ContainsKey(TKey) -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Boolean IsEmpty -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Boolean get_IsEmpty() -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Int32 Count -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Int32 GetHashCode() -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Int32 get_Count() -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue] Add(TKey, TValue) -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue] Remove(TKey) -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Core.FSharpOption`1[TValue] TryFind(TKey) -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: System.String ToString() -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: System.Type GetType() -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: TValue Item [TKey] -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: TValue get_Item(TKey) -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Void .ctor(System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) -Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean Contains(T) -Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean IsEmpty -Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean IsProperSubsetOf(Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean IsProperSupersetOf(Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean IsSubsetOf(Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean IsSupersetOf(Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean get_IsEmpty() -Microsoft.FSharp.Collections.FSharpSet`1[T]: Int32 Count -Microsoft.FSharp.Collections.FSharpSet`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Collections.FSharpSet`1[T]: Int32 get_Count() -Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] Add(T) -Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] Remove(T) -Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] op_Addition(Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] op_Subtraction(Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.FSharpSet`1[T]: System.String ToString() -Microsoft.FSharp.Collections.FSharpSet`1[T]: System.Type GetType() -Microsoft.FSharp.Collections.FSharpSet`1[T]: T MaximumElement -Microsoft.FSharp.Collections.FSharpSet`1[T]: T MinimumElement -Microsoft.FSharp.Collections.FSharpSet`1[T]: T get_MaximumElement() -Microsoft.FSharp.Collections.FSharpSet`1[T]: T get_MinimumElement() -Microsoft.FSharp.Collections.FSharpSet`1[T]: Void .ctor(System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.HashIdentity: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.HashIdentity: Int32 GetHashCode() -Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] FromFunctions[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]]) -Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] LimitedStructural[T](Int32) -Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Reference[T]() -Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Structural[T]() -Microsoft.FSharp.Collections.HashIdentity: System.String ToString() -Microsoft.FSharp.Collections.HashIdentity: System.Type GetType() -Microsoft.FSharp.Collections.ListModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.ListModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) -Microsoft.FSharp.Collections.ListModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) -Microsoft.FSharp.Collections.ListModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Boolean IsEmpty[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Int32 GetHashCode() -Microsoft.FSharp.Collections.ListModule: Int32 Length[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T1,T2]] Zip[T1,T2](Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[T1,T2,T3]] Zip3[T1,T2,T3](Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2], Microsoft.FSharp.Collections.FSharpList`1[T3]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Collect[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Collections.FSharpList`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Map3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2], Microsoft.FSharp.Collections.FSharpList`1[T3]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] MapIndexed2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TState] ScanBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Collections.FSharpList`1[T], TState) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TState] Scan[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Append[T](Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Concat[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpList`1[T]]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Empty[T]() -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Initialize[T](Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] OfArray[T](T[]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] OfSeq[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Replicate[T](Int32, T) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Reverse[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Sort[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Tail[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: System.String ToString() -Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2]] Unzip[T1,T2](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T1,T2]]) -Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: System.Tuple`3[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2],Microsoft.FSharp.Collections.FSharpList`1[T3]] Unzip3[T1,T2,T3](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[T1,T2,T3]]) -Microsoft.FSharp.Collections.ListModule: System.Type GetType() -Microsoft.FSharp.Collections.ListModule: T Average[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: T Get[T](Microsoft.FSharp.Collections.FSharpList`1[T], Int32) -Microsoft.FSharp.Collections.ListModule: T Head[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: T MaxBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: T Max[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: T Min[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: T ReduceBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: T Reduce[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: T Sum[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: TResult AverageBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: TResult Pick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: TResult SumBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: TState Fold2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TState]]], TState, Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) -Microsoft.FSharp.Collections.ListModule: TState FoldBack2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2], TState) -Microsoft.FSharp.Collections.ListModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Collections.FSharpList`1[T], TState) -Microsoft.FSharp.Collections.ListModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: T[] ToArray[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Void Iterate2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) -Microsoft.FSharp.Collections.ListModule: Void IterateIndexed2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) -Microsoft.FSharp.Collections.ListModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.MapModule: Boolean ContainsKey[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.MapModule: Boolean Exists[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Boolean ForAll[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Boolean IsEmpty[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Int32 GetHashCode() -Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,T]] ToList[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TResult] Map[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Add[TKey,T](TKey, T, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Empty[TKey,T]() -Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Filter[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] OfArray[TKey,T](System.Tuple`2[TKey,T][]) -Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] OfList[TKey,T](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,T]]) -Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] OfSeq[TKey,T](System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,T]]) -Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Remove[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[TKey] TryFindKey[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,T]] ToSeq[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: System.String ToString() -Microsoft.FSharp.Collections.MapModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpMap`2[TKey,T],Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]] Partition[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: System.Tuple`2[TKey,T][] ToArray[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: System.Type GetType() -Microsoft.FSharp.Collections.MapModule: T Find[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: TKey FindKey[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: TResult Pick[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: TState FoldBack[TKey,T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T], TState) -Microsoft.FSharp.Collections.MapModule: TState Fold[TKey,T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]]], TState, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Void Iterate[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.SeqModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.SeqModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) -Microsoft.FSharp.Collections.SeqModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) -Microsoft.FSharp.Collections.SeqModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Boolean IsEmpty[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Int32 GetHashCode() -Microsoft.FSharp.Collections.SeqModule: Int32 Length[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[T,T]] Pairwise[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[T1,T2]] Zip[T1,T2](System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,System.Collections.Generic.IEnumerable`1[T]]] GroupBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,System.Int32]] CountBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`3[T1,T2,T3]] Zip3[T1,T2,T3](System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2], System.Collections.Generic.IEnumerable`1[T3]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Collect[T,TCollection,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TCollection], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TState] Scan[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T[]] Windowed[T](Int32, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Append[T](System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Cache[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Cast[T](System.Collections.IEnumerable) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Concat[TCollection,T](System.Collections.Generic.IEnumerable`1[TCollection]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Delay[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Collections.Generic.IEnumerable`1[T]]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] DistinctBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Distinct[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Empty[T]() -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] InitializeInfinite[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Initialize[T](Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] OfArray[T](T[]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] OfList[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] ReadOnly[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Singleton[T](T) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SkipWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Skip[T](Int32, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SortBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Sort[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] TakeWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Take[T](Int32, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Truncate[T](Int32, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Unfold[TState,T](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) -Microsoft.FSharp.Collections.SeqModule: System.String ToString() -Microsoft.FSharp.Collections.SeqModule: System.Type GetType() -Microsoft.FSharp.Collections.SeqModule: T Average[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: T Get[T](Int32, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: T Head[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: T MaxBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: T Max[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: T Min[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: T Reduce[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: T Sum[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: TResult AverageBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: TResult Pick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: TResult SumBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: T[] ToArray[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Void Iterate2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) -Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SetModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.SetModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Boolean IsEmpty[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Boolean IsProperSubset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Boolean IsProperSuperset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Boolean IsSubset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Boolean IsSuperset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Int32 Count[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Int32 GetHashCode() -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Add[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Difference[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Empty[T]() -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] IntersectMany[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpSet`1[T]]) -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Intersect[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] OfArray[T](T[]) -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] OfList[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] OfSeq[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Remove[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Singleton[T](T) -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] UnionMany[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpSet`1[T]]) -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Union[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: System.String ToString() -Microsoft.FSharp.Collections.SetModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpSet`1[T],Microsoft.FSharp.Collections.FSharpSet`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: System.Type GetType() -Microsoft.FSharp.Collections.SetModule: T MaxElement[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: T MinElement[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Collections.FSharpSet`1[T], TState) -Microsoft.FSharp.Collections.SetModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: T[] ToArray[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Control.CommonExtensions: Boolean Equals(System.Object) -Microsoft.FSharp.Control.CommonExtensions: Int32 GetHashCode() -Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AsyncWrite(System.IO.Stream, Byte[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Byte[]] AsyncReadBytes(System.IO.Stream, Int32) -Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Int32] AsyncRead(System.IO.Stream, Byte[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.CommonExtensions: System.IDisposable SubscribeToObservable[T](System.IObservable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.CommonExtensions: System.String ToString() -Microsoft.FSharp.Control.CommonExtensions: System.Type GetType() -Microsoft.FSharp.Control.CommonExtensions: Void AddToObservable[T](System.IObservable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.EventModule: Boolean Equals(System.Object) -Microsoft.FSharp.Control.EventModule: Int32 GetHashCode() -Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[T,T]],System.Tuple`2[T,T]] Pairwise[TDel,T](Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Choose[T,TResult,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Map[T,TResult,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Scan[TResult,T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], TResult, Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Filter[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Merge[TDel1,T,TDel2](Microsoft.FSharp.Control.IEvent`2[TDel1,T], Microsoft.FSharp.Control.IEvent`2[TDel2,T]) -Microsoft.FSharp.Control.EventModule: System.String ToString() -Microsoft.FSharp.Control.EventModule: System.Tuple`2[Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult1],TResult1],Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult2],TResult2]] Split[T,TResult1,TResult2,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpChoice`2[TResult1,TResult2]], Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.EventModule: System.Tuple`2[Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T],Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T]] Partition[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.EventModule: System.Type GetType() -Microsoft.FSharp.Control.EventModule: Void Add[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.FSharpAsync: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsync: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Control.FSharpAsync`1[T]] StartChild[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpChoice`2[T,System.Exception]] Catch[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]] Choice[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]]]) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Ignore[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Sleep(Int32) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] SwitchToContext(System.Threading.SynchronizationContext) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] SwitchToNewThread() -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] SwitchToThreadPool() -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.Boolean] AwaitIAsyncResult(System.IAsyncResult, Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.Boolean] AwaitWaitHandle(System.Threading.WaitHandle, Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.IDisposable] OnCancel(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.Threading.CancellationToken] CancellationToken -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.Threading.CancellationToken] get_CancellationToken() -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T[]] Parallel[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Control.FSharpAsync`1[T]]) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] AwaitEvent[TDel,T](Microsoft.FSharp.Control.IEvent`2[TDel,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[TArg1,TArg2,TArg3,T](TArg1, TArg2, TArg3, Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`5[TArg1,TArg2,TArg3,System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[TArg1,TArg2,T](TArg1, TArg2, Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`4[TArg1,TArg2,System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[TArg1,T](TArg1, Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[TArg1,System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromContinuations[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.OperationCanceledException,Microsoft.FSharp.Core.Unit]],Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] TryCancelled[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.OperationCanceledException,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.FSharpAsync: System.String ToString() -Microsoft.FSharp.Control.FSharpAsync: System.Threading.CancellationToken DefaultCancellationToken -Microsoft.FSharp.Control.FSharpAsync: System.Threading.CancellationToken get_DefaultCancellationToken() -Microsoft.FSharp.Control.FSharpAsync: System.Tuple`3[Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[TArg,System.AsyncCallback,System.Object],System.IAsyncResult],Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T],Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,Microsoft.FSharp.Core.Unit]] AsBeginEnd[TArg,T](Microsoft.FSharp.Core.FSharpFunc`2[TArg,Microsoft.FSharp.Control.FSharpAsync`1[T]]) -Microsoft.FSharp.Control.FSharpAsync: System.Type GetType() -Microsoft.FSharp.Control.FSharpAsync: T RunSynchronously[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -Microsoft.FSharp.Control.FSharpAsync: Void CancelDefaultToken() -Microsoft.FSharp.Control.FSharpAsync: Void Start(Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -Microsoft.FSharp.Control.FSharpAsync: Void StartImmediate(Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -Microsoft.FSharp.Control.FSharpAsync: Void StartWithContinuations[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.OperationCanceledException,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] For[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] While(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Zero() -Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[TResult] Bind[T,TResult](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Control.FSharpAsync`1[TResult]]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[TResult] Using[T,TResult](T, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Control.FSharpAsync`1[TResult]]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] Combine[T](Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Control.FSharpAsync`1[T]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] Delay[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Control.FSharpAsync`1[T]]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] ReturnFrom[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] Return[T](T) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] TryFinally[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] TryWith[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Control.FSharpAsync`1[T]]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: System.String ToString() -Microsoft.FSharp.Control.FSharpAsyncBuilder: System.Type GetType() -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: System.String ToString() -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: System.Type GetType() -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Void Reply(TReply) -Microsoft.FSharp.Control.FSharpAsync`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsync`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpAsync`1[T]: System.String ToString() -Microsoft.FSharp.Control.FSharpAsync`1[T]: System.Type GetType() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate] Publish -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate] get_Publish() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: System.String ToString() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: System.Type GetType() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Void .ctor() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Void Trigger(System.Object[]) -Microsoft.FSharp.Control.FSharpEvent`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpEvent`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpEvent`1[T]: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Publish -Microsoft.FSharp.Control.FSharpEvent`1[T]: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] get_Publish() -Microsoft.FSharp.Control.FSharpEvent`1[T]: System.String ToString() -Microsoft.FSharp.Control.FSharpEvent`1[T]: System.Type GetType() -Microsoft.FSharp.Control.FSharpEvent`1[T]: Void .ctor() -Microsoft.FSharp.Control.FSharpEvent`1[T]: Void Trigger(T) -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] Publish -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] get_Publish() -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: System.String ToString() -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: System.Type GetType() -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Void .ctor() -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Void Trigger(System.Object, TArgs) -Microsoft.FSharp.Control.FSharpHandler`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpHandler`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Delegate[] GetInvocationList() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.IAsyncResult BeginInvoke(System.Object, T, System.AsyncCallback, System.Object) -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object DynamicInvoke(System.Object[]) -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object Target -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object get_Target() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Reflection.MethodInfo Method -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Reflection.MethodInfo get_Method() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.String ToString() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Type GetType() -Microsoft.FSharp.Control.FSharpHandler`1[T]: Void .ctor(System.Object, IntPtr) -Microsoft.FSharp.Control.FSharpHandler`1[T]: Void EndInvoke(System.IAsyncResult) -Microsoft.FSharp.Control.FSharpHandler`1[T]: Void Invoke(System.Object, T) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 CurrentQueueLength -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 DefaultTimeout -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 get_CurrentQueueLength() -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 get_DefaultTimeout() -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[TMsg]] TryReceive(Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[TReply]] PostAndTryAsyncReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]] TryScan[T](Microsoft.FSharp.Core.FSharpFunc`2[TMsg,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Control.FSharpAsync`1[T]]], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[TMsg] Receive(Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[TReply] PostAndAsyncReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[T] Scan[T](Microsoft.FSharp.Core.FSharpFunc`2[TMsg,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Control.FSharpAsync`1[T]]], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpHandler`1[System.Exception] Error -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg] Start(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Core.FSharpOption`1[TReply] TryPostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: System.String ToString() -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: System.Type GetType() -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: TReply PostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void Post(TMsg) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void Start() -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void add_Error(Microsoft.FSharp.Control.FSharpHandler`1[System.Exception]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void remove_Error(Microsoft.FSharp.Control.FSharpHandler`1[System.Exception]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void set_DefaultTimeout(Int32) -Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void AddHandler(TDelegate) -Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void RemoveHandler(TDelegate) -Microsoft.FSharp.Control.LazyExtensions: Boolean Equals(System.Object) -Microsoft.FSharp.Control.LazyExtensions: Int32 GetHashCode() -Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] CreateFromValue[T](T) -Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] Create[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T]) -Microsoft.FSharp.Control.LazyExtensions: System.String ToString() -Microsoft.FSharp.Control.LazyExtensions: System.Type GetType() -Microsoft.FSharp.Control.LazyExtensions: T Force[T](System.Lazy`1[T]) -Microsoft.FSharp.Control.ObservableModule: Boolean Equals(System.Object) -Microsoft.FSharp.Control.ObservableModule: Int32 GetHashCode() -Microsoft.FSharp.Control.ObservableModule: System.IDisposable Subscribe[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[System.Tuple`2[T,T]] Pairwise[T](System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Scan[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], TResult, System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[T] Merge[T](System.IObservable`1[T], System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.String ToString() -Microsoft.FSharp.Control.ObservableModule: System.Tuple`2[System.IObservable`1[TResult1],System.IObservable`1[TResult2]] Split[T,TResult1,TResult2](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpChoice`2[TResult1,TResult2]], System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.Tuple`2[System.IObservable`1[T],System.IObservable`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.Type GetType() -Microsoft.FSharp.Control.ObservableModule: Void Add[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) -Microsoft.FSharp.Control.OperationCanceledException: Boolean Equals(System.Object) -Microsoft.FSharp.Control.OperationCanceledException: Int32 GetHashCode() -Microsoft.FSharp.Control.OperationCanceledException: System.Collections.IDictionary Data -Microsoft.FSharp.Control.OperationCanceledException: System.Collections.IDictionary get_Data() -Microsoft.FSharp.Control.OperationCanceledException: System.Exception GetBaseException() -Microsoft.FSharp.Control.OperationCanceledException: System.Exception InnerException -Microsoft.FSharp.Control.OperationCanceledException: System.Exception get_InnerException() -Microsoft.FSharp.Control.OperationCanceledException: System.String Message -Microsoft.FSharp.Control.OperationCanceledException: System.String StackTrace -Microsoft.FSharp.Control.OperationCanceledException: System.String ToString() -Microsoft.FSharp.Control.OperationCanceledException: System.String get_Message() -Microsoft.FSharp.Control.OperationCanceledException: System.String get_StackTrace() -Microsoft.FSharp.Control.OperationCanceledException: System.Type GetType() -Microsoft.FSharp.Control.OperationCanceledException: System.Type GetType() -Microsoft.FSharp.Control.OperationCanceledException: Void .ctor(System.String) -Microsoft.FSharp.Control.WebExtensions: Boolean Equals(System.Object) -Microsoft.FSharp.Control.WebExtensions: Int32 GetHashCode() -Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Net.WebResponse] AsyncGetResponse(System.Net.WebRequest) -Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.String] AsyncDownloadString(System.Net.WebClient, System.Uri) -Microsoft.FSharp.Control.WebExtensions: System.String ToString() -Microsoft.FSharp.Control.WebExtensions: System.Type GetType() -Microsoft.FSharp.Core.AbstractClassAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AbstractClassAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.AbstractClassAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AbstractClassAttribute: System.String ToString() -Microsoft.FSharp.Core.AbstractClassAttribute: System.Type GetType() -Microsoft.FSharp.Core.AbstractClassAttribute: Void .ctor() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.String ToString() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Type GetType() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor() -Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.AutoOpenAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AutoOpenAttribute: System.String Path -Microsoft.FSharp.Core.AutoOpenAttribute: System.String ToString() -Microsoft.FSharp.Core.AutoOpenAttribute: System.String get_Path() -Microsoft.FSharp.Core.AutoOpenAttribute: System.Type GetType() -Microsoft.FSharp.Core.AutoOpenAttribute: Void .ctor() -Microsoft.FSharp.Core.AutoOpenAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Value -Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean get_Value() -Microsoft.FSharp.Core.AutoSerializableAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AutoSerializableAttribute: System.String ToString() -Microsoft.FSharp.Core.AutoSerializableAttribute: System.Type GetType() -Microsoft.FSharp.Core.AutoSerializableAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.CLIEventAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CLIEventAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CLIEventAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CLIEventAttribute: System.String ToString() -Microsoft.FSharp.Core.CLIEventAttribute: System.Type GetType() -Microsoft.FSharp.Core.CLIEventAttribute: Void .ctor() -Microsoft.FSharp.Core.ClassAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ClassAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ClassAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ClassAttribute: System.String ToString() -Microsoft.FSharp.Core.ClassAttribute: System.Type GetType() -Microsoft.FSharp.Core.ClassAttribute: Void .ctor() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.String ToString() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Type GetType() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Void .ctor() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Collections.Generic.IEnumerable`1[System.Int32] Counts -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Collections.Generic.IEnumerable`1[System.Int32] get_Counts() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Type GetType() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Void .ctor(Int32[]) -Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 SequenceNumber -Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 VariantNumber -Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 get_SequenceNumber() -Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 get_VariantNumber() -Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags SourceConstructFlags -Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags get_SourceConstructFlags() -Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type GetType() -Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags) -Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32) -Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32, Int32) -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Microsoft.FSharp.Core.CompilationRepresentationFlags Flags -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Microsoft.FSharp.Core.CompilationRepresentationFlags get_Flags() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Type GetType() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Void .ctor(Microsoft.FSharp.Core.CompilationRepresentationFlags) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 value__ -Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Event -Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Instance -Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags ModuleSuffix -Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags None -Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Static -Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags UseNullAsTrueValue -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString() -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.IFormatProvider) -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.String) -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.String, System.IFormatProvider) -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.Type GetType() -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.TypeCode GetTypeCode() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String SourceName -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String get_SourceName() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Type GetType() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CompiledNameAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompiledNameAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompiledNameAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompiledNameAttribute: System.String CompiledName -Microsoft.FSharp.Core.CompiledNameAttribute: System.String ToString() -Microsoft.FSharp.Core.CompiledNameAttribute: System.String get_CompiledName() -Microsoft.FSharp.Core.CompiledNameAttribute: System.Type GetType() -Microsoft.FSharp.Core.CompiledNameAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsError -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsHidden -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean get_IsError() -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean get_IsHidden() -Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 MessageNumber -Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 get_MessageNumber() -Microsoft.FSharp.Core.CompilerMessageAttribute: System.String Message -Microsoft.FSharp.Core.CompilerMessageAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilerMessageAttribute: System.String get_Message() -Microsoft.FSharp.Core.CompilerMessageAttribute: System.Type GetType() -Microsoft.FSharp.Core.CompilerMessageAttribute: Void .ctor(System.String, Int32) -Microsoft.FSharp.Core.CompilerMessageAttribute: Void set_IsError(Boolean) -Microsoft.FSharp.Core.CompilerMessageAttribute: Void set_IsHidden(Boolean) -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean CheckClose -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean get_CheckClose() -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Int32 GenerateNext(System.Collections.Generic.IEnumerable`1[T] ByRef) -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Collections.Generic.IEnumerator`1[T] GetFreshEnumerator() -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T LastGenerated -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T get_LastGenerated() -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Void Close() -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] CreateEvent[TDelegate,TArgs](Microsoft.FSharp.Core.FSharpFunc`2[TDelegate,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[TDelegate,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[System.Object,Microsoft.FSharp.Core.FSharpFunc`2[TArgs,Microsoft.FSharp.Core.Unit]],TDelegate]) -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[TResult] EnumerateFromFunctions[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[TResult] EnumerateUsing[T,TCollection,TResult](T, Microsoft.FSharp.Core.FSharpFunc`2[T,TCollection]) -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[T] EnumerateThenFinally[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[T] EnumerateWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Type GetType() -Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CustomComparisonAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CustomComparisonAttribute: System.String ToString() -Microsoft.FSharp.Core.CustomComparisonAttribute: System.Type GetType() -Microsoft.FSharp.Core.CustomComparisonAttribute: Void .ctor() -Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CustomEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CustomEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.CustomEqualityAttribute: System.Type GetType() -Microsoft.FSharp.Core.CustomEqualityAttribute: Void .ctor() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Value -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean get_Value() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.String ToString() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Type GetType() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Check -Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.DefaultValueAttribute: Boolean get_Check() -Microsoft.FSharp.Core.DefaultValueAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.DefaultValueAttribute: System.String ToString() -Microsoft.FSharp.Core.DefaultValueAttribute: System.Type GetType() -Microsoft.FSharp.Core.DefaultValueAttribute: Void .ctor() -Microsoft.FSharp.Core.DefaultValueAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.EntryPointAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.EntryPointAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.EntryPointAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.EntryPointAttribute: System.String ToString() -Microsoft.FSharp.Core.EntryPointAttribute: System.Type GetType() -Microsoft.FSharp.Core.EntryPointAttribute: Void .ctor() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.String ToString() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Type GetType() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Void .ctor() -Microsoft.FSharp.Core.ExperimentalAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ExperimentalAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ExperimentalAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ExperimentalAttribute: System.String Message -Microsoft.FSharp.Core.ExperimentalAttribute: System.String ToString() -Microsoft.FSharp.Core.ExperimentalAttribute: System.String get_Message() -Microsoft.FSharp.Core.ExperimentalAttribute: System.Type GetType() -Microsoft.FSharp.Core.ExperimentalAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.ExtraTopLevelOperators: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ExtraTopLevelOperators: Byte ToByte[T](T) -Microsoft.FSharp.Core.ExtraTopLevelOperators: Double ToDouble[T](T) -Microsoft.FSharp.Core.ExtraTopLevelOperators: Int32 GetHashCode() -Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Collections.FSharpSet`1[T] CreateSet[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder DefaultAsyncBuilder -Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder get_DefaultAsyncBuilder() -Microsoft.FSharp.Core.ExtraTopLevelOperators: SByte ToSByte[T](T) -Microsoft.FSharp.Core.ExtraTopLevelOperators: Single ToSingle[T](T) -Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Collections.Generic.IDictionary`2[TKey,TValue] CreateDictionary[TKey,TValue](System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: System.String ToString() -Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Type GetType() -Microsoft.FSharp.Core.ExtraTopLevelOperators: T LazyPattern[T](System.Lazy`1[T]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatLineToError[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatLineToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatLine[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatToError[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatToStringThenFail[T,TResult](Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,TResult]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatToString[T](Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,System.String]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormat[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: T SpliceExpression[T](Microsoft.FSharp.Quotations.FSharpExpr`1[T]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: T SpliceUntypedExpression[T](Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Core.ExtraTopLevelOperators: T[,] CreateArray2D[?,T](System.Collections.Generic.IEnumerable`1[?]) -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean IsChoice1Of2 -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean IsChoice2Of2 -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean get_IsChoice1Of2() -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean get_IsChoice2Of2() -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 Item -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 get_Item() -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean IsChoice1Of2 -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean IsChoice2Of2 -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean get_IsChoice1Of2() -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean get_IsChoice2Of2() -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 Item -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 get_Item() -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 Choice1Of2 -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 Choice2Of2 -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean IsChoice1Of2 -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean IsChoice2Of2 -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean get_IsChoice1Of2() -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean get_IsChoice2Of2() -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2] -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2] -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2] -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2[T1,T2] NewChoice1Of2(T1) -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2[T1,T2] NewChoice2Of2(T2) -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean IsChoice1Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean IsChoice2Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean IsChoice3Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean get_IsChoice1Of3() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean get_IsChoice2Of3() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean get_IsChoice3Of3() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: T1 Item -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: T1 get_Item() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean IsChoice1Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean IsChoice2Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean IsChoice3Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean get_IsChoice1Of3() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean get_IsChoice2Of3() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean get_IsChoice3Of3() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: T2 Item -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: T2 get_Item() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean IsChoice1Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean IsChoice2Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean IsChoice3Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean get_IsChoice1Of3() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean get_IsChoice2Of3() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean get_IsChoice3Of3() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: T3 Item -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: T3 get_Item() -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice1Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice2Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice3Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean IsChoice1Of3 -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean IsChoice2Of3 -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean IsChoice3Of3 -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean get_IsChoice1Of3() -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean get_IsChoice2Of3() -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean get_IsChoice3Of3() -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3] -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3] -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3] -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3] -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice1Of3(T1) -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice2Of3(T2) -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice3Of3(T3) -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean IsChoice1Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean IsChoice2Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean IsChoice3Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean IsChoice4Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean get_IsChoice1Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean get_IsChoice2Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean get_IsChoice3Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean get_IsChoice4Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: T1 Item -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: T1 get_Item() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean IsChoice1Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean IsChoice2Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean IsChoice3Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean IsChoice4Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean get_IsChoice1Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean get_IsChoice2Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean get_IsChoice3Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean get_IsChoice4Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: T2 Item -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: T2 get_Item() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean IsChoice1Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean IsChoice2Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean IsChoice3Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean IsChoice4Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean get_IsChoice1Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean get_IsChoice2Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean get_IsChoice3Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean get_IsChoice4Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: T3 Item -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: T3 get_Item() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean IsChoice1Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean IsChoice2Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean IsChoice3Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean IsChoice4Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean get_IsChoice1Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean get_IsChoice2Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean get_IsChoice3Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean get_IsChoice4Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: T4 Item -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: T4 get_Item() -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice1Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice2Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice3Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice4Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean IsChoice1Of4 -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean IsChoice2Of4 -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean IsChoice3Of4 -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean IsChoice4Of4 -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean get_IsChoice1Of4() -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean get_IsChoice2Of4() -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean get_IsChoice3Of4() -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean get_IsChoice4Of4() -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4] -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4] -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4] -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4] -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4] -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice1Of4(T1) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice2Of4(T2) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice3Of4(T3) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice4Of4(T4) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: T1 Item -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: T1 get_Item() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: T2 Item -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: T2 get_Item() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: T3 Item -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: T3 get_Item() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: T4 Item -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: T4 get_Item() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: T5 Item -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: T5 get_Item() -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice1Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice2Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice3Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice4Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice5Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5] -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5] -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5] -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5] -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5] -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5] -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice1Of5(T1) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice2Of5(T2) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice3Of5(T3) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice4Of5(T4) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice5Of5(T5) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: T1 Item -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: T1 get_Item() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: T2 Item -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: T2 get_Item() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: T3 Item -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: T3 get_Item() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: T4 Item -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: T4 get_Item() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: T5 Item -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: T5 get_Item() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: T6 Item -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: T6 get_Item() -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice1Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice2Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice3Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice4Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice5Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice6Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6] -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6] -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6] -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6] -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6] -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6] -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6] -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice1Of6(T1) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice2Of6(T2) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice3Of6(T3) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice4Of6(T4) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice5Of6(T5) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice6Of6(T6) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: T1 Item -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: T1 get_Item() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: T2 Item -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: T2 get_Item() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: T3 Item -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: T3 get_Item() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: T4 Item -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: T4 get_Item() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: T5 Item -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: T5 get_Item() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: T6 Item -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: T6 get_Item() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: T7 Item -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: T7 get_Item() -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice1Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice2Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice3Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice4Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice5Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice6Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice7Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7] -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7] -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7] -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7] -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7] -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7] -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7] -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7] -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice1Of7(T1) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice2Of7(T2) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice3Of7(T3) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice4Of7(T4) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice5Of7(T5) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice6Of7(T6) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice7Of7(T7) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T,TResult] FromConverter(System.Converter`2[T,TResult]) -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T,TResult] op_Implicit(System.Converter`2[T,TResult]) -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.Converter`2[T,TResult] ToConverter(Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.Converter`2[T,TResult] op_Implicit(Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.String ToString() -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.Type GetType() -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: TResult Invoke(T) -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: V InvokeFast[V](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,V]], T, TResult) -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: W InvokeFast[V,W](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,W]]], T, TResult, V) -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: X InvokeFast[V,W,X](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,X]]]], T, TResult, V, W) -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Y InvokeFast[V,W,X,Y](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,Microsoft.FSharp.Core.FSharpFunc`2[X,Y]]]]], T, TResult, V, W, X) -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Major -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Minor -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Release -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Major() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Minor() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Release() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.String ToString() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Type GetType() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Void .ctor(Int32, Int32, Int32) -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 None -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 Some -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: System.Type GetType() -Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean IsNone -Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean IsSome -Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean get_IsNone(Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean get_IsSome(Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 GetTag(Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1+Tags[T] -Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] None -Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] Some(T) -Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] get_None() -Microsoft.FSharp.Core.FSharpOption`1[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpOption`1[T]: System.Type GetType() -Microsoft.FSharp.Core.FSharpOption`1[T]: T Value -Microsoft.FSharp.Core.FSharpOption`1[T]: T get_Value() -Microsoft.FSharp.Core.FSharpOption`1[T]: Void .ctor(T) -Microsoft.FSharp.Core.FSharpRef`1[T]: Boolean Equals(Microsoft.FSharp.Core.FSharpRef`1[T]) -Microsoft.FSharp.Core.FSharpRef`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpRef`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpRef`1[T]) -Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpRef`1[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpRef`1[T]: System.Type GetType() -Microsoft.FSharp.Core.FSharpRef`1[T]: T Value -Microsoft.FSharp.Core.FSharpRef`1[T]: T contents -Microsoft.FSharp.Core.FSharpRef`1[T]: T contents@ -Microsoft.FSharp.Core.FSharpRef`1[T]: T get_Value() -Microsoft.FSharp.Core.FSharpRef`1[T]: T get_contents() -Microsoft.FSharp.Core.FSharpRef`1[T]: Void .ctor(T) -Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_Value(T) -Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_contents(T) -Microsoft.FSharp.Core.FSharpTypeFunc: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpTypeFunc: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpTypeFunc: System.Object Specialize[T]() -Microsoft.FSharp.Core.FSharpTypeFunc: System.String ToString() -Microsoft.FSharp.Core.FSharpTypeFunc: System.Type GetType() -Microsoft.FSharp.Core.FuncConvert: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FuncConvert: Int32 GetHashCode() -Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit] ToFSharpFunc[T](System.Action`1[T]) -Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T,TResult] ToFSharpFunc[T,TResult](System.Converter`2[T,TResult]) -Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]]] FuncFromTupled[T1,T2,T3,T4,T5,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`5[T1,T2,T3,T4,T5],TResult]) -Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]]] FuncFromTupled[T1,T2,T3,T4,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`4[T1,T2,T3,T4],TResult]) -Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]] FuncFromTupled[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[T1,T2,T3],TResult]) -Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]] FuncFromTupled[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[T1,T2],TResult]) -Microsoft.FSharp.Core.FuncConvert: System.String ToString() -Microsoft.FSharp.Core.FuncConvert: System.Type GetType() -Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.GeneralizableValueAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.String ToString() -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Type GetType() -Microsoft.FSharp.Core.GeneralizableValueAttribute: Void .ctor() -Microsoft.FSharp.Core.InterfaceAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.InterfaceAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.InterfaceAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.InterfaceAttribute: System.String ToString() -Microsoft.FSharp.Core.InterfaceAttribute: System.Type GetType() -Microsoft.FSharp.Core.InterfaceAttribute: Void .ctor() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: Boolean Equals(System.Object) -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: Int32 GetHashCode() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String AddressOpNotFirstClassString -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputArrayEmptyString -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputMustBeNonNegativeString -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputSequenceEmptyString -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String NoNegateMinValueString -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_AddressOpNotFirstClassString() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputArrayEmptyString() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputMustBeNonNegativeString() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputSequenceEmptyString() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_NoNegateMinValueString() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.Type GetType() -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean Equals(System.Object) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple2[T1,T2](System.Collections.IEqualityComparer, System.Tuple`2[T1,T2], System.Tuple`2[T1,T2]) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple3[T1,T2,T3](System.Collections.IEqualityComparer, System.Tuple`3[T1,T2,T3], System.Tuple`3[T1,T2,T3]) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple4[T1,T2,T3,T4](System.Collections.IEqualityComparer, System.Tuple`4[T1,T2,T3,T4], System.Tuple`4[T1,T2,T3,T4]) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple5[T1,T2,T3,T4,T5](System.Collections.IEqualityComparer, System.Tuple`5[T1,T2,T3,T4,T5], System.Tuple`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericEqualityERIntrinsic[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericEqualityIntrinsic[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericEqualityWithComparerIntrinsic[T](System.Collections.IEqualityComparer, T, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericGreaterOrEqualIntrinsic[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericGreaterThanIntrinsic[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericLessOrEqualIntrinsic[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericLessThanIntrinsic[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean PhysicalEqualityIntrinsic[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastCompareTuple2[T1,T2](System.Collections.IComparer, System.Tuple`2[T1,T2], System.Tuple`2[T1,T2]) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastCompareTuple3[T1,T2,T3](System.Collections.IComparer, System.Tuple`3[T1,T2,T3], System.Tuple`3[T1,T2,T3]) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastCompareTuple4[T1,T2,T3,T4](System.Collections.IComparer, System.Tuple`4[T1,T2,T3,T4], System.Tuple`4[T1,T2,T3,T4]) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastCompareTuple5[T1,T2,T3,T4,T5](System.Collections.IComparer, System.Tuple`5[T1,T2,T3,T4,T5], System.Tuple`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastHashTuple2[T1,T2](System.Collections.IEqualityComparer, System.Tuple`2[T1,T2]) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastHashTuple3[T1,T2,T3](System.Collections.IEqualityComparer, System.Tuple`3[T1,T2,T3]) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastHashTuple4[T1,T2,T3,T4](System.Collections.IEqualityComparer, System.Tuple`4[T1,T2,T3,T4]) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastHashTuple5[T1,T2,T3,T4,T5](System.Collections.IEqualityComparer, System.Tuple`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericComparisonIntrinsic[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericComparisonWithComparerIntrinsic[T](System.Collections.IComparer, T, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericHashIntrinsic[T](T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericHashWithComparerIntrinsic[T](System.Collections.IEqualityComparer, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GetHashCode() -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 LimitedGenericHashIntrinsic[T](Int32, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 PhysicalHashIntrinsic[T](T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: System.Type GetType() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean Equals(System.Object) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean TypeTestFast[T](System.Object) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean TypeTestGeneric[T](System.Object) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Char GetString(System.String, Int32) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Int32 GetHashCode() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.Decimal MakeDecimal(Int32, Int32, Int32, Boolean, Byte) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.Type GetType() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T CheckThis[T](T) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T CreateInstance[T]() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray2D[T](T[,], Int32, Int32) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray3D[T](T[,,], Int32, Int32, Int32) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray4D[T](T[,,,], Int32, Int32, Int32, Int32) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray[T](T[], Int32) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T UnboxFast[T](System.Object) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T UnboxGeneric[T](System.Object) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void Dispose[T](T) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void FailInit() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void FailStaticInit() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray2D[T](T[,], Int32, Int32, T) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray3D[T](T[,,], Int32, Int32, Int32, T) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray4D[T](T[,,,], Int32, Int32, Int32, Int32, T) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray[T](T[], Int32, T) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean Equals(System.Object) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean Or(Boolean, Boolean) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_Amp(Boolean, Boolean) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_BooleanAnd(Boolean, Boolean) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_BooleanOr(Boolean, Boolean) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Int32 GetHashCode() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: IntPtr op_IntegerAddressOf[T](T) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: System.Type GetType() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: T& op_AddressOf[T](T) -Microsoft.FSharp.Core.LanguagePrimitives: Boolean Equals(System.Object) -Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEqualityER[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEqualityWithComparer[T](System.Collections.IEqualityComparer, T, T) -Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEquality[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericGreaterOrEqual[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericGreaterThan[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericLessOrEqual[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericLessThan[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives: Boolean PhysicalEquality[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives: Double FloatWithMeasure(Double) -Microsoft.FSharp.Core.LanguagePrimitives: Int16 Int16WithMeasure(Int16) -Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericComparisonWithComparer[T](System.Collections.IComparer, T, T) -Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericComparison[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericHashWithComparer[T](System.Collections.IEqualityComparer, T) -Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericHash[T](T) -Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericLimitedHash[T](Int32, T) -Microsoft.FSharp.Core.LanguagePrimitives: Int32 GetHashCode() -Microsoft.FSharp.Core.LanguagePrimitives: Int32 Int32WithMeasure(Int32) -Microsoft.FSharp.Core.LanguagePrimitives: Int32 ParseInt32(System.String) -Microsoft.FSharp.Core.LanguagePrimitives: Int32 PhysicalHash[T](T) -Microsoft.FSharp.Core.LanguagePrimitives: Int64 Int64WithMeasure(Int64) -Microsoft.FSharp.Core.LanguagePrimitives: Int64 ParseInt64(System.String) -Microsoft.FSharp.Core.LanguagePrimitives: Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings -Microsoft.FSharp.Core.LanguagePrimitives: Microsoft.FSharp.Core.LanguagePrimitives+HashCompare -Microsoft.FSharp.Core.LanguagePrimitives: Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions -Microsoft.FSharp.Core.LanguagePrimitives: Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators -Microsoft.FSharp.Core.LanguagePrimitives: SByte SByteWithMeasure(SByte) -Microsoft.FSharp.Core.LanguagePrimitives: Single Float32WithMeasure(Single) -Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IComparer`1[T] FastGenericComparer[T]() -Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IEqualityComparer`1[T] FastGenericEqualityComparer[T]() -Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IEqualityComparer`1[T] FastLimitedGenericEqualityComparer[T](Int32) -Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IComparer GenericComparer -Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IComparer get_GenericComparer() -Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer GenericEqualityComparer -Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer GenericEqualityERComparer -Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer get_GenericEqualityComparer() -Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer get_GenericEqualityERComparer() -Microsoft.FSharp.Core.LanguagePrimitives: System.Decimal DecimalWithMeasure(System.Decimal) -Microsoft.FSharp.Core.LanguagePrimitives: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives: System.Type GetType() -Microsoft.FSharp.Core.LanguagePrimitives: T DivideByIntDynamic[T](T, Int32) -Microsoft.FSharp.Core.LanguagePrimitives: T DivideByInt[T](T, Int32) -Microsoft.FSharp.Core.LanguagePrimitives: T EnumToValue[TEnum,T](TEnum) -Microsoft.FSharp.Core.LanguagePrimitives: T GenericMaximum[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives: T GenericMinimum[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives: T GenericOneDynamic[T]() -Microsoft.FSharp.Core.LanguagePrimitives: T GenericOne[T]() -Microsoft.FSharp.Core.LanguagePrimitives: T GenericZeroDynamic[T]() -Microsoft.FSharp.Core.LanguagePrimitives: T GenericZero[T]() -Microsoft.FSharp.Core.LanguagePrimitives: TEnum EnumOfValue[T,TEnum](T) -Microsoft.FSharp.Core.LanguagePrimitives: TResult AdditionDynamic[T1,T2,TResult](T1, T2) -Microsoft.FSharp.Core.LanguagePrimitives: TResult CheckedAdditionDynamic[T1,T2,TResult](T1, T2) -Microsoft.FSharp.Core.LanguagePrimitives: TResult CheckedMultiplyDynamic[T1,T2,TResult](T1, T2) -Microsoft.FSharp.Core.LanguagePrimitives: TResult MultiplyDynamic[T1,T2,TResult](T1, T2) -Microsoft.FSharp.Core.LanguagePrimitives: UInt32 ParseUInt32(System.String) -Microsoft.FSharp.Core.LanguagePrimitives: UInt64 ParseUInt64(System.String) -Microsoft.FSharp.Core.LiteralAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.LiteralAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.LiteralAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.LiteralAttribute: System.String ToString() -Microsoft.FSharp.Core.LiteralAttribute: System.Type GetType() -Microsoft.FSharp.Core.LiteralAttribute: Void .ctor() -Microsoft.FSharp.Core.MatchFailureException: Boolean Equals(System.Object) -Microsoft.FSharp.Core.MatchFailureException: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.MatchFailureException: Int32 Data1 -Microsoft.FSharp.Core.MatchFailureException: Int32 Data2 -Microsoft.FSharp.Core.MatchFailureException: Int32 GetHashCode() -Microsoft.FSharp.Core.MatchFailureException: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.MatchFailureException: Int32 get_Data1() -Microsoft.FSharp.Core.MatchFailureException: Int32 get_Data2() -Microsoft.FSharp.Core.MatchFailureException: System.Collections.IDictionary Data -Microsoft.FSharp.Core.MatchFailureException: System.Collections.IDictionary get_Data() -Microsoft.FSharp.Core.MatchFailureException: System.Exception GetBaseException() -Microsoft.FSharp.Core.MatchFailureException: System.Exception InnerException -Microsoft.FSharp.Core.MatchFailureException: System.Exception get_InnerException() -Microsoft.FSharp.Core.MatchFailureException: System.String Data0 -Microsoft.FSharp.Core.MatchFailureException: System.String Message -Microsoft.FSharp.Core.MatchFailureException: System.String StackTrace -Microsoft.FSharp.Core.MatchFailureException: System.String ToString() -Microsoft.FSharp.Core.MatchFailureException: System.String get_Data0() -Microsoft.FSharp.Core.MatchFailureException: System.String get_Message() -Microsoft.FSharp.Core.MatchFailureException: System.String get_StackTrace() -Microsoft.FSharp.Core.MatchFailureException: System.Type GetType() -Microsoft.FSharp.Core.MatchFailureException: System.Type GetType() -Microsoft.FSharp.Core.MatchFailureException: Void .ctor() -Microsoft.FSharp.Core.MatchFailureException: Void .ctor(System.String, Int32, Int32) -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.String ToString() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Type GetType() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Void .ctor() -Microsoft.FSharp.Core.MeasureAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.MeasureAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.MeasureAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.MeasureAttribute: System.String ToString() -Microsoft.FSharp.Core.MeasureAttribute: System.Type GetType() -Microsoft.FSharp.Core.MeasureAttribute: Void .ctor() -Microsoft.FSharp.Core.NoComparisonAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NoComparisonAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.NoComparisonAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.NoComparisonAttribute: System.String ToString() -Microsoft.FSharp.Core.NoComparisonAttribute: System.Type GetType() -Microsoft.FSharp.Core.NoComparisonAttribute: Void .ctor() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.String ToString() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Type GetType() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Void .ctor() -Microsoft.FSharp.Core.NoEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NoEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.NoEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.NoEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.NoEqualityAttribute: System.Type GetType() -Microsoft.FSharp.Core.NoEqualityAttribute: Void .ctor() -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: Int32 GetHashCode() -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Object FromInt64Dynamic(Int64) -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Object FromStringDynamic(System.String) -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.String ToString() -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Type GetType() -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromInt32[T](Int32) -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromInt64[T](Int64) -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromOne[T]() -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromString[T](System.String) -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromZero[T]() -Microsoft.FSharp.Core.NumericLiterals: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NumericLiterals: Int32 GetHashCode() -Microsoft.FSharp.Core.NumericLiterals: Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI -Microsoft.FSharp.Core.NumericLiterals: System.String ToString() -Microsoft.FSharp.Core.NumericLiterals: System.Type GetType() -Microsoft.FSharp.Core.Operators+Checked: Boolean Equals(System.Object) -Microsoft.FSharp.Core.Operators+Checked: Byte ToByte[T](T) -Microsoft.FSharp.Core.Operators+Checked: Char ToChar[T](T) -Microsoft.FSharp.Core.Operators+Checked: Int16 ToInt16[T](T) -Microsoft.FSharp.Core.Operators+Checked: Int32 GetHashCode() -Microsoft.FSharp.Core.Operators+Checked: Int32 ToInt32[T](T) -Microsoft.FSharp.Core.Operators+Checked: Int32 ToInt[T](T) -Microsoft.FSharp.Core.Operators+Checked: Int64 ToInt64[T](T) -Microsoft.FSharp.Core.Operators+Checked: IntPtr ToIntPtr[T](T) -Microsoft.FSharp.Core.Operators+Checked: SByte ToSByte[T](T) -Microsoft.FSharp.Core.Operators+Checked: System.String ToString() -Microsoft.FSharp.Core.Operators+Checked: System.Type GetType() -Microsoft.FSharp.Core.Operators+Checked: T op_UnaryNegation[T](T) -Microsoft.FSharp.Core.Operators+Checked: T3 op_Addition[T1,T2,T3](T1, T2) -Microsoft.FSharp.Core.Operators+Checked: T3 op_Multiply[T1,T2,T3](T1, T2) -Microsoft.FSharp.Core.Operators+Checked: T3 op_Subtraction[T1,T2,T3](T1, T2) -Microsoft.FSharp.Core.Operators+Checked: UInt16 ToUInt16[T](T) -Microsoft.FSharp.Core.Operators+Checked: UInt32 ToUInt32[T](T) -Microsoft.FSharp.Core.Operators+Checked: UInt64 ToUInt64[T](T) -Microsoft.FSharp.Core.Operators+Checked: UIntPtr ToUIntPtr[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Boolean Equals(System.Object) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Byte PowByte(Byte, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Double PowDouble(Double, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int16 PowInt16(Int16, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 GetHashCode() -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 PowInt32(Int32, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 SignDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int64 PowInt64(Int64, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: IntPtr PowIntPtr(IntPtr, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: SByte PowSByte(SByte, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Single PowSingle(Single, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Byte] RangeByte(Byte, Byte, Byte) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Char] RangeChar(Char, Char) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Double] RangeDouble(Double, Double, Double) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Int16] RangeInt16(Int16, Int16, Int16) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Int32] RangeInt32(Int32, Int32, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Int64] RangeInt64(Int64, Int64, Int64) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.IntPtr] RangeIntPtr(IntPtr, IntPtr, IntPtr) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.SByte] RangeSByte(SByte, SByte, SByte) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Single] RangeSingle(Single, Single, Single) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.UInt16] RangeUInt16(UInt16, UInt16, UInt16) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.UInt32] RangeUInt32(UInt32, UInt32, UInt32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.UInt64] RangeUInt64(UInt64, UInt64, UInt64) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.UIntPtr] RangeUIntPtr(UIntPtr, UIntPtr, UIntPtr) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[T] RangeGeneric[T](T, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T, T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[T] RangeStepGeneric[TStep,T](TStep, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TStep,T]], T, TStep, T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Decimal PowDecimal(System.Decimal, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.String GetStringSlice(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.String ToString() -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Type GetType() -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AbsDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AcosDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AsinDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AtanDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T CeilingDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T CosDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T CoshDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T ExpDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T FloorDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T Log10Dynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T LogDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T PowDynamic[T,TResult](T, TResult) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T PowGeneric[T](T, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T RoundDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T SinDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T SinhDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T TanDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T TanhDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T TruncateDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T2 Atan2Dynamic[T1,T2](T1, T1) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T2 SqrtDynamic[T1,T2](T1) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,,,] GetArraySlice4D[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,,] GetArraySlice3D[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,] GetArraySlice2D[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice[T](T[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: UInt16 PowUInt16(UInt16, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: UInt32 PowUInt32(UInt32, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: UInt64 PowUInt64(UInt64, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: UIntPtr PowUIntPtr(UIntPtr, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2D[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,]) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3D[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,]) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4D[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,,]) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice[T](T[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[]) -Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals(System.Object) -Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals[T](T, T) -Microsoft.FSharp.Core.Operators+Unchecked: Int32 Compare[T](T, T) -Microsoft.FSharp.Core.Operators+Unchecked: Int32 GetHashCode() -Microsoft.FSharp.Core.Operators+Unchecked: Int32 Hash[T](T) -Microsoft.FSharp.Core.Operators+Unchecked: System.String ToString() -Microsoft.FSharp.Core.Operators+Unchecked: System.Type GetType() -Microsoft.FSharp.Core.Operators+Unchecked: T DefaultOf[T]() -Microsoft.FSharp.Core.Operators: Boolean Equals(System.Object) -Microsoft.FSharp.Core.Operators: Boolean Not(Boolean) -Microsoft.FSharp.Core.Operators: Boolean op_Equality[T](T, T) -Microsoft.FSharp.Core.Operators: Boolean op_GreaterThanOrEqual[T](T, T) -Microsoft.FSharp.Core.Operators: Boolean op_GreaterThan[T](T, T) -Microsoft.FSharp.Core.Operators: Boolean op_Inequality[T](T, T) -Microsoft.FSharp.Core.Operators: Boolean op_LessThanOrEqual[T](T, T) -Microsoft.FSharp.Core.Operators: Boolean op_LessThan[T](T, T) -Microsoft.FSharp.Core.Operators: Byte ToByte[T](T) -Microsoft.FSharp.Core.Operators: Char ToChar[T](T) -Microsoft.FSharp.Core.Operators: Double Infinity -Microsoft.FSharp.Core.Operators: Double NaN -Microsoft.FSharp.Core.Operators: Double ToDouble[T](T) -Microsoft.FSharp.Core.Operators: Double get_Infinity() -Microsoft.FSharp.Core.Operators: Double get_NaN() -Microsoft.FSharp.Core.Operators: Int16 ToInt16[T](T) -Microsoft.FSharp.Core.Operators: Int32 Compare[T](T, T) -Microsoft.FSharp.Core.Operators: Int32 GetHashCode() -Microsoft.FSharp.Core.Operators: Int32 Hash[T](T) -Microsoft.FSharp.Core.Operators: Int32 Sign[T](T) -Microsoft.FSharp.Core.Operators: Int32 SizeOf[T]() -Microsoft.FSharp.Core.Operators: Int32 ToInt32[T](T) -Microsoft.FSharp.Core.Operators: Int32 ToInt[T](T) -Microsoft.FSharp.Core.Operators: Int32 limitedHash[T](Int32, T) -Microsoft.FSharp.Core.Operators: Int64 ToInt64[T](T) -Microsoft.FSharp.Core.Operators: IntPtr ToIntPtr[T](T) -Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Collections.FSharpList`1[T] op_Append[T](Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpFunc`2[T1,T3] op_ComposeLeft[T2,T3,T1](Microsoft.FSharp.Core.FSharpFunc`2[T2,T3], Microsoft.FSharp.Core.FSharpFunc`2[T1,T2]) -Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpFunc`2[T1,T3] op_ComposeRight[T1,T2,T3](Microsoft.FSharp.Core.FSharpFunc`2[T1,T2], Microsoft.FSharp.Core.FSharpFunc`2[T2,T3]) -Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpOption`1[System.String] FailurePattern(System.Exception) -Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpRef`1[T] Ref[T](T) -Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+Checked -Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+OperatorIntrinsics -Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+Unchecked -Microsoft.FSharp.Core.Operators: SByte ToSByte[T](T) -Microsoft.FSharp.Core.Operators: Single InfinitySingle -Microsoft.FSharp.Core.Operators: Single NaNSingle -Microsoft.FSharp.Core.Operators: Single ToSingle[T](T) -Microsoft.FSharp.Core.Operators: Single get_InfinitySingle() -Microsoft.FSharp.Core.Operators: Single get_NaNSingle() -Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] CreateSequence[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] op_RangeStep[T,TStep](T, TStep, T) -Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] op_Range[T](T, T) -Microsoft.FSharp.Core.Operators: System.Decimal ToDecimal[T](T) -Microsoft.FSharp.Core.Operators: System.Exception Failure(System.String) -Microsoft.FSharp.Core.Operators: System.IO.TextReader ConsoleIn[T]() -Microsoft.FSharp.Core.Operators: System.IO.TextWriter ConsoleError[T]() -Microsoft.FSharp.Core.Operators: System.IO.TextWriter ConsoleOut[T]() -Microsoft.FSharp.Core.Operators: System.Object Box[T](T) -Microsoft.FSharp.Core.Operators: System.String ToString() -Microsoft.FSharp.Core.Operators: System.String ToString[T](T) -Microsoft.FSharp.Core.Operators: System.String op_Concatenate(System.String, System.String) -Microsoft.FSharp.Core.Operators: System.Tuple`2[TKey,TValue] KeyValuePattern[TKey,TValue](System.Collections.Generic.KeyValuePair`2[TKey,TValue]) -Microsoft.FSharp.Core.Operators: System.Type GetType() -Microsoft.FSharp.Core.Operators: System.Type TypeDefOf[T]() -Microsoft.FSharp.Core.Operators: System.Type TypeOf[T]() -Microsoft.FSharp.Core.Operators: T Abs[T](T) -Microsoft.FSharp.Core.Operators: T Acos[T](T) -Microsoft.FSharp.Core.Operators: T Asin[T](T) -Microsoft.FSharp.Core.Operators: T Atan[T](T) -Microsoft.FSharp.Core.Operators: T Ceiling[T](T) -Microsoft.FSharp.Core.Operators: T Cos[T](T) -Microsoft.FSharp.Core.Operators: T Cosh[T](T) -Microsoft.FSharp.Core.Operators: T DefaultArg[T](Microsoft.FSharp.Core.FSharpOption`1[T], T) -Microsoft.FSharp.Core.Operators: T Exp[T](T) -Microsoft.FSharp.Core.Operators: T FailWith[T](System.String) -Microsoft.FSharp.Core.Operators: T Floor[T](T) -Microsoft.FSharp.Core.Operators: T Identity[T](T) -Microsoft.FSharp.Core.Operators: T InvalidArg[T](System.String, System.String) -Microsoft.FSharp.Core.Operators: T InvalidOp[T](System.String) -Microsoft.FSharp.Core.Operators: T Lock[TLock,T](TLock, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T]) -Microsoft.FSharp.Core.Operators: T Log10[T](T) -Microsoft.FSharp.Core.Operators: T Log[T](T) -Microsoft.FSharp.Core.Operators: T Max[T](T, T) -Microsoft.FSharp.Core.Operators: T Min[T](T, T) -Microsoft.FSharp.Core.Operators: T NullArg[T](System.String) -Microsoft.FSharp.Core.Operators: T PowInteger[T](T, Int32) -Microsoft.FSharp.Core.Operators: T Raise[T](System.Exception) -Microsoft.FSharp.Core.Operators: T Reraise[T]() -Microsoft.FSharp.Core.Operators: T Rethrow[T]() -Microsoft.FSharp.Core.Operators: T Round[T](T) -Microsoft.FSharp.Core.Operators: T Sin[T](T) -Microsoft.FSharp.Core.Operators: T Sinh[T](T) -Microsoft.FSharp.Core.Operators: T Tan[T](T) -Microsoft.FSharp.Core.Operators: T Tanh[T](T) -Microsoft.FSharp.Core.Operators: T Unbox[T](System.Object) -Microsoft.FSharp.Core.Operators: T op_BitwiseAnd[T](T, T) -Microsoft.FSharp.Core.Operators: T op_BitwiseOr[T](T, T) -Microsoft.FSharp.Core.Operators: T op_Dereference[T](Microsoft.FSharp.Core.FSharpRef`1[T]) -Microsoft.FSharp.Core.Operators: T op_ExclusiveOr[T](T, T) -Microsoft.FSharp.Core.Operators: T op_Exponentiation[T,TResult](T, TResult) -Microsoft.FSharp.Core.Operators: T op_LeftShift[T](T, Int32) -Microsoft.FSharp.Core.Operators: T op_LogicalNot[T](T) -Microsoft.FSharp.Core.Operators: T op_RightShift[T](T, Int32) -Microsoft.FSharp.Core.Operators: T op_UnaryNegation[T](T) -Microsoft.FSharp.Core.Operators: T op_UnaryPlus[T](T) -Microsoft.FSharp.Core.Operators: T1 Fst[T1,T2](System.Tuple`2[T1,T2]) -Microsoft.FSharp.Core.Operators: T2 Atan2[T1,T2](T1, T1) -Microsoft.FSharp.Core.Operators: T2 Snd[T1,T2](System.Tuple`2[T1,T2]) -Microsoft.FSharp.Core.Operators: T3 op_Addition[T1,T2,T3](T1, T2) -Microsoft.FSharp.Core.Operators: T3 op_Division[T1,T2,T3](T1, T2) -Microsoft.FSharp.Core.Operators: T3 op_Modulus[T1,T2,T3](T1, T2) -Microsoft.FSharp.Core.Operators: T3 op_Multiply[T1,T2,T3](T1, T2) -Microsoft.FSharp.Core.Operators: T3 op_Subtraction[T1,T2,T3](T1, T2) -Microsoft.FSharp.Core.Operators: TResult Sqrt[T,TResult](T) -Microsoft.FSharp.Core.Operators: TResult ToEnum[TResult](Int32) -Microsoft.FSharp.Core.Operators: TResult Using[T,TResult](T, Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) -Microsoft.FSharp.Core.Operators: TResult op_PipeLeft2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], T1, T2) -Microsoft.FSharp.Core.Operators: TResult op_PipeLeft3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], T1, T2, T3) -Microsoft.FSharp.Core.Operators: TResult op_PipeLeft[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T) -Microsoft.FSharp.Core.Operators: TResult op_PipeRight2[T1,T2,TResult](T1, T2, Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]) -Microsoft.FSharp.Core.Operators: TResult op_PipeRight3[T1,T2,T3,TResult](T1, T2, T3, Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]]) -Microsoft.FSharp.Core.Operators: TResult op_PipeRight[T1,TResult](T1, Microsoft.FSharp.Core.FSharpFunc`2[T1,TResult]) -Microsoft.FSharp.Core.Operators: UInt16 ToUInt16[T](T) -Microsoft.FSharp.Core.Operators: UInt32 ToUInt32[T](T) -Microsoft.FSharp.Core.Operators: UInt64 ToUInt64[T](T) -Microsoft.FSharp.Core.Operators: UIntPtr ToUIntPtr[T](T) -Microsoft.FSharp.Core.Operators: Void Decrement(Microsoft.FSharp.Core.FSharpRef`1[System.Int32]) -Microsoft.FSharp.Core.Operators: Void Ignore[T](T) -Microsoft.FSharp.Core.Operators: Void Increment(Microsoft.FSharp.Core.FSharpRef`1[System.Int32]) -Microsoft.FSharp.Core.Operators: Void op_ColonEquals[T](Microsoft.FSharp.Core.FSharpRef`1[T], T) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: FSharpFunc`3 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Int32 GetHashCode() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.Type GetType() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: TResult Invoke(T1, T2) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: FSharpFunc`4 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Int32 GetHashCode() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.Type GetType() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: TResult Invoke(T1, T2, T3) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: FSharpFunc`5 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Int32 GetHashCode() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.Type GetType() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: TResult Invoke(T1, T2, T3, T4) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: FSharpFunc`6 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Int32 GetHashCode() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.Type GetType() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: TResult Invoke(T1, T2, T3, T4, T5) -Microsoft.FSharp.Core.OptimizedClosures: Boolean Equals(System.Object) -Microsoft.FSharp.Core.OptimizedClosures: Int32 GetHashCode() -Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult] -Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult] -Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult] -Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult] -Microsoft.FSharp.Core.OptimizedClosures: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures: System.Type GetType() -Microsoft.FSharp.Core.OptionModule: Boolean Equals(System.Object) -Microsoft.FSharp.Core.OptionModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Boolean IsNone[T](Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Boolean IsSome[T](Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Int32 Count[T](Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Int32 GetHashCode() -Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Bind[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: System.String ToString() -Microsoft.FSharp.Core.OptionModule: System.Type GetType() -Microsoft.FSharp.Core.OptionModule: T GetValue[T](Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Core.FSharpOption`1[T], TState) -Microsoft.FSharp.Core.OptionModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: T[] ToArray[T](Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.OptionalArgumentAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.OptionalArgumentAttribute: System.String ToString() -Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Type GetType() -Microsoft.FSharp.Core.OptionalArgumentAttribute: Void .ctor() -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Int32 GetHashCode() -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String ToString() -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String Value -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String get_Value() -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.Type GetType() -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Void .ctor(System.String) -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Int32 GetHashCode() -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String ToString() -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String Value -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String get_Value() -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.Type GetType() -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Void .ctor(System.String) -Microsoft.FSharp.Core.PrintfModule: Boolean Equals(System.Object) -Microsoft.FSharp.Core.PrintfModule: Int32 GetHashCode() -Microsoft.FSharp.Core.PrintfModule: System.String ToString() -Microsoft.FSharp.Core.PrintfModule: System.Type GetType() -Microsoft.FSharp.Core.PrintfModule: T PrintFormatLineToError[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.PrintfModule: T PrintFormatLineToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.PrintfModule: T PrintFormatLine[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.PrintfModule: T PrintFormatThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[System.String,TResult], Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,TResult]) -Microsoft.FSharp.Core.PrintfModule: T PrintFormatToError[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringBuilderThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,TResult], System.Text.StringBuilder, Microsoft.FSharp.Core.PrintfFormat`4[T,System.Text.StringBuilder,Microsoft.FSharp.Core.Unit,TResult]) -Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringBuilder[T](System.Text.StringBuilder, Microsoft.FSharp.Core.PrintfFormat`4[T,System.Text.StringBuilder,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringThenFail[T,TResult](Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,TResult]) -Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[System.String,TResult], Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,TResult]) -Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringThen[T](Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,System.String]) -Microsoft.FSharp.Core.PrintfModule: T PrintFormatToTextWriterThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,TResult], System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,TResult]) -Microsoft.FSharp.Core.PrintfModule: T PrintFormatToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.PrintfModule: T PrintFormat[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Type GetType() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Void .ctor() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.String ToString() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Type GetType() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.String ToString() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Type GetType() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Void .ctor() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.String ToString() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Type GetType() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Void .ctor() -Microsoft.FSharp.Core.SealedAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.SealedAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.SealedAttribute: Boolean Value -Microsoft.FSharp.Core.SealedAttribute: Boolean get_Value() -Microsoft.FSharp.Core.SealedAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.SealedAttribute: System.String ToString() -Microsoft.FSharp.Core.SealedAttribute: System.Type GetType() -Microsoft.FSharp.Core.SealedAttribute: Void .ctor() -Microsoft.FSharp.Core.SealedAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.SourceConstructFlags: Boolean Equals(System.Object) -Microsoft.FSharp.Core.SourceConstructFlags: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.SourceConstructFlags: Int32 GetHashCode() -Microsoft.FSharp.Core.SourceConstructFlags: Int32 value__ -Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Closure -Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Exception -Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Field -Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags KindMask -Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Module -Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags NonPublicRepresentation -Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags None -Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags ObjectType -Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags RecordType -Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags SumType -Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags UnionCase -Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Value -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString() -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.IFormatProvider) -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.String) -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.String, System.IFormatProvider) -Microsoft.FSharp.Core.SourceConstructFlags: System.Type GetType() -Microsoft.FSharp.Core.SourceConstructFlags: System.TypeCode GetTypeCode() -Microsoft.FSharp.Core.StringModule: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StringModule: Boolean Exists(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) -Microsoft.FSharp.Core.StringModule: Boolean ForAll(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) -Microsoft.FSharp.Core.StringModule: Int32 GetHashCode() -Microsoft.FSharp.Core.StringModule: Int32 Length(System.String) -Microsoft.FSharp.Core.StringModule: System.String Collect(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.String], System.String) -Microsoft.FSharp.Core.StringModule: System.String Concat(System.String, System.Collections.Generic.IEnumerable`1[System.String]) -Microsoft.FSharp.Core.StringModule: System.String Initialize(Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String]) -Microsoft.FSharp.Core.StringModule: System.String Map(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char], System.String) -Microsoft.FSharp.Core.StringModule: System.String MapIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char]], System.String) -Microsoft.FSharp.Core.StringModule: System.String Replicate(Int32, System.String) -Microsoft.FSharp.Core.StringModule: System.String ToString() -Microsoft.FSharp.Core.StringModule: System.Type GetType() -Microsoft.FSharp.Core.StringModule: Void Iterate(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,Microsoft.FSharp.Core.Unit], System.String) -Microsoft.FSharp.Core.StringModule: Void IterateIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,Microsoft.FSharp.Core.Unit]], System.String) -Microsoft.FSharp.Core.StructAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructAttribute: System.String ToString() -Microsoft.FSharp.Core.StructAttribute: System.Type GetType() -Microsoft.FSharp.Core.StructAttribute: Void .ctor() -Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructuralComparisonAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.String ToString() -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Type GetType() -Microsoft.FSharp.Core.StructuralComparisonAttribute: Void .ctor() -Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructuralEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Type GetType() -Microsoft.FSharp.Core.StructuralEqualityAttribute: Void .ctor() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String ToString() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String Value -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String get_Value() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Type GetType() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.Unit: Boolean Equals(System.Object) -Microsoft.FSharp.Core.Unit: Int32 GetHashCode() -Microsoft.FSharp.Core.Unit: System.String ToString() -Microsoft.FSharp.Core.Unit: System.Type GetType() -Microsoft.FSharp.Core.UnverifiableAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.UnverifiableAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.UnverifiableAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.UnverifiableAttribute: System.String ToString() -Microsoft.FSharp.Core.UnverifiableAttribute: System.Type GetType() -Microsoft.FSharp.Core.UnverifiableAttribute: Void .ctor() -Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.VolatileFieldAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.VolatileFieldAttribute: System.String ToString() -Microsoft.FSharp.Core.VolatileFieldAttribute: System.Type GetType() -Microsoft.FSharp.Core.VolatileFieldAttribute: Void .ctor() -Microsoft.FSharp.NativeInterop.NativePtrModule: Boolean Equals(System.Object) -Microsoft.FSharp.NativeInterop.NativePtrModule: Int32 GetHashCode() -Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr AddPointerInlined[T](IntPtr, Int32) -Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr OfNativeIntInlined[T](IntPtr) -Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr StackAllocate[T](Int32) -Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr ToNativeIntInlined[T](IntPtr) -Microsoft.FSharp.NativeInterop.NativePtrModule: System.String ToString() -Microsoft.FSharp.NativeInterop.NativePtrModule: System.Type GetType() -Microsoft.FSharp.NativeInterop.NativePtrModule: T GetPointerInlined[T](IntPtr, Int32) -Microsoft.FSharp.NativeInterop.NativePtrModule: T ReadPointerInlined[T](IntPtr) -Microsoft.FSharp.NativeInterop.NativePtrModule: Void SetPointerInlined[T](IntPtr, Int32, T) -Microsoft.FSharp.NativeInterop.NativePtrModule: Void WritePointerInlined[T](IntPtr, T) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Int32 GetHashCode() -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],Microsoft.FSharp.Collections.FSharpList`1[System.Type],Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]]] SpecificCallPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] UnitPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] MethodWithReflectedDefinitionPattern(System.Reflection.MethodBase) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] PropertyGetterWithReflectedDefinitionPattern(System.Reflection.PropertyInfo) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] PropertySetterWithReflectedDefinitionPattern(System.Reflection.PropertyInfo) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Boolean] BoolPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Byte] BytePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Char] CharPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Double] DoublePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int16] Int16Pattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] Int32Pattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int64] Int64Pattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.SByte] SBytePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Single] SinglePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.String] StringPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpVar]],Microsoft.FSharp.Quotations.FSharpExpr]] LambdasPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]]] ApplicationsPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] AndAlsoPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] OrElsePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt16] UInt16Pattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt32] UInt32Pattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt64] UInt64Pattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: System.String ToString() -Microsoft.FSharp.Quotations.DerivedPatternsModule: System.Type GetType() -Microsoft.FSharp.Quotations.ExprShapeModule: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.ExprShapeModule: Int32 GetHashCode() -Microsoft.FSharp.Quotations.ExprShapeModule: Microsoft.FSharp.Core.FSharpChoice`3[Microsoft.FSharp.Quotations.FSharpVar,System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr],System.Tuple`2[System.Object,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] ShapePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.ExprShapeModule: Microsoft.FSharp.Quotations.FSharpExpr RebuildShapeCombination(System.Object, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) -Microsoft.FSharp.Quotations.ExprShapeModule: System.String ToString() -Microsoft.FSharp.Quotations.ExprShapeModule: System.Type GetType() -Microsoft.FSharp.Quotations.FSharpExpr: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.FSharpExpr: Int32 GetHashCode() -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] CustomAttributes -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] get_CustomAttributes() -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] TryGetReflectedDefinition(System.Reflection.MethodBase) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr AddressOf(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr AddressSet(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Application(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Applications(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Call(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.MethodInfo, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Call(System.Reflection.MethodInfo, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Coerce(Microsoft.FSharp.Quotations.FSharpExpr, System.Type) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr DefaultValue(System.Type) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Deserialize(System.Type, Microsoft.FSharp.Collections.FSharpList`1[System.Type], Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr], Byte[]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldGet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.FieldInfo) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldGet(System.Reflection.FieldInfo) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldSet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.FieldInfo, Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldSet(System.Reflection.FieldInfo, Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr ForIntegerRangeLoop(Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr IfThenElse(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Lambda(Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Let(Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr LetRecursive(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]], Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewArray(System.Type, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewDelegate(System.Type, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpVar], Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewObject(System.Reflection.ConstructorInfo, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewRecord(System.Type, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewTuple(Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewUnionCase(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr PropertyGet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.PropertyInfo, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr PropertyGet(System.Reflection.PropertyInfo, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr PropertySet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.PropertyInfo, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr PropertySet(System.Reflection.PropertyInfo, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Quote(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Sequential(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Substitute(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr]]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr TryFinally(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr TryWith(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr TupleGet(Microsoft.FSharp.Quotations.FSharpExpr, Int32) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr TypeTest(Microsoft.FSharp.Quotations.FSharpExpr, System.Type) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr UnionCaseTest(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Reflection.UnionCaseInfo) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Value(System.Object, System.Type) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Value[T](T) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Var(Microsoft.FSharp.Quotations.FSharpVar) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr VarSet(Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr WhileLoop(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1[T] Cast[T](Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1[T] GlobalVar[T](System.String) -Microsoft.FSharp.Quotations.FSharpExpr: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() -Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString() -Microsoft.FSharp.Quotations.FSharpExpr: System.Type GetType() -Microsoft.FSharp.Quotations.FSharpExpr: System.Type Type -Microsoft.FSharp.Quotations.FSharpExpr: System.Type get_Type() -Microsoft.FSharp.Quotations.FSharpExpr: Void RegisterReflectedDefinitions(System.Reflection.Assembly, System.String, Byte[]) -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] CustomAttributes -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] get_CustomAttributes() -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Quotations.FSharpExpr Raw -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Quotations.FSharpExpr Substitute(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr]]) -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Quotations.FSharpExpr get_Raw() -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.String ToString() -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type GetType() -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type Type -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type get_Type() -Microsoft.FSharp.Quotations.FSharpVar: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.FSharpVar: Boolean IsMutable -Microsoft.FSharp.Quotations.FSharpVar: Boolean get_IsMutable() -Microsoft.FSharp.Quotations.FSharpVar: Int32 GetHashCode() -Microsoft.FSharp.Quotations.FSharpVar: Microsoft.FSharp.Quotations.FSharpVar Global(System.String, System.Type) -Microsoft.FSharp.Quotations.FSharpVar: System.String Name -Microsoft.FSharp.Quotations.FSharpVar: System.String ToString() -Microsoft.FSharp.Quotations.FSharpVar: System.String get_Name() -Microsoft.FSharp.Quotations.FSharpVar: System.Type GetType() -Microsoft.FSharp.Quotations.FSharpVar: System.Type Type -Microsoft.FSharp.Quotations.FSharpVar: System.Type get_Type() -Microsoft.FSharp.Quotations.FSharpVar: Void .ctor(System.String, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -Microsoft.FSharp.Quotations.PatternsModule: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.PatternsModule: Int32 GetHashCode() -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]] NewTuplePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] AddressOfPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuotePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpVar] VarPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]],Microsoft.FSharp.Quotations.FSharpExpr]] LetRecursivePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.FieldInfo]] FieldGetPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] AddressSetPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] ApplicationPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] SequentialPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] TryFinallyPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] WhileLoopPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Reflection.UnionCaseInfo]] UnionCaseTestPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,System.Int32]] TupleGetPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,System.Type]] CoercePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,System.Type]] TypeTestPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]] LambdaPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]] VarSetPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Reflection.UnionCaseInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] NewUnionCasePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Object,System.Type]] ValuePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Reflection.ConstructorInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] NewObjectPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Type,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] NewArrayPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Type,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] NewRecordPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.FieldInfo,Microsoft.FSharp.Quotations.FSharpExpr]] FieldSetPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.MethodInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] CallPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.PropertyInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] PropertyGetPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] IfThenElsePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] LetPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.Type,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpVar],Microsoft.FSharp.Quotations.FSharpExpr]] NewDelegatePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.PropertyInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr],Microsoft.FSharp.Quotations.FSharpExpr]] PropertySetPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] ForIntegerRangeLoopPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]] TryWithPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Type] DefaultValuePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: System.String ToString() -Microsoft.FSharp.Quotations.PatternsModule: System.Type GetType() -Microsoft.FSharp.Reflection.FSharpType: Boolean Equals(System.Object) -Microsoft.FSharp.Reflection.FSharpType: Boolean IsExceptionRepresentation(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpType: Boolean IsFunction(System.Type) -Microsoft.FSharp.Reflection.FSharpType: Boolean IsModule(System.Type) -Microsoft.FSharp.Reflection.FSharpType: Boolean IsRecord(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpType: Boolean IsTuple(System.Type) -Microsoft.FSharp.Reflection.FSharpType: Boolean IsUnion(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpType: Int32 GetHashCode() -Microsoft.FSharp.Reflection.FSharpType: Microsoft.FSharp.Reflection.UnionCaseInfo[] GetUnionCases(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpType: System.Reflection.PropertyInfo[] GetExceptionFields(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpType: System.Reflection.PropertyInfo[] GetRecordFields(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpType: System.String ToString() -Microsoft.FSharp.Reflection.FSharpType: System.Tuple`2[System.Type,System.Type] GetFunctionElements(System.Type) -Microsoft.FSharp.Reflection.FSharpType: System.Type GetType() -Microsoft.FSharp.Reflection.FSharpType: System.Type MakeFunctionType(System.Type, System.Type) -Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Type[]) -Microsoft.FSharp.Reflection.FSharpType: System.Type[] GetTupleElements(System.Type) -Microsoft.FSharp.Reflection.FSharpValue: Boolean Equals(System.Object) -Microsoft.FSharp.Reflection.FSharpValue: Int32 GetHashCode() -Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Int32] PreComputeUnionTagReader(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] PreComputeRecordReader(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] PreComputeTupleReader(System.Type) -Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] PreComputeUnionReader(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object] PreComputeRecordFieldReader(System.Reflection.PropertyInfo) -Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object[],System.Object] PreComputeRecordConstructor(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object[],System.Object] PreComputeTupleConstructor(System.Type) -Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object[],System.Object] PreComputeUnionConstructor(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: System.Object GetRecordField(System.Object, System.Reflection.PropertyInfo) -Microsoft.FSharp.Reflection.FSharpValue: System.Object GetTupleField(System.Object, Int32) -Microsoft.FSharp.Reflection.FSharpValue: System.Object MakeFunction(System.Type, Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object]) -Microsoft.FSharp.Reflection.FSharpValue: System.Object MakeRecord(System.Type, System.Object[], Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: System.Object MakeTuple(System.Object[], System.Type) -Microsoft.FSharp.Reflection.FSharpValue: System.Object MakeUnion(Microsoft.FSharp.Reflection.UnionCaseInfo, System.Object[], Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: System.Object[] GetExceptionFields(System.Object, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: System.Object[] GetRecordFields(System.Object, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: System.Object[] GetTupleFields(System.Object) -Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.ConstructorInfo PreComputeRecordConstructorInfo(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.MemberInfo PreComputeUnionTagMemberInfo(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.MethodInfo PreComputeUnionConstructorInfo(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: System.String ToString() -Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[Microsoft.FSharp.Reflection.UnionCaseInfo,System.Object[]] GetUnionFields(System.Object, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[System.Reflection.ConstructorInfo,Microsoft.FSharp.Core.FSharpOption`1[System.Type]] PreComputeTupleConstructorInfo(System.Type) -Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[System.Reflection.PropertyInfo,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Type,System.Int32]]] PreComputeTuplePropertyInfo(System.Type, Int32) -Microsoft.FSharp.Reflection.FSharpValue: System.Type GetType() -Microsoft.FSharp.Reflection.UnionCaseInfo: Boolean Equals(System.Object) -Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 GetHashCode() -Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 Tag -Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 get_Tag() -Microsoft.FSharp.Reflection.UnionCaseInfo: System.Object[] GetCustomAttributes() -Microsoft.FSharp.Reflection.UnionCaseInfo: System.Object[] GetCustomAttributes(System.Type) -Microsoft.FSharp.Reflection.UnionCaseInfo: System.Reflection.PropertyInfo[] GetFields() -Microsoft.FSharp.Reflection.UnionCaseInfo: System.String Name -Microsoft.FSharp.Reflection.UnionCaseInfo: System.String ToString() -Microsoft.FSharp.Reflection.UnionCaseInfo: System.String get_Name() -Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type DeclaringType -Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type GetType() -Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type get_DeclaringType() -System.AggregateException: Boolean Equals(System.Object) -System.AggregateException: Int32 GetHashCode() -System.AggregateException: System.Collections.IDictionary Data -System.AggregateException: System.Collections.IDictionary get_Data() -System.AggregateException: System.Collections.ObjectModel.ReadOnlyCollection`1[System.Exception] InnerExceptions -System.AggregateException: System.Collections.ObjectModel.ReadOnlyCollection`1[System.Exception] get_InnerExceptions() -System.AggregateException: System.Exception GetBaseException() -System.AggregateException: System.Exception InnerException -System.AggregateException: System.Exception get_InnerException() -System.AggregateException: System.String Message -System.AggregateException: System.String StackTrace -System.AggregateException: System.String ToString() -System.AggregateException: System.String get_Message() -System.AggregateException: System.String get_StackTrace() -System.AggregateException: System.Type GetType() -System.AggregateException: System.Type GetType() -System.Collections.IStructuralComparable: Int32 CompareTo(System.Object, System.Collections.IComparer) -System.Collections.IStructuralEquatable: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -System.Collections.IStructuralEquatable: Int32 GetHashCode(System.Collections.IEqualityComparer) -System.IObservable`1[T]: System.IDisposable Subscribe(System.IObserver`1[T]) -System.IObserver`1[T]: Void OnCompleted() -System.IObserver`1[T]: Void OnError(System.Exception) -System.IObserver`1[T]: Void OnNext(T) -System.Lazy`1[T]: Boolean Equals(System.Object) -System.Lazy`1[T]: Boolean IsValueCreated -System.Lazy`1[T]: Boolean get_IsValueCreated() -System.Lazy`1[T]: Int32 GetHashCode() -System.Lazy`1[T]: System.String ToString() -System.Lazy`1[T]: System.Type GetType() -System.Lazy`1[T]: T Value -System.Lazy`1[T]: T get_Value() -System.Numerics.BigInteger: Boolean Equals(System.Object) -System.Numerics.BigInteger: Boolean IsOne -System.Numerics.BigInteger: Boolean IsZero -System.Numerics.BigInteger: Boolean get_IsOne() -System.Numerics.BigInteger: Boolean get_IsZero() -System.Numerics.BigInteger: Boolean op_Equality(System.Numerics.BigInteger, System.Numerics.BigInteger) -System.Numerics.BigInteger: Boolean op_GreaterThan(System.Numerics.BigInteger, System.Numerics.BigInteger) -System.Numerics.BigInteger: Boolean op_GreaterThanOrEqual(System.Numerics.BigInteger, System.Numerics.BigInteger) -System.Numerics.BigInteger: Boolean op_Inequality(System.Numerics.BigInteger, System.Numerics.BigInteger) -System.Numerics.BigInteger: Boolean op_LessThan(System.Numerics.BigInteger, System.Numerics.BigInteger) -System.Numerics.BigInteger: Boolean op_LessThanOrEqual(System.Numerics.BigInteger, System.Numerics.BigInteger) -System.Numerics.BigInteger: Double op_Explicit(System.Numerics.BigInteger) -System.Numerics.BigInteger: Int32 GetHashCode() -System.Numerics.BigInteger: Int32 Sign -System.Numerics.BigInteger: Int32 get_Sign() -System.Numerics.BigInteger: Int32 op_Explicit(System.Numerics.BigInteger) -System.Numerics.BigInteger: Int64 op_Explicit(System.Numerics.BigInteger) -System.Numerics.BigInteger: System.Numerics.BigInteger Abs(System.Numerics.BigInteger) -System.Numerics.BigInteger: System.Numerics.BigInteger DivRem(System.Numerics.BigInteger, System.Numerics.BigInteger, System.Numerics.BigInteger ByRef) -System.Numerics.BigInteger: System.Numerics.BigInteger GreatestCommonDivisor(System.Numerics.BigInteger, System.Numerics.BigInteger) -System.Numerics.BigInteger: System.Numerics.BigInteger One -System.Numerics.BigInteger: System.Numerics.BigInteger Parse(System.String) -System.Numerics.BigInteger: System.Numerics.BigInteger Pow(System.Numerics.BigInteger, Int32) -System.Numerics.BigInteger: System.Numerics.BigInteger Zero -System.Numerics.BigInteger: System.Numerics.BigInteger get_One() -System.Numerics.BigInteger: System.Numerics.BigInteger get_Zero() -System.Numerics.BigInteger: System.Numerics.BigInteger op_Addition(System.Numerics.BigInteger, System.Numerics.BigInteger) -System.Numerics.BigInteger: System.Numerics.BigInteger op_Division(System.Numerics.BigInteger, System.Numerics.BigInteger) -System.Numerics.BigInteger: System.Numerics.BigInteger op_Modulus(System.Numerics.BigInteger, System.Numerics.BigInteger) -System.Numerics.BigInteger: System.Numerics.BigInteger op_Multiply(System.Numerics.BigInteger, System.Numerics.BigInteger) -System.Numerics.BigInteger: System.Numerics.BigInteger op_Subtraction(System.Numerics.BigInteger, System.Numerics.BigInteger) -System.Numerics.BigInteger: System.Numerics.BigInteger op_UnaryNegation(System.Numerics.BigInteger) -System.Numerics.BigInteger: System.Numerics.BigInteger op_UnaryPlus(System.Numerics.BigInteger) -System.Numerics.BigInteger: System.String ToString() -System.Numerics.BigInteger: System.Type GetType() -System.Numerics.BigInteger: Void .ctor(Int32) -System.Numerics.BigInteger: Void .ctor(Int64) -System.Threading.CancellationToken: Boolean Equals(System.Object) -System.Threading.CancellationToken: Boolean Equals(System.Threading.CancellationToken) -System.Threading.CancellationToken: Boolean IsCancellationRequested -System.Threading.CancellationToken: Boolean get_IsCancellationRequested() -System.Threading.CancellationToken: Boolean op_Equality(System.Threading.CancellationToken, System.Threading.CancellationToken) -System.Threading.CancellationToken: Boolean op_Inequality(System.Threading.CancellationToken, System.Threading.CancellationToken) -System.Threading.CancellationToken: Int32 GetHashCode() -System.Threading.CancellationToken: System.String ToString() -System.Threading.CancellationToken: System.Threading.CancellationTokenRegistration Register(System.Action`1[System.Object], System.Object) -System.Threading.CancellationToken: System.Type GetType() -System.Threading.CancellationTokenRegistration: Boolean Equals(System.Object) -System.Threading.CancellationTokenRegistration: Boolean Equals(System.Threading.CancellationTokenRegistration) -System.Threading.CancellationTokenRegistration: Boolean op_Equality(System.Threading.CancellationTokenRegistration, System.Threading.CancellationTokenRegistration) -System.Threading.CancellationTokenRegistration: Boolean op_Inequality(System.Threading.CancellationTokenRegistration, System.Threading.CancellationTokenRegistration) -System.Threading.CancellationTokenRegistration: Int32 GetHashCode() -System.Threading.CancellationTokenRegistration: System.String ToString() -System.Threading.CancellationTokenRegistration: System.Type GetType() -System.Threading.CancellationTokenRegistration: Void Dispose() -System.Threading.CancellationTokenSource: Boolean Equals(System.Object) -System.Threading.CancellationTokenSource: Int32 GetHashCode() -System.Threading.CancellationTokenSource: System.String ToString() -System.Threading.CancellationTokenSource: System.Threading.CancellationToken Token -System.Threading.CancellationTokenSource: System.Threading.CancellationToken get_Token() -System.Threading.CancellationTokenSource: System.Threading.CancellationTokenSource CreateLinkedTokenSource(System.Threading.CancellationToken, System.Threading.CancellationToken) -System.Threading.CancellationTokenSource: System.Type GetType() -System.Threading.CancellationTokenSource: Void .ctor() -System.Threading.CancellationTokenSource: Void Cancel() -System.Threading.CancellationTokenSource: Void Dispose() -System.Tuple: Boolean Equals(System.Object) -System.Tuple: Int32 GetHashCode() -System.Tuple: System.String ToString() -System.Tuple: System.Tuple`1[T1] Create[T1](T1) -System.Tuple: System.Tuple`2[T1,T2] Create[T1,T2](T1, T2) -System.Tuple: System.Tuple`3[T1,T2,T3] Create[T1,T2,T3](T1, T2, T3) -System.Tuple: System.Tuple`4[T1,T2,T3,T4] Create[T1,T2,T3,T4](T1, T2, T3, T4) -System.Tuple: System.Tuple`5[T1,T2,T3,T4,T5] Create[T1,T2,T3,T4,T5](T1, T2, T3, T4, T5) -System.Tuple: System.Tuple`6[T1,T2,T3,T4,T5,T6] Create[T1,T2,T3,T4,T5,T6](T1, T2, T3, T4, T5, T6) -System.Tuple: System.Tuple`7[T1,T2,T3,T4,T5,T6,T7] Create[T1,T2,T3,T4,T5,T6,T7](T1, T2, T3, T4, T5, T6, T7) -System.Tuple: System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,System.Tuple`1[T8]] Create[T1,T2,T3,T4,T5,T6,T7,T8](T1, T2, T3, T4, T5, T6, T7, T8) -System.Tuple: System.Type GetType() -System.Tuple`1[T1]: Boolean Equals(System.Object) -System.Tuple`1[T1]: Int32 GetHashCode() -System.Tuple`1[T1]: System.String ToString() -System.Tuple`1[T1]: System.Type GetType() -System.Tuple`1[T1]: T1 Item1 -System.Tuple`1[T1]: T1 get_Item1() -System.Tuple`1[T1]: Void .ctor(T1) -System.Tuple`2[T1,T2]: Boolean Equals(System.Object) -System.Tuple`2[T1,T2]: Int32 GetHashCode() -System.Tuple`2[T1,T2]: System.String ToString() -System.Tuple`2[T1,T2]: System.Type GetType() -System.Tuple`2[T1,T2]: T1 Item1 -System.Tuple`2[T1,T2]: T1 get_Item1() -System.Tuple`2[T1,T2]: T2 Item2 -System.Tuple`2[T1,T2]: T2 get_Item2() -System.Tuple`2[T1,T2]: Void .ctor(T1, T2) -System.Tuple`3[T1,T2,T3]: Boolean Equals(System.Object) -System.Tuple`3[T1,T2,T3]: Int32 GetHashCode() -System.Tuple`3[T1,T2,T3]: System.String ToString() -System.Tuple`3[T1,T2,T3]: System.Type GetType() -System.Tuple`3[T1,T2,T3]: T1 Item1 -System.Tuple`3[T1,T2,T3]: T1 get_Item1() -System.Tuple`3[T1,T2,T3]: T2 Item2 -System.Tuple`3[T1,T2,T3]: T2 get_Item2() -System.Tuple`3[T1,T2,T3]: T3 Item3 -System.Tuple`3[T1,T2,T3]: T3 get_Item3() -System.Tuple`3[T1,T2,T3]: Void .ctor(T1, T2, T3) -System.Tuple`4[T1,T2,T3,T4]: Boolean Equals(System.Object) -System.Tuple`4[T1,T2,T3,T4]: Int32 GetHashCode() -System.Tuple`4[T1,T2,T3,T4]: System.String ToString() -System.Tuple`4[T1,T2,T3,T4]: System.Type GetType() -System.Tuple`4[T1,T2,T3,T4]: T1 Item1 -System.Tuple`4[T1,T2,T3,T4]: T1 get_Item1() -System.Tuple`4[T1,T2,T3,T4]: T2 Item2 -System.Tuple`4[T1,T2,T3,T4]: T2 get_Item2() -System.Tuple`4[T1,T2,T3,T4]: T3 Item3 -System.Tuple`4[T1,T2,T3,T4]: T3 get_Item3() -System.Tuple`4[T1,T2,T3,T4]: T4 Item4 -System.Tuple`4[T1,T2,T3,T4]: T4 get_Item4() -System.Tuple`4[T1,T2,T3,T4]: Void .ctor(T1, T2, T3, T4) -System.Tuple`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) -System.Tuple`5[T1,T2,T3,T4,T5]: Int32 GetHashCode() -System.Tuple`5[T1,T2,T3,T4,T5]: System.String ToString() -System.Tuple`5[T1,T2,T3,T4,T5]: System.Type GetType() -System.Tuple`5[T1,T2,T3,T4,T5]: T1 Item1 -System.Tuple`5[T1,T2,T3,T4,T5]: T1 get_Item1() -System.Tuple`5[T1,T2,T3,T4,T5]: T2 Item2 -System.Tuple`5[T1,T2,T3,T4,T5]: T2 get_Item2() -System.Tuple`5[T1,T2,T3,T4,T5]: T3 Item3 -System.Tuple`5[T1,T2,T3,T4,T5]: T3 get_Item3() -System.Tuple`5[T1,T2,T3,T4,T5]: T4 Item4 -System.Tuple`5[T1,T2,T3,T4,T5]: T4 get_Item4() -System.Tuple`5[T1,T2,T3,T4,T5]: T5 Item5 -System.Tuple`5[T1,T2,T3,T4,T5]: T5 get_Item5() -System.Tuple`5[T1,T2,T3,T4,T5]: Void .ctor(T1, T2, T3, T4, T5) -System.Tuple`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) -System.Tuple`6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -System.Tuple`6[T1,T2,T3,T4,T5,T6]: System.String ToString() -System.Tuple`6[T1,T2,T3,T4,T5,T6]: System.Type GetType() -System.Tuple`6[T1,T2,T3,T4,T5,T6]: T1 Item1 -System.Tuple`6[T1,T2,T3,T4,T5,T6]: T1 get_Item1() -System.Tuple`6[T1,T2,T3,T4,T5,T6]: T2 Item2 -System.Tuple`6[T1,T2,T3,T4,T5,T6]: T2 get_Item2() -System.Tuple`6[T1,T2,T3,T4,T5,T6]: T3 Item3 -System.Tuple`6[T1,T2,T3,T4,T5,T6]: T3 get_Item3() -System.Tuple`6[T1,T2,T3,T4,T5,T6]: T4 Item4 -System.Tuple`6[T1,T2,T3,T4,T5,T6]: T4 get_Item4() -System.Tuple`6[T1,T2,T3,T4,T5,T6]: T5 Item5 -System.Tuple`6[T1,T2,T3,T4,T5,T6]: T5 get_Item5() -System.Tuple`6[T1,T2,T3,T4,T5,T6]: T6 Item6 -System.Tuple`6[T1,T2,T3,T4,T5,T6]: T6 get_Item6() -System.Tuple`6[T1,T2,T3,T4,T5,T6]: Void .ctor(T1, T2, T3, T4, T5, T6) -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T1 Item1 -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T1 get_Item1() -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T2 Item2 -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T2 get_Item2() -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T3 Item3 -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T3 get_Item3() -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T4 Item4 -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T4 get_Item4() -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T5 Item5 -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T5 get_Item5() -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T6 Item6 -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T6 get_Item6() -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T7 Item7 -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T7 get_Item7() -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: Void .ctor(T1, T2, T3, T4, T5, T6, T7) -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: Boolean Equals(System.Object) -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: Int32 GetHashCode() -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: System.String ToString() -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: System.Type GetType() -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T1 Item1 -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T1 get_Item1() -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T2 Item2 -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T2 get_Item2() -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T3 Item3 -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T3 get_Item3() -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T4 Item4 -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T4 get_Item4() -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T5 Item5 -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T5 get_Item5() -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T6 Item6 -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T6 get_Item6() -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T7 Item7 -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T7 get_Item7() -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: TRest Rest -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: TRest get_Rest() -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: Void .ctor(T1, T2, T3, T4, T5, T6, T7, TRest) -" - - let act = actual.ToString() - if expected <> act then - printf "%s" act - Assert.AreEqual(expected, act) diff --git a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.coreclr.fs b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.coreclr.fs index 2b42e37c12e..61eb5529685 100644 --- a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.coreclr.fs +++ b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.coreclr.fs @@ -2133,6 +2133,35 @@ Microsoft.FSharp.Core.FSharpRef`1[T]: T get_contents() Microsoft.FSharp.Core.FSharpRef`1[T]: Void .ctor(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_Value(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_contents(T) +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Error +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Ok +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.String ToString() +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.Type GetType() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean IsError +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean IsOk +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean get_IsError() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean get_IsOk() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 Tag +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError] +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewError(TError) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewOk(T) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.String ToString() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.Type GetType() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T ResultValue +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T get_ResultValue() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError ErrorValue +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError get_ErrorValue() Microsoft.FSharp.Core.FSharpTypeFunc: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpTypeFunc: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpTypeFunc: System.Object Specialize[T]() @@ -2789,6 +2818,13 @@ Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object get_ Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.String ToString() Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Type GetType() Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Void .ctor() +Microsoft.FSharp.Core.ResultModule: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ResultModule: Int32 GetHashCode() +Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[T,TResult] MapError[TError,TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TError,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Bind[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpResult`2[TResult,TError]], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Map[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.ResultModule: System.String ToString() +Microsoft.FSharp.Core.ResultModule: System.Type GetType() Microsoft.FSharp.Core.SealedAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.SealedAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.SealedAttribute: Boolean Match(System.Object) @@ -3393,6 +3429,7 @@ Microsoft.FSharp.Reflection.FSharpType: System.String ToString() Microsoft.FSharp.Reflection.FSharpType: System.Tuple`2[System.Type,System.Type] GetFunctionElements(System.Type) Microsoft.FSharp.Reflection.FSharpType: System.Type GetType() Microsoft.FSharp.Reflection.FSharpType: System.Type MakeFunctionType(System.Type, System.Type) +Microsoft.FSharp.Reflection.FSharpType: System.Type MakeStructTupleType(System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type[] GetTupleElements(System.Type) Microsoft.FSharp.Reflection.FSharpValue: Boolean Equals(System.Object) diff --git a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.net20.fs b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.net20.fs index c8caf782564..d11d57cc752 100644 --- a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.net20.fs +++ b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.net20.fs @@ -1977,6 +1977,7 @@ Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1+Ta Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] None Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] Some(T) Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] get_None() +Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] op_Implicit(T) Microsoft.FSharp.Core.FSharpOption`1[T]: System.String ToString() Microsoft.FSharp.Core.FSharpOption`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpOption`1[T]: T Value @@ -2000,6 +2001,35 @@ Microsoft.FSharp.Core.FSharpRef`1[T]: T get_contents() Microsoft.FSharp.Core.FSharpRef`1[T]: Void .ctor(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_Value(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_contents(T) +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Error +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Ok +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.String ToString() +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.Type GetType() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean IsError +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean IsOk +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean get_IsError() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean get_IsOk() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 Tag +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError] +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewError(TError) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewOk(T) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.String ToString() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.Type GetType() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T ResultValue +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T get_ResultValue() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError ErrorValue +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError get_ErrorValue() Microsoft.FSharp.Core.FSharpTypeFunc: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpTypeFunc: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpTypeFunc: System.Object Specialize[T]() @@ -2658,6 +2688,13 @@ Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object get_ Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.String ToString() Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Type GetType() Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Void .ctor() +Microsoft.FSharp.Core.ResultModule: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ResultModule: Int32 GetHashCode() +Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[T,TResult] MapError[TError,TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TError,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Bind[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpResult`2[TResult,TError]], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Map[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.ResultModule: System.String ToString() +Microsoft.FSharp.Core.ResultModule: System.Type GetType() Microsoft.FSharp.Core.SealedAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.SealedAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.SealedAttribute: Boolean Match(System.Object) @@ -3007,6 +3044,7 @@ Microsoft.FSharp.Reflection.FSharpType: System.String ToString() Microsoft.FSharp.Reflection.FSharpType: System.Tuple`2[System.Type,System.Type] GetFunctionElements(System.Type) Microsoft.FSharp.Reflection.FSharpType: System.Type GetType() Microsoft.FSharp.Reflection.FSharpType: System.Type MakeFunctionType(System.Type, System.Type) +Microsoft.FSharp.Reflection.FSharpType: System.Type MakeStructTupleType(System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type[] GetTupleElements(System.Type) Microsoft.FSharp.Reflection.FSharpValue: Boolean Equals(System.Object) diff --git a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.net40.fs b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.net40.fs index 6879946205f..ac3f56789f3 100644 --- a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.net40.fs +++ b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.net40.fs @@ -2138,6 +2138,7 @@ Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1+Ta Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] None Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] Some(T) Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] get_None() +Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] op_Implicit(T) Microsoft.FSharp.Core.FSharpOption`1[T]: System.String ToString() Microsoft.FSharp.Core.FSharpOption`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpOption`1[T]: T Value @@ -2161,6 +2162,35 @@ Microsoft.FSharp.Core.FSharpRef`1[T]: T get_contents() Microsoft.FSharp.Core.FSharpRef`1[T]: Void .ctor(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_Value(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_contents(T) +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Error +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Ok +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.String ToString() +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.Type GetType() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean IsError +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean IsOk +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean get_IsError() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean get_IsOk() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 Tag +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError] +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewError(TError) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewOk(T) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.String ToString() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.Type GetType() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T ResultValue +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T get_ResultValue() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError ErrorValue +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError get_ErrorValue() Microsoft.FSharp.Core.FSharpTypeFunc: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpTypeFunc: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpTypeFunc: System.Object Specialize[T]() @@ -2826,6 +2856,13 @@ Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object get_ Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.String ToString() Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Type GetType() Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Void .ctor() +Microsoft.FSharp.Core.ResultModule: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ResultModule: Int32 GetHashCode() +Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[T,TResult] MapError[TError,TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TError,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Bind[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpResult`2[TResult,TError]], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Map[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.ResultModule: System.String ToString() +Microsoft.FSharp.Core.ResultModule: System.Type GetType() Microsoft.FSharp.Core.SealedAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.SealedAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.SealedAttribute: Boolean Match(System.Object) @@ -3436,6 +3473,8 @@ Microsoft.FSharp.Reflection.FSharpType: System.String ToString() Microsoft.FSharp.Reflection.FSharpType: System.Tuple`2[System.Type,System.Type] GetFunctionElements(System.Type) Microsoft.FSharp.Reflection.FSharpType: System.Type GetType() Microsoft.FSharp.Reflection.FSharpType: System.Type MakeFunctionType(System.Type, System.Type) +Microsoft.FSharp.Reflection.FSharpType: System.Type MakeStructTupleType(System.Reflection.Assembly, System.Type[]) +Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Reflection.Assembly, System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type[] GetTupleElements(System.Type) Microsoft.FSharp.Reflection.FSharpValue: Boolean Equals(System.Object) diff --git a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable259.fs b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable259.fs index 2102f9d951d..49d61b4e4df 100644 --- a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable259.fs +++ b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable259.fs @@ -2114,6 +2114,7 @@ Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1+Ta Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] None Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] Some(T) Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] get_None() +Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] op_Implicit(T) Microsoft.FSharp.Core.FSharpOption`1[T]: System.String ToString() Microsoft.FSharp.Core.FSharpOption`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpOption`1[T]: T Value @@ -2137,6 +2138,35 @@ Microsoft.FSharp.Core.FSharpRef`1[T]: T get_contents() Microsoft.FSharp.Core.FSharpRef`1[T]: Void .ctor(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_Value(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_contents(T) +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Error +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Ok +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.String ToString() +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.Type GetType() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean IsError +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean IsOk +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean get_IsError() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean get_IsOk() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 Tag +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError] +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewError(TError) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewOk(T) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.String ToString() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.Type GetType() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T ResultValue +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T get_ResultValue() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError ErrorValue +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError get_ErrorValue() Microsoft.FSharp.Core.FSharpTypeFunc: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpTypeFunc: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpTypeFunc: System.Object Specialize[T]() @@ -2793,6 +2823,13 @@ Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object get_ Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.String ToString() Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Type GetType() Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Void .ctor() +Microsoft.FSharp.Core.ResultModule: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ResultModule: Int32 GetHashCode() +Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[T,TResult] MapError[TError,TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TError,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Bind[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpResult`2[TResult,TError]], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Map[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.ResultModule: System.String ToString() +Microsoft.FSharp.Core.ResultModule: System.Type GetType() Microsoft.FSharp.Core.SealedAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.SealedAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.SealedAttribute: Boolean Match(System.Object) @@ -3397,6 +3434,8 @@ Microsoft.FSharp.Reflection.FSharpType: System.String ToString() Microsoft.FSharp.Reflection.FSharpType: System.Tuple`2[System.Type,System.Type] GetFunctionElements(System.Type) Microsoft.FSharp.Reflection.FSharpType: System.Type GetType() Microsoft.FSharp.Reflection.FSharpType: System.Type MakeFunctionType(System.Type, System.Type) +Microsoft.FSharp.Reflection.FSharpType: System.Type MakeStructTupleType(System.Reflection.Assembly, System.Type[]) +Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Reflection.Assembly, System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type[] GetTupleElements(System.Type) Microsoft.FSharp.Reflection.FSharpValue: Boolean Equals(System.Object) diff --git a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable47.fs b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable47.fs index 856107f69f2..b4273af515b 100644 --- a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable47.fs +++ b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable47.fs @@ -2111,6 +2111,7 @@ Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1+Ta Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] None Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] Some(T) Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] get_None() +Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] op_Implicit(T) Microsoft.FSharp.Core.FSharpOption`1[T]: System.String ToString() Microsoft.FSharp.Core.FSharpOption`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpOption`1[T]: T Value @@ -2134,6 +2135,35 @@ Microsoft.FSharp.Core.FSharpRef`1[T]: T get_contents() Microsoft.FSharp.Core.FSharpRef`1[T]: Void .ctor(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_Value(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_contents(T) +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Error +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Ok +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.String ToString() +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.Type GetType() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean IsError +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean IsOk +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean get_IsError() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean get_IsOk() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 Tag +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError] +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewError(TError) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewOk(T) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.String ToString() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.Type GetType() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T ResultValue +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T get_ResultValue() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError ErrorValue +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError get_ErrorValue() Microsoft.FSharp.Core.FSharpTypeFunc: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpTypeFunc: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpTypeFunc: System.Object Specialize[T]() @@ -2794,6 +2824,13 @@ Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object get_ Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.String ToString() Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Type GetType() Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Void .ctor() +Microsoft.FSharp.Core.ResultModule: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ResultModule: Int32 GetHashCode() +Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[T,TResult] MapError[TError,TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TError,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Bind[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpResult`2[TResult,TError]], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Map[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.ResultModule: System.String ToString() +Microsoft.FSharp.Core.ResultModule: System.Type GetType() Microsoft.FSharp.Core.SealedAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.SealedAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.SealedAttribute: Boolean Match(System.Object) @@ -3404,6 +3441,8 @@ Microsoft.FSharp.Reflection.FSharpType: System.String ToString() Microsoft.FSharp.Reflection.FSharpType: System.Tuple`2[System.Type,System.Type] GetFunctionElements(System.Type) Microsoft.FSharp.Reflection.FSharpType: System.Type GetType() Microsoft.FSharp.Reflection.FSharpType: System.Type MakeFunctionType(System.Type, System.Type) +Microsoft.FSharp.Reflection.FSharpType: System.Type MakeStructTupleType(System.Reflection.Assembly, System.Type[]) +Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Reflection.Assembly, System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type[] GetTupleElements(System.Type) Microsoft.FSharp.Reflection.FSharpValue: Boolean Equals(System.Object) diff --git a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable7.fs b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable7.fs index 745df1359bf..ca4c5b16765 100644 --- a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable7.fs +++ b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable7.fs @@ -2127,6 +2127,7 @@ Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1+Ta Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] None Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] Some(T) Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] get_None() +Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] op_Implicit(T) Microsoft.FSharp.Core.FSharpOption`1[T]: System.String ToString() Microsoft.FSharp.Core.FSharpOption`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpOption`1[T]: T Value @@ -2150,6 +2151,35 @@ Microsoft.FSharp.Core.FSharpRef`1[T]: T get_contents() Microsoft.FSharp.Core.FSharpRef`1[T]: Void .ctor(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_Value(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_contents(T) +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Error +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Ok +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.String ToString() +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.Type GetType() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean IsError +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean IsOk +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean get_IsError() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean get_IsOk() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 Tag +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError] +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewError(TError) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewOk(T) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.String ToString() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.Type GetType() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T ResultValue +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T get_ResultValue() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError ErrorValue +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError get_ErrorValue() Microsoft.FSharp.Core.FSharpTypeFunc: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpTypeFunc: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpTypeFunc: System.Object Specialize[T]() @@ -2806,6 +2836,13 @@ Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object get_ Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.String ToString() Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Type GetType() Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Void .ctor() +Microsoft.FSharp.Core.ResultModule: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ResultModule: Int32 GetHashCode() +Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[T,TResult] MapError[TError,TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TError,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Bind[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpResult`2[TResult,TError]], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Map[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.ResultModule: System.String ToString() +Microsoft.FSharp.Core.ResultModule: System.Type GetType() Microsoft.FSharp.Core.SealedAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.SealedAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.SealedAttribute: Boolean Match(System.Object) @@ -3410,6 +3447,8 @@ Microsoft.FSharp.Reflection.FSharpType: System.String ToString() Microsoft.FSharp.Reflection.FSharpType: System.Tuple`2[System.Type,System.Type] GetFunctionElements(System.Type) Microsoft.FSharp.Reflection.FSharpType: System.Type GetType() Microsoft.FSharp.Reflection.FSharpType: System.Type MakeFunctionType(System.Type, System.Type) +Microsoft.FSharp.Reflection.FSharpType: System.Type MakeStructTupleType(System.Reflection.Assembly, System.Type[]) +Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Reflection.Assembly, System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type[] GetTupleElements(System.Type) Microsoft.FSharp.Reflection.FSharpValue: Boolean Equals(System.Object) diff --git a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable78.fs b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable78.fs index 72df723cf36..2edaa153891 100644 --- a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable78.fs +++ b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable78.fs @@ -2114,6 +2114,7 @@ Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1+Ta Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] None Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] Some(T) Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] get_None() +Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] op_Implicit(T) Microsoft.FSharp.Core.FSharpOption`1[T]: System.String ToString() Microsoft.FSharp.Core.FSharpOption`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpOption`1[T]: T Value @@ -2137,6 +2138,35 @@ Microsoft.FSharp.Core.FSharpRef`1[T]: T get_contents() Microsoft.FSharp.Core.FSharpRef`1[T]: Void .ctor(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_Value(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_contents(T) +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Error +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Ok +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.String ToString() +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.Type GetType() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean IsError +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean IsOk +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean get_IsError() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean get_IsOk() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 Tag +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError] +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewError(TError) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewOk(T) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.String ToString() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.Type GetType() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T ResultValue +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T get_ResultValue() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError ErrorValue +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError get_ErrorValue() Microsoft.FSharp.Core.FSharpTypeFunc: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpTypeFunc: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpTypeFunc: System.Object Specialize[T]() @@ -2793,6 +2823,13 @@ Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object get_ Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.String ToString() Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Type GetType() Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Void .ctor() +Microsoft.FSharp.Core.ResultModule: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ResultModule: Int32 GetHashCode() +Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[T,TResult] MapError[TError,TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TError,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Bind[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpResult`2[TResult,TError]], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Map[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.ResultModule: System.String ToString() +Microsoft.FSharp.Core.ResultModule: System.Type GetType() Microsoft.FSharp.Core.SealedAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.SealedAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.SealedAttribute: Boolean Match(System.Object) @@ -3397,6 +3434,8 @@ Microsoft.FSharp.Reflection.FSharpType: System.String ToString() Microsoft.FSharp.Reflection.FSharpType: System.Tuple`2[System.Type,System.Type] GetFunctionElements(System.Type) Microsoft.FSharp.Reflection.FSharpType: System.Type GetType() Microsoft.FSharp.Reflection.FSharpType: System.Type MakeFunctionType(System.Type, System.Type) +Microsoft.FSharp.Reflection.FSharpType: System.Type MakeStructTupleType(System.Reflection.Assembly, System.Type[]) +Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Reflection.Assembly, System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type[] GetTupleElements(System.Type) Microsoft.FSharp.Reflection.FSharpValue: Boolean Equals(System.Object) diff --git a/src/fsharp/FSharp.Core.Unittests/project.json b/src/fsharp/FSharp.Core.Unittests/project.json index 44d2d09b071..f0297f97997 100644 --- a/src/fsharp/FSharp.Core.Unittests/project.json +++ b/src/fsharp/FSharp.Core.Unittests/project.json @@ -8,9 +8,10 @@ "System.Reflection.Emit": "4.0.1", "System.Runtime.Loader": "4.0.0", "System.Text.RegularExpressions": "4.1.0", - "System.Threading.Tasks.Parallel": "4.0.1-rc2-24027", + "System.Threading.Tasks.Parallel": "4.0.1", "System.Threading.Thread": "4.0.0", - "System.Threading.ThreadPool": "4.0.10" + "System.Threading.ThreadPool": "4.0.10", + "System.ValueTuple": "4.0.0-rc3-24212-01" }, "runtimes": { "win7-x86": { }, diff --git a/src/fsharp/FSharp.Core/FSharp.Core.fsproj b/src/fsharp/FSharp.Core/FSharp.Core.fsproj index 2300e09f2c2..c48c1df40df 100644 --- a/src/fsharp/FSharp.Core/FSharp.Core.fsproj +++ b/src/fsharp/FSharp.Core/FSharp.Core.fsproj @@ -17,7 +17,7 @@ true true true - $(OtherFlags) --warnon:1182 --compiling-fslib --optimize --maxerrors:20 --extraoptimizationloops:1 + $(OtherFlags) --warnon:1182 --compiling-fslib --maxerrors:20 --extraoptimizationloops:1 $(OtherFlags) --compiling-fslib-20:"$(SystemRoot)\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll" $(OtherFlags) --compiling-fslib-40 $(OtherFlags) --targetprofile:netcore @@ -73,6 +73,12 @@ Collections/option.fs + + Collections/result.fsi + + + Collections/result.fs + Collections/collections.fsi @@ -213,15 +219,6 @@ - - - diff --git a/src/fsharp/FSharp.Core/array.fs b/src/fsharp/FSharp.Core/array.fs index f1ce8821bcb..97bb22506e9 100644 --- a/src/fsharp/FSharp.Core/array.fs +++ b/src/fsharp/FSharp.Core/array.fs @@ -5,14 +5,15 @@ namespace Microsoft.FSharp.Collections open System open System.Diagnostics open System.Collections.Generic - open System.Diagnostics.CodeAnalysis - open System.Reflection + open Microsoft.FSharp.Primitives.Basics open Microsoft.FSharp.Core - open Microsoft.FSharp.Core.CompilerServices open Microsoft.FSharp.Collections open Microsoft.FSharp.Core.Operators + open Microsoft.FSharp.Core.CompilerServices open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators - open Microsoft.FSharp.Core.SR +#if FX_RESHAPED_REFLECTION + open System.Reflection +#endif #if FX_NO_ICLONEABLE open Microsoft.FSharp.Core.ICloneableExtensions #endif @@ -27,7 +28,7 @@ namespace Microsoft.FSharp.Collections | null -> nullArg argName | _ -> () - let inline indexNotFound() = raise (new System.Collections.Generic.KeyNotFoundException(SR.GetString(SR.keyNotFoundAlt))) + let inline indexNotFound() = raise (KeyNotFoundException(SR.GetString(SR.keyNotFoundAlt))) [] let length (array: _[]) = array.Length @@ -45,17 +46,17 @@ namespace Microsoft.FSharp.Collections else Some array.[array.Length-1] [] - let inline init count f = Microsoft.FSharp.Primitives.Basics.Array.init count f + let inline init count f = Array.init count f [] let zeroCreate count = if count < 0 then invalidArg "count" (SR.GetString(SR.inputMustBeNonNegative)) - Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked count + Array.zeroCreateUnchecked count [] let create (count:int) (x:'T) = if count < 0 then invalidArg "count" (SR.GetString(SR.inputMustBeNonNegative)) - let array = (Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked count : 'T[]) + let array: 'T[] = Array.zeroCreateUnchecked count for i = 0 to Operators.Checked.(-) count 1 do // use checked arithmetic here to satisfy FxCop array.[i] <- x array @@ -76,24 +77,15 @@ namespace Microsoft.FSharp.Collections checkNonNull "array" array if array.Length = 0 then invalidArg "array" (SR.GetString(SR.notEnoughElements)) let len = array.Length - 1 - Microsoft.FSharp.Primitives.Basics.Array.subUnchecked 1 len array + Array.subUnchecked 1 len array [] - let empty<'T> = ([| |] : 'T []) + let empty<'T> : 'T [] = [| |] [] [] - let blit (source : 'T[]) sourceIndex (target: 'T[]) targetIndex count = - checkNonNull "source" source - checkNonNull "target" target - if sourceIndex < 0 then invalidArg "sourceIndex" (SR.GetString(SR.inputMustBeNonNegative)) - if count < 0 then invalidArg "count" (SR.GetString(SR.inputMustBeNonNegative)) - if targetIndex < 0 then invalidArg "targetIndex" (SR.GetString(SR.inputMustBeNonNegative)) - if sourceIndex + count > source.Length then invalidArg "count" (SR.GetString(SR.outOfRange)) - if targetIndex + count > target.Length then invalidArg "count" (SR.GetString(SR.outOfRange)) + let inline blit (source : 'T[]) (sourceIndex:int) (target: 'T[]) (targetIndex:int) (count:int) = Array.Copy(source, sourceIndex, target, targetIndex, count) - // for i = 0 to count - 1 do - // target.[targetIndex+i] <- source.[sourceIndex + i] let rec concatAddLengths (arrs:'T[][]) i acc = if i >= arrs.Length then acc @@ -107,8 +99,8 @@ namespace Microsoft.FSharp.Collections concatBlit arrs (i+1) (j+len) tgt let concatArrays (arrs : 'T[][]) = - let res = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked (concatAddLengths arrs 0 0) - concatBlit arrs 0 0 res ; + let res = Array.zeroCreateUnchecked (concatAddLengths arrs 0 0) + concatBlit arrs 0 0 res res [] @@ -121,7 +113,7 @@ namespace Microsoft.FSharp.Collections [] let replicate count x = if count < 0 then invalidArg "count" (SR.GetString(SR.inputMustBeNonNegative)) - let arr = (Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked count : 'T array) + let arr : 'T array = Array.zeroCreateUnchecked count for i = 0 to count - 1 do arr.[i] <- x arr @@ -130,7 +122,7 @@ namespace Microsoft.FSharp.Collections let collect (f : 'T -> 'U[]) (array : 'T[]) : 'U[]= checkNonNull "array" array let len = array.Length - let result = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked<'U[]> len + let result = Array.zeroCreateUnchecked<'U[]> len for i = 0 to len - 1 do result.[i] <- f array.[i] concatArrays result @@ -138,39 +130,43 @@ namespace Microsoft.FSharp.Collections [] let splitAt index (array:'T[]) = checkNonNull "array" array - if index < 0 then invalidArg "index" (SR.GetString(SR.inputMustBeNonNegative)) - if array.Length < index then raise <| System.InvalidOperationException (SR.GetString(SR.notEnoughElements)) + if index < 0 then invalidArg "index" (SR.GetString(SR.inputMustBeNonNegative)) + if array.Length < index then raise <| InvalidOperationException (SR.GetString(SR.notEnoughElements)) if index = 0 then - let right = Microsoft.FSharp.Primitives.Basics.Array.subUnchecked 0 array.Length array + let right = Array.subUnchecked 0 array.Length array [||],right elif index = array.Length then - let left = Microsoft.FSharp.Primitives.Basics.Array.subUnchecked 0 array.Length array - left,[||] else - - let res1 = Microsoft.FSharp.Primitives.Basics.Array.subUnchecked 0 index array - let res2 = Microsoft.FSharp.Primitives.Basics.Array.subUnchecked index (array.Length-index) array + let left = Array.subUnchecked 0 array.Length array + left,[||] + else + let res1 = Array.subUnchecked 0 index array + let res2 = Array.subUnchecked index (array.Length-index) array - res1,res2 + res1,res2 [] let take count (array : 'T[]) = checkNonNull "array" array if count < 0 then invalidArg "count" (SR.GetString(SR.inputMustBeNonNegative)) - if count = 0 then empty else - if count > array.Length then - raise <| System.InvalidOperationException (SR.GetString(SR.notEnoughElements)) + if count = 0 then + empty + else + if count > array.Length then + raise <| InvalidOperationException (SR.GetString(SR.notEnoughElements)) - Microsoft.FSharp.Primitives.Basics.Array.subUnchecked 0 count array + Array.subUnchecked 0 count array [] let takeWhile predicate (array: 'T[]) = checkNonNull "array" array - if array.Length = 0 then empty else - let mutable count = 0 - while count < array.Length && predicate array.[count] do - count <- count + 1 + if array.Length = 0 then + empty + else + let mutable count = 0 + while count < array.Length && predicate array.[count] do + count <- count + 1 - Microsoft.FSharp.Primitives.Basics.Array.subUnchecked 0 count array + Array.subUnchecked 0 count array let inline countByImpl (comparer:IEqualityComparer<'SafeKey>) (projection:'T->'SafeKey) (getKey:'SafeKey->'Key) (array:'T[]) = let dict = Dictionary comparer @@ -181,7 +177,7 @@ namespace Microsoft.FSharp.Collections let mutable prev = Unchecked.defaultof<_> if dict.TryGetValue(safeKey, &prev) then dict.[safeKey] <- prev + 1 else dict.[safeKey] <- 1 - let res = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked dict.Count + let res = Array.zeroCreateUnchecked dict.Count let mutable i = 0 for group in dict do res.[i] <- getKey group.Key, group.Value @@ -192,7 +188,7 @@ namespace Microsoft.FSharp.Collections let countByValueType (projection:'T->'Key) (array:'T[]) = countByImpl HashIdentity.Structural<'Key> projection id array // Wrap a StructBox around all keys in case the key type is itself a type using null as a representation - let countByRefType (projection:'T->'Key) (array:'T[]) = countByImpl Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox<'Key>.Comparer (fun t -> Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox (projection t)) (fun sb -> sb.Value) array + let countByRefType (projection:'T->'Key) (array:'T[]) = countByImpl RuntimeHelpers.StructBox<'Key>.Comparer (fun t -> RuntimeHelpers.StructBox (projection t)) (fun sb -> sb.Value) array [] let countBy (projection:'T->'Key) (array:'T[]) = @@ -211,7 +207,7 @@ namespace Microsoft.FSharp.Collections checkNonNull "array2" array2 let n1 = array1.Length let n2 = array2.Length - let res : 'T[] = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked (n1 + n2) + let res : 'T[] = Array.zeroCreateUnchecked (n1 + n2) Array.Copy(array1, 0, res, 0, n1) Array.Copy(array2, 0, res, n1, n2) res @@ -234,18 +230,18 @@ namespace Microsoft.FSharp.Collections [] let toList array = checkNonNull "array" array - Microsoft.FSharp.Primitives.Basics.List.ofArray array + List.ofArray array [] let ofList list = checkNonNull "list" list - Microsoft.FSharp.Primitives.Basics.List.toArray list + List.toArray list [] let indexed (array: 'T[]) = checkNonNull "array" array let len = array.Length - let res = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked len + let res = Array.zeroCreateUnchecked len for i = 0 to len - 1 do res.[i] <- (i,array.[i]) res @@ -260,7 +256,7 @@ namespace Microsoft.FSharp.Collections [] let distinct (array:'T[]) = checkNonNull "array" array - let temp = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked array.Length + let temp = Array.zeroCreateUnchecked array.Length let mutable i = 0 let hashSet = HashSet<'T>(HashIdentity.Structural<'T>) @@ -269,13 +265,13 @@ namespace Microsoft.FSharp.Collections temp.[i] <- v i <- i + 1 - Microsoft.FSharp.Primitives.Basics.Array.subUnchecked 0 i temp + Array.subUnchecked 0 i temp [] let inline map (f: 'T -> 'U) (array:'T[]) = checkNonNull "array" array let len = array.Length - let res = (Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked len : 'U[]) + let res : 'U[] = Array.zeroCreateUnchecked len for i = 0 to len - 1 do res.[i] <- f array.[i] res @@ -293,7 +289,7 @@ namespace Microsoft.FSharp.Collections [] let distinctBy keyf (array:'T[]) = checkNonNull "array" array - let temp = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked array.Length + let temp = Array.zeroCreateUnchecked array.Length let mutable i = 0 let hashSet = HashSet<_>(HashIdentity.Structural<_>) for v in array do @@ -301,7 +297,7 @@ namespace Microsoft.FSharp.Collections temp.[i] <- v i <- i + 1 - Microsoft.FSharp.Primitives.Basics.Array.subUnchecked 0 i temp + Array.subUnchecked 0 i temp [] let map2 f (array1: 'T[]) (array2: 'U[]) = @@ -310,7 +306,7 @@ namespace Microsoft.FSharp.Collections let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f) let len1 = array1.Length if len1 <> array2.Length then invalidArg "array2" (SR.GetString(SR.arraysHadDifferentLengths)); - let res = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked len1 + let res = Array.zeroCreateUnchecked len1 for i = 0 to len1 - 1 do res.[i] <- f.Invoke(array1.[i], array2.[i]) res @@ -324,7 +320,7 @@ namespace Microsoft.FSharp.Collections let len1 = array1.Length if not (len1 = array2.Length && len1 = array3.Length) then invalidArg "" (SR.GetString(SR.arraysHadDifferentLengths)) - let res = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked len1 + let res = Array.zeroCreateUnchecked len1 for i = 0 to len1 - 1 do res.[i] <- f.Invoke(array1.[i], array2.[i], array3.[i]) res @@ -336,7 +332,7 @@ namespace Microsoft.FSharp.Collections let f = OptimizedClosures.FSharpFunc<_,_,_,_>.Adapt(f) let len1 = array1.Length if len1 <> array2.Length then invalidArg "array2" (SR.GetString(SR.arraysHadDifferentLengths)); - let res = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked len1 + let res = Array.zeroCreateUnchecked len1 for i = 0 to len1 - 1 do res.[i] <- f.Invoke(i,array1.[i], array2.[i]) res @@ -364,7 +360,7 @@ namespace Microsoft.FSharp.Collections checkNonNull "array" array let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f) let len = array.Length - let res = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked len + let res = Array.zeroCreateUnchecked len for i = 0 to len - 1 do res.[i] <- f.Invoke(i,array.[i]) res @@ -372,12 +368,12 @@ namespace Microsoft.FSharp.Collections [] let mapFold<'T,'State,'Result> (f : 'State -> 'T -> 'Result * 'State) acc array = checkNonNull "array" array - Microsoft.FSharp.Primitives.Basics.Array.mapFold f acc array + Array.mapFold f acc array [] let mapFoldBack<'T,'State,'Result> (f : 'T -> 'State -> 'Result * 'State) array acc = checkNonNull "array" array - Microsoft.FSharp.Primitives.Basics.Array.mapFoldBack f array acc + Array.mapFoldBack f array acc [] let exists (f: 'T -> bool) (array:'T[]) = @@ -391,7 +387,7 @@ namespace Microsoft.FSharp.Collections checkNonNull "array" array let mutable state = false let mutable i = 0 - while (not state && i < array.Length) do + while not state && i < array.Length do state <- e = array.[i] i <- i + 1 state @@ -439,7 +435,7 @@ namespace Microsoft.FSharp.Collections prev.Add v // Return the array-of-arrays. - let result = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked dict.Count + let result = Array.zeroCreateUnchecked dict.Count let mutable i = 0 for group in dict do result.[i] <- getKey group.Key, group.Value.ToArray() @@ -451,7 +447,7 @@ namespace Microsoft.FSharp.Collections let groupByValueType (keyf:'T->'Key) (array:'T[]) = groupByImpl HashIdentity.Structural<'Key> keyf id array // Wrap a StructBox around all keys in case the key type is itself a type using null as a representation - let groupByRefType (keyf:'T->'Key) (array:'T[]) = groupByImpl Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox<'Key>.Comparer (fun t -> Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox (keyf t)) (fun sb -> sb.Value) array + let groupByRefType (keyf:'T->'Key) (array:'T[]) = groupByImpl RuntimeHelpers.StructBox<'Key>.Comparer (fun t -> RuntimeHelpers.StructBox (keyf t)) (fun sb -> sb.Value) array [] let groupBy (keyf:'T->'Key) (array:'T[]) = @@ -485,25 +481,31 @@ namespace Microsoft.FSharp.Collections | None -> loop(i+1) | res -> res loop 0 - + [] let choose f (array: _[]) = checkNonNull "array" array - let res = new System.Collections.Generic.List<_>() // ResizeArray - for i = 0 to array.Length - 1 do - match f array.[i] with + let res = Array.zeroCreateUnchecked array.Length + let mutable count = 0 + for x in array do + match f x with | None -> () - | Some b -> res.Add(b) - res.ToArray() + | Some b -> res.[count] <- b + count <- count + 1 + Array.subUnchecked 0 count res + [] let filter f (array: _[]) = checkNonNull "array" array - let res = new System.Collections.Generic.List<_>() // ResizeArray - for i = 0 to array.Length - 1 do - let x = array.[i] - if f x then res.Add(x) - res.ToArray() + let res = Array.zeroCreateUnchecked array.Length + let mutable count = 0 + for x in array do + if f x then + res.[count] <- x + count <- count + 1 + Array.subUnchecked 0 count res + [] let where f (array: _[]) = filter f array @@ -522,12 +524,26 @@ namespace Microsoft.FSharp.Collections [] let partition f (array: _[]) = checkNonNull "array" array - let res1 = new System.Collections.Generic.List<_>() // ResizeArray - let res2 = new System.Collections.Generic.List<_>() // ResizeArray - for i = 0 to array.Length - 1 do - let x = array.[i] - if f x then res1.Add(x) else res2.Add(x) - res1.ToArray(), res2.ToArray() + let res = Array.zeroCreateUnchecked array.Length + let mutable upCount = 0 + let mutable downCount = array.Length-1 + for x in array do + if f x then + res.[upCount] <- x + upCount <- upCount + 1 + else + res.[downCount] <- x + downCount <- downCount - 1 + + let res1 = Array.subUnchecked 0 upCount res + let res2 = Array.zeroCreateUnchecked (array.Length - upCount) + + downCount <- array.Length-1 + for i = 0 to res2.Length-1 do + res2.[i] <- res.[downCount] + downCount <- downCount - 1 + + res1 , res2 [] let find f (array: _[]) = @@ -550,10 +566,10 @@ namespace Microsoft.FSharp.Collections checkNonNull "array" array if count > array.Length then invalidArg "count" (SR.GetString(SR.outOfRange)) if count = array.Length then - [| |] + empty else let count = max count 0 - Microsoft.FSharp.Primitives.Basics.Array.subUnchecked count (array.Length - count) array + Array.subUnchecked count (array.Length - count) array [] let skipWhile p (array: 'T[]) = @@ -563,29 +579,28 @@ namespace Microsoft.FSharp.Collections while i < len && p array.[i] do i <- i + 1 match len - i with - | 0 -> [| |] - | resLen -> - Microsoft.FSharp.Primitives.Basics.Array.subUnchecked i resLen array + | 0 -> empty + | resLen -> Array.subUnchecked i resLen array [] let findBack f (array: _[]) = checkNonNull "array" array - Microsoft.FSharp.Primitives.Basics.Array.findBack f array + Array.findBack f array [] let tryFindBack f (array: _[]) = checkNonNull "array" array - Microsoft.FSharp.Primitives.Basics.Array.tryFindBack f array + Array.tryFindBack f array [] let findIndexBack f (array : _[]) = checkNonNull "array" array - Microsoft.FSharp.Primitives.Basics.Array.findIndexBack f array + Array.findIndexBack f array [] let tryFindIndexBack f (array : _[]) = checkNonNull "array" array - Microsoft.FSharp.Primitives.Basics.Array.tryFindIndexBack f array + Array.tryFindIndexBack f array [] let windowed windowSize (array:'T[]) = @@ -593,11 +608,11 @@ namespace Microsoft.FSharp.Collections if windowSize <= 0 then invalidArg "windowSize" (SR.GetString(SR.inputMustBePositive)) let len = array.Length if windowSize > len then - [| |] + empty else - let res = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked (len - windowSize + 1) : 'T[][] + let res : 'T[][] = Array.zeroCreateUnchecked (len - windowSize + 1) for i = 0 to len - windowSize do - res.[i] <- Microsoft.FSharp.Primitives.Basics.Array.subUnchecked i windowSize array + res.[i] <- Array.subUnchecked i windowSize array res [] @@ -606,23 +621,23 @@ namespace Microsoft.FSharp.Collections if chunkSize <= 0 then invalidArg "chunkSize" (SR.GetString(SR.inputMustBePositive)) let len = array.Length if len = 0 then - [| |] + empty else if chunkSize > len then [| copy array |] else let chunkCount = (len - 1) / chunkSize + 1 - let res = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked chunkCount : 'T[][] + let res = Array.zeroCreateUnchecked chunkCount : 'T[][] for i = 0 to len / chunkSize - 1 do - res.[i] <- Microsoft.FSharp.Primitives.Basics.Array.subUnchecked (i * chunkSize) chunkSize array + res.[i] <- Array.subUnchecked (i * chunkSize) chunkSize array if len % chunkSize <> 0 then - res.[chunkCount - 1] <- Microsoft.FSharp.Primitives.Basics.Array.subUnchecked ((chunkCount - 1) * chunkSize) (len % chunkSize) array + res.[chunkCount - 1] <- Array.subUnchecked ((chunkCount - 1) * chunkSize) (len % chunkSize) array res [] let splitInto count (array:_[]) = checkNonNull "array" array if count <= 0 then invalidArg "count" (SR.GetString(SR.inputMustBePositive)) - Microsoft.FSharp.Primitives.Basics.Array.splitInto count array + Array.splitInto count array [] let zip (array1: _[]) (array2: _[]) = @@ -630,7 +645,7 @@ namespace Microsoft.FSharp.Collections checkNonNull "array2" array2 let len1 = array1.Length if len1 <> array2.Length then invalidArg "array2" (SR.GetString(SR.arraysHadDifferentLengths)) - let res = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked len1 + let res = Array.zeroCreateUnchecked len1 for i = 0 to len1 - 1 do res.[i] <- (array1.[i],array2.[i]) res @@ -643,7 +658,7 @@ namespace Microsoft.FSharp.Collections let len1 = array1.Length if len1 <> array2.Length then invalidArg "array2" (SR.GetString(SR.arraysHadDifferentLengths)) if len1 <> array3.Length then invalidArg "array3" (SR.GetString(SR.arraysHadDifferentLengths)) - let res = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked len1 + let res = Array.zeroCreateUnchecked len1 for i = 0 to len1 - 1 do res.[i] <- (array1.[i],array2.[i],array3.[i]) res @@ -654,7 +669,7 @@ namespace Microsoft.FSharp.Collections checkNonNull "array2" array2 let len1 = array1.Length let len2 = array2.Length - let res = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked (len1 * len2) + let res = Array.zeroCreateUnchecked (len1 * len2) for i = 0 to len1 - 1 do for j = 0 to len2 - 1 do res.[i * len2 + j] <- (array1.[i],array2.[j]) @@ -676,33 +691,33 @@ namespace Microsoft.FSharp.Collections let unzip (array: _[]) = checkNonNull "array" array let len = array.Length - let res1 = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked len - let res2 = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked len + let res1 = Array.zeroCreateUnchecked len + let res2 = Array.zeroCreateUnchecked len for i = 0 to len - 1 do let x,y = array.[i] - res1.[i] <- x; - res2.[i] <- y; + res1.[i] <- x + res2.[i] <- y res1,res2 [] let unzip3 (array: _[]) = checkNonNull "array" array let len = array.Length - let res1 = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked len - let res2 = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked len - let res3 = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked len + let res1 = Array.zeroCreateUnchecked len + let res2 = Array.zeroCreateUnchecked len + let res3 = Array.zeroCreateUnchecked len for i = 0 to len - 1 do let x,y,z = array.[i] - res1.[i] <- x; - res2.[i] <- y; - res3.[i] <- z; + res1.[i] <- x + res2.[i] <- y + res3.[i] <- z res1,res2,res3 [] let rev (array: _[]) = checkNonNull "array" array let len = array.Length - let res = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked len + let res = Array.zeroCreateUnchecked len for i = 0 to len - 1 do res.[(len - i) - 1] <- array.[i] res @@ -780,7 +795,7 @@ namespace Microsoft.FSharp.Collections [] let scanBack<'T,'State> f (array : 'T[]) (acc:'State) = checkNonNull "array" array - Microsoft.FSharp.Primitives.Basics.Array.scanSubRight f array 0 (array.Length - 1) acc + Array.scanSubRight f array 0 (array.Length - 1) acc [] let inline singleton value = [|value|] @@ -788,7 +803,7 @@ namespace Microsoft.FSharp.Collections [] let pairwise (array: 'T[]) = checkNonNull "array" array - if array.Length < 2 then [||] else + if array.Length < 2 then empty else init (array.Length-1) (fun i -> array.[i],array.[i+1]) [] @@ -823,37 +838,37 @@ namespace Microsoft.FSharp.Collections array.[0] <- array.[1]; array.[1] <- tmp else - System.Array.Sort(array, ComparisonIdentity.FromFunction(f)) + Array.Sort(array, ComparisonIdentity.FromFunction(f)) [] let sortInPlaceBy (f: 'T -> 'U) (array : 'T[]) = checkNonNull "array" array - Microsoft.FSharp.Primitives.Basics.Array.unstableSortInPlaceBy f array + Array.unstableSortInPlaceBy f array [] let sortInPlace (array : 'T[]) = checkNonNull "array" array - Microsoft.FSharp.Primitives.Basics.Array.unstableSortInPlace array + Array.unstableSortInPlace array [] let sortWith (f: 'T -> 'T -> int) (array : 'T[]) = checkNonNull "array" array let result = copy array - sortInPlaceWith f result; + sortInPlaceWith f result result [] let sortBy f array = checkNonNull "array" array let result = copy array - sortInPlaceBy f result; + sortInPlaceBy f result result [] let sort array = checkNonNull "array" array let result = copy array - sortInPlace result; + sortInPlace result result [] @@ -874,7 +889,7 @@ namespace Microsoft.FSharp.Collections Seq.ofArray array [] - let ofSeq source = + let ofSeq source = checkNonNull "source" source Seq.toArray source @@ -900,7 +915,7 @@ namespace Microsoft.FSharp.Collections [] let permute p (array : _[]) = checkNonNull "array" array - Microsoft.FSharp.Primitives.Basics.Array.permute p array + Array.permute p array [] let inline sum (array: (^T)[] ) : ^T = @@ -951,7 +966,7 @@ namespace Microsoft.FSharp.Collections for i = 1 to array.Length - 1 do let curr = array.[i] if curr > acc then - acc <- curr + acc <- curr acc [] @@ -969,9 +984,13 @@ namespace Microsoft.FSharp.Collections accv [] - let inline average (array:_[]) = + let inline average (array:'T[]) = checkNonNull "array" array - Seq.average array + if array.Length = 0 then invalidArg "array" LanguagePrimitives.ErrorStrings.InputArrayEmptyString + let mutable acc = LanguagePrimitives.GenericZero< (^T) > + for i = 0 to array.Length - 1 do + acc <- Checked.(+) acc array.[i] + LanguagePrimitives.DivideByInt< (^T) > acc array.Length [] let inline averageBy f (array:_[]) = @@ -1005,7 +1024,7 @@ namespace Microsoft.FSharp.Collections if startIndex < 0 then invalidArg "startIndex" (SR.GetString(SR.inputMustBeNonNegative)) if count < 0 then invalidArg "count" (SR.GetString(SR.inputMustBeNonNegative)) if startIndex + count > array.Length then invalidArg "count" (SR.GetString(SR.outOfRange)) - Microsoft.FSharp.Primitives.Basics.Array.subUnchecked startIndex count array + Array.subUnchecked startIndex count array [] let item n (array:_[]) = @@ -1047,7 +1066,7 @@ namespace Microsoft.FSharp.Collections else let len = array.Length let count' = Operators.min count len - Microsoft.FSharp.Primitives.Basics.Array.subUnchecked 0 count' array + Array.subUnchecked 0 count' array #if FX_NO_TPL_PARALLEL #else @@ -1060,8 +1079,8 @@ namespace Microsoft.FSharp.Collections let inputLength = array.Length let lastInputIndex = inputLength - 1 - let isChosen : bool [] = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked inputLength - let results : 'U [] = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked inputLength + let isChosen : bool [] = Array.zeroCreateUnchecked inputLength + let results : 'U [] = Array.zeroCreateUnchecked inputLength Parallel.For(0, inputLength, (fun i -> match f array.[i] with @@ -1076,7 +1095,7 @@ namespace Microsoft.FSharp.Collections if isChosen.[i] then outputLength <- outputLength + 1 - let output = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked outputLength + let output = Array.zeroCreateUnchecked outputLength let mutable curr = 0 for i = 0 to lastInputIndex do if isChosen.[i] then @@ -1088,7 +1107,7 @@ namespace Microsoft.FSharp.Collections let collect (f : 'T -> 'U[]) (array : 'T[]) : 'U[]= checkNonNull "array" array let inputLength = array.Length - let result = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked inputLength + let result = Array.zeroCreateUnchecked inputLength Parallel.For(0, inputLength, (fun i -> result.[i] <- f array.[i])) |> ignore concatArrays result @@ -1097,7 +1116,7 @@ namespace Microsoft.FSharp.Collections let map (f: 'T -> 'U) (array : 'T[]) : 'U[]= checkNonNull "array" array let inputLength = array.Length - let result = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked inputLength + let result = Array.zeroCreateUnchecked inputLength Parallel.For(0, inputLength, fun i -> result.[i] <- f array.[i]) |> ignore result @@ -1107,7 +1126,7 @@ namespace Microsoft.FSharp.Collections checkNonNull "array" array let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f) let inputLength = array.Length - let result = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked inputLength + let result = Array.zeroCreateUnchecked inputLength Parallel.For(0, inputLength, fun i -> result.[i] <- f.Invoke (i, array.[i])) |> ignore result @@ -1125,7 +1144,7 @@ namespace Microsoft.FSharp.Collections [] let init count f = - let result = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked count + let result = Array.zeroCreateUnchecked count Parallel.For (0, count, fun i -> result.[i] <- f i) |> ignore result @@ -1135,7 +1154,7 @@ namespace Microsoft.FSharp.Collections let inputLength = array.Length let lastInputIndex = inputLength - 1 - let isTrue = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked inputLength + let isTrue = Array.zeroCreateUnchecked inputLength Parallel.For(0, inputLength, fun i -> isTrue.[i] <- predicate array.[i] ) |> ignore @@ -1144,8 +1163,8 @@ namespace Microsoft.FSharp.Collections for i in 0 .. lastInputIndex do if isTrue.[i] then trueLength <- trueLength + 1 - let trueResult = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked trueLength - let falseResult = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked (inputLength - trueLength) + let trueResult = Array.zeroCreateUnchecked trueLength + let falseResult = Array.zeroCreateUnchecked (inputLength - trueLength) let mutable iTrue = 0 let mutable iFalse = 0 for i = 0 to lastInputIndex do @@ -1157,4 +1176,4 @@ namespace Microsoft.FSharp.Collections iFalse <- iFalse + 1 (trueResult, falseResult) -#endif +#endif diff --git a/src/fsharp/FSharp.Core/array.fsi b/src/fsharp/FSharp.Core/array.fsi index 8798ce493c7..9c14e22f2b3 100644 --- a/src/fsharp/FSharp.Core/array.fsi +++ b/src/fsharp/FSharp.Core/array.fsi @@ -62,7 +62,7 @@ namespace Microsoft.FSharp.Collections /// Thrown when any of sourceIndex, targetIndex or count are negative, /// or when there aren't enough elements in source or target. [] - val blit: source:'T[] -> sourceIndex:int -> target:'T[] -> targetIndex:int -> count:int -> unit + val inline blit: source:'T[] -> sourceIndex:int -> target:'T[] -> targetIndex:int -> count:int -> unit ///

For each element of the array, applies the given function. Concatenates all the results and return the combined array. /// The function to create sub-arrays from the input array elements. @@ -72,17 +72,18 @@ namespace Microsoft.FSharp.Collections [] val collect : mapping:('T -> 'U[]) -> array:'T[] -> 'U[] - /// Compares two arrays using the given comparison function, element by element. - /// Returns the first non-zero result from the comparison function. If the end of an array - /// is reached it returns a -1 if the first array is shorter and a 1 if the second array - /// is shorter. + /// Compares two arrays using the given comparison function, element by element. /// /// A function that takes an element from each array and returns an int. /// If it evaluates to a non-zero value iteration is stopped and that value is returned. /// The first input array. /// The second input array. /// - /// The first non-zero value from the comparison function. + /// Returns the first non-zero result from the comparison function. If the first array has + /// a larger element, the return value is always positive. If the second array has a larger + /// element, the return value is always negative. When the elements are equal in the two + /// arrays, 1 is returned if the first array is longer, 0 is returned if they are equal in + /// length, and -1 is returned when the second array is longer. /// /// Thrown when either of the input arrays /// is null. diff --git a/src/fsharp/FSharp.Core/array2.fs b/src/fsharp/FSharp.Core/array2.fs index fd3784ad477..bcab855a895 100644 --- a/src/fsharp/FSharp.Core/array2.fs +++ b/src/fsharp/FSharp.Core/array2.fs @@ -2,12 +2,10 @@ namespace Microsoft.FSharp.Collections - open System.Diagnostics - open Microsoft.FSharp.Collections + open System open Microsoft.FSharp.Core open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators open Microsoft.FSharp.Core.Operators - open Microsoft.FSharp.Primitives.Basics open Microsoft.FSharp.Core.Operators.Checked [] @@ -54,9 +52,9 @@ namespace Microsoft.FSharp.Collections #endif else #if FX_NO_BASED_ARRAYS - raise (new System.NotSupportedException(SR.GetString(SR.nonZeroBasedDisallowed))) + raise (NotSupportedException(SR.GetString(SR.nonZeroBasedDisallowed))) #else - (System.Array.CreateInstance(typeof<'T>, [|n1;n2|],[|b1;b2|]) :?> 'T[,]) + (Array.CreateInstance(typeof<'T>, [|n1;n2|],[|b1;b2|]) :?> 'T[,]) #endif [] diff --git a/src/fsharp/FSharp.Core/collections.fs b/src/fsharp/FSharp.Core/collections.fs index 07e207db164..b089c416ce7 100644 --- a/src/fsharp/FSharp.Core/collections.fs +++ b/src/fsharp/FSharp.Core/collections.fs @@ -5,13 +5,7 @@ namespace Microsoft.FSharp.Collections #nowarn "51" open Microsoft.FSharp.Core - open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators open Microsoft.FSharp.Core.Operators - open Microsoft.FSharp.Collections - open Microsoft.FSharp.Primitives.Basics - open System - open System.Diagnostics - open System.Collections open System.Collections.Generic module HashIdentity = @@ -25,19 +19,19 @@ namespace Microsoft.FSharp.Collections let Reference<'T when 'T : not struct > : IEqualityComparer<'T> = { new IEqualityComparer<'T> with - member self.GetHashCode(x) = LanguagePrimitives.PhysicalHash(x) - member self.Equals(x,y) = LanguagePrimitives.PhysicalEquality x y } + member __.GetHashCode(x) = LanguagePrimitives.PhysicalHash(x) + member __.Equals(x,y) = LanguagePrimitives.PhysicalEquality x y } let inline NonStructural< 'T when 'T : equality and 'T : (static member ( = ) : 'T * 'T -> bool) > = { new IEqualityComparer< 'T > with - member self.GetHashCode(x) = NonStructuralComparison.hash x - member self.Equals(x, y) = NonStructuralComparison.(=) x y } + member __.GetHashCode(x) = NonStructuralComparison.hash x + member __.Equals(x, y) = NonStructuralComparison.(=) x y } let inline FromFunctions hash eq : IEqualityComparer<'T> = let eq = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(eq) { new IEqualityComparer<'T> with - member self.GetHashCode(x) = hash x - member self.Equals(x,y) = eq.Invoke(x,y) } + member __.GetHashCode(x) = hash x + member __.Equals(x,y) = eq.Invoke(x,y) } module ComparisonIdentity = @@ -49,11 +43,11 @@ namespace Microsoft.FSharp.Collections #else let inline NonStructural< 'T when 'T : (static member ( < ) : 'T * 'T -> bool) and 'T : (static member ( > ) : 'T * 'T -> bool) > : IComparer< 'T > = { new IComparer<'T> with - member self.Compare(x,y) = NonStructuralComparison.compare x y } + member __.Compare(x,y) = NonStructuralComparison.compare x y } #endif let FromFunction comparer = let comparer = OptimizedClosures.FSharpFunc<'T,'T,int>.Adapt(comparer) { new IComparer<'T> with - member self.Compare(x,y) = comparer.Invoke(x,y) } + member __.Compare(x,y) = comparer.Invoke(x,y) } diff --git a/src/fsharp/FSharp.Core/control.fs b/src/fsharp/FSharp.Core/control.fs index 298da186887..0cef9daf773 100644 --- a/src/fsharp/FSharp.Core/control.fs +++ b/src/fsharp/FSharp.Core/control.fs @@ -298,7 +298,7 @@ namespace Microsoft.FSharp.Control #if FX_RESHAPED_REFLECTION open ReflectionAdapters - type BindingFlags = ReflectionAdapters.BindingFlags + type internal BindingFlags = ReflectionAdapters.BindingFlags #else type BindingFlags = System.Reflection.BindingFlags #endif @@ -600,7 +600,7 @@ namespace Microsoft.FSharp.Control let mutable defaultCancellationTokenSource = new CancellationTokenSource() [] - type Result<'T> = + type AsyncImplResult<'T> = | Ok of 'T | Error of ExceptionDispatchInfo | Canceled of OperationCanceledException @@ -804,9 +804,9 @@ namespace Microsoft.FSharp.Control let reify res = unprotectedPrimitive (fun args -> match res with - | Result.Ok r -> args.cont r - | Result.Error e -> args.aux.econt e - | Result.Canceled oce -> args.aux.ccont oce) + | AsyncImplResult.Ok r -> args.cont r + | AsyncImplResult.Error e -> args.aux.econt e + | AsyncImplResult.Canceled oce -> args.aux.ccont oce) //---------------------------------- // BUILDER OPREATIONS @@ -1235,7 +1235,7 @@ namespace Microsoft.FSharp.Control let subSource = new LinkedSubSource(token) subSource.Token, Some subSource - use resultCell = new ResultCell>() + use resultCell = new ResultCell>() queueAsync token (fun res -> resultCell.RegisterResult(Ok(res),reuseThread=true)) @@ -1261,7 +1261,7 @@ namespace Microsoft.FSharp.Control commit res let private RunSynchronouslyInCurrentThread (token:CancellationToken,computation) = - use resultCell = new ResultCell>() + use resultCell = new ResultCell>() let trampolineHolder = TrampolineHolder() trampolineHolder.Protect @@ -1791,7 +1791,7 @@ namespace Microsoft.FSharp.Control /// Await the result of a result cell without a timeout - static member ReifyResult(result:Result<'T>) : Async<'T> = + static member ReifyResult(result:AsyncImplResult<'T>) : Async<'T> = unprotectedPrimitive(fun ({ aux = aux } as args) -> (match result with | Ok v -> args.cont v @@ -1799,7 +1799,7 @@ namespace Microsoft.FSharp.Control | Canceled exn -> aux.ccont exn) ) /// Await the result of a result cell without a timeout - static member AwaitAndReifyResult(resultCell:ResultCell>) : Async<'T> = + static member AwaitAndReifyResult(resultCell:ResultCell>) : Async<'T> = async { let! result = resultCell.AwaitResult return! Async.ReifyResult(result) @@ -1811,7 +1811,7 @@ namespace Microsoft.FSharp.Control /// /// Always resyncs to the synchronization context if needed, by virtue of it being built /// from primitives which resync. - static member AsyncWaitAsyncWithTimeout(innerCTS : CancellationTokenSource, resultCell:ResultCell>,millisecondsTimeout) : Async<'T> = + static member AsyncWaitAsyncWithTimeout(innerCTS : CancellationTokenSource, resultCell:ResultCell>,millisecondsTimeout) : Async<'T> = match millisecondsTimeout with | None | Some -1 -> resultCell |> Async.AwaitAndReifyResult @@ -1917,9 +1917,9 @@ namespace Microsoft.FSharp.Control let cts = new CancellationTokenSource() - let result = new ResultCell>() + let result = new ResultCell>() - member s.SetResult(v: Result<'T>) = + member s.SetResult(v: AsyncImplResult<'T>) = result.RegisterResult(v,reuseThread=true) |> unfake match callback with | null -> () @@ -2206,7 +2206,7 @@ namespace Microsoft.FSharp.Control | :? System.Net.WebException as webExn when webExn.Status = System.Net.WebExceptionStatus.RequestCanceled && !canceled -> - Async.ReifyResult(Result.Canceled (OperationCanceledException webExn.Message)) + Async.ReifyResult(AsyncImplResult.Canceled (OperationCanceledException webExn.Message)) | _ -> edi.ThrowAny()) @@ -2278,9 +2278,9 @@ namespace Microsoft.FSharp.Control let! ct = Async.CancellationToken let start a f = Async.StartWithContinuationsUsingDispatchInfo(a, - (fun res -> c.RegisterResult(f res |> Result.Ok, reuseThread=false) |> unfake), - (fun edi -> c.RegisterResult(edi |> Result.Error, reuseThread=false) |> unfake), - (fun oce -> c.RegisterResult(oce |> Result.Canceled, reuseThread=false) |> unfake), + (fun res -> c.RegisterResult(f res |> AsyncImplResult.Ok, reuseThread=false) |> unfake), + (fun edi -> c.RegisterResult(edi |> AsyncImplResult.Error, reuseThread=false) |> unfake), + (fun oce -> c.RegisterResult(oce |> AsyncImplResult.Canceled, reuseThread=false) |> unfake), cancellationToken = ct ) start a1 Choice1Of2 diff --git a/src/fsharp/FSharp.Core/event.fs b/src/fsharp/FSharp.Core/event.fs index f5e1c87ff31..26a74099e00 100644 --- a/src/fsharp/FSharp.Core/event.fs +++ b/src/fsharp/FSharp.Core/event.fs @@ -13,7 +13,7 @@ namespace Microsoft.FSharp.Control #if FX_RESHAPED_REFLECTION open ReflectionAdapters - type BindingFlags = ReflectionAdapters.BindingFlags + type internal BindingFlags = ReflectionAdapters.BindingFlags #endif #if FX_NO_DELEGATE_DYNAMIC_METHOD diff --git a/src/fsharp/FSharp.Core/list.fs b/src/fsharp/FSharp.Core/list.fs index abc2137f6a2..608e4f6fd34 100644 --- a/src/fsharp/FSharp.Core/list.fs +++ b/src/fsharp/FSharp.Core/list.fs @@ -2,22 +2,23 @@ namespace Microsoft.FSharp.Collections - open System.Diagnostics - open System.Reflection open Microsoft.FSharp.Core open Microsoft.FSharp.Core.Operators open Microsoft.FSharp.Core.LanguagePrimitives open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators open Microsoft.FSharp.Collections + open Microsoft.FSharp.Core.CompilerServices open Microsoft.FSharp.Primitives.Basics open System.Collections.Generic - open Microsoft.FSharp.Core.SR +#if FX_RESHAPED_REFLECTION + open System.Reflection +#endif [] [] module List = - let inline indexNotFound() = raise (new System.Collections.Generic.KeyNotFoundException(SR.GetString(SR.keyNotFoundAlt))) + let inline indexNotFound() = raise (KeyNotFoundException(SR.GetString(SR.keyNotFoundAlt))) [] let length (list: 'T list) = list.Length @@ -37,10 +38,10 @@ namespace Microsoft.FSharp.Collections | [] -> None [] - let rev list = Microsoft.FSharp.Primitives.Basics.List.rev list + let rev list = List.rev list [] - let concat lists = Microsoft.FSharp.Primitives.Basics.List.concat lists + let concat lists = List.concat lists let inline countByImpl (comparer:IEqualityComparer<'SafeKey>) (projection:'T->'SafeKey) (getKey:'SafeKey->'Key) (list:'T list) = let dict = Dictionary comparer @@ -53,16 +54,13 @@ namespace Microsoft.FSharp.Collections if dict.TryGetValue(safeKey, &prev) then dict.[safeKey] <- prev + 1 else dict.[safeKey] <- 1 loop t loop list - let mutable result = [] - for group in dict do - result <- (getKey group.Key, group.Value) :: result - result |> rev + List.countBy dict getKey // We avoid wrapping a StructBox, because under 64 JIT we get some "hard" tailcalls which affect performance let countByValueType (projection:'T->'Key) (list:'T list) = countByImpl HashIdentity.Structural<'Key> projection id list // Wrap a StructBox around all keys in case the key type is itself a type using null as a representation - let countByRefType (projection:'T->'Key) (list:'T list) = countByImpl Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox<'Key>.Comparer (fun t -> Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox (projection t)) (fun sb -> sb.Value) list + let countByRefType (projection:'T->'Key) (list:'T list) = countByImpl RuntimeHelpers.StructBox<'Key>.Comparer (fun t -> RuntimeHelpers.StructBox (projection t)) (fun sb -> sb.Value) list [] let countBy (projection:'T->'Key) (list:'T list) = @@ -75,17 +73,17 @@ namespace Microsoft.FSharp.Collections else countByRefType projection list [] - let map f list = Microsoft.FSharp.Primitives.Basics.List.map f list + let map f list = List.map f list [] - let mapi f list = Microsoft.FSharp.Primitives.Basics.List.mapi f list + let mapi f list = List.mapi f list [] - let indexed list = Microsoft.FSharp.Primitives.Basics.List.indexed list + let indexed list = List.indexed list [] let mapFold<'T,'State,'Result> (f:'State -> 'T -> 'Result * 'State) acc list = - Microsoft.FSharp.Primitives.Basics.List.mapFold f acc list + List.mapFold f acc list [] let mapFoldBack<'T,'State,'Result> (f:'T -> 'State -> 'Result * 'State) list acc = @@ -103,31 +101,31 @@ namespace Microsoft.FSharp.Collections loop ([], acc) (rev list) [] - let iter f list = Microsoft.FSharp.Primitives.Basics.List.iter f list + let iter f list = List.iter f list [] - let distinct (list:'T list) = Microsoft.FSharp.Primitives.Basics.List.distinctWithComparer HashIdentity.Structural<'T> list + let distinct (list:'T list) = List.distinctWithComparer HashIdentity.Structural<'T> list [] - let distinctBy keyf (list:'T list) = Microsoft.FSharp.Primitives.Basics.List.distinctByWithComparer HashIdentity.Structural<_> keyf list + let distinctBy keyf (list:'T list) = List.distinctByWithComparer HashIdentity.Structural<_> keyf list [] - let ofArray (array:'T array) = Microsoft.FSharp.Primitives.Basics.List.ofArray array + let ofArray (array:'T array) = List.ofArray array [] - let toArray (list:'T list) = Microsoft.FSharp.Primitives.Basics.List.toArray list + let toArray (list:'T list) = List.toArray list [] let empty<'T> = ([ ] : 'T list) [] - let head list = match list with (x:: _) -> x | [] -> invalidArg "list" (SR.GetString(SR.inputListWasEmpty)) + let head list = match list with x::_ -> x | [] -> invalidArg "list" (SR.GetString(SR.inputListWasEmpty)) [] - let tryHead list = match list with (x:: _) -> Some x | [] -> None + let tryHead list = match list with x::_ -> Some x | [] -> None [] - let tail list = match list with (_ :: t) -> t | [] -> invalidArg "list" (SR.GetString(SR.inputListWasEmpty)) + let tail list = match list with _::t -> t | [] -> invalidArg "list" (SR.GetString(SR.inputListWasEmpty)) [] let isEmpty list = match list with [] -> true | _ -> false @@ -154,31 +152,23 @@ namespace Microsoft.FSharp.Collections [] let nth list index = item index list - let rec chooseAllAcc f xs acc = - match xs with - | [] -> rev acc - | h :: t -> - match f h with - | None -> chooseAllAcc f t acc - | Some x -> chooseAllAcc f t (x::acc) - [] - let choose f xs = chooseAllAcc f xs [] + let choose f xs = Microsoft.FSharp.Primitives.Basics.List.choose f xs [] - let splitAt index (list:'T list) = Microsoft.FSharp.Primitives.Basics.List.splitAt index list + let splitAt index (list:'T list) = List.splitAt index list [] - let take count (list : 'T list) = Microsoft.FSharp.Primitives.Basics.List.take count list + let take count (list : 'T list) = List.take count list [] - let takeWhile p (list: 'T list) = Microsoft.FSharp.Primitives.Basics.List.takeWhile p list + let takeWhile p (list: 'T list) = List.takeWhile p list [] - let iteri f list = Microsoft.FSharp.Primitives.Basics.List.iteri f list + let iteri f list = List.iteri f list [] - let init count f = Microsoft.FSharp.Primitives.Basics.List.init count f + let init count f = List.init count f let rec initConstAcc n x acc = if n <= 0 then acc else initConstAcc (n-1) x (x::acc) @@ -194,7 +184,7 @@ namespace Microsoft.FSharp.Collections let rec loop list1 list2 = match list1,list2 with | [],[] -> () - | (h1::t1), (h2::t2) -> f.Invoke(h1,h2); loop t1 t2 + | h1::t1, h2::t2 -> f.Invoke(h1,h2); loop t1 t2 | _ -> invalidArg "list2" (SR.GetString(SR.listsHadDifferentLengths)) loop list1 list2 @@ -204,34 +194,20 @@ namespace Microsoft.FSharp.Collections let rec loop n list1 list2 = match list1,list2 with | [],[] -> () - | (h1::t1), (h2::t2) -> f.Invoke(n,h1,h2); loop (n+1) t1 t2 + | h1::t1, h2::t2 -> f.Invoke(n,h1,h2); loop (n+1) t1 t2 | _ -> invalidArg "list2" (SR.GetString(SR.listsHadDifferentLengths)) loop 0 list1 list2 - - let rec map3aux (f:OptimizedClosures.FSharpFunc<_,_,_,_>) list1 list2 list3 acc = - match list1,list2,list3 with - | [],[],[] -> rev acc - | (h1::t1), (h2::t2),(h3::t3) -> let x = f.Invoke(h1,h2,h3) in map3aux f t1 t2 t3 (x :: acc) - | _ -> invalidArg "list3" (SR.GetString(SR.listsHadDifferentLengths)) [] let map3 f list1 list2 list3 = - let f = OptimizedClosures.FSharpFunc<_,_,_,_>.Adapt(f) - map3aux f list1 list2 list3 [] - - let rec mapi2aux n (f:OptimizedClosures.FSharpFunc<_,_,_,_>) list1 list2 acc = - match list1,list2 with - | [],[] -> rev acc - | (h1::t1), (h2::t2) -> let x = f.Invoke(n,h1,h2) in mapi2aux (n+1) f t1 t2 (x :: acc) - | _ -> invalidArg "list2" (SR.GetString(SR.listsHadDifferentLengths)) + List.map3 f list1 list2 list3 [] let mapi2 f list1 list2 = - let f = OptimizedClosures.FSharpFunc<_,_,_,_>.Adapt(f) - mapi2aux 0 f list1 list2 [] + List.mapi2 f list1 list2 [] - let map2 f list1 list2 = Microsoft.FSharp.Primitives.Basics.List.map2 f list1 list2 + let map2 f list1 list2 = List.map2 f list1 list2 [] let fold<'T,'State> f (s:'State) (list: 'T list) = @@ -247,25 +223,17 @@ namespace Microsoft.FSharp.Collections [] let pairwise (list: 'T list) = - let array = List.toArray list - if array.Length < 2 then [] else - List.init (array.Length-1) (fun i -> array.[i],array.[i+1]) - + Microsoft.FSharp.Primitives.Basics.List.pairwise list [] let reduce f list = match list with | [] -> invalidArg "list" (SR.GetString(SR.inputListWasEmpty)) - | (h::t) -> fold f h t + | h::t -> fold f h t [] let scan<'T,'State> f (s:'State) (list:'T list) = - let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f) - let rec loop s xs acc = - match xs with - | [] -> rev acc - | (h::t) -> let s = f.Invoke(s,h) in loop s t (s :: acc) - loop s list [s] + List.scan f s list [] let inline singleton value = [value] @@ -276,7 +244,7 @@ namespace Microsoft.FSharp.Collections let rec loop acc list1 list2 = match list1,list2 with | [],[] -> acc - | (h1::t1),(h2::t2) -> loop (f.Invoke(acc,h1,h2)) t1 t2 + | h1::t1, h2::t2 -> loop (f.Invoke(acc,h1,h2)) t1 t2 | _ -> invalidArg "list2" (SR.GetString(SR.listsHadDifferentLengths)) loop acc list1 list2 @@ -363,7 +331,7 @@ namespace Microsoft.FSharp.Collections let rec forall2aux (f:OptimizedClosures.FSharpFunc<_,_,_>) list1 list2 = match list1,list2 with | [],[] -> true - | (h1::t1),(h2::t2) -> f.Invoke(h1,h2) && forall2aux f t1 t2 + | h1::t1, h2::t2 -> f.Invoke(h1,h2) && forall2aux f t1 t2 | _ -> invalidArg "list2" (SR.GetString(SR.listsHadDifferentLengths)) [] @@ -375,23 +343,23 @@ namespace Microsoft.FSharp.Collections forall2aux f list1 list2 [] - let forall f list1 = Microsoft.FSharp.Primitives.Basics.List.forall f list1 + let forall f list1 = List.forall f list1 [] - let exists f list1 = Microsoft.FSharp.Primitives.Basics.List.exists f list1 + let exists f list1 = List.exists f list1 [] let inline contains e list1 = let rec contains e xs1 = match xs1 with | [] -> false - | (h1::t1) -> e = h1 || contains e t1 + | h1::t1 -> e = h1 || contains e t1 contains e list1 let rec exists2aux (f:OptimizedClosures.FSharpFunc<_,_,_>) list1 list2 = match list1,list2 with | [],[] -> false - | (h1::t1),(h2::t2) ->f.Invoke(h1,h2) || exists2aux f t1 t2 + | h1::t1, h2::t2 ->f.Invoke(h1,h2) || exists2aux f t1 t2 | _ -> invalidArg "list2" (SR.GetString(SR.listsHadDifferentLengths)) [] @@ -433,7 +401,7 @@ namespace Microsoft.FSharp.Collections | Some r -> r [] - let filter f x = Microsoft.FSharp.Primitives.Basics.List.filter f x + let filter f x = List.filter f x [] let except itemsToExclude list = @@ -448,7 +416,7 @@ namespace Microsoft.FSharp.Collections list |> filter cached.Add [] - let where f x = Microsoft.FSharp.Primitives.Basics.List.filter f x + let where f x = List.filter f x let inline groupByImpl (comparer:IEqualityComparer<'SafeKey>) (keyf:'T->'SafeKey) (getKey:'SafeKey->'Key) (list: 'T list) = let dict = Dictionary<_,ResizeArray<_>> comparer @@ -478,7 +446,7 @@ namespace Microsoft.FSharp.Collections let groupByValueType (keyf:'T->'Key) (list:'T list) = groupByImpl HashIdentity.Structural<'Key> keyf id list // Wrap a StructBox around all keys in case the key type is itself a type using null as a representation - let groupByRefType (keyf:'T->'Key) (list:'T list) = groupByImpl Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox<'Key>.Comparer (fun t -> Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox (keyf t)) (fun sb -> sb.Value) list + let groupByRefType (keyf:'T->'Key) (list:'T list) = groupByImpl RuntimeHelpers.StructBox<'Key>.Comparer (fun t -> RuntimeHelpers.StructBox (keyf t)) (fun sb -> sb.Value) list [] let groupBy (keyf:'T->'Key) (list:'T list) = @@ -491,28 +459,28 @@ namespace Microsoft.FSharp.Collections else groupByRefType keyf list [] - let partition p x = Microsoft.FSharp.Primitives.Basics.List.partition p x + let partition p x = List.partition p x [] - let unzip x = Microsoft.FSharp.Primitives.Basics.List.unzip x + let unzip x = List.unzip x [] - let unzip3 x = Microsoft.FSharp.Primitives.Basics.List.unzip3 x + let unzip3 x = List.unzip3 x [] - let windowed n x = Microsoft.FSharp.Primitives.Basics.List.windowed n x + let windowed n x = List.windowed n x [] - let chunkBySize chunkSize list = Microsoft.FSharp.Primitives.Basics.List.chunkBySize chunkSize list + let chunkBySize chunkSize list = List.chunkBySize chunkSize list [] - let splitInto count list = Microsoft.FSharp.Primitives.Basics.List.splitInto count list + let splitInto count list = List.splitInto count list [] - let zip x1 x2 = Microsoft.FSharp.Primitives.Basics.List.zip x1 x2 + let zip x1 x2 = List.zip x1 x2 [] - let zip3 x1 x2 x3 = Microsoft.FSharp.Primitives.Basics.List.zip3 x1 x2 x3 + let zip3 x1 x2 x3 = List.zip3 x1 x2 x3 [] let skip count list = @@ -536,7 +504,7 @@ namespace Microsoft.FSharp.Collections | [] | [_] -> xs | _ -> let array = List.toArray xs - Microsoft.FSharp.Primitives.Basics.Array.stableSortInPlaceWith cmp array + Array.stableSortInPlaceWith cmp array List.ofArray array [] @@ -545,7 +513,7 @@ namespace Microsoft.FSharp.Collections | [] | [_] -> xs | _ -> let array = List.toArray xs - Microsoft.FSharp.Primitives.Basics.Array.stableSortInPlaceBy f array + Array.stableSortInPlaceBy f array List.ofArray array [] @@ -554,7 +522,7 @@ namespace Microsoft.FSharp.Collections | [] | [_] -> xs | _ -> let array = List.toArray xs - Microsoft.FSharp.Primitives.Basics.Array.stableSortInPlace array + Array.stableSortInPlace array List.ofArray array [] @@ -612,7 +580,7 @@ namespace Microsoft.FSharp.Collections [] let inline max (list:list<_>) = match list with - | [] -> invalidArg "list" LanguagePrimitives.ErrorStrings.InputSequenceEmptyString; + | [] -> invalidArg "list" LanguagePrimitives.ErrorStrings.InputSequenceEmptyString | h::t -> let mutable acc = h for x in t do @@ -623,7 +591,7 @@ namespace Microsoft.FSharp.Collections [] let inline maxBy f (list:list<_>) = match list with - | [] -> invalidArg "list" LanguagePrimitives.ErrorStrings.InputSequenceEmptyString; + | [] -> invalidArg "list" LanguagePrimitives.ErrorStrings.InputSequenceEmptyString | h::t -> let mutable acc = h let mutable accv = f h @@ -637,7 +605,7 @@ namespace Microsoft.FSharp.Collections [] let inline min (list:list<_>) = match list with - | [] -> invalidArg "list" LanguagePrimitives.ErrorStrings.InputSequenceEmptyString; + | [] -> invalidArg "list" LanguagePrimitives.ErrorStrings.InputSequenceEmptyString | h::t -> let mutable acc = h for x in t do @@ -648,7 +616,7 @@ namespace Microsoft.FSharp.Collections [] let inline minBy f (list:list<_>) = match list with - | [] -> invalidArg "list" LanguagePrimitives.ErrorStrings.InputSequenceEmptyString; + | [] -> invalidArg "list" LanguagePrimitives.ErrorStrings.InputSequenceEmptyString | h::t -> let mutable acc = h let mutable accv = f h @@ -662,7 +630,7 @@ namespace Microsoft.FSharp.Collections [] let inline average (list:list<'T>) = match list with - | [] -> invalidArg "source" LanguagePrimitives.ErrorStrings.InputSequenceEmptyString; + | [] -> invalidArg "source" LanguagePrimitives.ErrorStrings.InputSequenceEmptyString | xs -> let mutable sum = LanguagePrimitives.GenericZero< 'T > let mutable count = 0 @@ -674,7 +642,7 @@ namespace Microsoft.FSharp.Collections [] let inline averageBy (f : 'T -> 'U) (list:list<'T>) = match list with - | [] -> invalidArg "source" LanguagePrimitives.ErrorStrings.InputSequenceEmptyString; + | [] -> invalidArg "source" LanguagePrimitives.ErrorStrings.InputSequenceEmptyString | xs -> let mutable sum = LanguagePrimitives.GenericZero< 'U > let mutable count = 0 @@ -684,10 +652,10 @@ namespace Microsoft.FSharp.Collections LanguagePrimitives.DivideByInt sum count [] - let collect f list = Microsoft.FSharp.Primitives.Basics.List.collect f list + let collect f list = List.collect f list [] - let allPairs list1 list2 = Microsoft.FSharp.Primitives.Basics.List.allPairs list1 list2 + let allPairs list1 list2 = List.allPairs list1 list2 [] let inline compareWith (comparer:'T -> 'T -> int) (list1: 'T list) (list2: 'T list) = @@ -713,7 +681,7 @@ namespace Microsoft.FSharp.Collections | _ -> invalidArg "source" (SR.GetString(SR.inputSequenceTooLong)) [] - let truncate count list = Microsoft.FSharp.Primitives.Basics.List.truncate count list + let truncate count list = List.truncate count list [] - let unfold<'T,'State> (f:'State -> ('T*'State) option) (s:'State) = Microsoft.FSharp.Primitives.Basics.List.unfold f s + let unfold<'T,'State> (f:'State -> ('T*'State) option) (s:'State) = List.unfold f s diff --git a/src/fsharp/FSharp.Core/list.fsi b/src/fsharp/FSharp.Core/list.fsi index a28f72e554f..877ade91d42 100644 --- a/src/fsharp/FSharp.Core/list.fsi +++ b/src/fsharp/FSharp.Core/list.fsi @@ -76,17 +76,18 @@ namespace Microsoft.FSharp.Collections [] val collect: mapping:('T -> 'U list) -> list:'T list -> 'U list - /// Compares two lists using the given comparison function, element by element. - /// Returns the first non-zero result from the comparison function. If the end of a list - /// is reached it returns a -1 if the first list is shorter and a 1 if the second list - /// is shorter. + /// Compares two lists using the given comparison function, element by element. /// /// A function that takes an element from each list and returns an int. /// If it evaluates to a non-zero value iteration is stopped and that value is returned. /// The first input list. /// The second input list. /// - /// The first non-zero value from the comparison function. + /// Returns the first non-zero result from the comparison function. If the first list has a + /// larger element, the return value is always positive. If the second list has a larger + /// element, the return value is always negative. When the elements are equal in the two + /// lists, 1 is returned if the first list is longer, 0 is returned if they are equal in + /// length, and -1 is returned when the second list is longer. [] val inline compareWith: comparer:('T -> 'T -> int) -> list1:'T list -> list2:'T list -> int diff --git a/src/fsharp/FSharp.Core/local.fs b/src/fsharp/FSharp.Core/local.fs index aaf61a49e98..fb234f75eee 100644 --- a/src/fsharp/FSharp.Core/local.fs +++ b/src/fsharp/FSharp.Core/local.fs @@ -8,7 +8,6 @@ open Microsoft.FSharp.Collections open Microsoft.FSharp.Core.Operators open System.Diagnostics.CodeAnalysis open System.Collections.Generic -open System.Runtime.InteropServices #if FX_NO_ICLONEABLE open Microsoft.FSharp.Core.ICloneableExtensions #else @@ -22,7 +21,7 @@ module internal List = [] let nonempty x = match x with [] -> false | _ -> true - let rec iter f x = match x with [] -> () | (h::t) -> f h; iter f t + let rec iter f x = match x with [] -> () | h::t -> f h; iter f t // optimized mutation-based implementation. This code is only valid in fslib, where mutation of private // tail cons cells is permitted in carefully written library code. @@ -32,7 +31,7 @@ module internal List = let rec distinctToFreshConsTail cons (hashSet:HashSet<_>) list = match list with | [] -> setFreshConsTail cons [] - | (x::rest) -> + | x::rest -> if hashSet.Add(x) then let cons2 = freshConsNoTail x setFreshConsTail cons cons2 @@ -40,12 +39,12 @@ module internal List = else distinctToFreshConsTail cons hashSet rest - let distinctWithComparer (comparer: System.Collections.Generic.IEqualityComparer<'T>) (list:'T list) = + let distinctWithComparer (comparer: IEqualityComparer<'T>) (list:'T list) = match list with | [] -> [] | [h] -> [h] - | (x::rest) -> - let hashSet = System.Collections.Generic.HashSet<'T>(comparer) + | x::rest -> + let hashSet = HashSet<'T>(comparer) hashSet.Add(x) |> ignore let cons = freshConsNoTail x distinctToFreshConsTail cons hashSet rest @@ -54,7 +53,7 @@ module internal List = let rec distinctByToFreshConsTail cons (hashSet:HashSet<_>) keyf list = match list with | [] -> setFreshConsTail cons [] - | (x::rest) -> + | x::rest -> if hashSet.Add(keyf x) then let cons2 = freshConsNoTail x setFreshConsTail cons cons2 @@ -62,31 +61,86 @@ module internal List = else distinctByToFreshConsTail cons hashSet keyf rest - let distinctByWithComparer (comparer: System.Collections.Generic.IEqualityComparer<'Key>) (keyf:'T -> 'Key) (list:'T list) = + let distinctByWithComparer (comparer: IEqualityComparer<'Key>) (keyf:'T -> 'Key) (list:'T list) = match list with | [] -> [] | [h] -> [h] - | (x::rest) -> - let hashSet = System.Collections.Generic.HashSet<'Key>(comparer) + | x::rest -> + let hashSet = HashSet<'Key>(comparer) hashSet.Add(keyf x) |> ignore let cons = freshConsNoTail x distinctByToFreshConsTail cons hashSet keyf rest cons + + let countBy (dict:Dictionary<_, int>) (keyf:'T -> 'Key) = + // No need to dispose enumerator Dispose does nothing. + let mutable ie = dict.GetEnumerator() + if not (ie.MoveNext()) then [] + else + let res = freshConsNoTail (keyf ie.Current.Key, ie.Current.Value) + let mutable cons = res + while ie.MoveNext() do + let cons2 = freshConsNoTail (keyf ie.Current.Key, ie.Current.Value) + setFreshConsTail cons cons2 + cons <- cons2 + setFreshConsTail cons [] + res + + let rec pairwiseToFreshConsTail cons list lastvalue = + match list with + | [] -> setFreshConsTail cons [] + | [h] -> setFreshConsTail cons [(lastvalue, h)] + | h::t -> + let cons2 = freshConsNoTail (lastvalue, h) + setFreshConsTail cons cons2 + pairwiseToFreshConsTail cons2 t h + + let pairwise list = + match list with + | [] -> [] + | [_] -> [] + | x1::x2::t -> + let cons = freshConsNoTail (x1, x2) + pairwiseToFreshConsTail cons t x2 + cons + + let rec chooseToFreshConsTail cons f xs = + match xs with + | [] -> setFreshConsTail cons [] + | h::t -> + match f h with + | None -> chooseToFreshConsTail cons f t + | Some x -> + let cons2 = freshConsNoTail x + setFreshConsTail cons cons2 + chooseToFreshConsTail cons2 f t + + let rec choose f xs = + match xs with + | [] -> [] + | h::t -> + match f h with + | None -> choose f t + | Some x -> + let cons = freshConsNoTail x + chooseToFreshConsTail cons f t + cons + let rec mapToFreshConsTail cons f x = match x with | [] -> - setFreshConsTail cons []; - | (h::t) -> + setFreshConsTail cons [] + | h::t -> let cons2 = freshConsNoTail (f h) - setFreshConsTail cons cons2; + setFreshConsTail cons cons2 mapToFreshConsTail cons2 f t let map f x = match x with | [] -> [] | [h] -> [f h] - | (h::t) -> + | h::t -> let cons = freshConsNoTail (f h) mapToFreshConsTail cons f t cons @@ -94,17 +148,17 @@ module internal List = let rec mapiToFreshConsTail cons (f:OptimizedClosures.FSharpFunc<_,_,_>) x i = match x with | [] -> - setFreshConsTail cons []; - | (h::t) -> + setFreshConsTail cons [] + | h::t -> let cons2 = freshConsNoTail (f.Invoke(i,h)) - setFreshConsTail cons cons2; + setFreshConsTail cons cons2 mapiToFreshConsTail cons2 f t (i+1) let mapi f x = match x with | [] -> [] | [h] -> [f 0 h] - | (h::t) -> + | h::t -> let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f) let cons = freshConsNoTail (f.Invoke(0,h)) mapiToFreshConsTail cons f t 1 @@ -113,37 +167,96 @@ module internal List = let rec map2ToFreshConsTail cons (f:OptimizedClosures.FSharpFunc<_,_,_>) xs1 xs2 = match xs1,xs2 with | [],[] -> - setFreshConsTail cons []; - | (h1::t1),(h2::t2) -> + setFreshConsTail cons [] + | h1::t1, h2::t2 -> let cons2 = freshConsNoTail (f.Invoke(h1,h2)) - setFreshConsTail cons cons2; + setFreshConsTail cons cons2 map2ToFreshConsTail cons2 f t1 t2 | _ -> invalidArg "xs2" (SR.GetString(SR.listsHadDifferentLengths)) let map2 f xs1 xs2 = match xs1,xs2 with | [],[] -> [] - | (h1::t1),(h2::t2) -> + | h1::t1, h2::t2 -> let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f) let cons = freshConsNoTail (f.Invoke(h1,h2)) map2ToFreshConsTail cons f t1 t2 cons | _ -> invalidArg "xs2" (SR.GetString(SR.listsHadDifferentLengths)) + let rec map3ToFreshConsTail cons (f:OptimizedClosures.FSharpFunc<_,_,_,_>) xs1 xs2 xs3 = + match xs1,xs2,xs3 with + | [],[],[] -> + setFreshConsTail cons [] + | h1::t1, h2::t2, h3::t3 -> + let cons2 = freshConsNoTail (f.Invoke(h1,h2,h3)) + setFreshConsTail cons cons2 + map3ToFreshConsTail cons2 f t1 t2 t3 + | _ -> invalidArg "list3" (SR.GetString(SR.listsHadDifferentLengths)) + + let map3 f xs1 xs2 xs3 = + match xs1,xs2,xs3 with + | [],[],[] -> [] + | h1::t1, h2::t2, h3::t3 -> + let f = OptimizedClosures.FSharpFunc<_,_,_,_>.Adapt(f) + let cons = freshConsNoTail (f.Invoke(h1,h2,h3)) + map3ToFreshConsTail cons f t1 t2 t3 + cons + | _ -> invalidArg "list3" (SR.GetString(SR.listsHadDifferentLengths)) + + let rec mapi2ToFreshConsTail n cons (f:OptimizedClosures.FSharpFunc<_,_,_,_>) xs1 xs2 = + match xs1,xs2 with + | [],[] -> + setFreshConsTail cons [] + | h1::t1, h2::t2 -> + let cons2 = freshConsNoTail (f.Invoke(n,h1,h2)) + setFreshConsTail cons cons2 + mapi2ToFreshConsTail (n + 1) cons2 f t1 t2 + | _ -> invalidArg "list2" (SR.GetString(SR.listsHadDifferentLengths)) + + let mapi2 f xs1 xs2 = + match xs1,xs2 with + | [],[] -> [] + | h1::t1, h2::t2 -> + let f = OptimizedClosures.FSharpFunc<_,_,_,_>.Adapt(f) + let cons = freshConsNoTail (f.Invoke(0, h1,h2)) + mapi2ToFreshConsTail 1 cons f t1 t2 + cons + | _ -> invalidArg "list2" (SR.GetString(SR.listsHadDifferentLengths)) + + let rec scanToFreshConsTail cons xs s (f: OptimizedClosures.FSharpFunc<_,_,_>) = + match xs with + | [] -> + setFreshConsTail cons [] + | h::t -> + let newState = f.Invoke(s,h) + let cons2 = freshConsNoTail newState + setFreshConsTail cons cons2 + scanToFreshConsTail cons2 t newState f + + let scan f (s:'State) (list:'T list) = + let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f) + match list with + | [] -> [s] + | _ -> + let cons = freshConsNoTail s + scanToFreshConsTail cons list s f + cons + let rec indexedToFreshConsTail cons xs i = match xs with | [] -> - setFreshConsTail cons []; - | (h::t) -> + setFreshConsTail cons [] + | h::t -> let cons2 = freshConsNoTail (i,h) - setFreshConsTail cons cons2; + setFreshConsTail cons cons2 indexedToFreshConsTail cons2 t (i+1) let indexed xs = match xs with | [] -> [] | [h] -> [(0,h)] - | (h::t) -> + | h::t -> let cons = freshConsNoTail (0,h) indexedToFreshConsTail cons t 1 cons @@ -151,12 +264,12 @@ module internal List = let rec mapFoldToFreshConsTail cons (f:OptimizedClosures.FSharpFunc<'State, 'T, 'U * 'State>) acc xs = match xs with | [] -> - setFreshConsTail cons []; + setFreshConsTail cons [] acc - | (h::t) -> + | h::t -> let x',s' = f.Invoke(acc,h) let cons2 = freshConsNoTail x' - setFreshConsTail cons cons2; + setFreshConsTail cons cons2 mapFoldToFreshConsTail cons2 f s' t let mapFold f acc xs = @@ -165,7 +278,7 @@ module internal List = | [h] -> let x',s' = f acc h [x'],s' - | (h::t) -> + | h::t -> let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f) let x',s' = f.Invoke(acc,h) let cons = freshConsNoTail x' @@ -175,12 +288,12 @@ module internal List = let rec forall f xs1 = match xs1 with | [] -> true - | (h1::t1) -> f h1 && forall f t1 + | h1::t1 -> f h1 && forall f t1 let rec exists f xs1 = match xs1 with | [] -> false - | (h1::t1) -> f h1 || exists f t1 + | h1::t1 -> f h1 || exists f t1 // optimized mutation-based implementation. This code is only valid in fslib, where mutation of private // tail cons cells is permitted in carefully written library code. @@ -227,7 +340,7 @@ module internal List = let rec allPairsToFreshConsTailSingle x ys cons = match ys with | [] -> cons - | (h2::t2) -> + | h2::t2 -> let cons2 = freshConsNoTail (x,h2) setFreshConsTail cons cons2 allPairsToFreshConsTailSingle x t2 cons2 @@ -235,9 +348,9 @@ module internal List = let rec allPairsToFreshConsTail xs ys cons = match xs with | [] -> setFreshConsTail cons [] - | (h::t) -> + | h::t -> let p = allPairsToFreshConsTailSingle h ys cons - allPairsToFreshConsTail t ys p + allPairsToFreshConsTail t ys p let allPairs (xs:'T list) (ys:'U list) = match xs, ys with @@ -253,11 +366,11 @@ module internal List = let rec filterToFreshConsTail cons f l = match l with | [] -> - setFreshConsTail cons l; // note, l = nil + setFreshConsTail cons l // note, l = nil | h::t -> if f h then let cons2 = freshConsNoTail h - setFreshConsTail cons cons2; + setFreshConsTail cons cons2 filterToFreshConsTail cons2 f t else filterToFreshConsTail cons f t @@ -269,14 +382,18 @@ module internal List = | h::t -> if f h then let cons = freshConsNoTail h - filterToFreshConsTail cons f t; + filterToFreshConsTail cons f t cons else filter f t let iteri f x = let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f) - let rec loop n x = match x with [] -> () | (h::t) -> f.Invoke(n,h); loop (n+1) t + let rec loop n x = + match x with + | [] -> () + | h::t -> f.Invoke(n,h); loop (n+1) t + loop 0 x // optimized mutation-based implementation. This code is only valid in fslib, where mutation of private @@ -294,7 +411,7 @@ module internal List = | []::t -> concatToEmpty t | (h::t1)::tt2 -> let res = freshConsNoTail h - concatToFreshConsTail res t1 tt2; + concatToFreshConsTail res t1 tt2 res let toArray (l:'T list) = @@ -343,14 +460,14 @@ module internal List = let rec initToFreshConsTail cons i n f = if i < n then let cons2 = freshConsNoTail (f i) - setFreshConsTail cons cons2; + setFreshConsTail cons cons2 initToFreshConsTail cons2 (i+1) n f else setFreshConsTail cons [] let init count f = - if count < 0 then invalidArg "count" LanguagePrimitives.ErrorStrings.InputMustBeNonNegativeString + if count < 0 then invalidArg "count" LanguagePrimitives.ErrorStrings.InputMustBeNonNegativeString if count = 0 then [] else let res = freshConsNoTail (f 0) @@ -405,44 +522,44 @@ module internal List = let rec partitionToFreshConsTails consL consR p l = match l with | [] -> - setFreshConsTail consL l; // note, l = nil - setFreshConsTail consR l; // note, l = nil + setFreshConsTail consL l // note, l = nil + setFreshConsTail consR l // note, l = nil | h::t -> let cons' = freshConsNoTail h if p h then - setFreshConsTail consL cons'; + setFreshConsTail consL cons' partitionToFreshConsTails cons' consR p t else - setFreshConsTail consR cons'; + setFreshConsTail consR cons' partitionToFreshConsTails consL cons' p t let rec partitionToFreshConsTailLeft consL p l = match l with | [] -> - setFreshConsTail consL l; // note, l = nil + setFreshConsTail consL l // note, l = nil l // note, l = nil | h::t -> let cons' = freshConsNoTail h if p h then - setFreshConsTail consL cons'; + setFreshConsTail consL cons' partitionToFreshConsTailLeft cons' p t else - partitionToFreshConsTails consL cons' p t; + partitionToFreshConsTails consL cons' p t cons' let rec partitionToFreshConsTailRight consR p l = match l with | [] -> - setFreshConsTail consR l; // note, l = nil + setFreshConsTail consR l // note, l = nil l // note, l = nil | h::t -> let cons' = freshConsNoTail h if p h then - partitionToFreshConsTails cons' consR p t; + partitionToFreshConsTails cons' consR p t cons' else - setFreshConsTail consR cons'; + setFreshConsTail consR cons' partitionToFreshConsTailRight cons' p t let partition p l = @@ -461,7 +578,7 @@ module internal List = | [] -> setFreshConsTail cons [] | h::t -> let cons2 = freshConsNoTail h - setFreshConsTail cons cons2; + setFreshConsTail cons cons2 truncateToFreshConsTail cons2 (count-1) t let truncate count list = @@ -498,11 +615,11 @@ module internal List = | [] -> setFreshConsTail cons1a [] setFreshConsTail cons1b [] - | ((h1,h2)::t) -> + | (h1,h2)::t -> let cons2a = freshConsNoTail h1 let cons2b = freshConsNoTail h2 - setFreshConsTail cons1a cons2a; - setFreshConsTail cons1b cons2b; + setFreshConsTail cons1a cons2a + setFreshConsTail cons1b cons2b unzipToFreshConsTail cons2a cons2b t // optimized mutation-based implementation. This code is only valid in fslib, where mutation of private @@ -511,10 +628,10 @@ module internal List = match x with | [] -> [],[] - | ((h1,h2)::t) -> + | (h1,h2)::t -> let res1a = freshConsNoTail h1 let res1b = freshConsNoTail h2 - unzipToFreshConsTail res1a res1b t; + unzipToFreshConsTail res1a res1b t res1a,res1b // optimized mutation-based implementation. This code is only valid in fslib, where mutation of private @@ -522,16 +639,16 @@ module internal List = let rec unzip3ToFreshConsTail cons1a cons1b cons1c x = match x with | [] -> - setFreshConsTail cons1a []; - setFreshConsTail cons1b []; - setFreshConsTail cons1c []; - | ((h1,h2,h3)::t) -> + setFreshConsTail cons1a [] + setFreshConsTail cons1b [] + setFreshConsTail cons1c [] + | (h1,h2,h3)::t -> let cons2a = freshConsNoTail h1 let cons2b = freshConsNoTail h2 let cons2c = freshConsNoTail h3 - setFreshConsTail cons1a cons2a; - setFreshConsTail cons1b cons2b; - setFreshConsTail cons1c cons2c; + setFreshConsTail cons1a cons2a + setFreshConsTail cons1b cons2b + setFreshConsTail cons1c cons2c unzip3ToFreshConsTail cons2a cons2b cons2c t // optimized mutation-based implementation. This code is only valid in fslib, where mutation of private @@ -540,11 +657,11 @@ module internal List = match x with | [] -> [],[],[] - | ((h1,h2,h3)::t) -> + | (h1,h2,h3)::t -> let res1a = freshConsNoTail h1 let res1b = freshConsNoTail h2 let res1c = freshConsNoTail h3 - unzip3ToFreshConsTail res1a res1b res1c t; + unzip3ToFreshConsTail res1a res1b res1c t res1a,res1b,res1c let rec windowedToFreshConsTail cons windowSize i list = @@ -624,21 +741,21 @@ module internal List = match xs1,xs2 with | [],[] -> setFreshConsTail cons [] - | (h1::t1),(h2::t2) -> + | h1::t1, h2::t2 -> let cons2 = freshConsNoTail (h1,h2) - setFreshConsTail cons cons2; + setFreshConsTail cons cons2 zipToFreshConsTail cons2 t1 t2 | _ -> invalidArg "xs2" (SR.GetString(SR.listsHadDifferentLengths)) // optimized mutation-based implementation. This code is only valid in fslib, where mutation of private // tail cons cells is permitted in carefully written library code. - let zip xs1 xs2 = + let zip xs1 xs2 = match xs1,xs2 with | [],[] -> [] - | (h1::t1),(h2::t2) -> + | h1::t1, h2::t2 -> let res = freshConsNoTail (h1,h2) - zipToFreshConsTail res t1 t2; + zipToFreshConsTail res t1 t2 res | _ -> invalidArg "xs2" (SR.GetString(SR.listsHadDifferentLengths)) @@ -648,10 +765,10 @@ module internal List = let rec zip3ToFreshConsTail cons xs1 xs2 xs3 = match xs1,xs2,xs3 with | [],[],[] -> - setFreshConsTail cons []; - | (h1::t1),(h2::t2),(h3::t3) -> + setFreshConsTail cons [] + | h1::t1, h2::t2, h3::t3 -> let cons2 = freshConsNoTail (h1,h2,h3) - setFreshConsTail cons cons2; + setFreshConsTail cons cons2 zip3ToFreshConsTail cons2 t1 t2 t3 | _ -> invalidArg "xs1" (SR.GetString(SR.listsHadDifferentLengths)) @@ -662,9 +779,9 @@ module internal List = match xs1,xs2,xs3 with | [],[],[] -> [] - | (h1::t1),(h2::t2),(h3::t3) -> + | h1::t1, h2::t2, h3::t3 -> let res = freshConsNoTail (h1,h2,h3) - zip3ToFreshConsTail res t1 t2 t3; + zip3ToFreshConsTail res t1 t2 t3 res | _ -> invalidArg "xs1" (SR.GetString(SR.listsHadDifferentLengths)) @@ -780,7 +897,7 @@ module internal Array = arr.[i] <- f i arr - let inline indexNotFound() = raise (new System.Collections.Generic.KeyNotFoundException(SR.GetString(SR.keyNotFoundAlt))) + let inline indexNotFound() = raise (KeyNotFoundException(SR.GetString(SR.keyNotFoundAlt))) let findBack f (array: _[]) = let rec loop i = @@ -854,7 +971,7 @@ module internal Array = let res = zeroCreateUnchecked (fin-start+2) res.[fin - start + 1] <- state for i = fin downto start do - state <- f.Invoke(array.[i], state); + state <- f.Invoke(array.[i], state) res.[i - start] <- state res @@ -865,12 +982,12 @@ module internal Array = let keys = zeroCreateUnchecked array.Length for i = 0 to array.Length - 1 do keys.[i] <- f array.[i] - System.Array.Sort<_,_>(keys, array, fastComparerForArraySort()) + Array.Sort<_,_>(keys, array, fastComparerForArraySort()) let unstableSortInPlace (array : array<'T>) = let len = array.Length if len < 2 then () - else System.Array.Sort<_>(array, fastComparerForArraySort()) + else Array.Sort<_>(array, fastComparerForArraySort()) let stableSortWithKeysAndComparer (cFast:IComparer<'Key>) (c:IComparer<'Key>) (array:array<'T>) (keys:array<'Key>) = // 'places' is an array or integers storing the permutation performed by the sort @@ -886,7 +1003,7 @@ module internal Array = let len = array.Length let intCompare = fastComparerForArraySort() - while i < len do + while i < len do let mutable j = i let ki = keys.[i] while j < len && (j = i || c.Compare(ki, keys.[j]) = 0) do @@ -895,7 +1012,7 @@ module internal Array = for n = i to j - 1 do array.[n] <- array2.[places.[n]] if j - i >= 2 then - System.Array.Sort<_,_>(places, array, i, j-i, intCompare) + Array.Sort<_,_>(places, array, i, j-i, intCompare) i <- j let stableSortWithKeys (array:array<'T>) (keys:array<'Key>) = @@ -922,7 +1039,7 @@ module internal Array = | null -> // An optimization for the cases where the keys and values coincide and do not have identity, e.g. are integers // In this case an unstable sort is just as good as a stable sort (and faster) - System.Array.Sort<_,_>(array, null) + Array.Sort<_,_>(array, null) | _ -> // 'keys' is an array storing the projected keys let keys = (array.Clone() :?> array<'T>) diff --git a/src/fsharp/FSharp.Core/local.fsi b/src/fsharp/FSharp.Core/local.fsi index 9e3028cb1e3..245ae8eabc5 100644 --- a/src/fsharp/FSharp.Core/local.fsi +++ b/src/fsharp/FSharp.Core/local.fsi @@ -8,6 +8,9 @@ open Microsoft.FSharp.Collections module internal List = val allPairs : 'T1 list -> 'T2 list -> ('T1 * 'T2) list + val choose: ('T -> 'U option) -> 'T list -> 'U list + val countBy : System.Collections.Generic.Dictionary<'T1, int> -> ('T1 -> 'T2) -> ('T2 * int) list + val pairwise : 'T list -> ('T * 'T) list val distinctWithComparer : System.Collections.Generic.IEqualityComparer<'T> -> 'T list -> 'T list val distinctByWithComparer : System.Collections.Generic.IEqualityComparer<'Key> -> ('T -> 'Key) -> list:'T list -> 'T list when 'Key : equality val init : int -> (int -> 'T) -> 'T list @@ -15,9 +18,12 @@ module internal List = val filter : predicate:('T -> bool) -> 'T list -> 'T list val collect : ('T -> 'U list) -> 'T list -> 'U list val partition : predicate:('T -> bool) -> 'T list -> 'T list * 'T list - val map : mapping:('T -> 'U) -> 'T list -> 'U list - val map2 : mapping:('T1 -> 'T2 -> 'U) -> 'T1 list -> 'T2 list -> 'U list + val map : mapping : ('T -> 'U) -> 'T list -> 'U list + val map2 : mapping : ('T1 -> 'T2 -> 'U) -> 'T1 list -> 'T2 list -> 'U list + val map3 : mapping : ('T1 -> 'T2 -> 'T3 -> 'U) -> 'T1 list -> 'T2 list -> 'T3 list -> 'U list + val scan : ('State -> 'T -> 'State) -> 'State -> 'T list -> 'State list val mapi : (int -> 'T -> 'U) -> 'T list -> 'U list + val mapi2 : (int -> 'T1 -> 'T2 -> 'U) -> 'T1 list -> 'T2 list -> 'U list val indexed : 'T list -> (int * 'T) list val mapFold : ('State -> 'T -> 'U * 'State) -> 'State -> 'T list -> 'U list * 'State val forall : predicate:('T -> bool) -> 'T list -> bool diff --git a/src/fsharp/FSharp.Core/map.fs b/src/fsharp/FSharp.Core/map.fs index 293f81c4846..574cba4a53c 100644 --- a/src/fsharp/FSharp.Core/map.fs +++ b/src/fsharp/FSharp.Core/map.fs @@ -7,9 +7,6 @@ namespace Microsoft.FSharp.Collections open System.Diagnostics open Microsoft.FSharp.Core open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators - open Microsoft.FSharp.Core.Operators - open Microsoft.FSharp.Collections - open Microsoft.FSharp.Primitives.Basics [] [] @@ -133,11 +130,11 @@ namespace Microsoft.FSharp.Collections let rec find (comparer: IComparer<'Value>) k m = match m with - | MapEmpty -> raise (System.Collections.Generic.KeyNotFoundException()) + | MapEmpty -> raise (KeyNotFoundException()) | MapOne(k2,v2) -> let c = comparer.Compare(k,k2) if c = 0 then v2 - else raise (System.Collections.Generic.KeyNotFoundException()) + else raise (KeyNotFoundException()) | MapNode(k2,v2,l,r,_) -> let c = comparer.Compare(k,k2) if c < 0 then find comparer k l @@ -381,8 +378,8 @@ namespace Microsoft.FSharp.Collections let mkIterator s = { stack = collapseLHS [s]; started = false } - let notStarted() = raise (new System.InvalidOperationException(SR.GetString(SR.enumerationNotStarted))) - let alreadyFinished() = raise (new System.InvalidOperationException(SR.GetString(SR.enumerationAlreadyFinished))) + let notStarted() = raise (InvalidOperationException(SR.GetString(SR.enumerationNotStarted))) + let alreadyFinished() = raise (InvalidOperationException(SR.GetString(SR.enumerationAlreadyFinished))) let current i = if i.started then @@ -396,24 +393,24 @@ namespace Microsoft.FSharp.Collections let rec moveNext i = if i.started then match i.stack with - | MapOne _ :: rest -> i.stack <- collapseLHS rest; + | MapOne _ :: rest -> i.stack <- collapseLHS rest not i.stack.IsEmpty | [] -> false | _ -> failwith "Please report error: Map iterator, unexpected stack for moveNext" else - i.started <- true; (* The first call to MoveNext "starts" the enumeration. *) + i.started <- true (* The first call to MoveNext "starts" the enumeration. *) not i.stack.IsEmpty let mkIEnumerator s = let i = ref (mkIterator s) { new IEnumerator<_> with - member self.Current = current !i + member __.Current = current !i interface System.Collections.IEnumerator with - member self.Current = box (current !i) - member self.MoveNext() = moveNext !i - member self.Reset() = i := mkIterator s + member __.Current = box (current !i) + member __.MoveNext() = moveNext !i + member __.Reset() = i := mkIterator s interface System.IDisposable with - member self.Dispose() = ()} + member __.Dispose() = ()} @@ -586,10 +583,10 @@ namespace Microsoft.FSharp.Collections override this.GetHashCode() = this.ComputeHashCode() interface IEnumerable> with - member m.GetEnumerator() = MapTree.mkIEnumerator tree + member __.GetEnumerator() = MapTree.mkIEnumerator tree interface System.Collections.IEnumerable with - member m.GetEnumerator() = (MapTree.mkIEnumerator tree :> System.Collections.IEnumerator) + member __.GetEnumerator() = (MapTree.mkIEnumerator tree :> System.Collections.IEnumerator) interface IDictionary<'Key, 'Value> with member m.Item @@ -608,11 +605,11 @@ namespace Microsoft.FSharp.Collections member s.Remove(k : 'Key) = ignore(k); (raise (NotSupportedException(SR.GetString(SR.mapCannotBeMutated))) : bool) interface ICollection> with - member s.Add(x) = ignore(x); raise (NotSupportedException(SR.GetString(SR.mapCannotBeMutated))); - member s.Clear() = raise (NotSupportedException(SR.GetString(SR.mapCannotBeMutated))); - member s.Remove(x) = ignore(x); raise (NotSupportedException(SR.GetString(SR.mapCannotBeMutated))); + member __.Add(x) = ignore(x); raise (NotSupportedException(SR.GetString(SR.mapCannotBeMutated))); + member __.Clear() = raise (NotSupportedException(SR.GetString(SR.mapCannotBeMutated))); + member __.Remove(x) = ignore(x); raise (NotSupportedException(SR.GetString(SR.mapCannotBeMutated))); member s.Contains(x) = s.ContainsKey(x.Key) && Unchecked.equals s.[x.Key] x.Value - member s.CopyTo(arr,i) = MapTree.copyToArray tree arr i + member __.CopyTo(arr,i) = MapTree.copyToArray tree arr i member s.IsReadOnly = true member s.Count = s.Count @@ -643,7 +640,7 @@ namespace Microsoft.FSharp.Collections [] MapDebugView<'Key,'Value when 'Key : comparison>(v: Map<'Key,'Value>) = - [] + [] member x.Items = v |> Seq.truncate 10000 |> Seq.toArray #endif @@ -654,7 +651,6 @@ namespace Microsoft.FSharp.Collections open System.Diagnostics open System.Collections.Generic open Microsoft.FSharp.Core - open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators open Microsoft.FSharp.Core.Operators open Microsoft.FSharp.Collections open Microsoft.FSharp.Primitives.Basics @@ -688,7 +684,7 @@ namespace Microsoft.FSharp.Collections let tryPick f (m:Map<_,_>) = m.TryPick(f) [] - let pick f (m:Map<_,_>) = match tryPick f m with None -> raise (System.Collections.Generic.KeyNotFoundException()) | Some res -> res + let pick f (m:Map<_,_>) = match tryPick f m with None -> raise (KeyNotFoundException()) | Some res -> res [] let exists f (m:Map<_,_>) = m.Exists(f) diff --git a/src/fsharp/FSharp.Core/option.fs b/src/fsharp/FSharp.Core/option.fs index ff08b2e4cab..391355aab1c 100644 --- a/src/fsharp/FSharp.Core/option.fs +++ b/src/fsharp/FSharp.Core/option.fs @@ -2,10 +2,6 @@ namespace Microsoft.FSharp.Core - open System.Diagnostics - open Microsoft.FSharp.Core - open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators - open Microsoft.FSharp.Collections open Microsoft.FSharp.Core.Operators [] @@ -57,7 +53,7 @@ namespace Microsoft.FSharp.Core let toNullable option = match option with None -> System.Nullable() | Some v -> System.Nullable(v) [] - let ofNullable (value:System.Nullable<'T>) = if value.HasValue then Some value.Value else None + let ofNullable (value:System.Nullable<'T>) = if value.HasValue then Some value.Value else None [] let ofObj value = match value with null -> None | _ -> Some value diff --git a/src/fsharp/FSharp.Core/prim-types.fs b/src/fsharp/FSharp.Core/prim-types.fs index 43531b98838..551537cbc87 100644 --- a/src/fsharp/FSharp.Core/prim-types.fs +++ b/src/fsharp/FSharp.Core/prim-types.fs @@ -639,7 +639,6 @@ namespace System #else #endif - namespace Microsoft.FSharp.Core open System @@ -3463,6 +3462,8 @@ namespace Microsoft.FSharp.Core static member Some(x) : 'T option = Some(x) + static member op_Implicit(x) : 'T option = Some(x) + override x.ToString() = // x is non-null, hence Some "Some("^anyToStringShowingNull x.Value^")" @@ -3470,6 +3471,13 @@ namespace Microsoft.FSharp.Core and 'T option = Option<'T> + [] + [] + [] + type Result<'T,'TError> = + | Ok of ResultValue:'T + | Error of ErrorValue:'TError + //============================================================================ //============================================================================ @@ -3609,7 +3617,7 @@ namespace Microsoft.FSharp.Collections match l with | [] -> raise (new System.ArgumentException(SR.GetString(SR.indexOutOfBounds),"n")) | h::t -> - if n < 0 then raise (new System.ArgumentException(SR.GetString(SR.inputMustBeNonNegative),"n")) + if n < 0 then raise (new System.ArgumentException((SR.GetString(SR.inputMustBeNonNegative)),"n")) elif n = 0 then h else nth t (n - 1) @@ -6424,7 +6432,7 @@ namespace Microsoft.FSharp.Control type Handler<'Args> = delegate of sender:obj * args:'Args -> unit type IEvent<'Args> = IEvent, 'Args> - + // FxCop suppressions open System.Diagnostics.CodeAnalysis [] @@ -6453,15 +6461,14 @@ namespace Microsoft.FSharp.Control [] [] [] - + [] [] [] [] [] [] - - + [] [] @@ -6568,4 +6575,3 @@ namespace Microsoft.FSharp.Control [] [] do() - diff --git a/src/fsharp/FSharp.Core/prim-types.fsi b/src/fsharp/FSharp.Core/prim-types.fsi index d3202b3aeee..ee2b08f356b 100644 --- a/src/fsharp/FSharp.Core/prim-types.fsi +++ b/src/fsharp/FSharp.Core/prim-types.fsi @@ -1276,13 +1276,7 @@ namespace System interface IComparable new : 'T1 -> Tuple<'T1> member Item1 : 'T1 with get -#if TUPLE_STRUXT - [] - type Tuple<'T1,'T2> = - new : 'T1 * 'T2 -> Tuple<'T1,'T2> - val Item1 : 'T1 - val Item2 : 'T2 // -#else + type Tuple<'T1,'T2> = interface IStructuralEquatable interface IStructuralComparable @@ -1290,7 +1284,6 @@ namespace System new : 'T1 * 'T2 -> Tuple<'T1,'T2> member Item1 : 'T1 with get member Item2 : 'T2 with get -#endif type Tuple<'T1,'T2,'T3> = interface IStructuralEquatable @@ -1747,6 +1740,11 @@ namespace Microsoft.FSharp.Core /// An option representing the value. static member Some : value:'T -> 'T option + /// Implicitly converts a value into an optional that is a 'Some' value. + /// The input value + /// An option representing the value. + static member op_Implicit : value:'T -> 'T option + [] /// Get the value of a 'Some' option. A NullReferenceException is raised if the option is 'None'. member Value : 'T @@ -1770,6 +1768,16 @@ namespace Microsoft.FSharp.Core and 'T option = Option<'T> + /// Helper type for error handling without exceptions. + [] + [] + [] + type Result<'T,'TError> = + /// Represents an OK or a Successful result. The code succeeded with a value of 'T. + | Ok of ResultValue:'T + /// Represents an Error or a Failure. The code failed with a value of 'TError representing what went wrong. + | Error of ErrorValue:'TError + namespace Microsoft.FSharp.Collections open System @@ -3415,4 +3423,3 @@ namespace Microsoft.FSharp.Control /// First-class listening points (i.e. objects that permit you to register a callback /// activated when the event is triggered). type IEvent<'T> = IEvent, 'T> - diff --git a/src/fsharp/FSharp.Core/project.json b/src/fsharp/FSharp.Core/project.json index c14efc45130..9b310893e37 100644 --- a/src/fsharp/FSharp.Core/project.json +++ b/src/fsharp/FSharp.Core/project.json @@ -24,7 +24,7 @@ "System.Threading.Tasks.Parallel": "4.0.1", "System.Threading.Thread": "4.0.0", "System.Threading.ThreadPool": "4.0.10", - "System.Threading.Timer": "4.0.1" + "System.Threading.Timer": "4.0.1", }, "runtimes": { "win7-x86": { }, diff --git a/src/fsharp/FSharp.Core/quotations.fs b/src/fsharp/FSharp.Core/quotations.fs index 57eb88f98a6..4377312f897 100644 --- a/src/fsharp/FSharp.Core/quotations.fs +++ b/src/fsharp/FSharp.Core/quotations.fs @@ -24,7 +24,7 @@ open Microsoft.FSharp.Text.StructuredPrintfImpl.LayoutOps #if FX_RESHAPED_REFLECTION open PrimReflectionAdapters open ReflectionAdapters -type BindingFlags = ReflectionAdapters.BindingFlags +type internal BindingFlags = ReflectionAdapters.BindingFlags #endif //-------------------------------------------------------------------------- diff --git a/src/fsharp/FSharp.Core/reflect.fs b/src/fsharp/FSharp.Core/reflect.fs index 43ce45c62f1..cfff7f82422 100644 --- a/src/fsharp/FSharp.Core/reflect.fs +++ b/src/fsharp/FSharp.Core/reflect.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Reflection on F# values. Analyze an object to see if it the representation // of an F# value. @@ -8,6 +8,7 @@ namespace Microsoft.FSharp.Core open System open System.Reflection +open System.Threading open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators open Microsoft.FSharp.Collections @@ -77,11 +78,13 @@ module internal Impl = //----------------------------------------------------------------- // GENERAL UTILITIES #if FX_ATLEAST_PORTABLE + let instanceFieldFlags = BindingFlags.Instance let instancePropertyFlags = BindingFlags.Instance let staticPropertyFlags = BindingFlags.Static let staticFieldFlags = BindingFlags.Static let staticMethodFlags = BindingFlags.Static #else + let instanceFieldFlags = BindingFlags.GetField ||| BindingFlags.Instance let instancePropertyFlags = BindingFlags.GetProperty ||| BindingFlags.Instance let staticPropertyFlags = BindingFlags.GetProperty ||| BindingFlags.Static let staticFieldFlags = BindingFlags.GetField ||| BindingFlags.Static @@ -298,12 +301,11 @@ module internal Impl = else // Lookup the type holding the fields for the union case let caseTyp = getUnionCaseTyp (typ, tag, bindingFlags) - match caseTyp with - | null -> [| |] - | _ -> caseTyp.GetProperties(instancePropertyFlags ||| bindingFlags) - |> Array.filter isFieldProperty - |> Array.filter (fun prop -> variantNumberOfMember prop = tag) - |> sortFreshArray (fun p1 p2 -> compare (sequenceNumberOfMember p1) (sequenceNumberOfMember p2)) + let caseTyp = match caseTyp with null -> typ | _ -> caseTyp + caseTyp.GetProperties(instancePropertyFlags ||| bindingFlags) + |> Array.filter isFieldProperty + |> Array.filter (fun prop -> variantNumberOfMember prop = tag) + |> sortFreshArray (fun p1 p2 -> compare (sequenceNumberOfMember p1) (sequenceNumberOfMember p2)) let getUnionCaseRecordReader (typ:Type,tag:int,bindingFlags) = @@ -374,64 +376,79 @@ module internal Impl = //----------------------------------------------------------------- // TUPLE DECOMPILATION - - let tuple1 = typedefof> - let tuple2 = typedefof - let tuple3 = typedefof - let tuple4 = typedefof - let tuple5 = typedefof - let tuple6 = typedefof - let tuple7 = typedefof - let tuple8 = typedefof - - let isTuple1Type typ = equivHeadTypes typ tuple1 - let isTuple2Type typ = equivHeadTypes typ tuple2 - let isTuple3Type typ = equivHeadTypes typ tuple3 - let isTuple4Type typ = equivHeadTypes typ tuple4 - let isTuple5Type typ = equivHeadTypes typ tuple5 - let isTuple6Type typ = equivHeadTypes typ tuple6 - let isTuple7Type typ = equivHeadTypes typ tuple7 - let isTuple8Type typ = equivHeadTypes typ tuple8 - - let isTupleType typ = - isTuple1Type typ - || isTuple2Type typ - || isTuple3Type typ - || isTuple4Type typ - || isTuple5Type typ - || isTuple6Type typ - || isTuple7Type typ - || isTuple8Type typ + let tupleNames = [| + "System.Tuple`1"; "System.Tuple`2"; "System.Tuple`3"; + "System.Tuple`4"; "System.Tuple`5"; "System.Tuple`6"; + "System.Tuple`7"; "System.Tuple`8"; "System.Tuple"; + "System.ValueTuple`1"; "System.ValueTuple`2"; "System.ValueTuple`3"; + "System.ValueTuple`4"; "System.ValueTuple`5"; "System.ValueTuple`6"; + "System.ValueTuple`7"; "System.ValueTuple`8"; "System.ValueTuple" |] + + let isTupleType (typ:Type) = + // Simple Name Match on typ + if typ.IsEnum || typ.IsArray || typ.IsPointer then false + else tupleNames |> Seq.exists(fun n -> typ.FullName.StartsWith(n)) let maxTuple = 8 // Which field holds the nested tuple? let tupleEncField = maxTuple-1 - - let rec mkTupleType (tys: Type[]) = - match tys.Length with - | 1 -> tuple1.MakeGenericType(tys) - | 2 -> tuple2.MakeGenericType(tys) - | 3 -> tuple3.MakeGenericType(tys) - | 4 -> tuple4.MakeGenericType(tys) - | 5 -> tuple5.MakeGenericType(tys) - | 6 -> tuple6.MakeGenericType(tys) - | 7 -> tuple7.MakeGenericType(tys) - | n when n >= maxTuple -> + + let dictionaryLock = obj() + let refTupleTypes = System.Collections.Generic.Dictionary() + let valueTupleTypes = System.Collections.Generic.Dictionary() + + let rec mkTupleType isStruct (asm:Assembly) (tys:Type[]) = + let table = + let makeIt n = + let tupleFullName n = + let structOffset = if isStruct then 9 else 0 + let index = n - 1 + structOffset + tupleNames.[index] + + match n with + | 1 -> asm.GetType(tupleFullName 1) + | 2 -> asm.GetType(tupleFullName 2) + | 3 -> asm.GetType(tupleFullName 3) + | 4 -> asm.GetType(tupleFullName 4) + | 5 -> asm.GetType(tupleFullName 5) + | 6 -> asm.GetType(tupleFullName 6) + | 7 -> asm.GetType(tupleFullName 7) + | 8 -> asm.GetType(tupleFullName 8) + | _ -> invalidArg "tys" (SR.GetString(SR.invalidTupleTypes)) + + let tables = if isStruct then valueTupleTypes else refTupleTypes + match tables.TryGetValue(asm) with + | false, _ -> + let a = ref (Array.init 8 (fun i -> makeIt (i + 1))) + lock dictionaryLock (fun () -> match tables.TryGetValue(asm) with + | true, t -> a := t + | false, _ -> tables.Add(asm, !a)) + !a + | true, t -> t + + match tys.Length with + | 1 -> table.[0].MakeGenericType(tys) + | 2 -> table.[1].MakeGenericType(tys) + | 3 -> table.[2].MakeGenericType(tys) + | 4 -> table.[3].MakeGenericType(tys) + | 5 -> table.[4].MakeGenericType(tys) + | 6 -> table.[5].MakeGenericType(tys) + | 7 -> table.[6].MakeGenericType(tys) + | n when n >= maxTuple -> let tysA = tys.[0..tupleEncField-1] let tysB = tys.[maxTuple-1..] - let tyB = mkTupleType tysB - tuple8.MakeGenericType(Array.append tysA [| tyB |]) + let tyB = mkTupleType isStruct asm tysB + table.[7].MakeGenericType(Array.append tysA [| tyB |]) | _ -> invalidArg "tys" (SR.GetString(SR.invalidTupleTypes)) - - let rec getTupleTypeInfo (typ:Type) = + let rec getTupleTypeInfo (typ:Type) = if not (isTupleType (typ) ) then invalidArg "typ" (SR.GetString1(SR.notATupleType, typ.FullName)); let tyargs = typ.GetGenericArguments() - if tyargs.Length = maxTuple then + if tyargs.Length = maxTuple then let tysA = tyargs.[0..tupleEncField-1] let tyB = tyargs.[tupleEncField] Array.append tysA (getTupleTypeInfo tyB) - else + else tyargs let orderTupleProperties (props:PropertyInfo[]) = @@ -447,7 +464,7 @@ module internal Impl = #endif let props = props |> Array.sortBy (fun p -> p.Name) // they are not always in alphabetic order #if FX_ATLEAST_PORTABLE -#else +#else assert(props.Length <= maxTuple) assert(let haveNames = props |> Array.map (fun p -> p.Name) let expectNames = Array.init props.Length (fun i -> let j = i+1 // index j = 1,2,..,props.Length <= maxTuple @@ -455,22 +472,56 @@ module internal Impl = elif j=maxTuple then "Rest" else (assert false; "")) // dead code under prior assert, props.Length <= maxTuple haveNames = expectNames) -#endif +#endif props - + + let orderTupleFields (fields:FieldInfo[]) = + // The tuple fields are of the form: + // Item1 + // .. + // Item1, Item2, ..., Item + // Item1, Item2, ..., Item, Rest + // The PropertyInfo may not come back in order, so ensure ordering here. +#if FX_ATLEAST_PORTABLE +#else + assert(maxTuple < 10) // Alphasort will only works for upto 9 items: Item1, Item10, Item2, Item3, ..., Item9, Rest +#endif + let fields = fields |> Array.sortBy (fun fi -> fi.Name) // they are not always in alphabetic order +#if FX_ATLEAST_PORTABLE +#else + assert(fields.Length <= maxTuple) + assert(let haveNames = fields |> Array.map (fun fi -> fi.Name) + let expectNames = Array.init fields.Length (fun i -> let j = i+1 // index j = 1,2,..,fields.Length <= maxTuple + if j orderTupleProperties + let ctor = + if typ.IsValueType then + let fields = typ.GetFields(bindingFlags) |> orderTupleFields #if FX_ATLEAST_PORTABLE - let ctor = typ.GetConstructor(props |> Array.map (fun p -> p.PropertyType)) - ignore bindingFlags -#else - let ctor = typ.GetConstructor(BindingFlags.Instance ||| bindingFlags,null,props |> Array.map (fun p -> p.PropertyType),null) -#endif - match ctor with - | null -> raise <| ArgumentException(SR.GetString1(SR.invalidTupleTypeConstructorNotDefined, typ.FullName)) - | _ -> () - ctor - + ignore bindingFlags + typ.GetConstructor(fields |> Array.map (fun fi -> fi.FieldType)) +#else + typ.GetConstructor(BindingFlags.Instance ||| bindingFlags,null,fields |> Array.map (fun fi -> fi.FieldType),null) +#endif + else + let props = typ.GetProperties() |> orderTupleProperties +#if FX_ATLEAST_PORTABLE + ignore bindingFlags + typ.GetConstructor(props |> Array.map (fun p -> p.PropertyType)) +#else + typ.GetConstructor(BindingFlags.Instance ||| bindingFlags,null,props |> Array.map (fun p -> p.PropertyType),null) +#endif + match ctor with + | null -> raise <| ArgumentException(SR.GetString1(SR.invalidTupleTypeConstructorNotDefined, typ.FullName)) + | _ -> () + ctor + let getTupleCtor(typ:Type,bindingFlags) = let ctor = getTupleConstructorMethod(typ,bindingFlags) (fun (args:obj[]) -> @@ -478,13 +529,18 @@ module internal Impl = ctor.Invoke(args)) #else ctor.Invoke(BindingFlags.InvokeMethod ||| BindingFlags.Instance ||| bindingFlags,null,args,null)) -#endif +#endif let rec getTupleReader (typ:Type) = let etys = typ.GetGenericArguments() // Get the reader for the outer tuple record - let props = typ.GetProperties(instancePropertyFlags ||| BindingFlags.Public) |> orderTupleProperties - let reader = (fun (obj:obj) -> props |> Array.map (fun prop -> prop.GetValue(obj,null))) + let reader = + if typ.IsValueType then + let fields = (typ.GetFields(instanceFieldFlags ||| BindingFlags.Public) |> orderTupleFields) + ((fun (obj:obj) -> fields |> Array.map (fun field -> field.GetValue(obj)))) + else + let props = (typ.GetProperties(instancePropertyFlags ||| BindingFlags.Public) |> orderTupleProperties) + ((fun (obj:obj) -> props |> Array.map (fun prop -> prop.GetValue(obj,null)))) if etys.Length < maxTuple then reader else @@ -494,7 +550,7 @@ module internal Impl = let directVals = reader obj let encVals = reader2 directVals.[tupleEncField] Array.append directVals.[0..tupleEncField-1] encVals) - + let rec getTupleConstructor (typ:Type) = let etys = typ.GetGenericArguments() let maker1 = getTupleCtor (typ,BindingFlags.Public) @@ -515,20 +571,25 @@ module internal Impl = else maker1,Some(etys.[tupleEncField]) - let getTupleReaderInfo (typ:Type,index:int) = + let getTupleReaderInfo (typ:Type,index:int) = if index < 0 then invalidArg "index" (SR.GetString2(SR.tupleIndexOutOfRange, typ.FullName, index.ToString())) - let props = typ.GetProperties(instancePropertyFlags ||| BindingFlags.Public) |> orderTupleProperties - let get index = - if index >= props.Length then invalidArg "index" (SR.GetString2(SR.tupleIndexOutOfRange, typ.FullName, index.ToString())) - props.[index] - + + let get index = + if typ.IsValueType then + let props = typ.GetProperties(instancePropertyFlags ||| BindingFlags.Public) |> orderTupleProperties + if index >= props.Length then invalidArg "index" (SR.GetString2(SR.tupleIndexOutOfRange, typ.FullName, index.ToString())) + props.[index] + else + let props = typ.GetProperties(instancePropertyFlags ||| BindingFlags.Public) |> orderTupleProperties + if index >= props.Length then invalidArg "index" (SR.GetString2(SR.tupleIndexOutOfRange, typ.FullName, index.ToString())) + props.[index] + if index < tupleEncField then - get index, None + get index, None else let etys = typ.GetGenericArguments() get tupleEncField, Some(etys.[tupleEncField],index-(maxTuple-1)) - - + //----------------------------------------------------------------- // FUNCTION DECOMPILATION @@ -563,8 +624,7 @@ module internal Impl = (if (flags &&& SourceConstructFlags.NonPublicRepresentation) <> enum(0) then (bindingFlags &&& BindingFlags.NonPublic) <> enum(0) else - true) && - not (isTupleType typ) + true) let fieldPropsOfRecordType(typ:Type,bindingFlags) = typ.GetProperties(instancePropertyFlags ||| bindingFlags) @@ -641,13 +701,13 @@ module internal Impl = else invalidArg argName (SR.GetString1(SR.notARecordType, recordType.FullName)) - let checkTupleType(argName,tupleType) = + let checkTupleType(argName,(tupleType:Type)) = checkNonNull argName tupleType; if not (isTupleType tupleType) then invalidArg argName (SR.GetString1(SR.notATupleType, tupleType.FullName)) #if FX_RESHAPED_REFLECTION open ReflectionAdapters -type BindingFlags = ReflectionAdapters.BindingFlags +type internal BindingFlags = ReflectionAdapters.BindingFlags #endif [] @@ -687,71 +747,86 @@ type UnionCaseInfo(typ: System.Type, tag:int) = type FSharpType = static member IsTuple(typ:Type) = - Impl.checkNonNull "typ" typ; + Impl.checkNonNull "typ" typ Impl.isTupleType typ static member IsRecord(typ:Type,?bindingFlags) = let bindingFlags = defaultArg bindingFlags BindingFlags.Public - Impl.checkNonNull "typ" typ; + Impl.checkNonNull "typ" typ Impl.isRecordType (typ,bindingFlags) static member IsUnion(typ:Type,?bindingFlags) = let bindingFlags = defaultArg bindingFlags BindingFlags.Public - Impl.checkNonNull "typ" typ; + Impl.checkNonNull "typ" typ let typ = Impl.getTypeOfReprType (typ ,BindingFlags.Public ||| BindingFlags.NonPublic) Impl.isUnionType (typ,bindingFlags) static member IsFunction(typ:Type) = - Impl.checkNonNull "typ" typ; + Impl.checkNonNull "typ" typ let typ = Impl.getTypeOfReprType (typ ,BindingFlags.Public ||| BindingFlags.NonPublic) Impl.isFunctionType typ static member IsModule(typ:Type) = - Impl.checkNonNull "typ" typ; + Impl.checkNonNull "typ" typ Impl.isModuleType typ static member MakeFunctionType(domain:Type,range:Type) = - Impl.checkNonNull "domain" domain; - Impl.checkNonNull "range" range; + Impl.checkNonNull "domain" domain + Impl.checkNonNull "range" range Impl.func.MakeGenericType [| domain; range |] static member MakeTupleType(types:Type[]) = - Impl.checkNonNull "types" types; + Impl.checkNonNull "types" types + + // No assembly passed therefore just get framework local version of Tuple + let asm = typeof.Assembly + if types |> Array.exists (function null -> true | _ -> false) then + invalidArg "types" (SR.GetString(SR.nullsNotAllowedInArray)) + Impl.mkTupleType false asm types + + static member MakeTupleType (asm:Assembly, types:Type[]) = + Impl.checkNonNull "types" types if types |> Array.exists (function null -> true | _ -> false) then invalidArg "types" (SR.GetString(SR.nullsNotAllowedInArray)) - Impl.mkTupleType types + Impl.mkTupleType false asm types + + static member MakeStructTupleType (asm:Assembly, types:Type[]) = + Impl.checkNonNull "types" types + if types |> Array.exists (function null -> true | _ -> false) then + invalidArg "types" (SR.GetString(SR.nullsNotAllowedInArray)) + Impl.mkTupleType true asm types static member GetTupleElements(tupleType:Type) = - Impl.checkTupleType("tupleType",tupleType); + Impl.checkTupleType("tupleType",tupleType) Impl.getTupleTypeInfo tupleType static member GetFunctionElements(functionType:Type) = - Impl.checkNonNull "functionType" functionType; + Impl.checkNonNull "functionType" functionType let functionType = Impl.getTypeOfReprType (functionType ,BindingFlags.Public ||| BindingFlags.NonPublic) Impl.getFunctionTypeInfo functionType static member GetRecordFields(recordType:Type,?bindingFlags) = - let bindingFlags = defaultArg bindingFlags BindingFlags.Public - Impl.checkRecordType("recordType",recordType,bindingFlags); + let bindingFlags = defaultArg bindingFlags BindingFlags.Public + Impl.checkRecordType("recordType",recordType,bindingFlags) Impl.fieldPropsOfRecordType(recordType,bindingFlags) static member GetUnionCases (unionType:Type,?bindingFlags) = - let bindingFlags = defaultArg bindingFlags BindingFlags.Public - Impl.checkNonNull "unionType" unionType; + let bindingFlags = defaultArg bindingFlags BindingFlags.Public + Impl.checkNonNull "unionType" unionType let unionType = Impl.getTypeOfReprType (unionType ,bindingFlags) Impl.checkUnionType(unionType,bindingFlags); Impl.getUnionTypeTagNameMap(unionType,bindingFlags) |> Array.mapi (fun i _ -> UnionCaseInfo(unionType,i)) static member IsExceptionRepresentation(exceptionType:Type, ?bindingFlags) = let bindingFlags = defaultArg bindingFlags BindingFlags.Public - Impl.checkNonNull "exceptionType" exceptionType; + Impl.checkNonNull "exceptionType" exceptionType Impl.isExceptionRepr(exceptionType,bindingFlags) static member GetExceptionFields(exceptionType:Type, ?bindingFlags) = - let bindingFlags = defaultArg bindingFlags BindingFlags.Public - Impl.checkNonNull "exceptionType" exceptionType; - Impl.checkExnType(exceptionType,bindingFlags); + let bindingFlags = defaultArg bindingFlags BindingFlags.Public + Impl.checkNonNull "exceptionType" exceptionType + Impl.checkExnType(exceptionType,bindingFlags) Impl.fieldPropsOfRecordType (exceptionType,bindingFlags) type DynamicFunction<'T1,'T2>() = @@ -763,8 +838,8 @@ type DynamicFunction<'T1,'T2>() = type FSharpValue = static member MakeRecord(recordType:Type,args,?bindingFlags) = - let bindingFlags = defaultArg bindingFlags BindingFlags.Public - Impl.checkRecordType("recordType",recordType,bindingFlags); + let bindingFlags = defaultArg bindingFlags BindingFlags.Public + Impl.checkRecordType("recordType",recordType,bindingFlags) Impl.getRecordConstructor (recordType,bindingFlags) args static member GetRecordField(record:obj,info:PropertyInfo) = @@ -775,35 +850,35 @@ type FSharpValue = info.GetValue(record,null) static member GetRecordFields(record:obj,?bindingFlags) = - let bindingFlags = defaultArg bindingFlags BindingFlags.Public - Impl.checkNonNull "record" record; + let bindingFlags = defaultArg bindingFlags BindingFlags.Public + Impl.checkNonNull "record" record let typ = record.GetType() if not (Impl.isRecordType(typ,bindingFlags)) then invalidArg "record" (SR.GetString(SR.objIsNotARecord)); Impl.getRecordReader (typ,bindingFlags) record static member PreComputeRecordFieldReader(info:PropertyInfo) = - Impl.checkNonNull "info" info; + Impl.checkNonNull "info" info (fun (obj:obj) -> info.GetValue(obj,null)) static member PreComputeRecordReader(recordType:Type,?bindingFlags) : (obj -> obj[]) = let bindingFlags = defaultArg bindingFlags BindingFlags.Public - Impl.checkRecordType("recordType",recordType,bindingFlags); + Impl.checkRecordType("recordType",recordType,bindingFlags) Impl.getRecordReader (recordType,bindingFlags) static member PreComputeRecordConstructor(recordType:Type,?bindingFlags) = let bindingFlags = defaultArg bindingFlags BindingFlags.Public - Impl.checkRecordType("recordType",recordType,bindingFlags); + Impl.checkRecordType("recordType",recordType,bindingFlags) Impl.getRecordConstructor (recordType,bindingFlags) static member PreComputeRecordConstructorInfo(recordType:Type, ?bindingFlags) = let bindingFlags = defaultArg bindingFlags BindingFlags.Public - Impl.checkRecordType("recordType",recordType,bindingFlags); + Impl.checkRecordType("recordType",recordType,bindingFlags) Impl.getRecordConstructorMethod(recordType,bindingFlags) static member MakeFunction(functionType:Type,implementation:(obj->obj)) = - Impl.checkNonNull "functionType" functionType; + Impl.checkNonNull "functionType" functionType if not (Impl.isFunctionType functionType) then invalidArg "functionType" (SR.GetString1(SR.notAFunctionType, functionType.FullName)); - Impl.checkNonNull "implementation" implementation; + Impl.checkNonNull "implementation" implementation let domain,range = Impl.getFunctionTypeInfo functionType let dynCloMakerTy = typedefof> let saverTy = dynCloMakerTy.MakeGenericType [| domain; range |] @@ -811,19 +886,19 @@ type FSharpValue = let (f : (obj -> obj) -> obj) = downcast o f implementation - static member MakeTuple(tupleElements: obj[],tupleType:Type) = - Impl.checkNonNull "tupleElements" tupleElements; + static member MakeTuple(tupleElements: obj[], tupleType:Type) = + Impl.checkNonNull "tupleElements" tupleElements Impl.checkTupleType("tupleType",tupleType) Impl.getTupleConstructor tupleType tupleElements static member GetTupleFields(tuple:obj) = // argument name(s) used in error message - Impl.checkNonNull "tuple" tuple; + Impl.checkNonNull "tuple" tuple let typ = tuple.GetType() if not (Impl.isTupleType typ ) then invalidArg "tuple" (SR.GetString1(SR.notATupleType, tuple.GetType().FullName)); Impl.getTupleReader typ tuple static member GetTupleField(tuple:obj,index:int) = // argument name(s) used in error message - Impl.checkNonNull "tuple" tuple; + Impl.checkNonNull "tuple" tuple let typ = tuple.GetType() if not (Impl.isTupleType typ ) then invalidArg "tuple" (SR.GetString1(SR.notATupleType, tuple.GetType().FullName)); let fields = Impl.getTupleReader typ tuple @@ -873,19 +948,19 @@ type FSharpValue = //System.Console.WriteLine("typ1 = {0}",box unionType) let unionType = ensureType(unionType,obj) //System.Console.WriteLine("typ2 = {0}",box unionType) - Impl.checkNonNull "unionType" unionType; + Impl.checkNonNull "unionType" unionType let unionType = Impl.getTypeOfReprType (unionType ,bindingFlags) //System.Console.WriteLine("typ3 = {0}",box unionType) - Impl.checkUnionType(unionType,bindingFlags); + Impl.checkUnionType(unionType,bindingFlags) let tag = Impl.getUnionTagReader (unionType,bindingFlags) obj let flds = Impl.getUnionCaseRecordReader (unionType,tag,bindingFlags) obj UnionCaseInfo(unionType,tag), flds static member PreComputeUnionTagReader(unionType: Type,?bindingFlags) : (obj -> int) = let bindingFlags = defaultArg bindingFlags BindingFlags.Public - Impl.checkNonNull "unionType" unionType; + Impl.checkNonNull "unionType" unionType let unionType = Impl.getTypeOfReprType (unionType ,bindingFlags) - Impl.checkUnionType(unionType,bindingFlags); + Impl.checkUnionType(unionType,bindingFlags) Impl.getUnionTagReader (unionType ,bindingFlags) @@ -893,12 +968,12 @@ type FSharpValue = let bindingFlags = defaultArg bindingFlags BindingFlags.Public Impl.checkNonNull "unionType" unionType; let unionType = Impl.getTypeOfReprType (unionType ,bindingFlags) - Impl.checkUnionType(unionType,bindingFlags); + Impl.checkUnionType(unionType,bindingFlags) Impl.getUnionTagMemberInfo(unionType ,bindingFlags) static member PreComputeUnionReader(unionCase: UnionCaseInfo,?bindingFlags) : (obj -> obj[]) = let bindingFlags = defaultArg bindingFlags BindingFlags.Public - Impl.checkNonNull "unionCase" unionCase; + Impl.checkNonNull "unionCase" unionCase let typ = unionCase.DeclaringType Impl.getUnionCaseRecordReader (typ,unionCase.Tag,bindingFlags) @@ -906,7 +981,7 @@ type FSharpValue = let bindingFlags = defaultArg bindingFlags BindingFlags.Public Impl.checkNonNull "exn" exn; let typ = exn.GetType() - Impl.checkExnType(typ,bindingFlags); + Impl.checkExnType(typ,bindingFlags) Impl.getRecordReader (typ,bindingFlags) exn module FSharpReflectionExtensions = diff --git a/src/fsharp/FSharp.Core/reflect.fsi b/src/fsharp/FSharp.Core/reflect.fsi index bad8ff7b552..b25d4b3597c 100644 --- a/src/fsharp/FSharp.Core/reflect.fsi +++ b/src/fsharp/FSharp.Core/reflect.fsi @@ -324,6 +324,16 @@ type FSharpType = /// The type representing the tuple containing the input elements. static member MakeTupleType: types:Type[] -> Type + /// Returns a System.Type representing an F# tuple type with the given element types + /// An array of types for the tuple elements. + /// The type representing the tuple containing the input elements. + static member MakeTupleType: asm:Assembly * types:Type[] -> Type + + /// Returns a System.Type representing an F# struct tuple type with the given element types + /// An array of types for the tuple elements. + /// The type representing the struct tuple containing the input elements. + static member MakeStructTupleType: asm:Assembly * types:Type[] -> Type + /// Return true if the typ is a representation of an F# tuple type /// The type to check. /// True if the type check succeeds. @@ -522,7 +532,7 @@ open Microsoft.FSharp.Core module internal ReflectionUtils = #if FX_RESHAPED_REFLECTION - type BindingFlags = ReflectionAdapters.BindingFlags + type internal BindingFlags = ReflectionAdapters.BindingFlags #else type BindingFlags = System.Reflection.BindingFlags #endif diff --git a/src/fsharp/FSharp.Core/result.fs b/src/fsharp/FSharp.Core/result.fs new file mode 100644 index 00000000000..8edc2717c0c --- /dev/null +++ b/src/fsharp/FSharp.Core/result.fs @@ -0,0 +1,15 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +namespace Microsoft.FSharp.Core + +[] +module Result = + + [] + let map f inp = match inp with Error e -> Error e | Ok x -> Ok (f x) + + [] + let mapError f inp = match inp with Error e -> Error (f e) | Ok x -> Ok x + + [] + let bind f inp = match inp with Error e -> Error e | Ok x -> f x diff --git a/src/fsharp/FSharp.Core/result.fsi b/src/fsharp/FSharp.Core/result.fsi new file mode 100644 index 00000000000..f1706eec656 --- /dev/null +++ b/src/fsharp/FSharp.Core/result.fsi @@ -0,0 +1,30 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +namespace Microsoft.FSharp.Core + + open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators + + [] + module Result = + + /// map f inp evaluates to match inp with Error e -> Error e | Ok x -> Ok (f x). + /// A function to apply to the OK result value. + /// The input result. + /// A result of the input value after applying the mapping function, or Error if the input is Error. + [] + val map : mapping:('T -> 'U) -> result:Result<'T, 'TError> -> Result<'U, 'TError> + + /// map f inp evaluates to match inp with Error x -> Error (f x) | Ok v -> Ok v. + /// A function to apply to the OK result value. + /// The input result. + /// A result of the input value after applying the mapping function, or Error if the input is Error. + [] + val mapError: mapping:('TError -> 'U) -> result:Result<'T, 'TError> -> Result<'T, 'U> + + /// bind f inp evaluates to match inp with Error e -> Error e | Ok x -> f x + /// A function that takes the value of type T from a result and transforms it into + /// a result containing a value of type U. + /// The input result. + /// A result of the output type of the binder. + [] + val bind: binder:('T -> Result<'U, 'TError>) -> result:Result<'T, 'TError> -> Result<'U, 'TError> diff --git a/src/fsharp/FSharp.Core/seq.fsi b/src/fsharp/FSharp.Core/seq.fsi index b371efea92f..f05e9db76dd 100644 --- a/src/fsharp/FSharp.Core/seq.fsi +++ b/src/fsharp/FSharp.Core/seq.fsi @@ -161,17 +161,16 @@ namespace Microsoft.FSharp.Collections [] val collect: mapping:('T -> 'Collection) -> source:seq<'T> -> seq<'U> when 'Collection :> seq<'U> - /// Compares two sequences using the given comparison function, element by element. - /// Returns the first non-zero result from the comparison function. If the end of a sequence - /// is reached it returns a -1 if the first sequence is shorter and a 1 if the second sequence - /// is shorter. + /// Compares two sequences using the given comparison function, element by element. /// /// A function that takes an element from each sequence and returns an int. /// If it evaluates to a non-zero value iteration is stopped and that value is returned. /// The first input sequence. /// The second input sequence. /// - /// The first non-zero value from the comparison function. + /// Returns the first non-zero result from the comparison function. If the end of a sequence + /// is reached it returns a -1 if the first sequence is shorter and a 1 if the second sequence + /// is shorter. /// /// Thrown when either of the input sequences /// is null. diff --git a/src/fsharp/FSharp.Core/set.fs b/src/fsharp/FSharp.Core/set.fs index edd7adb2833..3a37de100f6 100644 --- a/src/fsharp/FSharp.Core/set.fs +++ b/src/fsharp/FSharp.Core/set.fs @@ -2,6 +2,7 @@ namespace Microsoft.FSharp.Collections + open System open Microsoft.FSharp.Core open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators open Microsoft.FSharp.Core.Operators @@ -399,8 +400,8 @@ namespace Microsoft.FSharp.Collections let mkIterator s = { stack = collapseLHS [s]; started = false } - let notStarted() = raise (new System.InvalidOperationException(SR.GetString(SR.enumerationNotStarted))) - let alreadyFinished() = raise (new System.InvalidOperationException(SR.GetString(SR.enumerationAlreadyFinished))) + let notStarted() = raise (InvalidOperationException(SR.GetString(SR.enumerationNotStarted))) + let alreadyFinished() = raise (InvalidOperationException(SR.GetString(SR.enumerationAlreadyFinished))) let current i = if i.started then @@ -426,13 +427,13 @@ namespace Microsoft.FSharp.Collections let mkIEnumerator s = let i = ref (mkIterator s) { new IEnumerator<_> with - member x.Current = current !i + member __.Current = current !i interface IEnumerator with - member x.Current = box (current !i) - member x.MoveNext() = moveNext !i - member x.Reset() = i := mkIterator s + member __.Current = box (current !i) + member __.MoveNext() = moveNext !i + member __.Reset() = i := mkIterator s interface System.IDisposable with - member x.Dispose() = () } + member __.Dispose() = () } //-------------------------------------------------------------------------- // Set comparison. This can be expensive. @@ -510,11 +511,11 @@ namespace Microsoft.FSharp.Collections [] #if FX_NO_DEBUG_PROXIES #else - [>)>] + [>)>] #endif #if FX_NO_DEBUG_DISPLAYS #else - [] + [] #endif [] type Set<[]'T when 'T : comparison >(comparer:IComparer<'T>, tree: SetTree<'T>) = @@ -760,19 +761,15 @@ namespace Microsoft.FSharp.Collections #if FX_NO_DEBUG_DISPLAYS #else - [] + [] #endif member x.Items = v |> Seq.truncate 1000 |> Seq.toArray namespace Microsoft.FSharp.Collections open Microsoft.FSharp.Core - open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators open Microsoft.FSharp.Core.Operators open Microsoft.FSharp.Collections - open System.Collections - open System.Collections.Generic - open System.Diagnostics [] [] diff --git a/src/fsharp/FSharp.Core/string.fs b/src/fsharp/FSharp.Core/string.fs index cec6c745943..a1848b1a220 100644 --- a/src/fsharp/FSharp.Core/string.fs +++ b/src/fsharp/FSharp.Core/string.fs @@ -2,8 +2,8 @@ namespace Microsoft.FSharp.Core - open System.Diagnostics - open Microsoft.FSharp.Core + open System + open System.Text open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators open Microsoft.FSharp.Core.Operators open Microsoft.FSharp.Core.Operators.Checked @@ -14,11 +14,13 @@ namespace Microsoft.FSharp.Core module String = let inline emptyIfNull str = - if str = null then "" else str + match str with + | null -> String.Empty + | _ -> str [] let concat sep (strings : seq) = - System.String.Join(sep, Seq.toArray strings) + String.Join(sep, Seq.toArray strings) [] let iter (f : (char -> unit)) (str:string) = @@ -36,47 +38,47 @@ namespace Microsoft.FSharp.Core [] let map (f: char -> char) (str:string) = let str = emptyIfNull str - let res = new System.Text.StringBuilder(str.Length) - str |> iter (fun c -> res.Append(f c) |> ignore); + let res = StringBuilder(str.Length) + str |> iter (fun c -> res.Append(f c) |> ignore) res.ToString() [] let mapi (f: int -> char -> char) (str:string) = let str = emptyIfNull str - let res = new System.Text.StringBuilder(str.Length) + let res = StringBuilder(str.Length) let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f) - str |> iteri (fun i c -> res.Append(f.Invoke(i, c)) |> ignore); + str |> iteri (fun i c -> res.Append(f.Invoke(i, c)) |> ignore) res.ToString() [] let filter (f: char -> bool) (str:string) = let str = emptyIfNull str - let res = new System.Text.StringBuilder(str.Length) + let res = StringBuilder(str.Length) str |> iter (fun c -> if f c then res.Append(c) |> ignore) res.ToString() [] let collect (f: char -> string) (str:string) = let str = emptyIfNull str - let res = new System.Text.StringBuilder(str.Length) - str |> iter (fun c -> res.Append(f c) |> ignore); + let res = StringBuilder(str.Length) + str |> iter (fun c -> res.Append(f c) |> ignore) res.ToString() [] let init (count:int) (initializer: int-> string) = - if count < 0 then invalidArg "count" (SR.GetString(SR.inputMustBeNonNegative)) - let res = new System.Text.StringBuilder(count) + if count < 0 then invalidArg "count" (SR.GetString(SR.inputMustBeNonNegative)) + let res = StringBuilder(count) for i = 0 to count - 1 do - res.Append(initializer i) |> ignore; + res.Append(initializer i) |> ignore res.ToString() [] let replicate (count:int) (str:string) = - if count < 0 then invalidArg "count" (SR.GetString(SR.inputMustBeNonNegative)) + if count < 0 then invalidArg "count" (SR.GetString(SR.inputMustBeNonNegative)) let str = emptyIfNull str - let res = new System.Text.StringBuilder(str.Length) + let res = StringBuilder(str.Length) for i = 0 to count - 1 do - res.Append(str) |> ignore; + res.Append(str) |> ignore res.ToString() [] @@ -95,5 +97,3 @@ namespace Microsoft.FSharp.Core let length (str:string) = let str = emptyIfNull str str.Length - - diff --git a/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj b/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj index 6044b34a6b6..449cc64b900 100644 --- a/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj +++ b/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj @@ -151,9 +151,6 @@ Utilities\rational.fs - - Utilities\TraceCall.fs - ErrorLogging\range.fsi @@ -564,7 +561,6 @@ - @@ -577,15 +573,24 @@ - - - - - + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Framework.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Utilities.Core.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Tasks.Core.dll + ..\..\..\packages\Microsoft.DiaSymReader.PortablePdb.1.1.0\lib\portable-net45+win8\Microsoft.DiaSymReader.PortablePdb.dll ..\..\..\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 + ..\..\..\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.dll + ..\..\..\packages\System.ValueTuple.4.0.0-rc3-24212-01\lib\netstandard1.1\\System.ValueTuple.dll {DED3BBD7-53F4-428A-8C9F-27968E768605} FSharp.Core diff --git a/src/fsharp/FindUnsolved.fs b/src/fsharp/FindUnsolved.fs index 66f421f3522..0635dc3c189 100644 --- a/src/fsharp/FindUnsolved.fs +++ b/src/fsharp/FindUnsolved.fs @@ -29,9 +29,9 @@ open Microsoft.FSharp.Compiler.Infos type env = Nix type cenv = - { g: TcGlobals; - amap: Import.ImportMap; - denv: DisplayEnv; + { g: TcGlobals + amap: Import.ImportMap + denv: DisplayEnv mutable unsolved: Typars } let accTy cenv _env ty = @@ -50,29 +50,29 @@ let rec accExpr (cenv:cenv) (env:env) expr = let expr = stripExpr expr match expr with | Expr.Sequential (e1,e2,_,_,_) -> - accExpr cenv env e1; + accExpr cenv env e1 accExpr cenv env e2 | Expr.Let (bind,body,_,_) -> - accBind cenv env bind ; + accBind cenv env bind accExpr cenv env body | Expr.Const (_,_,ty) -> accTy cenv env ty | Expr.Val (_v,_vFlags,_m) -> () | Expr.Quote(ast,_,_,_m,ty) -> - accExpr cenv env ast; - accTy cenv env ty; + accExpr cenv env ast + accTy cenv env ty | Expr.Obj (_,typ,basev,basecall,overrides,iimpls,_m) -> accTy cenv env typ - accExpr cenv env basecall; - accMethods cenv env basev overrides ; - accIntfImpls cenv env basev iimpls; + accExpr cenv env basecall + accMethods cenv env basev overrides + accIntfImpls cenv env basev iimpls | Expr.Op (c,tyargs,args,m) -> accOp cenv env (c,tyargs,args,m) | Expr.App(f,fty,tyargs,argsl,_m) -> - accTy cenv env fty; - accTypeInst cenv env tyargs; - accExpr cenv env f; + accTy cenv env fty + accTypeInst cenv env tyargs + accExpr cenv env f accExprs cenv env argsl // REVIEW: fold the next two cases together | Expr.Lambda(_,_ctorThisValOpt,_baseValOpt,argvs,_body,m,rty) -> @@ -81,24 +81,24 @@ let rec accExpr (cenv:cenv) (env:env) expr = accLambdas cenv env topValInfo expr ty | Expr.TyLambda(_,tps,_body,_m,rty) -> let topValInfo = ValReprInfo (ValReprInfo.InferTyparInfo tps,[],ValReprInfo.unnamedRetVal) - accTy cenv env rty; + accTy cenv env rty let ty = tryMkForallTy tps rty accLambdas cenv env topValInfo expr ty | Expr.TyChoose(_tps,e1,_m) -> accExpr cenv env e1 | Expr.Match(_,_exprm,dtree,targets,m,ty) -> - accTy cenv env ty; - accDTree cenv env dtree; - accTargets cenv env m ty targets; + accTy cenv env ty + accDTree cenv env dtree + accTargets cenv env m ty targets | Expr.LetRec (binds,e,_m,_) -> - accBinds cenv env binds; + accBinds cenv env binds accExpr cenv env e | Expr.StaticOptimization (constraints,e2,e3,_m) -> - accExpr cenv env e2; - accExpr cenv env e3; + accExpr cenv env e2 + accExpr cenv env e3 constraints |> List.iter (function | TTyconEqualsTycon(ty1,ty2) -> - accTy cenv env ty1; + accTy cenv env ty1 accTy cenv env ty2 | TTyconIsStruct(ty1) -> accTy cenv env ty1) @@ -106,7 +106,7 @@ let rec accExpr (cenv:cenv) (env:env) expr = and accMethods cenv env baseValOpt l = List.iter (accMethod cenv env baseValOpt) l and accMethod cenv env _baseValOpt (TObjExprMethod(_slotsig,_attribs,_tps,vs,e,_m)) = - vs |> List.iterSquared (accVal cenv env); + vs |> List.iterSquared (accVal cenv env) accExpr cenv env e and accIntfImpls cenv env baseValOpt l = List.iter (accIntfImpl cenv env baseValOpt) l @@ -116,16 +116,16 @@ and accIntfImpl cenv env baseValOpt (ty,overrides) = and accOp cenv env (op,tyargs,args,_m) = // Special cases - accTypeInst cenv env tyargs; - accExprs cenv env args; + accTypeInst cenv env tyargs + accExprs cenv env args match op with // Handle these as special cases since mutables are allowed inside their bodies | TOp.ILCall (_,_,_,_,_,_,_,_,enclTypeArgs,methTypeArgs,tys) -> - accTypeInst cenv env enclTypeArgs; - accTypeInst cenv env methTypeArgs; + accTypeInst cenv env enclTypeArgs + accTypeInst cenv env methTypeArgs accTypeInst cenv env tys | TOp.TraitCall(TTrait(tys,_nm,_,argtys,rty,_sln)) -> - argtys |> accTypeInst cenv env ; + argtys |> accTypeInst cenv env rty |> Option.iter (accTy cenv env) tys |> List.iter (accTy cenv env) @@ -139,11 +139,11 @@ and accLambdas cenv env topValInfo e ety = | Expr.Lambda _ | Expr.TyLambda _ -> let _tps,ctorThisValOpt,baseValOpt,vsl,body,bodyty = destTopLambda cenv.g cenv.amap topValInfo (e, ety) - accTy cenv env bodyty; - vsl |> List.iterSquared (accVal cenv env); - baseValOpt |> Option.iter (accVal cenv env); - ctorThisValOpt |> Option.iter (accVal cenv env); - accExpr cenv env body; + accTy cenv env bodyty + vsl |> List.iterSquared (accVal cenv env) + baseValOpt |> Option.iter (accVal cenv env) + ctorThisValOpt |> Option.iter (accVal cenv env) + accExpr cenv env body | _ -> accExpr cenv env e @@ -151,17 +151,17 @@ and accExprs cenv env exprs = exprs |> List.iter (accExpr cenv env) and accFlatExprs cenv env exprs = exprs |> FlatList.iter (accExpr cenv env) and accTargets cenv env m ty targets = Array.iter (accTarget cenv env m ty) targets -and accTarget cenv env _m _ty (TTarget(_vs,e,_)) = accExpr cenv env e; +and accTarget cenv env _m _ty (TTarget(_vs,e,_)) = accExpr cenv env e and accDTree cenv env x = match x with - | TDSuccess (es,_n) -> accFlatExprs cenv env es; + | TDSuccess (es,_n) -> accFlatExprs cenv env es | TDBind(bind,rest) -> accBind cenv env bind; accDTree cenv env rest | TDSwitch (e,cases,dflt,m) -> accSwitch cenv env (e,cases,dflt,m) and accSwitch cenv env (e,cases,dflt,_m) = - accExpr cenv env e; - cases |> List.iter (fun (TCase(discrim,e)) -> accDiscrim cenv env discrim; accDTree cenv env e) ; + accExpr cenv env e + cases |> List.iter (fun (TCase(discrim,e)) -> accDiscrim cenv env discrim; accDTree cenv env e) dflt |> Option.iter (accDTree cenv env) and accDiscrim cenv env d = @@ -172,31 +172,31 @@ and accDiscrim cenv env d = | Test.IsNull -> () | Test.IsInst (srcty,tgty) -> accTy cenv env srcty; accTy cenv env tgty | Test.ActivePatternCase (exp, tys, _, _, _) -> - accExpr cenv env exp; + accExpr cenv env exp accTypeInst cenv env tys and accAttrib cenv env (Attrib(_,_k,args,props,_,_,_m)) = - args |> List.iter (fun (AttribExpr(e1,_)) -> accExpr cenv env e1); + args |> List.iter (fun (AttribExpr(e1,_)) -> accExpr cenv env e1) props |> List.iter (fun (AttribNamedArg(_nm,_ty,_flg,AttribExpr(expr,_))) -> accExpr cenv env expr) and accAttribs cenv env attribs = List.iter (accAttrib cenv env) attribs and accValReprInfo cenv env (ValReprInfo(_,args,ret)) = - args |> List.iterSquared (accArgReprInfo cenv env); - ret |> accArgReprInfo cenv env; + args |> List.iterSquared (accArgReprInfo cenv env) + ret |> accArgReprInfo cenv env and accArgReprInfo cenv env (argInfo: ArgReprInfo) = accAttribs cenv env argInfo.Attribs and accVal cenv env v = - v.Attribs |> accAttribs cenv env; - v.ValReprInfo |> Option.iter (accValReprInfo cenv env); + v.Attribs |> accAttribs cenv env + v.ValReprInfo |> Option.iter (accValReprInfo cenv env) v.Type |> accTy cenv env and accBind cenv env (bind:Binding) = - accVal cenv env bind.Var; + accVal cenv env bind.Var let topValInfo = match bind.Var.ValReprInfo with Some info -> info | _ -> ValReprInfo.emptyValData - accLambdas cenv env topValInfo bind.Expr bind.Var.Type; + accLambdas cenv env topValInfo bind.Expr bind.Var.Type and accBinds cenv env xs = xs |> FlatList.iter (accBind cenv env) @@ -205,15 +205,15 @@ and accBinds cenv env xs = xs |> FlatList.iter (accBind cenv env) //-------------------------------------------------------------------------- let accTyconRecdField cenv env _tycon (rfield:RecdField) = - accAttribs cenv env rfield.PropertyAttribs; + accAttribs cenv env rfield.PropertyAttribs accAttribs cenv env rfield.FieldAttribs let accTycon cenv env (tycon:Tycon) = - accAttribs cenv env tycon.Attribs; - tycon.AllFieldsArray |> Array.iter (accTyconRecdField cenv env tycon); + accAttribs cenv env tycon.Attribs + tycon.AllFieldsArray |> Array.iter (accTyconRecdField cenv env tycon) if tycon.IsUnionTycon then (* This covers finite unions. *) tycon.UnionCasesAsList |> List.iter (fun uc -> - accAttribs cenv env uc.Attribs; + accAttribs cenv env uc.Attribs uc.RecdFields |> List.iter (accTyconRecdField cenv env tycon)) @@ -232,7 +232,7 @@ and accModuleOrNamespaceDefs cenv env x = List.iter (accModuleOrNamespaceDef cen and accModuleOrNamespaceDef cenv env x = match x with | TMDefRec(_,tycons,mbinds,_m) -> - accTycons cenv env tycons; + accTycons cenv env tycons accModuleOrNamespaceBinds cenv env mbinds | TMDefLet(bind,_m) -> accBind cenv env bind | TMDefDo(e,_m) -> accExpr cenv env e @@ -246,12 +246,12 @@ and accModuleOrNamespaceBind cenv env x = let UnsolvedTyparsOfModuleDef g amap denv (mdef, extraAttribs) = let cenv = - { g =g ; - amap=amap; - denv=denv; + { g =g + amap=amap + denv=denv unsolved = [] } - accModuleOrNamespaceDef cenv Nix mdef; - accAttribs cenv Nix extraAttribs; + accModuleOrNamespaceDef cenv Nix mdef + accAttribs cenv Nix extraAttribs List.rev cenv.unsolved diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index 85e07ad0d67..080bc1405ae 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -175,16 +175,21 @@ type IlxGenOptions = generateDebugSymbols: bool testFlagEmitFeeFeeAs100001: bool ilxBackend: IlxGenBackend + /// Indicates the code is being generated in FSI.EXE and is executed immediately after code generation /// This includes all interactively compiled code, including #load, definitions, and expressions isInteractive: bool - // Indicates the code generated is an interactive 'it' expression. We generate a setter to allow clearing of the underlying - // storage, even though 'it' is not logically mutable + + /// Indicates the code generated is an interactive 'it' expression. We generate a setter to allow clearing of the underlying + /// storage, even though 'it' is not logically mutable isInteractiveItExpr: bool - // Indicates System.SerializableAttribute is available in the target framework + + /// Indicates System.SerializableAttribute is available in the target framework netFxHasSerializableAttribute : bool + /// Whenever possible, use callvirt instead of call - alwaysCallVirt: bool} + alwaysCallVirt: bool } + /// Compilation environment for compiling a fragment of an assembly [] @@ -198,11 +203,11 @@ type cenv = amap: Import.ImportMap intraAssemblyInfo : IlxGenIntraAssemblyInfo /// Cache methods with SecurityAttribute applied to them, to prevent unnecessary calls to ExistsInEntireHierarchyOfType - casApplied : Dictionary } + casApplied : Dictionary + /// Used to apply forced inlining optimizations to witnesses generated late during codegen + mutable optimizeDuringCodeGen : (Expr -> Expr) } -type EmitSequencePointState = SPAlways | SPSuppress - let mkTypeOfExpr cenv m ilty = mkAsmExpr ([ mkNormalCall (mspec_Type_GetTypeFromHandle cenv.g.ilg) ], [], @@ -390,7 +395,7 @@ let rec GenTypeArgAux amap m g tyenv tyarg = and GenTypeArgsAux amap m g tyenv tyargs = List.map (GenTypeArgAux amap m g tyenv) (DropErasedTyargs tyargs) -and GenTyAppAux amap m g tyenv repr tinst = +and GenTyAppAux amap m g tyenv repr tinst = match repr with | CompiledTypeRepr.ILAsmOpen ty -> let ilTypeInst = GenTypeArgsAux amap m g tyenv tinst @@ -403,7 +408,7 @@ and GenTyAppAux amap m g tyenv repr tinst = mkILTy boxity (mkILTySpec (tref,ilTypeInst)) | Some ilType -> ilType // monomorphic types include a cached ilType to avoid reallocation of an ILType node - + and GenNamedTyAppAux (amap:Import.ImportMap) m g tyenv ptrsOK tcref tinst = let tinst = DropErasedTyargs tinst @@ -428,7 +433,7 @@ and GenTypeAux amap m g (tyenv: TypeReprEnv) voidOK ptrsOK ty = #endif match stripTyEqnsAndMeasureEqns g ty with | TType_app (tcref, tinst) -> GenNamedTyAppAux amap m g tyenv ptrsOK tcref tinst - | TType_tuple args -> GenTypeAux amap m g tyenv VoidNotOK ptrsOK (mkCompiledTupleTy g args) + | TType_tuple (tupInfo, args) -> GenTypeAux amap m g tyenv VoidNotOK ptrsOK (mkCompiledTupleTy g (evalTupInfoIsStruct tupInfo) args) | TType_fun (dty, returnTy) -> EraseClosures.mkILFuncTy g.ilxPubCloEnv (GenTypeArgAux amap m g tyenv dty) (GenTypeArgAux amap m g tyenv returnTy) | TType_ucase (ucref, args) -> @@ -611,8 +616,6 @@ type IlxClosureInfo = type ValStorage = /// Indicates the value is always null | Null - /// Indicates the value is not stored, and no value is created - | Unrealized /// Indicates the value is stored in a static field. | StaticField of ILFieldSpec * ValRef * (*hasLiteralAttr:*)bool * ILType * string * ILType * ILMethodRef * ILMethodRef * OptionalShadowLocal /// Indicates the value is "stored" as a property that recomputes it each time it is referenced. Used for simple constants that do not cause initialization triggers @@ -705,7 +708,6 @@ let OutputStorage (pps: TextWriter) s = | Arg _ -> pps.Write "(arg)" | Env _ -> pps.Write "(env)" | Null -> pps.Write "(null)" - | Unrealized -> pps.Write "(no real value required)" //-------------------------------------------------------------------------- // Augment eenv with values @@ -843,6 +845,16 @@ let ComputeFieldSpecForVal(optIntraAssemblyInfo:IlxGenIntraAssemblyInfo option, generate() +let IsValCompiledAsMethod g (v:Val) = + match v.ValReprInfo with + | None -> false + | Some topValInfo -> + not (isUnitTy g v.Type && not v.IsMemberOrModuleBinding && not v.IsMutable) && + not v.IsCompiledAsStaticPropertyWithoutField && + match GetTopValTypeInFSharpForm g topValInfo v.Type v.Range with + | [],[],_,_ when not v.IsMember -> false + | _ -> true + // This called via 2 routes. // (a) ComputeAndAddStorageForLocalTopVal // (b) ComputeStorageForNonLocalTopVal @@ -998,10 +1010,10 @@ and AddBindingsForModuleTopVals _g allocVal _cloc eenv vs = // into the stored results for the whole CCU. // isIncrementalFragment = true --> "typed input" // isIncrementalFragment = false --> "#load" -let AddIncrementalLocalAssemblyFragmentToIlxGenEnv (amap:Import.ImportMap, isIncrementalFragment, g, ccu, fragName, intraAssemblyInfo, eenv, TAssembly impls) = +let AddIncrementalLocalAssemblyFragmentToIlxGenEnv (amap:Import.ImportMap, isIncrementalFragment, g, ccu, fragName, intraAssemblyInfo, eenv, typedImplFiles) = let cloc = CompLocForFragment fragName ccu let allocVal = ComputeAndAddStorageForLocalTopVal (amap, g, intraAssemblyInfo, true, NoShadowLocal) - (eenv, impls) ||> List.fold (fun eenv (TImplFile(qname,_,mexpr,_,_)) -> + (eenv, typedImplFiles) ||> List.fold (fun eenv (TImplFile(qname,_,mexpr,_,_)) -> let cloc = { cloc with clocTopImplQualifiedName = qname.Text } if isIncrementalFragment then match mexpr with @@ -1628,67 +1640,140 @@ let LocalScope nm cgbuf (f : (Mark * Mark) -> 'a) : 'a = let compileSequenceExpressions = true // try (System.Environment.GetEnvironmentVariable("COMPILED_SEQ") <> null) with _ -> false //------------------------------------------------------------------------- -// Generate expressions +// Sequence Point Logic //------------------------------------------------------------------------- +type EmitSequencePointState = + /// Indicates that we need a sequence point at first opportunity. Used on entrance to a method + /// and whenever we drop into an expression within the stepping control structure. + | SPAlways + | SPSuppress + +/// Determines what sequence point should be emitted for a binding +let ComputeSequencePointInfoForBinding g (TBind(vspec,e,spBind)) = + if IsValCompiledAsMethod g vspec then + false, None, SPSuppress + else + match spBind, stripExpr e with + | NoSequencePointAtInvisibleBinding, _ -> false, None, SPSuppress + | NoSequencePointAtStickyBinding, _ -> true, None, SPSuppress + | NoSequencePointAtDoBinding, _ -> false, None, SPAlways + | NoSequencePointAtLetBinding, _ -> false, None, SPSuppress + // Don't emit sequence points for lambdas. + // SEQUENCE POINT REVIEW: don't emit for lazy either, nor any builder expressions + | _, (Expr.Lambda _ | Expr.TyLambda _) -> false, None, SPSuppress + | SequencePointAtBinding m,_ -> false, Some m, SPSuppress + + +/// Determines if a sequence wil be emitted when we generate the code for a binding +let BindingEmitsSequencePoint g bind = + match ComputeSequencePointInfoForBinding g bind with + | _, None, SPSuppress -> false + | _ -> true + +/// Determines if any code at all will be emitted for a binding +let BindingEmitsNoCode g (TBind(vspec,_,_)) = IsValCompiledAsMethod g vspec + let bindHasSeqPt = function (TBind(_,_,SequencePointAtBinding _)) -> true | _ -> false let bindIsInvisible = function (TBind(_,_,NoSequencePointAtInvisibleBinding _)) -> true | _ -> false -let AlwaysSuppressSequencePoint sp expr = + +// This determines if we're about to emit a sequence point as the first emitted code for an expression. +// It determines if expression code generation certainly starts with a sequence point. An approximation used +// to prevent the generation of duplicat sequence points for conditionals and pattern matching +let rec FirstEmittedCodeWillBeSequencePoint g sp expr = + match sp with + | SPAlways -> + match stripExpr expr with + | Expr.Let (bind,body,_,_) -> + BindingEmitsSequencePoint g bind || + FirstEmittedCodeWillBeSequencePoint g sp bind.Expr || + (BindingEmitsNoCode g bind && FirstEmittedCodeWillBeSequencePoint g sp body) + | Expr.LetRec(binds,body,_,_) -> + binds |> List.exists (BindingEmitsSequencePoint g) || + (binds |> FlatList.forall (BindingEmitsNoCode g) && FirstEmittedCodeWillBeSequencePoint g sp body) + | Expr.Sequential (_, _, NormalSeq,spSeq,_) -> + match spSeq with + | SequencePointsAtSeq -> true + | SuppressSequencePointOnExprOfSequential -> true + | SuppressSequencePointOnStmtOfSequential -> false + | Expr.Match (SequencePointAtBinding _,_,_,_,_,_) -> true + | Expr.Op(( TOp.TryCatch (SequencePointAtTry _,_) + | TOp.TryFinally (SequencePointAtTry _,_) + | TOp.For (SequencePointAtForLoop _,_) + | TOp.While (SequencePointAtWhileLoop _,_)),_,_,_) -> true + | _ -> false + + | SPSuppress -> + false + +/// Suppress sequence points in some cases even though "SPAlways" is set. In most +/// cases this is for code-generated constructs that form part of the compilation of a larger +/// construct. +/// +/// Note this is only used when FirstEmittedCodeWillBeSequencePoint is false. +let AlwaysSuppressSequencePoint g sp expr = + assert (not(FirstEmittedCodeWillBeSequencePoint g sp expr)) match sp with | SPAlways -> - // These extra cases have historically always had their sequence point suppressed match expr with - | Expr.Let (bind,_,_,_) when bindIsInvisible(bind) -> true + + // We suppress sequence points at invisible let bindings even if they are requested by SPAlways. + | Expr.Let (bind,_,_,_) when bindIsInvisible bind -> true | Expr.LetRec(binds,_,_,_) when (binds |> FlatList.exists bindHasSeqPt) || (binds |> FlatList.forall bindIsInvisible) -> true - | Expr.Sequential _ - | Expr.Match _ -> true - | Expr.Op((TOp.Label _ | TOp.Goto _ | TOp.TryCatch _ | TOp.TryFinally _ | TOp.For _ | TOp.While _),_,_,_) -> true + + // We always suppress at sequential where the sequence point is missing. We need to document better why. + | Expr.Sequential _ -> true + + // We always suppress at labels and gotos, it makes no sense to emit sequence points at these + | Expr.Op(TOp.Label _,_,_,_) -> true + | Expr.Op(TOp.Goto _,_,_,_) -> true + + // We always suppress at 'match'/'try'/... where the sequence point is missing (if the sequence point was + // present then FirstEmittedCodeWillBeSequencePoint would have returned true). + // + // These cases need more looking into. For example, a typical 'match' gets compiled to + // let tmp = expr // generates a sequence point, BEFORE tmp is evaluated + // match tmp with // a match marked with NoSequencePointAtInvisibleLetBinding + // So since the 'let tmp = expr' has a sequence point, then no sequence point is needed for the 'match'. But the processing + // of the 'let' requests SPAlways for the body. + | Expr.Match _ -> true + | Expr.Op(TOp.TryCatch _,_,_,_) -> true + | Expr.Op(TOp.TryFinally _,_,_,_) -> true + | Expr.Op(TOp.For _,_,_,_) -> true + | Expr.Op(TOp.While _,_,_,_) -> true | _ -> false | SPSuppress -> true - -// This is the list of composite statement expressions where we're about to emit a sequence -// point for sure. They get sequence points on their sub-expressions -// -// Determine if expression code generation certainly starts with a sequence point. An approximation used -// to prevent the generation of duplicat sequence points for conditionals and pattern matching -let rec WillGenerateSequencePoint sp expr = - match sp with - | SPAlways -> - let definiteSequencePoint = - match expr with - | Expr.Let (bind,expr,_,_) - -> bindHasSeqPt(bind) || - (bind.Var.IsCompiledAsTopLevel && WillGenerateSequencePoint sp expr) - | Expr.LetRec(binds,expr,_,_) - -> (binds |> FlatList.forall (fun bind -> bind.Var.IsCompiledAsTopLevel)) && WillGenerateSequencePoint sp expr - - | Expr.Sequential (_, _, NormalSeq,spSeq,_) -> - (match spSeq with - | SequencePointsAtSeq -> true - | SuppressSequencePointOnExprOfSequential -> true - | SuppressSequencePointOnStmtOfSequential -> false) - | Expr.Match (SequencePointAtBinding _,_,_,_,_,_) -> true - | Expr.Op(( TOp.TryCatch (SequencePointAtTry _,_) - | TOp.TryFinally (SequencePointAtTry _,_) - | TOp.For (SequencePointAtForLoop _,_) - | TOp.While (SequencePointAtWhileLoop _,_)),_,_,_) -> true - | _ -> false - definiteSequencePoint - | SPSuppress -> - false -let DoesGenExprStartWithSequencePoint sp expr = - WillGenerateSequencePoint sp expr || not (AlwaysSuppressSequencePoint sp expr) +/// Some expressions must emit some preparation code, then emit the actual code. +let rec RangeOfEventualEmittedSequencePoint g expr = + match stripExpr expr with + | Expr.Let (bind,body,_,_) -> + match ComputeSequencePointInfoForBinding g bind with + | true, _, _ -> expr.Range // for sticky bindings, prefer the range of the overall expression + | _, None, SPSuppress -> RangeOfEventualEmittedSequencePoint g body + | _, Some m, _ -> m + | _, None, SPAlways -> RangeOfEventualEmittedSequencePoint g bind.Expr + | Expr.LetRec(_,body,_,_) -> RangeOfEventualEmittedSequencePoint g body + | Expr.Sequential (expr1, _, NormalSeq, _, _) -> RangeOfEventualEmittedSequencePoint g expr1 + | _ -> expr.Range -let rec GenExpr cenv (cgbuf:CodeGenBuffer) eenv sp expr sequel = +let DoesGenExprStartWithSequencePoint g sp expr = + FirstEmittedCodeWillBeSequencePoint g sp expr || not (AlwaysSuppressSequencePoint g sp expr) + + +//------------------------------------------------------------------------- +// Generate expressions +//------------------------------------------------------------------------- + +let rec GenExpr (cenv:cenv) (cgbuf:CodeGenBuffer) eenv sp expr sequel = let expr = stripExpr expr - if not (WillGenerateSequencePoint sp expr) && not (AlwaysSuppressSequencePoint sp expr) then - CG.EmitSeqPoint cgbuf expr.Range + if not (FirstEmittedCodeWillBeSequencePoint cenv.g sp expr) && not (AlwaysSuppressSequencePoint cenv.g sp expr) then + CG.EmitSeqPoint cgbuf (RangeOfEventualEmittedSequencePoint cenv.g expr) match (if compileSequenceExpressions then LowerCallsAndSeqs.LowerSeqExpr cenv.g cenv.amap expr else None) with | Some info -> @@ -1709,7 +1794,7 @@ let rec GenExpr cenv (cgbuf:CodeGenBuffer) eenv sp expr sequel = // Make sure we generate the sequence point outside the scope of the variable let startScope,endScope as scopeMarks = StartDelayedLocalScope "let" cgbuf let eenv = AllocStorageForBind cenv cgbuf scopeMarks eenv bind - let spBind = GenSequencePointForBind cenv cgbuf eenv bind + let spBind = GenSequencePointForBind cenv cgbuf bind CG.SetMarkToHere cgbuf startScope GenBindAfterSequencePoint cenv cgbuf eenv spBind bind @@ -1751,8 +1836,8 @@ let rec GenExpr cenv (cgbuf:CodeGenBuffer) eenv sp expr sequel = GenAllocUnionCase cenv cgbuf eenv (c,tyargs,args,m) sequel | TOp.Recd(isCtor,tycon),_,_ -> GenAllocRecd cenv cgbuf eenv isCtor (tycon,tyargs,args,m) sequel - | TOp.TupleFieldGet n,[e],_ -> - GenGetTupleField cenv cgbuf eenv (e,tyargs,n,m) sequel + | TOp.TupleFieldGet (tupInfo,n),[e],_ -> + GenGetTupleField cenv cgbuf eenv (tupInfo,e,tyargs,n,m) sequel | TOp.ExnFieldGet(ecref,n),[e],_ -> GenGetExnField cenv cgbuf eenv (e,ecref,n,m) sequel | TOp.UnionCaseFieldGet(ucref,n),[e],_ -> @@ -1779,8 +1864,8 @@ let rec GenExpr cenv (cgbuf:CodeGenBuffer) eenv sp expr sequel = GenSetRecdField cenv cgbuf eenv (e1,f,tyargs,e2,m) sequel | TOp.ValFieldSet f,[e2],_ -> GenSetStaticField cenv cgbuf eenv (f,tyargs,e2,m) sequel - | TOp.Tuple,_,_ -> - GenAllocTuple cenv cgbuf eenv (args,tyargs,m) sequel + | TOp.Tuple tupInfo,_,_ -> + GenAllocTuple cenv cgbuf eenv (tupInfo,args,tyargs,m) sequel | TOp.ILAsm(code,returnTys),_,_ -> GenAsmCode cenv cgbuf eenv (code,tyargs,args,returnTys,m) sequel | TOp.While (sp,_),[Expr.Lambda(_,_,_,[_],e1,_,_);Expr.Lambda(_,_,_,[_],e2,_,_)],[] -> @@ -1987,9 +2072,10 @@ and GenUnitThenSequel cenv eenv m cloc cgbuf sequel = // Generate simple data-related constructs //-------------------------------------------------------------------------- -and GenAllocTuple cenv cgbuf eenv (args,argtys,m) sequel = +and GenAllocTuple cenv cgbuf eenv (tupInfo, args,argtys,m) sequel = - let tcref, tys, args, newm = mkCompiledTuple cenv.g (argtys,args,m) + let tupInfo = evalTupInfoIsStruct tupInfo + let tcref, tys, args, newm = mkCompiledTuple cenv.g tupInfo (argtys,args,m) let typ = GenNamedTyApp cenv.amap newm cenv.g eenv.tyenv tcref tys let ntyvars = if (tys.Length - 1) < goodTupleFields then (tys.Length - 1) else goodTupleFields let formalTyvars = [ for n in 0 .. ntyvars do yield mkILTyvarTy (uint16 n) ] @@ -2001,29 +2087,30 @@ and GenAllocTuple cenv cgbuf eenv (args,argtys,m) sequel = (mkILCtorMethSpecForTy (typ,formalTyvars))) GenSequel cenv eenv.cloc cgbuf sequel -and GenGetTupleField cenv cgbuf eenv (e,tys,n,m) sequel = +and GenGetTupleField cenv cgbuf eenv (tupInfo,e,tys,n,m) sequel = + let tupInfo = evalTupInfoIsStruct tupInfo let rec getCompiledTupleItem g (e,tys:TTypes,n,m) = let ar = tys.Length if ar <= 0 then failwith "getCompiledTupleItem" elif ar < maxTuple then - let tcr' = mkCompiledTupleTyconRef g tys + let tcr' = mkCompiledTupleTyconRef g tupInfo tys let typ = GenNamedTyApp cenv.amap m g eenv.tyenv tcr' tys - mkGetTupleItemN g m n typ e tys.[n] + mkGetTupleItemN g m n typ tupInfo e tys.[n] + else let tysA,tysB = List.splitAfter (goodTupleFields) tys - let tyB = mkCompiledTupleTy g tysB + let tyB = mkCompiledTupleTy g tupInfo tysB let tys' = tysA@[tyB] - let tcr' = mkCompiledTupleTyconRef g tys' + let tcr' = mkCompiledTupleTyconRef g tupInfo tys' let typ' = GenNamedTyApp cenv.amap m g eenv.tyenv tcr' tys' let n' = (min n goodTupleFields) - let elast = mkGetTupleItemN g m n' typ' e tys'.[n'] + let elast = mkGetTupleItemN g m n' typ' tupInfo e tys'.[n'] if n < goodTupleFields then elast else getCompiledTupleItem g (elast,tysB,n-goodTupleFields,m) GenExpr cenv cgbuf eenv SPSuppress (getCompiledTupleItem cenv.g (e,tys,n,m)) sequel - and GenAllocExn cenv cgbuf eenv (c,args,m) sequel = GenExprs cenv cgbuf eenv args let typ = GenExnType cenv.amap m cenv.g eenv.tyenv c @@ -2316,10 +2403,10 @@ and GenUntupledArgExpr cenv cgbuf eenv m argInfos expr sequel = assert (numRequiredExprs >= 1) if numRequiredExprs = 1 then GenExpr cenv cgbuf eenv SPSuppress expr sequel - elif isTupleExpr expr then - let es = tryDestTuple expr - if es.Length <> numRequiredExprs then error(InternalError("GenUntupledArgExpr (2)",m)) - es |> List.iter (fun x -> GenExpr cenv cgbuf eenv SPSuppress x Continue) + elif isRefTupleExpr expr then + let es = tryDestRefTupleExpr expr + if es.Length <> numRequiredExprs then error(InternalError("GenUntupledArgExpr (2)",m)); + es |> List.iter (fun x -> GenExpr cenv cgbuf eenv SPSuppress x Continue); GenSequel cenv eenv.cloc cgbuf sequel else let ty = tyOfExpr cenv.g expr @@ -2327,10 +2414,11 @@ and GenUntupledArgExpr cenv cgbuf eenv m argInfos expr sequel = let bind = mkCompGenBind locv expr LocalScope "untuple" cgbuf (fun scopeMarks -> let eenvinner = AllocStorageForBind cenv cgbuf scopeMarks eenv bind - GenBind cenv cgbuf eenvinner bind - let tys = destTupleTy cenv.g ty + GenBind cenv cgbuf eenvinner bind; + let tys = destRefTupleTy cenv.g ty assert (tys.Length = numRequiredExprs) - argInfos |> List.iteri (fun i _ -> GenGetTupleField cenv cgbuf eenvinner (loce,tys,i,m) Continue) + // TODO - tupInfoRef + argInfos |> List.iteri (fun i _ -> GenGetTupleField cenv cgbuf eenvinner (tupInfoRef (* TODO *),loce,tys,i,m) Continue); GenSequel cenv eenv.cloc cgbuf sequel ) @@ -2876,8 +2964,12 @@ and GenForLoop cenv cgbuf eenv (spFor,v,e1,dir,e2,loopBody,m) sequel = // FSharpForLoopUp: if v <> e2 + 1 then goto .inner // FSharpForLoopDown: if v <> e2 - 1 then goto .inner // CSharpStyle: if v < e2 then goto .inner - CG.EmitSeqPoint cgbuf e2.Range + match spFor with + | SequencePointAtForLoop(spStart) -> CG.EmitSeqPoint cgbuf spStart + | NoSequencePointAtForLoop -> () //CG.EmitSeqPoint cgbuf e2.Range + GenGetLocalVal cenv cgbuf eenvinner e2.Range v None + let cmp = match dir with FSharpForLoopUp | FSharpForLoopDown -> BI_bne_un | CSharpForLoopUp -> BI_blt let e2Sequel = (CmpThenBrOrContinue (pop 2, [ I_brcmp(cmp,inner.CodeLabel) ])) @@ -2956,6 +3048,9 @@ and GenAsmCode cenv cgbuf eenv (il,tyargs,args,returnTys,m) sequel = errorR(InternalError(sprintf "%s: bad instruction: %A" s i,m)) let modFieldSpec fspec = + if isNil ilTyArgs then + fspec + else {fspec with EnclosingType= let ty = fspec.EnclosingType let tspec = ty.TypeSpec @@ -3200,6 +3295,7 @@ and GenTraitCall cenv cgbuf eenv (traitInfo, argExprs, m) expr sequel = [ mkString cenv.g m (FSComp.SR.ilDynamicInvocationNotSupported(traitInfo.MemberName))],m)) GenExpr cenv cgbuf eenv SPSuppress replacementExpr sequel | Some expr -> + let expr = cenv.optimizeDuringCodeGen expr GenExpr cenv cgbuf eenv SPSuppress expr sequel //-------------------------------------------------------------------------- @@ -3226,7 +3322,7 @@ and GenGetValAddr cenv cgbuf eenv (v: ValRef, m) sequel = EmitGetStaticFieldAddr cgbuf ilTy fspec | Env (_,_,ilField,_) -> CG.EmitInstrs cgbuf (pop 0) (Push [ILType.Byref ilTy]) [ mkLdarg0; mkNormalLdflda ilField ] - | Local (_,Some _) | StaticProperty _ | Method _ | Env _ | Unrealized | Null -> + | Local (_,Some _) | StaticProperty _ | Method _ | Env _ | Null -> errorR(Error(FSComp.SR.ilAddressOfValueHereIsInvalid(v.DisplayName),m)) CG.EmitInstrs cgbuf (pop 1) (Push [ILType.Byref ilTy]) [ I_ldarga (uint16 669 (* random value for post-hoc diagnostic analysis on generated tree *) ) ] ; @@ -3581,8 +3677,7 @@ and GenSequenceExpr cenv (cgbuf:CodeGenBuffer) eenvouter (nextEnumeratorValRef:V and GenClosureTypeDefs cenv (tref:ILTypeRef, ilGenParams, attrs, ilCloFreeVars, ilCloLambdas, ilCtorBody, mdefs, mimpls,ext, ilIntfTys) = let cloInfo = - { cloSource=None - cloFreeVars=ilCloFreeVars + { cloFreeVars=ilCloFreeVars cloStructure=ilCloLambdas cloCode=notlazy ilCtorBody } @@ -3702,7 +3797,7 @@ and GenFreevar cenv m eenvouter tyenvinner (fv:Val) = | Local(_,Some _) | Env(_,_,_,Some _) -> cenv.g.ilg.typ_Object #if DEBUG // Check for things that should never make it into the free variable set. Only do this in debug for performance reasons - | (StaticField _ | StaticProperty _ | Method _ | Unrealized | Null) -> error(InternalError("GenFreevar: compiler error: unexpected unrealized value",fv.Range)) + | (StaticField _ | StaticProperty _ | Method _ | Null) -> error(InternalError("GenFreevar: compiler error: unexpected unrealized value",fv.Range)) #endif | _ -> GenType cenv.amap m cenv.g tyenvinner fv.Type @@ -3742,7 +3837,7 @@ and GetIlxClosureFreeVars cenv m selfv eenvouter takenNames expr = |> Zset.elements |> List.filter (fun fv -> match StorageForVal m fv eenvouter with - | (StaticField _ | StaticProperty _ | Method _ | Unrealized | Null) -> false + | (StaticField _ | StaticProperty _ | Method _ | Null) -> false | _ -> match selfv with | Some v -> not (valRefEq cenv.g (mkLocalValRef fv) v) @@ -3818,7 +3913,7 @@ and GetIlxClosureInfo cenv m isLocalTypeFunc selfv eenvouter expr = | Expr.Lambda (_,_,_,vs,body,_,bty) when not isLocalTypeFunc -> // Transform a lambda taking untupled arguments into one // taking only a single tupled argument if necessary. REVIEW: do this earlier - let tupledv, body = MultiLambdaToTupledLambda vs body + let tupledv, body = MultiLambdaToTupledLambda cenv.g vs body getCallStructure tvacc (tupledv :: vacc) (body,bty) | _ -> (List.rev tvacc, List.rev vacc, e, ety) @@ -4161,7 +4256,7 @@ and GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree match inplabOpt with Some inplab -> CG.SetMarkToHere cgbuf inplab | None -> () let startScope,endScope as scopeMarks = StartDelayedLocalScope "dtreeBind" cgbuf let eenv = AllocStorageForBind cenv cgbuf scopeMarks eenv bind - let sp = GenSequencePointForBind cenv cgbuf eenv bind + let sp = GenSequencePointForBind cenv cgbuf bind CG.SetMarkToHere cgbuf startScope GenBindAfterSequencePoint cenv cgbuf eenv sp bind // We don't get the scope marks quite right for dtree-bound variables. This is because @@ -4242,7 +4337,7 @@ and GenDecisionTreeTarget cenv cgbuf stackAtTargets _targetIdx (targetMarkBefore // // Only repeat the sequence point if we really have to, i.e. if the target expression doesn't start with a // sequence point anyway - if FlatList.isEmpty vs && DoesGenExprStartWithSequencePoint spExpr successExpr then + if FlatList.isEmpty vs && DoesGenExprStartWithSequencePoint cenv.g spExpr successExpr then () else match spTarget with @@ -4431,7 +4526,7 @@ and GenDecisionTreeTest cenv cloc cgbuf stackAtTargets e tester eenv successTree // Turn 'isdata' tests that branch into EI_brisdata tests | Some (_,_,Choice1Of2 (avoidHelpers,cuspec,idx)) -> - GenExpr cenv cgbuf eenv SPSuppress e (CmpThenBrOrContinue(pop 1, EraseUnions.mkBrIsNotData cenv.g.ilg (avoidHelpers,cuspec, idx, failure.CodeLabel))) + GenExpr cenv cgbuf eenv SPSuppress e (CmpThenBrOrContinue(pop 1, EraseUnions.mkBrIsData cenv.g.ilg false (avoidHelpers,cuspec, idx, failure.CodeLabel))) | Some (pops,pushes,i) -> GenExpr cenv cgbuf eenv SPSuppress e Continue @@ -4461,9 +4556,8 @@ and GenLetRecBinds cenv cgbuf eenv (allBinds: Bindings,m) = match (StorageForVal m b.Var eenv) with | StaticProperty _ | Method _ - | Unrealized - (* Note: Recursive data stored in static fields may require fixups e.g. let x = C(x) *) - (* | StaticField _ *) + // Note: Recursive data stored in static fields may require fixups e.g. let x = C(x) + // | StaticField _ | Null -> false | _ -> true) @@ -4516,36 +4610,20 @@ and GenLetRec cenv cgbuf eenv (binds,body,m) sequel = let eenv = AllocStorageForBinds cenv cgbuf scopeMarks eenv binds GenLetRecBinds cenv cgbuf eenv (binds,m) - let sp = if FlatList.exists bindHasSeqPt binds || FlatList.forall bindIsInvisible binds then SPAlways else SPSuppress + let sp = if FlatList.exists (BindingEmitsSequencePoint cenv.g) binds then SPAlways else SPSuppress GenExpr cenv cgbuf eenv sp body (EndLocalScope(sequel,endScope)) //------------------------------------------------------------------------- // Generate simple bindings //------------------------------------------------------------------------- -and GenSequencePointForBind _cenv cgbuf eenv (TBind(vspec,e,spBind)) = - - let emitSP() = - match spBind,e with - | (( NoSequencePointAtInvisibleBinding | NoSequencePointAtStickyBinding),_) -> SPSuppress - | (NoSequencePointAtDoBinding,_) -> SPAlways - | (NoSequencePointAtLetBinding,_) -> SPSuppress - // Don't emit sequence points for lambdas. - // SEQUENCE POINT REVIEW: don't emit for lazy either, nor any builder expressions - | _, (Expr.Lambda _ | Expr.TyLambda _) -> SPSuppress - | SequencePointAtBinding m,_ -> - CG.EmitSeqPoint cgbuf m - SPSuppress - - let m = vspec.Range - - match StorageForVal m vspec eenv with - | Unrealized -> SPSuppress - | Method _ -> SPSuppress - | _ -> emitSP() +and GenSequencePointForBind cenv cgbuf bind = + let _, pt, sp = ComputeSequencePointInfoForBinding cenv.g bind + pt |> Option.iter (CG.EmitSeqPoint cgbuf) + sp and GenBind cenv cgbuf eenv bind = - let sp = GenSequencePointForBind cenv cgbuf eenv bind + let sp = GenSequencePointForBind cenv cgbuf bind GenBindAfterSequencePoint cenv cgbuf eenv sp bind and ComputeMemberAccessRestrictedBySig eenv vspec = @@ -4580,8 +4658,6 @@ and GenBindAfterSequencePoint cenv cgbuf eenv sp (TBind(vspec,rhsExpr,_)) = match StorageForVal m vspec eenv with - | Unrealized -> () - | Null -> GenExpr cenv cgbuf eenv SPSuppress rhsExpr discard @@ -5329,8 +5405,6 @@ and GenSetStorage m cgbuf storage = // Note: ldarg0 has already been emitted in GenSetVal CG.EmitInstr cgbuf (pop 2) Push0 (mkNormalStfld ilField) - | Unrealized -> error(Error(FSComp.SR.ilUnexpectedUnrealizedValue(),m)) - and CommitGetStorageSequel cenv cgbuf eenv m typ localCloInfo storeSequel = match localCloInfo,storeSequel with | Some {contents =NamedLocalIlxClosureInfoGenerator _cloinfo},_ -> error(InternalError("Unexpected generator",m)) @@ -5385,9 +5459,6 @@ and GenGetStorageAndSequel cenv cgbuf eenv m (typ,ilTy) storage storeSequel = CG.EmitInstr cgbuf (pop 0) (Push [ilTy]) (AI_ldnull) CommitGetStorageSequel cenv cgbuf eenv m typ None storeSequel - | Unrealized -> - error(InternalError(sprintf "getting an unrealized value of type '%s'" (showL(typeL typ)),m)) - | Arg i -> CG.EmitInstr cgbuf (pop 0) (Push [ilTy]) (mkLdarg (uint16 i)) CommitGetStorageSequel cenv cgbuf eenv m typ None storeSequel @@ -5751,9 +5822,11 @@ and GenModuleBinding cenv (cgbuf:CodeGenBuffer) (qname:QualifiedNameOfFile) lazy /// Generate the namespace fragments in a single file -and GenTopImpl cenv mgbuf mainInfoOpt eenv (TImplFile(qname, _, mexpr, hasExplicitEntryPoint, isScript)) = +and GenTopImpl cenv mgbuf mainInfoOpt eenv (TImplFile(qname, _, mexpr, hasExplicitEntryPoint, isScript), optimizeDuringCodeGen) = let eenv = {eenv with cloc = { eenv.cloc with clocTopImplQualifiedName = qname.Text } } + cenv.optimizeDuringCodeGen <- optimizeDuringCodeGen + // This is used to point the inner classes back to the startup module for initialization purposes let isFinalFile = isSome mainInfoOpt @@ -6730,7 +6803,7 @@ type IlxGenResults = quotationResourceInfo: (ILTypeRef list * byte[]) list } -let GenerateCode (cenv, eenv, TAssembly fileImpls, assemAttribs, moduleAttribs) = +let GenerateCode (cenv, eenv, TypedAssemblyAfterOptimization fileImpls, assemAttribs, moduleAttribs) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.IlxGen) @@ -6858,7 +6931,6 @@ let LookupGeneratedValue (amap:Import.ImportMap) (ctxt: ExecutionContext) g eenv Some (null,objTyp) | Local _ -> None | Method _ -> None - | Unrealized -> None | Arg _ -> None | Env _ -> None with @@ -6900,7 +6972,6 @@ let LookupGeneratedInfo (ctxt: ExecutionContext) (g:TcGlobals) eenv (v:Val) = | Null -> None | Local _ -> None | Method _ -> None - | Unrealized -> None | Arg _ -> None | Env _ -> None with @@ -6928,20 +6999,21 @@ type IlxAssemblyGenerator(amap: Import.ImportMap, tcGlobals: TcGlobals, tcVal : /// Register a fragment of the current assembly with the ILX code generator. If 'isIncrementalFragment' is true then the input /// is assumed to be a fragment 'typed' into FSI.EXE, otherwise the input is assumed to be the result of a '#load' - member __.AddIncrementalLocalAssemblyFragment (isIncrementalFragment, fragName, typedAssembly) = - ilxGenEnv <- AddIncrementalLocalAssemblyFragmentToIlxGenEnv (amap, isIncrementalFragment, tcGlobals, ccu, fragName, intraAssemblyInfo, ilxGenEnv, typedAssembly) + member __.AddIncrementalLocalAssemblyFragment (isIncrementalFragment, fragName, typedImplFiles) = + ilxGenEnv <- AddIncrementalLocalAssemblyFragmentToIlxGenEnv (amap, isIncrementalFragment, tcGlobals, ccu, fragName, intraAssemblyInfo, ilxGenEnv, typedImplFiles) /// Generate ILX code for an assembly fragment member __.GenerateCode (codeGenOpts, typedAssembly, assemAttribs, moduleAttribs) = let cenv : cenv = { g=tcGlobals TcVal = tcVal - viewCcu = ccu - ilUnitTy = None - amap = amap - casApplied = casApplied - intraAssemblyInfo = intraAssemblyInfo - opts = codeGenOpts } + viewCcu = ccu + ilUnitTy = None + amap = amap + casApplied = casApplied + intraAssemblyInfo = intraAssemblyInfo + opts = codeGenOpts + optimizeDuringCodeGen = (fun x -> x) } GenerateCode (cenv, ilxGenEnv, typedAssembly, assemAttribs, moduleAttribs) /// Invert the compilation of the given value and clear the storage of the value diff --git a/src/fsharp/IlxGen.fsi b/src/fsharp/IlxGen.fsi index 19a6ea51db5..b4726b00ba4 100644 --- a/src/fsharp/IlxGen.fsi +++ b/src/fsharp/IlxGen.fsi @@ -37,7 +37,7 @@ type internal IlxGenOptions = // Indicates System.SerializableAttribute is available in the targeting framework netFxHasSerializableAttribute : bool /// Indicates that, whenever possible, use callvirt instead of call - alwaysCallVirt : bool} + alwaysCallVirt : bool } /// The results of the ILX compilation of one fragment of an assembly type public IlxGenResults = @@ -68,10 +68,10 @@ type public IlxAssemblyGenerator = /// Register a fragment of the current assembly with the ILX code generator. If 'isIncrementalFragment' is true then the input /// is assumed to be a fragment 'typed' into FSI.EXE, otherwise the input is assumed to be the result of a '#load' - member AddIncrementalLocalAssemblyFragment : isIncrementalFragment: bool * fragName:string * typedAssembly: TypedAssembly -> unit + member AddIncrementalLocalAssemblyFragment : isIncrementalFragment: bool * fragName:string * typedImplFiles: TypedImplFile list -> unit /// Generate ILX code for an assembly fragment - member GenerateCode : IlxGenOptions * TypedAssembly * Attribs * Attribs -> IlxGenResults + member GenerateCode : IlxGenOptions * TypedAssemblyAfterOptimization * Attribs * Attribs -> IlxGenResults /// Create the CAS permission sets for an assembly fragment member CreatePermissionSets : Attrib list -> ILPermission list diff --git a/src/fsharp/InfoReader.fs b/src/fsharp/InfoReader.fs index 237c54ad208..7afd9eefdc2 100644 --- a/src/fsharp/InfoReader.fs +++ b/src/fsharp/InfoReader.fs @@ -682,7 +682,7 @@ let TryDestStandardDelegateTyp (infoReader:InfoReader) m ad delTy = let g = infoReader.g let (SigOfFunctionForDelegate(_,compiledViewOfDelArgTys,delRetTy,_)) = GetSigOfFunctionForDelegate infoReader delTy m ad match compiledViewOfDelArgTys with - | senderTy :: argTys when (isObjTy g senderTy) && not (List.exists (isByrefTy g) argTys) -> Some(mkTupledTy g argTys,delRetTy) + | senderTy :: argTys when (isObjTy g senderTy) && not (List.exists (isByrefTy g) argTys) -> Some(mkRefTupledTy g argTys,delRetTy) | _ -> None diff --git a/src/fsharp/InnerLambdasToTopLevelFuncs.fs b/src/fsharp/InnerLambdasToTopLevelFuncs.fs index 5bbc36c6e1b..40bf6bbb8a8 100644 --- a/src/fsharp/InnerLambdasToTopLevelFuncs.fs +++ b/src/fsharp/InnerLambdasToTopLevelFuncs.fs @@ -237,7 +237,7 @@ module Pass1_DetermineTLRAndArities = (* REPORT OVER *) let arityM = Zmap.ofList valOrder fArities #if DEBUG - if verboseTLR then DumpArity arityM; + if verboseTLR then DumpArity arityM #endif tlrS,topValS, arityM @@ -342,20 +342,20 @@ let reqdItemOrder = /// The reqdTypars are the free reqdTypars of the defns, and those required by any direct TLR arity-met calls. /// The reqdItems are the ids/subEnvs required from calls to freeVars. type ReqdItemsForDefn = - { reqdTypars : Zset; - reqdItems : Zset; - m : Range.range; } + { reqdTypars : Zset + reqdItems : Zset + m : Range.range } member env.ReqdSubEnvs = [ for x in env.reqdItems do match x with | ReqdSubEnv f -> yield f | ReqdVal _ -> () ] member env.ReqdVals = [ for x in env.reqdItems do match x with | ReqdSubEnv _ -> () | ReqdVal v -> yield v ] member env.Extend (typars,items) = {env with - reqdTypars = Zset.addList typars env.reqdTypars; + reqdTypars = Zset.addList typars env.reqdTypars reqdItems = Zset.addList items env.reqdItems} static member Initial typars m = - {reqdTypars = Zset.addList typars (Zset.empty typarOrder); - reqdItems = Zset.empty reqdItemOrder; + {reqdTypars = Zset.addList typars (Zset.empty typarOrder) + reqdItems = Zset.empty reqdItemOrder m = m } override env.ToString() = @@ -427,19 +427,19 @@ module Pass2_DetermineReqdItems = /// /// recShortCalls to f will require a binding for f in terms of fHat within the fHatBody. type state = - { stack : (BindingGroupSharingSameReqdItems * Generators * ReqdItemsForDefn) list; - reqdItemsMap : Zmap; - fclassM : Zmap; - revDeclist : BindingGroupSharingSameReqdItems list; - recShortCallS : Zset; + { stack : (BindingGroupSharingSameReqdItems * Generators * ReqdItemsForDefn) list + reqdItemsMap : Zmap + fclassM : Zmap + revDeclist : BindingGroupSharingSameReqdItems list + recShortCallS : Zset } let state0 = - { stack = []; - reqdItemsMap = Zmap.empty fclassOrder; - fclassM = Zmap.empty valOrder; - revDeclist = []; - recShortCallS = Zset.empty valOrder; } + { stack = [] + reqdItemsMap = Zmap.empty fclassOrder + fclassM = Zmap.empty valOrder + revDeclist = [] + recShortCallS = Zset.empty valOrder } /// PUSH = start collecting for fclass let PushFrame (fclass: BindingGroupSharingSameReqdItems) (reqdTypars0,reqdVals0,m) state = @@ -447,12 +447,12 @@ module Pass2_DetermineReqdItems = state else {state with - revDeclist = fclass :: state.revDeclist; - stack = (let env = ReqdItemsForDefn.Initial reqdTypars0 m in (fclass,reqdVals0,env)::state.stack); } + revDeclist = fclass :: state.revDeclist + stack = (let env = ReqdItemsForDefn.Initial reqdTypars0 m in (fclass,reqdVals0,env)::state.stack) } /// POP & SAVE = end collecting for fclass and store let SaveFrame (fclass: BindingGroupSharingSameReqdItems) state = - if verboseTLR then dprintf "SaveFrame: %A\n" fclass; + if verboseTLR then dprintf "SaveFrame: %A\n" fclass if fclass.IsEmpty then state else @@ -460,8 +460,8 @@ module Pass2_DetermineReqdItems = | [] -> internalError "trl: popFrame has empty stack" | (fclass,_reqdVals0,env)::stack -> (* ASSERT: same fclass *) {state with - stack = stack; - reqdItemsMap = Zmap.add fclass env state.reqdItemsMap; + stack = stack + reqdItemsMap = Zmap.add fclass env state.reqdItemsMap fclassM = FlatList.fold (fun mp (k,v) -> Zmap.add k v mp) state.fclassM fclass.Pairs } /// Log requirements for gv in the relevant stack frames @@ -478,12 +478,12 @@ module Pass2_DetermineReqdItems = let LogShortCall gv state = if state.stack |> List.exists (fun (fclass,_reqdVals0,_env) -> fclass.Contains gv) then - if verboseTLR then dprintf "shortCall: rec: %s\n" gv.LogicalName; + if verboseTLR then dprintf "shortCall: rec: %s\n" gv.LogicalName // Have short call to gv within it's (mutual) definition(s) {state with recShortCallS = Zset.add gv state.recShortCallS} else - if verboseTLR then dprintf "shortCall: not-rec: %s\n" gv.LogicalName; + if verboseTLR then dprintf "shortCall: not-rec: %s\n" gv.LogicalName state let FreeInBindings bs = FlatList.fold (foldOn (freeInBindingRhs CollectTyparsAndLocals) unionFreeVars) emptyFreeVars bs @@ -569,7 +569,7 @@ module Pass2_DetermineReqdItems = /// For each direct call to a gv, a generator for fclass, /// Required to include the reqdTypars(gv) in reqdTypars(fclass). let CloseReqdTypars fclassM reqdItemsMap = - if verboseTLR then dprintf "CloseReqdTypars------\n"; + if verboseTLR then dprintf "CloseReqdTypars------\n" let closeStep reqdItemsMap changed fc (env: ReqdItemsForDefn) = let directCallReqdEnvs = env.ReqdSubEnvs @@ -584,7 +584,7 @@ module Pass2_DetermineReqdItems = let env = {env with reqdTypars = reqdTypars} #if DEBUG if verboseTLR then - dprintf "closeStep: fc=%30A nSubs=%d reqdTypars0=%s reqdTypars=%s\n" fc directCallReqdEnvs.Length (showTyparSet reqdTypars0) (showTyparSet reqdTypars); + dprintf "closeStep: fc=%30A nSubs=%d reqdTypars0=%s reqdTypars=%s\n" fc directCallReqdEnvs.Length (showTyparSet reqdTypars0) (showTyparSet reqdTypars) directCallReqdEnvs |> List.iter (fun f -> dprintf "closeStep: dcall f=%s\n" f.LogicalName) directCallReqdEnvs |> List.iter (fun f -> dprintf "closeStep: dcall fc=%A\n" (Zmap.find f fclassM)) directCallReqdTypars |> List.iter (fun _reqdTypars -> dprintf "closeStep: dcall reqdTypars=%s\n" (showTyparSet reqdTypars0)) @@ -610,7 +610,7 @@ module Pass2_DetermineReqdItems = #endif let DetermineReqdItems (tlrS,arityM) expr = - if verboseTLR then dprintf "DetermineReqdItems------\n"; + if verboseTLR then dprintf "DetermineReqdItems------\n" let folder = {ExprFolder0 with exprIntercept = ExprEnvIntercept (tlrS,arityM)} let z = state0 // Walk the entire assembly @@ -622,7 +622,7 @@ module Pass2_DetermineReqdItems = let recShortCallS = z.recShortCallS // diagnostic dump #if DEBUG - if verboseTLR then DumpReqdValMap reqdItemsMap; + if verboseTLR then DumpReqdValMap reqdItemsMap #endif // close the reqdTypars under the subEnv reln let reqdItemsMap = CloseReqdTypars fclassM reqdItemsMap @@ -633,7 +633,7 @@ module Pass2_DetermineReqdItems = #if DEBUG // diagnostic dump if verboseTLR then - DumpReqdValMap reqdItemsMap; + DumpReqdValMap reqdItemsMap declist |> List.iter (fun fc -> dprintf "Declist: %A\n" fc) recShortCallS |> Zset.iter (fun f -> dprintf "RecShortCall: %s\n" f.LogicalName) #endif @@ -659,13 +659,13 @@ module Pass2_DetermineReqdItems = type PackedReqdItems = { /// The actual typars - ep_etps : Typars; + ep_etps : Typars /// The actual env carrier values - ep_aenvs : Val list; + ep_aenvs : Val list /// Sequentially define the aenvs in terms of the fvs - ep_pack : Bindings; + ep_pack : Bindings /// Sequentially define the fvs in terms of the aenvs - ep_unpack : Bindings; + ep_unpack : Bindings } @@ -696,7 +696,7 @@ exception AbortTLR of Range.range let FlatEnvPacks g fclassM topValS declist (reqdItemsMap: Zmap) = let fclassOf f = Zmap.force f fclassM ("fclassM",nameOfVal) let packEnv carrierMaps (fc:BindingGroupSharingSameReqdItems) = - if verboseTLR then dprintf "\ntlr: packEnv fc=%A\n" fc; + if verboseTLR then dprintf "\ntlr: packEnv fc=%A\n" fc let env = Zmap.force fc reqdItemsMap ("packEnv",string) // carrierMaps = (fclass,(v,aenv)map)map @@ -722,10 +722,10 @@ let FlatEnvPacks g fclassM topValS declist (reqdItemsMap: Zmap FlatList.tryFind (IsGenericValWithGenericContraints g) with | None -> () - | Some v -> raise (AbortTLR v.Range); + | Some v -> raise (AbortTLR v.Range) // build cmap for env let cmapPairs = vals |> FlatList.map (fun v -> (v,(mkCompGenLocal env.m v.LogicalName v.Type |> fst))) @@ -774,17 +774,17 @@ let FlatEnvPacks g fclassM topValS declist (reqdItemsMap: Zmap showL (valL v))) let fc = Zmap.force f fclassM ("createFHat - fc",nameOfVal) @@ -866,16 +866,16 @@ let CreateNewValuesForTLR g tlrS arityM fclassM envPackM = module Pass4_RewriteAssembly = [] type RewriteContext = - { ccu : CcuThunk; - g : TcGlobals; - tlrS : Zset ; - topValS : Zset ; - arityM : Zmap ; - fclassM : Zmap ; - recShortCallS : Zset ; - envPackM : Zmap; + { ccu : CcuThunk + g : TcGlobals + tlrS : Zset + topValS : Zset + arityM : Zmap + fclassM : Zmap + recShortCallS : Zset + envPackM : Zmap /// The mapping from 'f' values to 'fHat' values - fHatM : Zmap ; + fHatM : Zmap } @@ -898,9 +898,9 @@ module Pass4_RewriteAssembly = /// Any TLR repr bindings under lambdas can be filtered out (and collected), /// giving pre-declarations to insert before the outermost lambda expr. type RewriteState = - { rws_mustinline: bool; + { rws_mustinline: bool /// counts level of enclosing "lambdas" - rws_innerLevel : int; + rws_innerLevel : int /// collected preDecs (fringe is in-order) rws_preDecs : Tree } @@ -997,7 +997,7 @@ module Pass4_RewriteAssembly = let m = fOrig.Range let tps,vss,_b,rty = stripTopLambda (b,fOrig.Type) let aenvExprs = envp.ep_aenvs |> List.map (exprForVal m) - let vsExprs = vss |> List.map (mkTupledVars penv.g m) + let vsExprs = vss |> List.map (mkRefTupledVars penv.g m) let fHat = Zmap.force fOrig penv.fHatM ("fRebinding",nameOfVal) (* REVIEW: is this mutation really, really necessary? *) (* Why are we applying TLR if the thing already has an arity? *) @@ -1315,11 +1315,7 @@ module Pass4_RewriteAssembly = let TransImplFile penv z (TImplFile(fragName,pragmas,moduleExpr,hasExplicitEntryPoint,isScript)) = let moduleExpr,z = TransModuleExpr penv z moduleExpr - TImplFile(fragName,pragmas,moduleExpr,hasExplicitEntryPoint,isScript),z - - let TransAssembly penv z (TAssembly(mvs)) = - let mvs,_z = List.mapFold (TransImplFile penv) z mvs - TAssembly(mvs) + (TImplFile(fragName,pragmas,moduleExpr,hasExplicitEntryPoint,isScript)),z //------------------------------------------------------------------------- // pass5: copyExpr @@ -1345,7 +1341,7 @@ let MakeTLRDecisions ccu g expr = let fHatM = CreateNewValuesForTLR g tlrS arityM fclassM envPackM // pass4: rewrite - if verboseTLR then dprintf "TransExpr(rw)------\n"; + if verboseTLR then dprintf "TransExpr(rw)------\n" let expr,_ = let penv : Pass4_RewriteAssembly.RewriteContext = {ccu=ccu; g=g; tlrS=tlrS; topValS=topValS; arityM=arityM; fclassM=fclassM; recShortCallS=recShortCallS; envPackM=envPackM; fHatM=fHatM} @@ -1354,9 +1350,9 @@ let MakeTLRDecisions ccu g expr = // pass5: copyExpr to restore "each bound is unique" property // aka, copyExpr - if verboseTLR then dprintf "copyExpr------\n"; + if verboseTLR then dprintf "copyExpr------\n" let expr = RecreateUniqueBounds g expr - if verboseTLR then dprintf "TLR-done------\n"; + if verboseTLR then dprintf "TLR-done------\n" // Summary: // GTL = genuine top-level @@ -1370,5 +1366,5 @@ let MakeTLRDecisions ccu g expr = // DONE expr with AbortTLR m -> - warning(Error(FSComp.SR.tlrLambdaLiftingOptimizationsNotApplied(),m)); + warning(Error(FSComp.SR.tlrLambdaLiftingOptimizationsNotApplied(),m)) expr diff --git a/src/fsharp/LexFilter.fs b/src/fsharp/LexFilter.fs index e4ef817ca77..5ef87ac8f58 100755 --- a/src/fsharp/LexFilter.fs +++ b/src/fsharp/LexFilter.fs @@ -534,7 +534,6 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, new LexbufState(lexbuf.StartPos, lexbuf.EndPos, lexbuf.IsPastEndOfStream) let setLexbufState (p:LexbufState) = - // if debug then dprintf "SET lex state to; %a\n" output_any p; lexbuf.StartPos <- p.StartPos lexbuf.EndPos <- p.EndPos lexbuf.IsPastEndOfStream <- p.PastEOF @@ -927,6 +926,7 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, | MINUS | GLOBAL | CONST + | KEYWORD_STRING _ | NULL | INT8 _ | INT16 _ | INT32 _ | INT64 _ | NATIVEINT _ | UINT8 _ | UINT16 _ | UINT32 _ | UINT64 _ | UNATIVEINT _ diff --git a/src/fsharp/LowerCallsAndSeqs.fs b/src/fsharp/LowerCallsAndSeqs.fs index 571997f761f..34289568ad8 100644 --- a/src/fsharp/LowerCallsAndSeqs.fs +++ b/src/fsharp/LowerCallsAndSeqs.fs @@ -58,9 +58,9 @@ let InterceptExpr g cont expr = /// any known arguments. The results are later optimized by the peephole /// optimizer in opt.fs let LowerImplFile g ass = - RewriteImplFile { PreIntercept = Some(InterceptExpr g); + RewriteImplFile { PreIntercept = Some(InterceptExpr g) PreInterceptBinding=None - PostTransform= (fun _ -> None); + PostTransform= (fun _ -> None) IsUnderQuotations=false } ass @@ -76,7 +76,7 @@ let mkUnitDelayLambda g m e = let callNonOverloadedMethod g amap m methName ty args = match TryFindIntrinsicMethInfo (InfoReader(g,amap)) m AccessibleFromSomeFSharpCode methName ty with - | [] -> error(InternalError("No method called '"+methName+"' was found",m)); + | [] -> error(InternalError("No method called '"+methName+"' was found",m)) | ILMeth(g,ilMethInfo,_) :: _ -> // REVIEW: consider if this should ever be a constrained call. At the moment typecheck limitations in the F# typechecker // ensure the enumerator type used within computation expressions is not a struct type @@ -189,9 +189,9 @@ let LowerSeqExpr g amap overallExpr = match expr with | SeqYield(e,m) -> // printfn "found Seq.singleton" - //this.pc <- NEXT; - //curr <- e; - //return true; + //this.pc <- NEXT + //curr <- e + //return true //NEXT: let label = IL.generateCodeLabel() Some { phase2 = (fun (pcv,currv,_nextv,pcMap) -> @@ -211,9 +211,9 @@ let LowerSeqExpr g amap overallExpr = mkCompGenSequential m (Expr.Op(TOp.Label label,[],[],m)) (Expr.Op(TOp.Return,[],[mkBool g m (not (noDisposeContinuationLabel = currentDisposeContinuationLabel))],m)) - generate,dispose,checkDispose); - labels=[label]; - stateVars=[]; + generate,dispose,checkDispose) + labels=[label] + stateVars=[] significantClose = false } @@ -233,8 +233,8 @@ let LowerSeqExpr g amap overallExpr = // However leaving as is for now. let dispose = mkCompGenSequential m dispose2 dispose1 let checkDispose = mkCompGenSequential m checkDispose2 checkDispose1 - generate,dispose,checkDispose); - labels= res1.labels @ res2.labels; + generate,dispose,checkDispose) + labels= res1.labels @ res2.labels stateVars = res1.stateVars @ res2.stateVars significantClose = res1.significantClose || res2.significantClose } | _ -> @@ -248,8 +248,8 @@ let LowerSeqExpr g amap overallExpr = let generate = mkWhile g (SequencePointAtWhileLoop e1.Range,NoSpecialWhileLoopMarker,e1,generate2,m) let dispose = dispose2 let checkDispose = checkDispose2 - generate,dispose,checkDispose); - labels = res2.labels; + generate,dispose,checkDispose) + labels = res2.labels stateVars = res2.stateVars significantClose = res2.significantClose } | _ -> @@ -312,8 +312,8 @@ let LowerSeqExpr g amap overallExpr = (Expr.Op(TOp.Label innerDisposeContinuationLabel,[],[],m)) (Expr.Op(TOp.Return,[],[mkTrue g m (* yes, we must dispose!!! *) ],m))) - generate,dispose,checkDispose); - labels = innerDisposeContinuationLabel :: res1.labels; + generate,dispose,checkDispose) + labels = innerDisposeContinuationLabel :: res1.labels stateVars = res1.stateVars significantClose = true } | _ -> @@ -324,7 +324,7 @@ let LowerSeqExpr g amap overallExpr = let generate = mkUnit g m let dispose = Expr.Op(TOp.Goto currentDisposeContinuationLabel,[],[],m) let checkDispose = Expr.Op(TOp.Goto currentDisposeContinuationLabel,[],[],m) - generate,dispose,checkDispose); + generate,dispose,checkDispose) labels = [] stateVars = [] significantClose = false } @@ -376,7 +376,7 @@ let LowerSeqExpr g amap overallExpr = (mkValSet m vref (mkDefault (m,vref.Type))) let dispose = dispose2 let checkDispose = checkDispose2 - generate,dispose,checkDispose); + generate,dispose,checkDispose) stateVars = vref::res2.stateVars } | None -> None @@ -402,8 +402,8 @@ let LowerSeqExpr g amap overallExpr = let generate = primMkMatch (spBind,exprm,pt,Array.ofList gtgs,m,ty) let dispose = if isNil disposals then mkUnit g m else List.reduce (mkCompGenSequential m) disposals let checkDispose = if isNil checkDisposes then mkFalse g m else List.reduce (mkCompGenSequential m) checkDisposes - generate,dispose,checkDispose); - labels=labs; + generate,dispose,checkDispose) + labels=labs stateVars = stateVars significantClose = significantClose } else @@ -418,7 +418,7 @@ let LowerSeqExpr g amap overallExpr = // This can give rise to infinite iterator chains when implemented by the naive expansion to // “for x in e yield e”. For example consider this: // - // let rec rwalk x = { yield x; + // let rec rwalk x = { yield x // yield! rwalk (x + rand()) } // // This is the moral equivalent of a tailcall optimization. These also don’t compile well @@ -439,9 +439,9 @@ let LowerSeqExpr g amap overallExpr = // printfn "found yield!" let inpElemTy = List.head (argsOfAppTy g ty) if isTailCall then - //this.pc <- NEXT; - //nextEnumerator <- e; - //return 2; + //this.pc <- NEXT + //nextEnumerator <- e + //return 2 //NEXT: let label = IL.generateCodeLabel() Some { phase2 = (fun (pcv,_currv,nextv,pcMap) -> @@ -461,7 +461,7 @@ let LowerSeqExpr g amap overallExpr = mkCompGenSequential m (Expr.Op(TOp.Label label,[],[],m)) (Expr.Op(TOp.Return,[],[mkFalse g m],m)) - generate,dispose,checkDispose); + generate,dispose,checkDispose) labels=[label] stateVars=[] significantClose = false } diff --git a/src/fsharp/MethodCalls.fs b/src/fsharp/MethodCalls.fs index 14c41717483..d00e2e217f6 100644 --- a/src/fsharp/MethodCalls.fs +++ b/src/fsharp/MethodCalls.fs @@ -605,7 +605,7 @@ let BuildFSharpMethodApp g m (vref: ValRef) vexp vexprty (args: Exprs) = if args.Length < arity then error(InternalError("internal error in getting arguments, n = "+string arity+", #args = "+string args.Length,m)); let tupargs,argst = List.chop arity args let tuptys = tupargs |> List.map (tyOfExpr g) - (mkTupled g m tupargs tuptys), + (mkRefTupled g m tupargs tuptys), (argst, rangeOfFunTy g fty) ) if not leftover.IsEmpty then error(InternalError("Unexpected "+string(leftover.Length)+" remaining arguments in method application",m)) mkApps g ((vexp,vexprty),[],args3,m), @@ -733,7 +733,7 @@ let BuildMethodCall tcVal g amap isMutable m isProp minfo valUseFlags minst objA let ilMethRef = Import.ImportProvidedMethodBaseAsILMethodRef amap m providedMeth let isNewObj = isCtor && (match valUseFlags with NormalValUse -> true | _ -> false) let actualTypeInst = - if isTupleTy g enclTy then argsOfAppTy g (mkCompiledTupleTy g (destTupleTy g enclTy)) // provided expressions can include method calls that get properties of tuple types + if isRefTupleTy g enclTy then argsOfAppTy g (mkCompiledTupleTy g false (destRefTupleTy g enclTy)) // provided expressions can include method calls that get properties of tuple types elif isFunTy g enclTy then [ domainOfFunTy g enclTy; rangeOfFunTy g enclTy ] // provided expressions can call Invoke else minfo.DeclaringTypeInst let actualMethInst = minst @@ -770,7 +770,7 @@ let BuildMethodCall tcVal g amap isMutable m isProp minfo valUseFlags minst objA let BuildNewDelegateExpr (eventInfoOpt:EventInfo option, g, amap, delegateTy, invokeMethInfo:MethInfo, delArgTys, f, fty, m) = let slotsig = invokeMethInfo.GetSlotSig(amap, m) let delArgVals,expr = - let topValInfo = ValReprInfo([],List.replicate (List.length delArgTys) ValReprInfo.unnamedTopArg, ValReprInfo.unnamedRetVal) + let topValInfo = ValReprInfo([],List.replicate (max 1 (List.length delArgTys)) ValReprInfo.unnamedTopArg, ValReprInfo.unnamedRetVal) // Try to pull apart an explicit lambda and use it directly // Don't do this in the case where we're adjusting the arguments of a function used to build a .NET-compatible event handler @@ -779,6 +779,7 @@ let BuildNewDelegateExpr (eventInfoOpt:EventInfo option, g, amap, delegateTy, in None else tryDestTopLambda g amap topValInfo (f, fty) + match lambdaContents with | None -> @@ -793,17 +794,15 @@ let BuildNewDelegateExpr (eventInfoOpt:EventInfo option, g, amap, delegateTy, in match delArgVals with | [] -> error(nonStandardEventError einfo.EventName m) | h :: _ when not (isObjTy g h.Type) -> error(nonStandardEventError einfo.EventName m) - | h :: t -> [exprForVal m h; mkTupledVars g m t] + | h :: t -> [exprForVal m h; mkRefTupledVars g m t] | None -> if isNil delArgTys then [mkUnit g m] else List.map (exprForVal m) delArgVals mkApps g ((f,fty),[],args,m) delArgVals,expr | Some _ -> - if isNil delArgTys then [], mkApps g ((f,fty),[],[mkUnit g m],m) - else - let _,_,_,vsl,body,_ = IteratedAdjustArityOfLambda g amap topValInfo f - List.concat vsl, body + let _,_,_,vsl,body,_ = IteratedAdjustArityOfLambda g amap topValInfo f + List.concat vsl, body let meth = TObjExprMethod(slotsig, [], [], [delArgVals], expr, m) mkObjExpr(delegateTy,None,BuildObjCtorCall g m,[meth],[],m) @@ -964,7 +963,7 @@ module ProvidedMethodCalls = | Some info -> let elems = info.PApplyArray(id, "GetInvokerExpresson",m) let elemsT = elems |> Array.map exprToExpr |> Array.toList - let exprT = mkTupledNoTypes g m elemsT + let exprT = mkRefTupledNoTypes g m elemsT None, (exprT, tyOfExpr g exprT) | None -> match ea.PApplyOption((function ProvidedNewArrayExpr x -> Some x | _ -> None), m) with @@ -984,8 +983,8 @@ module ProvidedMethodCalls = let typeOfExpr = let t = tyOfExpr g inpT stripTyEqnsWrtErasure EraseMeasures g t - let tysT = tryDestTupleTy g typeOfExpr - let exprT = mkTupleFieldGet (inpT, tysT, n.PUntaint(id,m), m) + let tupInfo, tysT = tryDestAnyTupleTy g typeOfExpr + let exprT = mkTupleFieldGet g (tupInfo, inpT, tysT, n.PUntaint(id,m), m) None, (exprT, tyOfExpr g exprT) | None -> match ea.PApplyOption((function ProvidedLambdaExpr x -> Some x | _ -> None), m) with diff --git a/src/fsharp/NameResolution.fs b/src/fsharp/NameResolution.fs index 52345ff8c43..293a71a58d6 100755 --- a/src/fsharp/NameResolution.fs +++ b/src/fsharp/NameResolution.fs @@ -409,28 +409,37 @@ let private GetCSharpStyleIndexedExtensionMembersForTyconRef (amap:Import.Import // We don't use the index for the IL extension method for tuple of F# function types (e.g. if extension // methods for tuple occur in C# code) let thisTyconRef = - match metadataOfTycon tcrefOfStaticClass.Deref, minfo with - | ILTypeMetadata (scoref,_), ILMeth(_,ILMethInfo(_,_,_,ilMethod,_),_) -> - match ilMethod.ParameterTypes with - | firstTy :: _ -> - match firstTy with - | ILType.Boxed tspec | ILType.Value tspec -> - let tcref = (tspec |> rescopeILTypeSpec scoref).TypeRef |> Import.ImportILTypeRef amap m - if isCompiledTupleTyconRef g tcref || tyconRefEq g tcref g.fastFunc_tcr then None - else Some tcref + try + let rs = + match metadataOfTycon tcrefOfStaticClass.Deref, minfo with + | ILTypeMetadata (scoref,_), ILMeth(_,ILMethInfo(_,_,_,ilMethod,_),_) -> + match ilMethod.ParameterTypes with + | firstTy :: _ -> + match firstTy with + | ILType.Boxed tspec | ILType.Value tspec -> + let tcref = (tspec |> rescopeILTypeSpec scoref).TypeRef |> Import.ImportILTypeRef amap m + if isCompiledTupleTyconRef g tcref || tyconRefEq g tcref g.fastFunc_tcr then None + else Some tcref + | _ -> None | _ -> None - | _ -> None - | _ -> - // The results are indexed by the TyconRef of the first 'this' argument, if any. - // So we need to go and crack the type of the 'this' argument. - let thisTy = minfo.GetParamTypes(amap,m,generalizeTypars minfo.FormalMethodTypars).Head.Head - match thisTy with - | AppTy amap.g (tcrefOfTypeExtended, _) -> Some tcrefOfTypeExtended - | _ -> None + | _ -> + // The results are indexed by the TyconRef of the first 'this' argument, if any. + // So we need to go and crack the type of the 'this' argument. + let thisTy = minfo.GetParamTypes(amap,m,generalizeTypars minfo.FormalMethodTypars).Head.Head + match thisTy with + | AppTy amap.g (tcrefOfTypeExtended, _) -> Some tcrefOfTypeExtended + | _ -> None + + Some rs + + with e -> // Import of the ILType may fail, if so report the error and skip on + errorRecovery e m + None match thisTyconRef with - | Some tcref -> yield Choice1Of2(tcref, ilExtMem) - | _ -> yield Choice2Of2 ilExtMem ] + | None -> () + | Some (Some tcref) -> yield Choice1Of2(tcref, ilExtMem) + | Some None -> yield Choice2Of2 ilExtMem ] else [] @@ -483,8 +492,8 @@ let AddFakeNameToNameEnv nm nenv item = /// Add a set of F# values to the environment. let AddValRefsToNameEnvWithPriority bulkAddMode pri nenv vrefs = - {nenv with eUnqualifiedItems= AddValRefsToItems bulkAddMode nenv.eUnqualifiedItems vrefs; - eIndexedExtensionMembers = (nenv.eIndexedExtensionMembers,vrefs) ||> Array.fold (AddValRefToExtensionMembers pri); + {nenv with eUnqualifiedItems= AddValRefsToItems bulkAddMode nenv.eUnqualifiedItems vrefs + eIndexedExtensionMembers = (nenv.eIndexedExtensionMembers,vrefs) ||> Array.fold (AddValRefToExtensionMembers pri) ePatItems = (nenv.ePatItems,vrefs) ||> Array.fold (fun acc vref -> let ePatItems = @@ -507,7 +516,7 @@ let AddValRefToNameEnv nenv vref = let AddActivePatternResultTagsToNameEnv (apinfo: PrettyNaming.ActivePatternInfo) nenv ty m = let nms = apinfo.Names let apresl = nms |> List.mapi (fun j nm -> nm, j) - { nenv with eUnqualifiedItems= (apresl,nenv.eUnqualifiedItems) ||> List.foldBack (fun (nm,j) acc -> acc.Add(nm, Item.ActivePatternResult(apinfo,ty,j, m))); } + { nenv with eUnqualifiedItems= (apresl,nenv.eUnqualifiedItems) ||> List.foldBack (fun (nm,j) acc -> acc.Add(nm, Item.ActivePatternResult(apinfo,ty,j, m))) } /// Generalize a union case, from Cons --> List.Cons let GeneralizeUnionCaseRef (ucref:UnionCaseRef) = @@ -627,11 +636,11 @@ let AddTyconRefsToNameEnv bulkAddMode ownDefinition g amap m root nenv tcrefs = let tcrefs = Array.ofList tcrefs { env with eFullyQualifiedTyconsByDemangledNameAndArity= - (if root then AddTyconsByDemangledNameAndArity bulkAddMode tcrefs nenv.eFullyQualifiedTyconsByDemangledNameAndArity else nenv.eFullyQualifiedTyconsByDemangledNameAndArity); + (if root then AddTyconsByDemangledNameAndArity bulkAddMode tcrefs nenv.eFullyQualifiedTyconsByDemangledNameAndArity else nenv.eFullyQualifiedTyconsByDemangledNameAndArity) eFullyQualifiedTyconsByAccessNames= - (if root then AddTyconByAccessNames bulkAddMode tcrefs nenv.eFullyQualifiedTyconsByAccessNames else nenv.eFullyQualifiedTyconsByAccessNames); + (if root then AddTyconByAccessNames bulkAddMode tcrefs nenv.eFullyQualifiedTyconsByAccessNames else nenv.eFullyQualifiedTyconsByAccessNames) eTyconsByDemangledNameAndArity= - AddTyconsByDemangledNameAndArity bulkAddMode tcrefs nenv.eTyconsByDemangledNameAndArity; + AddTyconsByDemangledNameAndArity bulkAddMode tcrefs nenv.eTyconsByDemangledNameAndArity eTyconsByAccessNames= AddTyconByAccessNames bulkAddMode tcrefs nenv.eTyconsByAccessNames } @@ -679,7 +688,7 @@ let rec AddModuleOrNamespaceRefsToNameEnv g amap m root ad nenv (modrefs: Module NameMap.layerAdditive add modrefsMap tab let nenv = {nenv with - eModulesAndNamespaces= addModrefs nenv.eModulesAndNamespaces; + eModulesAndNamespaces= addModrefs nenv.eModulesAndNamespaces eFullyQualifiedModulesAndNamespaces = (if root then addModrefs nenv.eFullyQualifiedModulesAndNamespaces @@ -754,7 +763,7 @@ let AddDeclaredTyparsToNameEnv check nenv typars = if Map.containsKey tp.Name sofar then errorR (Duplicate("type parameter",tp.DisplayName,tp.Range)) | NoCheckForDuplicateTypars -> () - end; + end Map.add tp.Name tp sofar) typars Map.empty {nenv with eTypars=NameMap.layer typarmap nenv.eTypars } @@ -1022,7 +1031,7 @@ let ResolveProvidedTypeNameInEntity (amap, m, typeName, modref: ModuleOrNamespac #endif /// Lookup a type name in an entity. -let LookupTypeNameInEntityMaybeHaveArity (amap, m, nm, staticResInfo:TypeNameResolutionStaticArgsInfo, modref: ModuleOrNamespaceRef) = +let LookupTypeNameInEntityMaybeHaveArity (amap, m, ad, nm, staticResInfo:TypeNameResolutionStaticArgsInfo, modref: ModuleOrNamespaceRef) = let mtyp = modref.ModuleOrNamespaceType let tcrefs = match staticResInfo with @@ -1042,6 +1051,7 @@ let LookupTypeNameInEntityMaybeHaveArity (amap, m, nm, staticResInfo:TypeNameRes #else amap |> ignore #endif + let tcrefs = tcrefs |> List.filter (IsEntityAccessible amap m ad) tcrefs @@ -1072,15 +1082,15 @@ let GetNestedTypesOfType (ad, ncenv:NameResolver, optFilter, staticResInfo, chec match optFilter with | Some nm -> - LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, m, nm, staticResInfo, tcref) - |> List.map (MakeNestedType ncenv tinst m) + let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, m, ad, nm, staticResInfo, tcref) + tcrefs |> List.map (MakeNestedType ncenv tinst m) | None -> #if EXTENSIONTYPING match tycon.TypeReprInfo with | TProvidedTypeExtensionPoint info -> [ for nestedType in info.ProvidedType.PApplyArray((fun sty -> sty.GetNestedTypes()), "GetNestedTypes", m) do let nestedTypeName = nestedType.PUntaint((fun t -> t.Name), m) - for nestedTcref in LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, m, nestedTypeName, staticResInfo, tcref) do + for nestedTcref in LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, m, ad, nestedTypeName, staticResInfo, tcref) do yield MakeNestedType ncenv tinst m nestedTcref ] | _ -> @@ -1507,8 +1517,8 @@ type ResolutionInfo = static member SendToSink(sink, ncenv: NameResolver, nenv, occ, ad, ResolutionInfo(entityPath,warnings), typarChecker) = entityPath |> List.iter (fun (m,eref:EntityRef) -> - CheckEntityAttributes ncenv.g eref m |> CommitOperationResult; - CheckTyconAccessible ncenv.amap m ad eref |> ignore; + CheckEntityAttributes ncenv.g eref m |> CommitOperationResult + CheckTyconAccessible ncenv.amap m ad eref |> ignore let item = if eref.IsModuleOrNamespace then Item.ModuleOrNamespaces [eref] @@ -1923,7 +1933,7 @@ let ResolveLongIdentInType sink ncenv nenv lookupKind m ad lid findFlag typeName ResolveLongIdentInTypePrim (ncenv:NameResolver) nenv lookupKind ResolutionInfo.Empty 0 m ad lid findFlag typeNameResInfo typ |> AtMostOneResult m |> ForceRaise - ResolutionInfo.SendToSink (sink,ncenv,nenv,ItemOccurence.UseInType,ad,resInfo,ResultTyparChecker(fun () -> CheckAllTyparsInferrable ncenv.amap m item)); + ResolutionInfo.SendToSink (sink,ncenv,nenv,ItemOccurence.UseInType,ad,resInfo,ResultTyparChecker(fun () -> CheckAllTyparsInferrable ncenv.amap m item)) item,rest let private ResolveLongIdentInTyconRef (ncenv:NameResolver) nenv lookupKind resInfo depth m ad lid typeNameResInfo tcref = @@ -1971,7 +1981,7 @@ let rec ResolveExprLongIdentInModuleOrNamespace (ncenv:NameResolver) nenv (typeN // Something in a type? let tyconSearch = - let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, id.idText, (if isNil rest then typeNameResInfo.StaticArgsInfo else TypeNameResolutionStaticArgsInfo.Indefinite), modref) + let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, ad, id.idText, (if isNil rest then typeNameResInfo.StaticArgsInfo else TypeNameResolutionStaticArgsInfo.Indefinite), modref) let tcrefs = tcrefs |> List.map (fun tcref -> (resInfo,tcref)) if nonNil rest then let tcrefs = CheckForTypeLegitimacyAndMultipleGenericTypeAmbiguities (tcrefs, TypeNameResolutionInfo (ResolveTypeNamesToTypeRefs,TypeNameResolutionStaticArgsInfo.Indefinite), PermitDirectReferenceToGeneratedType.No, unionRanges m id.idRange) @@ -2063,7 +2073,7 @@ let rec ResolveExprLongIdentPrim sink (ncenv:NameResolver) fullyQualified m ad n match AtMostOneResult m search with | Result _ as res -> let resInfo,item,rest = ForceRaise res - ResolutionInfo.SendToSink(sink,ncenv,nenv,ItemOccurence.Use,ad,resInfo,ResultTyparChecker(fun () -> CheckAllTyparsInferrable ncenv.amap m item)); + ResolutionInfo.SendToSink(sink,ncenv,nenv,ItemOccurence.Use,ad,resInfo,ResultTyparChecker(fun () -> CheckAllTyparsInferrable ncenv.amap m item)) Some(item,rest) | _ -> None @@ -2088,7 +2098,7 @@ let rec ResolveExprLongIdentPrim sink (ncenv:NameResolver) fullyQualified m ad n let failingCase = raze (UndefinedName(0,FSComp.SR.undefinedNameValueOfConstructor,id,NoPredictions)) let search = ctorSearch +++ implicitOpSearch +++ failingCase let resInfo,item,rest = ForceRaise (AtMostOneResult m search) - ResolutionInfo.SendToSink(sink,ncenv,nenv,ItemOccurence.Use,ad,resInfo,ResultTyparChecker(fun () -> CheckAllTyparsInferrable ncenv.amap m item)); + ResolutionInfo.SendToSink(sink,ncenv,nenv,ItemOccurence.Use,ad,resInfo,ResultTyparChecker(fun () -> CheckAllTyparsInferrable ncenv.amap m item)) item,rest @@ -2144,7 +2154,7 @@ let rec ResolveExprLongIdentPrim sink (ncenv:NameResolver) fullyQualified m ad n | _ -> let failingCase = raze (UndefinedName(0,FSComp.SR.undefinedNameValueNamespaceTypeOrModule,id,NoPredictions)) ForceRaise (AtMostOneResult m (search +++ moduleSearch AccessibleFromSomeFSharpCode +++ tyconSearch AccessibleFromSomeFSharpCode +++ failingCase)) - ResolutionInfo.SendToSink(sink,ncenv,nenv,ItemOccurence.Use,ad,resInfo,ResultTyparChecker(fun () -> CheckAllTyparsInferrable ncenv.amap m item)); + ResolutionInfo.SendToSink(sink,ncenv,nenv,ItemOccurence.Use,ad,resInfo,ResultTyparChecker(fun () -> CheckAllTyparsInferrable ncenv.amap m item)) item,rest let ResolveExprLongIdent sink (ncenv:NameResolver) m ad nenv typeNameResInfo lid = @@ -2181,7 +2191,7 @@ let rec ResolvePatternLongIdentInModuleOrNamespace (ncenv:NameResolver) nenv num success(resInfo,Item.Value (mkNestedValRef modref vspec),rest) | _ -> // Something in a type? e.g. a literal field - let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, id.idText, TypeNameResolutionStaticArgsInfo.Indefinite, modref) + let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, ad, id.idText, TypeNameResolutionStaticArgsInfo.Indefinite, modref) let tcrefs = tcrefs |> List.map (fun tcref -> (resInfo,tcref)) let tyconSearch = match lid with @@ -2241,7 +2251,7 @@ let rec ResolvePatternLongIdentPrim sink (ncenv:NameResolver) fullyQualified war (warnOnUpper = WarnOnUpperCase) && id.idText.Length >= 3 && System.Char.ToLowerInvariant id.idText.[0] <> id.idText.[0] then - warning(UpperCaseIdentifierInPattern(m)); + warning(UpperCaseIdentifierInPattern(m)) Item.NewDef id // Long identifiers in patterns @@ -2262,9 +2272,9 @@ let rec ResolvePatternLongIdentPrim sink (ncenv:NameResolver) fullyQualified war | Result _ as res -> ForceRaise res | _ -> ForceRaise (AtMostOneResult m (tyconSearch AccessibleFromSomeFSharpCode +++ moduleSearch AccessibleFromSomeFSharpCode)) - ResolutionInfo.SendToSink(sink,ncenv,nenv,ItemOccurence.Use,ad,resInfo,ResultTyparChecker(fun () -> true)); + ResolutionInfo.SendToSink(sink,ncenv,nenv,ItemOccurence.Use,ad,resInfo,ResultTyparChecker(fun () -> true)) - if nonNil rest then error(Error(FSComp.SR.nrIsNotConstructorOrLiteral(),(List.head rest).idRange)); + if nonNil rest then error(Error(FSComp.SR.nrIsNotConstructorOrLiteral(),(List.head rest).idRange)) res @@ -2300,7 +2310,7 @@ let rec ResolveTypeLongIdentInTyconRefPrim (ncenv:NameResolver) (typeNameResInfo CheckForDirectReferenceToGeneratedType (tcref, PermitDirectReferenceToGeneratedType.No, m) #endif let m = unionRanges m id.idRange - let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, id.idText, typeNameResInfo.StaticArgsInfo, tcref) + let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, ad, id.idText, typeNameResInfo.StaticArgsInfo, tcref) let tcrefs = tcrefs |> List.map (fun tcref -> (resInfo,tcref)) let tcrefs = CheckForTypeLegitimacyAndMultipleGenericTypeAmbiguities (tcrefs, typeNameResInfo, genOk, m) match tcrefs with @@ -2314,7 +2324,7 @@ let rec ResolveTypeLongIdentInTyconRefPrim (ncenv:NameResolver) (typeNameResInfo let m = unionRanges m id.idRange // Search nested types let tyconSearch = - let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, id.idText, TypeNameResolutionStaticArgsInfo.Indefinite, tcref) + let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, ad, id.idText, TypeNameResolutionStaticArgsInfo.Indefinite, tcref) let tcrefs = tcrefs |> List.map (fun tcref -> (resInfo,tcref)) let tcrefs = CheckForTypeLegitimacyAndMultipleGenericTypeAmbiguities (tcrefs, typeNameResInfo.DropStaticArgsInfo, genOk, m) match tcrefs with @@ -2326,7 +2336,7 @@ let rec ResolveTypeLongIdentInTyconRefPrim (ncenv:NameResolver) (typeNameResInfo /// Resolve a long identifier representing a type name and report the result let ResolveTypeLongIdentInTyconRef sink (ncenv:NameResolver) nenv typeNameResInfo ad m tcref (lid: Ident list) = let resInfo,tcref = ForceRaise (ResolveTypeLongIdentInTyconRefPrim ncenv typeNameResInfo ad ResolutionInfo.Empty PermitDirectReferenceToGeneratedType.No 0 m tcref lid) - ResolutionInfo.SendToSink(sink,ncenv,nenv,ItemOccurence.Use,ad,resInfo,ResultTyparChecker(fun () -> true)); + ResolutionInfo.SendToSink(sink,ncenv,nenv,ItemOccurence.Use,ad,resInfo,ResultTyparChecker(fun () -> true)) let item = Item.Types(tcref.DisplayName,[FreshenTycon ncenv m tcref]) CallNameResolutionSink sink (rangeOfLid lid,nenv,item,item,ItemOccurence.UseInType,nenv.eDisplayEnv,ad) tcref @@ -2347,7 +2357,7 @@ let rec private ResolveTypeLongIdentInModuleOrNamespace (ncenv:NameResolver) (ty | [] -> error(Error(FSComp.SR.nrUnexpectedEmptyLongId(),m)) | [id] -> // On all paths except error reporting we have isSome(staticResInfo), hence get at most one result back - let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, id.idText, typeNameResInfo.StaticArgsInfo, modref) + let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, ad, id.idText, typeNameResInfo.StaticArgsInfo, modref) match tcrefs with | _ :: _ -> tcrefs |> CollectResults (fun tcref -> success(resInfo,tcref)) | [] -> raze (SuggestTypeLongIdentInModuleOrNamespace depth modref id) @@ -2361,7 +2371,7 @@ let rec private ResolveTypeLongIdentInModuleOrNamespace (ncenv:NameResolver) (ty | _ -> raze (UndefinedName(depth,FSComp.SR.undefinedNameNamespaceOrModule,id,NoPredictions)) let tyconSearch = - let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, id.idText, TypeNameResolutionStaticArgsInfo.Indefinite, modref) + let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, ad, id.idText, TypeNameResolutionStaticArgsInfo.Indefinite, modref) match tcrefs with | _ :: _ -> tcrefs |> CollectResults (fun tcref -> ResolveTypeLongIdentInTyconRefPrim ncenv typeNameResInfo ad resInfo genOk (depth+1) m tcref rest) | [] -> raze (UndefinedName(depth,FSComp.SR.undefinedNameType,id,NoPredictions)) @@ -2391,7 +2401,7 @@ let rec ResolveTypeLongIdentPrim (ncenv:NameResolver) fullyQualified m nenv ad ( match tcrefs with | tcref :: _tcrefs -> // Note: This path is only for error reporting - //CheckForTypeLegitimacyAndMultipleGenericTypeAmbiguities tcref rest typeNameResInfo m; + //CheckForTypeLegitimacyAndMultipleGenericTypeAmbiguities tcref rest typeNameResInfo m success(ResolutionInfo.Empty,tcref) | [] -> raze (UndefinedName(0,FSComp.SR.undefinedNameType,id,NoPredictions)) @@ -2415,8 +2425,9 @@ let rec ResolveTypeLongIdentPrim (ncenv:NameResolver) fullyQualified m nenv ad ( let modulSearchFailed() = ResolveLongIndentAsModuleOrNamespaceThen ncenv.amap m fullyQualified nenv AccessibleFromSomeFSharpCode lid - (ResolveTypeLongIdentInModuleOrNamespace ncenv typeNameResInfo.DropStaticArgsInfo ad genOk) + (ResolveTypeLongIdentInModuleOrNamespace ncenv typeNameResInfo.DropStaticArgsInfo AccessibleFromSomeFSharpCode genOk) |?> List.concat + match tyconSearch +++ modulSearch with | Result results -> // NOTE: we delay checking the CheckForTypeLegitimacyAndMultipleGenericTypeAmbiguities condition until right at the end after we've @@ -2442,7 +2453,7 @@ let ResolveTypeLongIdent sink (ncenv:NameResolver) occurence fullyQualified nenv // Register the result as a name resolution match res with | Result (resInfo,tcref) -> - ResolutionInfo.SendToSink(sink,ncenv,nenv,ItemOccurence.UseInType, ad,resInfo,ResultTyparChecker(fun () -> true)); + ResolutionInfo.SendToSink(sink,ncenv,nenv,ItemOccurence.UseInType, ad,resInfo,ResultTyparChecker(fun () -> true)) let item = Item.Types(tcref.DisplayName,[FreshenTycon ncenv m tcref]) CallNameResolutionSink sink (m,nenv,item,item,occurence,nenv.eDisplayEnv,ad) | _ -> () @@ -2469,7 +2480,7 @@ let rec ResolveFieldInModuleOrNamespace (ncenv:NameResolver) nenv ad (resInfo:Re let tyconSearch = match lid with | _tn:: rest when nonNil rest -> - let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, id.idText, TypeNameResolutionStaticArgsInfo.Indefinite, modref) + let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, ad, id.idText, TypeNameResolutionStaticArgsInfo.Indefinite, modref) let tcrefs = tcrefs |> List.map (fun tcref -> (ResolutionInfo.Empty,tcref)) let tyconSearch = ResolveLongIdentInTyconRefs ncenv nenv LookupKind.RecdField (depth+1) m ad rest typeNameResInfo id.idRange tcrefs // choose only fields @@ -2552,17 +2563,7 @@ let ResolveFieldPrim (ncenv:NameResolver) nenv ad typ (mp,id:Ident) allFields = let m = id.idRange match mp with | [] -> - if isAppTy g typ then - match ncenv.InfoReader.TryFindRecdOrClassFieldInfoOfType(id.idText,m,typ) with - | Some (RecdFieldInfo(_,rfref)) -> [ResolutionInfo.Empty, FieldResolution(rfref,false)] - | None -> - let typeName = NicePrint.minimalStringOfType nenv.eDisplayEnv typ - if isRecdTy g typ then - // record label doesn't belong to record type -> predict other labels of same record - error(Error(SuggestOtherLabelsOfSameRecordType nenv typeName id allFields,m)) - else - error(Error(FSComp.SR.nrTypeDoesNotContainSuchField(typeName, id.idText),m)) - else + let lookup() = let frefs = try Map.find id.idText nenv.eFieldLabels with :? KeyNotFoundException -> @@ -2573,7 +2574,19 @@ let ResolveFieldPrim (ncenv:NameResolver) nenv ad typ (mp,id:Ident) allFields = frefs |> ListSet.setify (fun fref1 fref2 -> tyconRefEq g fref1.TyconRef fref2.TyconRef) |> List.map (fun x -> ResolutionInfo.Empty, FieldResolution(x,false)) - + + if isAppTy g typ then + match ncenv.InfoReader.TryFindRecdOrClassFieldInfoOfType(id.idText,m,typ) with + | Some (RecdFieldInfo(_,rfref)) -> [ResolutionInfo.Empty, FieldResolution(rfref,false)] + | None -> + let typeName = NicePrint.minimalStringOfType nenv.eDisplayEnv typ + if isRecdTy g typ then + // record label doesn't belong to record type -> predict other labels of same record + error(Error(SuggestOtherLabelsOfSameRecordType nenv typeName id allFields,m)) + else + lookup() + else + lookup() | _ -> let lid = (mp@[id]) let tyconSearch ad = @@ -2591,7 +2604,7 @@ let ResolveFieldPrim (ncenv:NameResolver) nenv ad typ (mp,id:Ident) allFields = ResolveLongIndentAsModuleOrNamespaceThen ncenv.amap m OpenQualified nenv ad lid (ResolveFieldInModuleOrNamespace ncenv nenv ad) let resInfo,item,rest = ForceRaise (AtMostOneResult m (modulSearch ad +++ tyconSearch ad +++ modulSearch AccessibleFromSomeFSharpCode +++ tyconSearch AccessibleFromSomeFSharpCode)) - if nonNil rest then errorR(Error(FSComp.SR.nrInvalidFieldLabel(),(List.head rest).idRange)); + if nonNil rest then errorR(Error(FSComp.SR.nrInvalidFieldLabel(),(List.head rest).idRange)) [(resInfo,item)] let ResolveField sink ncenv nenv ad typ (mp,id) allFields = @@ -2599,7 +2612,7 @@ let ResolveField sink ncenv nenv ad typ (mp,id) allFields = // Register the results of any field paths "Module.Type" in "Module.Type.field" as a name resolution. (Note, the path resolution // info is only non-empty if there was a unique resolution of the field) for (resInfo,_rfref) in res do - ResolutionInfo.SendToSink(sink,ncenv,nenv,ItemOccurence.UseInType, ad,resInfo,ResultTyparChecker(fun () -> true)); + ResolutionInfo.SendToSink(sink,ncenv,nenv,ItemOccurence.UseInType, ad,resInfo,ResultTyparChecker(fun () -> true)) res |> List.map snd /// Generate a new reference to a record field with a fresh type instantiation @@ -2737,7 +2750,7 @@ let ResolveExprDotLongIdentAndComputeRange (sink:TcResultsSink) (ncenv:NameResol resInfo,item,rest,itemRange // "true" resolution let resInfo,item,rest,itemRange = resolveExpr findFlag - ResolutionInfo.SendToSink(sink,ncenv,nenv,ItemOccurence.Use,ad,resInfo,ResultTyparChecker(fun () -> CheckAllTyparsInferrable ncenv.amap itemRange item)); + ResolutionInfo.SendToSink(sink,ncenv,nenv,ItemOccurence.Use,ad,resInfo,ResultTyparChecker(fun () -> CheckAllTyparsInferrable ncenv.amap itemRange item)) // Record the precise resolution of the field for intellisense/goto definition let afterOverloadResolution = @@ -3066,7 +3079,7 @@ let rec ResolvePartialLongIdentInType (ncenv: NameResolver) nenv isApplicableMet // e.g. .. let FullTypeOfPinfo(pinfo:PropInfo) = let rty = pinfo.GetPropertyType(amap,m) - let rty = if pinfo.IsIndexer then mkTupledTy g (pinfo.GetParamTypes(amap, m)) --> rty else rty + let rty = if pinfo.IsIndexer then mkRefTupledTy g (pinfo.GetParamTypes(amap, m)) --> rty else rty rty (typ |> AllPropInfosOfTypeInScope ncenv.InfoReader nenv (Some id,ad) IgnoreOverrides m @@ -3443,7 +3456,7 @@ and ResolvePartialLongIdentToClassOrRecdFieldsImpl (ncenv: NameResolver) (nenv: PartialResolveLongIndentAsModuleOrNamespaceThen nenv [id] (fun modref -> let allowObsolete = rest <> [] && allowObsolete if EntityRefContainsSomethingAccessible ncenv m ad modref then - ResolvePartialLongIdentInModuleOrNamespaceForRecordFields ncenv nenv m ad modref rest allowObsolete // obsolette?? + ResolvePartialLongIdentInModuleOrNamespaceForRecordFields ncenv nenv m ad modref rest allowObsolete else []) let qualifiedFields = diff --git a/src/fsharp/NicePrint.fs b/src/fsharp/NicePrint.fs index e4dc8100c44..d82a11dc550 100755 --- a/src/fsharp/NicePrint.fs +++ b/src/fsharp/NicePrint.fs @@ -910,8 +910,11 @@ module private PrintTypes = layoutTypeAppWithInfoAndPrec denv env (layoutTyconRef denv tc) prec tc.IsPrefixDisplay args // Layout a tuple type - | TType_tuple t -> - bracketIfL (prec <= 2) (layoutTypesWithInfoAndPrec denv env 2 (wordL "*") t) + | TType_tuple (tupInfo,t) -> + if evalTupInfoIsStruct tupInfo then + wordL "struct" --- bracketL (layoutTypesWithInfoAndPrec denv env 2 (wordL "*") t) + else + bracketIfL (prec <= 2) (layoutTypesWithInfoAndPrec denv env 2 (wordL "*") t) // Layout a first-class generic type. | TType_forall (tps,tau) -> @@ -1839,7 +1842,7 @@ module private PrintData = (wordL c.CaseName ++ bracketL (commaListL (dataExprsL denv args))) | Expr.Op (TOp.ExnConstr(c),_,args,_) -> (wordL c.LogicalName ++ bracketL (commaListL (dataExprsL denv args))) - | Expr.Op (TOp.Tuple,_,xs,_) -> tupleL (dataExprsL denv xs) + | Expr.Op (TOp.Tuple _,_,xs,_) -> tupleL (dataExprsL denv xs) | Expr.Op (TOp.Recd (_,tc),_,xs,_) -> let fields = tc.TrueInstanceFieldsAsList let lay fs x = (wordL fs.rfield_id.idText ^^ sepL "=") --- (dataExprL denv x) diff --git a/src/fsharp/Optimizer.fs b/src/fsharp/Optimizer.fs index b75bbfbd3b9..95634eec40f 100644 --- a/src/fsharp/Optimizer.fs +++ b/src/fsharp/Optimizer.fs @@ -78,14 +78,14 @@ type ExprValueInfo = /// information. | ValValue of ValRef * ExprValueInfo - | TupleValue of ExprValueInfo array + | TupleValue of ExprValueInfo[] /// RecdValue(tycon, values) /// /// INVARIANT: values are in field definition order . - | RecdValue of TyconRef * ExprValueInfo array + | RecdValue of TyconRef * ExprValueInfo[] - | UnionCaseValue of UnionCaseRef * ExprValueInfo array + | UnionCaseValue of UnionCaseRef * ExprValueInfo[] | ConstValue of Const * TType @@ -101,7 +101,7 @@ type ExprValueInfo = | ConstExprValue of int * Expr type ValInfo = - { ValMakesNoCriticalTailcalls: bool; + { ValMakesNoCriticalTailcalls: bool ValExprInfo: ExprValueInfo } //------------------------------------------------------------------------- @@ -140,7 +140,7 @@ type ValInfos(entries) = member x.TryFindForFslib (v:ValRef) = valInfosForFslib.Force().TryFind(v.Deref.LinkagePartialKey) type ModuleInfo = - { ValInfos: ValInfos; + { ValInfos: ValInfos ModuleOrNamespaceInfos: NameMap } and LazyModuleInfo = Lazy @@ -157,7 +157,7 @@ let rec exprValueInfoL g = function | UnknownValue -> wordL "?" | SizeValue (_,vinfo) -> exprValueInfoL g vinfo | ValValue (vr,vinfo) -> bracketL ((valRefL vr ^^ wordL "alias") --- exprValueInfoL g vinfo) - | TupleValue vinfos -> bracketL (exprValueInfosL g vinfos) + | TupleValue vinfos -> bracketL (exprValueInfosL g vinfos) | RecdValue (_,vinfos) -> braceL (exprValueInfosL g vinfos) | UnionCaseValue (ucr,vinfos) -> unionCaseRefL ucr ^^ bracketL (exprValueInfosL g vinfos) | CurriedLambdaValue(_lambdaId,_arities,_bsize,expr',_ety) -> wordL "lam" ++ exprL expr' (* (sprintf "lam(size=%d)" bsize) *) @@ -174,11 +174,11 @@ and valInfoL g (x:ValInfo) = #endif type Summary<'Info> = - { Info: 'Info; + { Info: 'Info /// What's the contribution to the size of this function? - FunctionSize: int; + FunctionSize: int /// What's the total contribution to the size of the assembly, including closure classes etc.? - TotalSize: int; + TotalSize: int /// Meaning: could mutate, could non-terminate, could raise exception /// One use: an effect expr can not be eliminated as dead code (e.g. sequencing) /// One use: an effect=false expr can not throw an exception? so try-catch is removed. @@ -224,7 +224,7 @@ let BoundValueInfoBySize vinfo = match x with | SizeValue (vdepth,vinfo) -> if vdepth < depth then x else MakeSizedValueInfo (bound depth vinfo) | ValValue (vr,vinfo) -> ValValue (vr,bound (depth-1) vinfo) - | TupleValue vinfos -> TupleValue (Array.map (bound (depth-1)) vinfos) + | TupleValue vinfos -> TupleValue (Array.map (bound (depth-1)) vinfos) | RecdValue (tcref,vinfos) -> RecdValue (tcref,Array.map (bound (depth-1)) vinfos) | UnionCaseValue (ucr,vinfos) -> UnionCaseValue (ucr,Array.map (bound (depth-1)) vinfos) | ConstValue _ -> x @@ -247,36 +247,36 @@ let [] localOptDefault = true let [] crossModuleOptDefault = true type OptimizationSettings = - { abstractBigTargets : bool; - jitOptUser : bool option; - localOptUser : bool option; - crossModuleOptUser : bool option; + { abstractBigTargets : bool + jitOptUser : bool option + localOptUser : bool option + crossModuleOptUser : bool option /// size after which we start chopping methods in two, though only at match targets bigTargetSize : int /// size after which we start enforcing splitting sub-expressions to new methods, to avoid hitting .NET IL limitations veryBigExprSize : int /// The size after which we don't inline - lambdaInlineThreshold : int; + lambdaInlineThreshold : int /// For unit testing reportingPhase : bool - reportNoNeedToTailcall: bool; + reportNoNeedToTailcall: bool reportFunctionSizes : bool reportHasEffect : bool reportTotalSizes : bool } static member Defaults = - { abstractBigTargets = false; - jitOptUser = None; + { abstractBigTargets = false + jitOptUser = None localOptUser = None /// size after which we start chopping methods in two, though only at match targets bigTargetSize = 100 /// size after which we start enforcing splitting sub-expressions to new methods, to avoid hitting .NET IL limitations veryBigExprSize = 3000 - crossModuleOptUser = None; + crossModuleOptUser = None /// The size after which we don't inline - lambdaInlineThreshold = 6; - reportingPhase = false; - reportNoNeedToTailcall = false; + lambdaInlineThreshold = 6 + reportingPhase = false + reportNoNeedToTailcall = false reportFunctionSizes = false reportHasEffect = false reportTotalSizes = false @@ -309,41 +309,44 @@ type OptimizationSettings = #else type cenv = - { g: TcGlobals; + { g: TcGlobals TcVal : ConstraintSolver.TcValF - amap: Import.ImportMap; - optimizing: bool; - scope: CcuThunk; + amap: Import.ImportMap + optimizing: bool + scope: CcuThunk localInternalVals: System.Collections.Generic.Dictionary - settings: OptimizationSettings; - emitTailcalls: bool; + settings: OptimizationSettings + emitTailcalls: bool // cache methods with SecurityAttribute applied to them, to prevent unnecessary calls to ExistsInEntireHierarchyOfType - casApplied : Dictionary;} + casApplied : Dictionary} type IncrementalOptimizationEnv = { // An identifier to help with name generation - latestBoundId: Ident option; + latestBoundId: Ident option // The set of lambda IDs we've inlined to reach this point. Helps to prevent recursive inlining - dontInline: Zset; + dontInline: Zset // Recursively bound vars. If an sub-expression that is a candidate for method splitting // contains any of these variables then don't split it, for fear of mucking up tailcalls. // See FSharp 1.0 bug 2892 - dontSplitVars: ValMap; + dontSplitVars: ValMap + // Disable method splitting in loops + inLoop: bool /// The Val for the function binding being generated, if any. - functionVal: (Val * Tast.ValReprInfo) option; - typarInfos: (Typar * TypeValueInfo) list; - localExternalVals: LayeredMap; - globalModuleInfos: LayeredMap; } + functionVal: (Val * Tast.ValReprInfo) option + typarInfos: (Typar * TypeValueInfo) list + localExternalVals: LayeredMap + globalModuleInfos: LayeredMap } static member Empty = - { latestBoundId = None; - dontInline = Zset.empty Int64.order; - typarInfos = []; - functionVal = None; - dontSplitVars = ValMap.Empty; - localExternalVals = LayeredMap.Empty; + { latestBoundId = None + dontInline = Zset.empty Int64.order + typarInfos = [] + functionVal = None + dontSplitVars = ValMap.Empty + inLoop = false + localExternalVals = LayeredMap.Empty globalModuleInfos = LayeredMap.Empty } //------------------------------------------------------------------------- @@ -368,7 +371,7 @@ let CheckInlineValueIsComplete (v:Val) res = //System.Diagnostics.Debug.Assert(false,sprintf "Break for incomplete inline value %s" v.DisplayName) let check (vref: ValRef) (res:ValInfo) = - CheckInlineValueIsComplete vref.Deref res.ValExprInfo; + CheckInlineValueIsComplete vref.Deref res.ValExprInfo (vref,res) //------------------------------------------------------------------------- @@ -423,15 +426,14 @@ let BindInternalLocalVal cenv (v:Val) vval env = | UnknownValue -> env | _ -> #endif - cenv.localInternalVals.[v.Stamp] <- vval; + cenv.localInternalVals.[v.Stamp] <- vval env let BindExternalLocalVal cenv (v:Val) vval env = #if CHECKED - CheckInlineValueIsComplete v vval; + CheckInlineValueIsComplete v vval #endif - if verboseOptimizationInfo then dprintn ("*** Binding "+v.LogicalName); let vval = if v.IsMutable then {vval with ValExprInfo=UnknownValue } else vval let env = #if CHECKED @@ -490,17 +492,10 @@ let BindTypeVarsToUnknown (tps:Typar list) env = let nms = PrettyTypes.PrettyTyparNames (fun _ -> true) (env.typarInfos |> List.map (fun (tp,_) -> tp.Name) ) tps (tps,nms) ||> List.iter2 (fun tp nm -> if PrettyTypes.NeedsPrettyTyparName tp then - tp.Data.typar_id <- ident (nm,tp.Range)); + tp.Data.typar_id <- ident (nm,tp.Range)) List.fold (fun sofar arg -> BindTypeVar arg UnknownTypeValue sofar) env tps -let BindCcu (ccu:Tast.CcuThunk) mval env (g:TcGlobals) = -#if DEBUG - if verboseOptimizationInfo then - dprintf "*** Reloading optimization data for assembly %s, info = \n%s\n" ccu.AssemblyName (showL (Layout.squashTo 192 (moduleInfoL g mval))); -#else - ignore g -#endif - +let BindCcu (ccu:Tast.CcuThunk) mval env (_g:TcGlobals) = { env with globalModuleInfos=env.globalModuleInfos.Add(ccu.AssemblyName,mval) } @@ -521,9 +516,9 @@ let GetInfoForLocalValue cenv env (v:Val) m = | Some vval -> vval | None -> if v.MustInline then - errorR(Error(FSComp.SR.optValueMarkedInlineButWasNotBoundInTheOptEnv(fullDisplayTextOfValRef (mkLocalValRef v)), m)); + errorR(Error(FSComp.SR.optValueMarkedInlineButWasNotBoundInTheOptEnv(fullDisplayTextOfValRef (mkLocalValRef v)), m)) #if CHECKED - warning(Error(FSComp.SR.optLocalValueNotFoundDuringOptimization(v.DisplayName),m)); + warning(Error(FSComp.SR.optLocalValueNotFoundDuringOptimization(v.DisplayName),m)) #endif UnknownValInfo @@ -532,10 +527,7 @@ let TryGetInfoForCcu env (ccu:CcuThunk) = env.globalModuleInfos.TryFind(ccu.Asse let TryGetInfoForEntity sv n = match sv.ModuleOrNamespaceInfos.TryFind n with | Some info -> Some (info.Force()) - | None -> - if verboseOptimizationInfo then - dprintn ("\n\n*** Optimization info for submodule "+n+" not found in parent module which contains submodules: "+String.concat "," (NameMap.domainL sv.ModuleOrNamespaceInfos)); - None + | None -> None let rec TryGetInfoForPath sv (p:_[]) i = if i >= p.Length then Some sv else @@ -558,7 +550,7 @@ let GetInfoForNonLocalVal cenv env (vref:ValRef) = match structInfo.ValInfos.TryFind(vref) with | Some ninfo -> snd ninfo | None -> - //dprintn ("\n\n*** Optimization info for value "+n+" from module "+(full_name_of_nlpath smv)+" not found, module contains values: "+String.concat "," (NameMap.domainL structInfo.ValInfos)); + //dprintn ("\n\n*** Optimization info for value "+n+" from module "+(full_name_of_nlpath smv)+" not found, module contains values: "+String.concat "," (NameMap.domainL structInfo.ValInfos)) //System.Diagnostics.Debug.Assert(false,sprintf "Break for module %s, value %s" (full_name_of_nlpath smv) n) if cenv.g.compilingFslib then match structInfo.ValInfos.TryFindForFslib(vref) with @@ -568,7 +560,7 @@ let GetInfoForNonLocalVal cenv env (vref:ValRef) = else UnknownValInfo | None -> - //dprintf "\n\n*** Optimization info for module %s from ccu %s not found." (full_name_of_nlpath smv) (ccu_of_nlpath smv).AssemblyName; + //dprintf "\n\n*** Optimization info for module %s from ccu %s not found." (full_name_of_nlpath smv) (ccu_of_nlpath smv).AssemblyName //System.Diagnostics.Debug.Assert(false,sprintf "Break for module %s, ccu %s" (full_name_of_nlpath smv) (ccu_of_nlpath smv).AssemblyName) UnknownValInfo else @@ -579,7 +571,7 @@ let GetInfoForVal cenv env m (vref:ValRef) = match vref.IsLocalRef with | true -> GetInfoForLocalValue cenv env vref.binding m | false -> GetInfoForNonLocalVal cenv env vref - check (* "its stored value was incomplete" m *) vref res |> ignore; + check (* "its stored value was incomplete" m *) vref res |> ignore res //------------------------------------------------------------------------- @@ -639,9 +631,9 @@ let MakeValueInfoForValue g m vref vinfo = | ValValue (vref2,detail) -> if valRefEq g vref vref2 then error(Error(FSComp.SR.optRecursiveValValue(showL(exprValueInfoL g vinfo)),m)) else check detail | SizeValue (_n,detail) -> check detail | _ -> () - check vinfo; + check vinfo #else - ignore g; ignore m; + ignore g; ignore m #endif ValValue (vref,vinfo) |> BoundValueInfoBySize @@ -978,17 +970,17 @@ let NoFlatExprs : (FlatExprs * FlatList>) = FlatList.empt //------------------------------------------------------------------------- let CombineValueInfos einfos res = - { TotalSize = AddTotalSizes einfos; - FunctionSize = AddFunctionSizes einfos; - HasEffect = OrEffects einfos; - MightMakeCriticalTailcall = OrTailcalls einfos; + { TotalSize = AddTotalSizes einfos + FunctionSize = AddFunctionSizes einfos + HasEffect = OrEffects einfos + MightMakeCriticalTailcall = OrTailcalls einfos Info = res } let CombineFlatValueInfos einfos res = - { TotalSize = AddTotalSizesFlat einfos; - FunctionSize = AddFunctionSizesFlat einfos; - HasEffect = OrEffectsFlat einfos; - MightMakeCriticalTailcall = OrTailcallsFlat einfos; + { TotalSize = AddTotalSizesFlat einfos + FunctionSize = AddFunctionSizesFlat einfos + HasEffect = OrEffectsFlat einfos + MightMakeCriticalTailcall = OrTailcallsFlat einfos Info = res } let CombineValueInfosUnknown einfos = CombineValueInfos einfos UnknownValue @@ -1011,7 +1003,6 @@ let AbstractLazyModulInfoByHiding isAssemblyBoundary mhi = Zset.memberOf mhi.mhiUnionCases let rec abstractExprInfo ivalue = - if verboseOptimizationInfo then dprintf "abstractExprInfo\n"; match ivalue with (* Check for escaping value. Revert to old info if possible *) | ValValue (vref2,detail) -> @@ -1057,11 +1048,10 @@ let AbstractLazyModulInfoByHiding isAssemblyBoundary mhi = | CurriedLambdaValue _ | ConstValue _ -> ivalue and abstractValInfo v = - { ValExprInfo=abstractExprInfo v.ValExprInfo; + { ValExprInfo=abstractExprInfo v.ValExprInfo ValMakesNoCriticalTailcalls=v.ValMakesNoCriticalTailcalls } and abstractModulInfo ss = - if verboseOptimizationInfo then dprintf "abstractModulInfo\n"; - { ModuleOrNamespaceInfos = NameMap.map abstractLazyModulInfo ss.ModuleOrNamespaceInfos; + { ModuleOrNamespaceInfos = NameMap.map abstractLazyModulInfo ss.ModuleOrNamespaceInfos ValInfos = ValInfos(ss.ValInfos.Entries |> Seq.filter (fun (vref,_) -> not (hiddenVal vref.Deref)) @@ -1075,7 +1065,7 @@ let AbstractLazyModulInfoByHiding isAssemblyBoundary mhi = let AbstractOptimizationInfoToEssentials = let rec abstractModulInfo (ss:ModuleInfo) = - { ModuleOrNamespaceInfos = NameMap.map (Lazy.force >> abstractModulInfo >> notlazy) ss.ModuleOrNamespaceInfos; + { ModuleOrNamespaceInfos = NameMap.map (Lazy.force >> abstractModulInfo >> notlazy) ss.ModuleOrNamespaceInfos ValInfos = ss.ValInfos.Filter (fun (v,_) -> v.MustInline) } and abstractLazyModulInfo ss = ss |> Lazy.force |> abstractModulInfo |> notlazy @@ -1105,14 +1095,9 @@ let AbstractExprInfoByVars (boundVars:Val list,boundTyVars) ivalue = let ftyvs = freeInVal CollectTypars v2 List.exists (Zset.memberOf ftyvs.FreeTypars) boundTyVars) -> - if verboseOptimizationInfo then - dprintf "hiding value '%s' when used in expression (see %a)\n" v2.LogicalName outputRange v2.Range; - let ftyvs = freeInVal CollectTypars v2 - ftyvs.FreeTypars |> Zset.iter (fun v -> dprintf " -- ftyv %s @ %a\n" v.Name outputRange v.Range); - boundVars |> List.iter (fun v -> dprintf " -- bv %s @ %a\n" v.LogicalName outputRange v.Range); - boundTyVars |> List.iter (fun v -> dprintf " -- btyv %s @ %a\n" v.Name outputRange v.Range) - + // hiding value when used in expression abstractExprInfo detail + | ValValue (v2,detail) -> let detail' = abstractExprInfo detail ValValue (v2,detail') @@ -1123,14 +1108,8 @@ let AbstractExprInfoByVars (boundVars:Val list,boundTyVars) ivalue = (nonNil boundVars && List.exists (Zset.memberOf fvs.FreeLocals) boundVars) || (nonNil boundTyVars && List.exists (Zset.memberOf fvs.FreeTyvars.FreeTypars) boundTyVars) || (fvs.UsesMethodLocalConstructs )) -> - if verboseOptimizationInfo then - let fvs = freeInExpr (if isNil boundTyVars then CollectLocals else CollectTyparsAndLocals) expr - dprintf "Trimming lambda @ %a, UsesMethodLocalConstructs = %b, exprL = %s\n" outputRange expr.Range fvs.UsesMethodLocalConstructs (showL (exprL expr)); - fvs.FreeLocals |> Zset.iter (fun v -> dprintf "fv %s @ %a\n" v.LogicalName outputRange v.Range); - fvs.FreeTyvars.FreeTypars |> Zset.iter (fun v -> dprintf "ftyv %s @ %a\n" v.Name outputRange v.Range); - boundVars |> List.iter (fun v -> dprintf "bv %s @ %a\n" v.LogicalName outputRange v.Range); - boundTyVars |> List.iter (fun v -> dprintf "btyv %s @ %a\n" v.Name outputRange v.Range) - + + // Trimming lambda UnknownValue // Check for escape in generic constant @@ -1151,14 +1130,13 @@ let AbstractExprInfoByVars (boundVars:Val list,boundTyVars) ivalue = | SizeValue (_vdepth,vinfo) -> MakeSizedValueInfo (abstractExprInfo vinfo) and abstractValInfo v = - { ValExprInfo=abstractExprInfo v.ValExprInfo; + { ValExprInfo=abstractExprInfo v.ValExprInfo ValMakesNoCriticalTailcalls=v.ValMakesNoCriticalTailcalls } and abstractModulInfo ss = - { ModuleOrNamespaceInfos = ss.ModuleOrNamespaceInfos |> NameMap.map (Lazy.force >> abstractModulInfo >> notlazy) ; + { ModuleOrNamespaceInfos = ss.ModuleOrNamespaceInfos |> NameMap.map (Lazy.force >> abstractModulInfo >> notlazy) ValInfos = ss.ValInfos.Map (fun (vref,e) -> - if verboseOptimizationInfo then dprintf "checking %s @ %a\n" vref.LogicalName outputRange (vref.Range); - check (* "its implementation uses a private binding" m *) vref (abstractValInfo e) ) } + check vref (abstractValInfo e) ) } abstractExprInfo ivalue @@ -1169,10 +1147,9 @@ let AbstractExprInfoByVars (boundVars:Val list,boundTyVars) ivalue = let RemapOptimizationInfo g tmenv = let rec remapExprInfo ivalue = - if verboseOptimizationInfo then dprintf "remapExprInfo\n"; match ivalue with | ValValue (v,detail) -> ValValue (remapValRef tmenv v,remapExprInfo detail) - | TupleValue vinfos -> TupleValue (Array.map remapExprInfo vinfos) + | TupleValue vinfos -> TupleValue (Array.map remapExprInfo vinfos) | RecdValue (tcref,vinfos) -> RecdValue (remapTyconRef tmenv.tyconRefRemap tcref, Array.map remapExprInfo vinfos) | UnionCaseValue(cspec,vinfos) -> UnionCaseValue (remapUnionCaseRef tmenv.tyconRefRemap cspec,Array.map remapExprInfo vinfos) | SizeValue(_vdepth,vinfo) -> MakeSizedValueInfo (remapExprInfo vinfo) @@ -1183,8 +1160,7 @@ let RemapOptimizationInfo g tmenv = let remapValInfo v = { ValExprInfo=remapExprInfo v.ValExprInfo; ValMakesNoCriticalTailcalls=v.ValMakesNoCriticalTailcalls } let rec remapModulInfo ss = - if verboseOptimizationInfo then dprintf "remapModulInfo\n"; - { ModuleOrNamespaceInfos = ss.ModuleOrNamespaceInfos |> NameMap.map remapLazyModulInfo; + { ModuleOrNamespaceInfos = ss.ModuleOrNamespaceInfos |> NameMap.map remapLazyModulInfo ValInfos = ss.ValInfos.Map (fun (vref,vinfo) -> let vref' = remapValRef tmenv vref let vinfo = remapValInfo vinfo @@ -1204,17 +1180,17 @@ let RemapOptimizationInfo g tmenv = let AbstractAndRemapModulInfo msg g m (repackage,hidden) info = let mrpi = mkRepackageRemapping repackage #if DEBUG - if verboseOptimizationInfo then dprintf "%s - %a - Optimization data prior to trim: \n%s\n" msg outputRange m (Layout.showL (Layout.squashTo 192 (moduleInfoL g info))); + if verboseOptimizationInfo then dprintf "%s - %a - Optimization data prior to trim: \n%s\n" msg outputRange m (Layout.showL (Layout.squashTo 192 (moduleInfoL g info))) #else ignore (msg,m) #endif let info = info |> AbstractLazyModulInfoByHiding false hidden #if DEBUG - if verboseOptimizationInfo then dprintf "%s - %a - Optimization data after trim:\n%s\n" msg outputRange m (Layout.showL (Layout.squashTo 192 (moduleInfoL g info))); + if verboseOptimizationInfo then dprintf "%s - %a - Optimization data after trim:\n%s\n" msg outputRange m (Layout.showL (Layout.squashTo 192 (moduleInfoL g info))) #endif let info = info |> RemapOptimizationInfo g mrpi #if DEBUG - if verboseOptimizationInfo then dprintf "%s - %a - Optimization data after remap:\n%s\n" msg outputRange m (Layout.showL (Layout.squashTo 192 (moduleInfoL g info))); + if verboseOptimizationInfo then dprintf "%s - %a - Optimization data after remap:\n%s\n" msg outputRange m (Layout.showL (Layout.squashTo 192 (moduleInfoL g info))) #endif info @@ -1305,7 +1281,7 @@ and BindingsHaveEffect g binds = FlatList.exists (BindingHasEffect g) binds and BindingHasEffect g bind = bind.Expr |> ExprHasEffect g and OpHasEffect g op = match op with - | TOp.Tuple -> false + | TOp.Tuple _ -> false | TOp.Recd (ctor,tcref) -> match ctor with | RecdExprIsObjInit -> true @@ -1448,20 +1424,20 @@ let ExprIsValue = function Expr.Val _ -> true | _ -> false let ExpandStructuralBindingRaw cenv expr = match expr with | Expr.Let (TBind(v,rhs,tgtSeqPtOpt),body,m,_) - when (isTupleExpr rhs && + when (isRefTupleExpr rhs && CanExpandStructuralBinding v) -> - let args = tryDestTuple rhs + let args = tryDestRefTupleExpr rhs if List.forall ExprIsValue args then expr (* avoid re-expanding when recursion hits original binding *) else - let argTys = destTupleTy cenv.g v.Type + let argTys = destRefTupleTy cenv.g v.Type let argBind i (arg:Expr) argTy = let name = v.LogicalName + "_" + string i let v,ve = mkCompGenLocal arg.Range name argTy ve,mkCompGenBind v arg let ves,binds = List.mapi2 argBind args argTys |> List.unzip - let tuple = mkTupled cenv.g m ves argTys + let tuple = mkRefTupled cenv.g m ves argTys mkLetsBind m binds (mkLet tgtSeqPtOpt m v tuple body) (* REVIEW: other cases - records, explicit lists etc. *) | expr -> expr @@ -1480,14 +1456,14 @@ let rec RearrangeTupleBindings expr fin = match RearrangeTupleBindings body fin with | Some b -> Some (mkLetBind m bind b) | None -> None - | Expr.Op (TOp.Tuple,_,_,_) -> Some (fin expr) + | Expr.Op (TOp.Tuple tupInfo,_,_,_) when not (evalTupInfoIsStruct tupInfo) -> Some (fin expr) | _ -> None let ExpandStructuralBinding cenv expr = match expr with | Expr.Let (TBind(v,rhs,tgtSeqPtOpt),body,m,_) - when (isTupleTy cenv.g v.Type && - not (isTupleExpr rhs) && + when (isRefTupleTy cenv.g v.Type && + not (isRefTupleExpr rhs) && CanExpandStructuralBinding v) -> match RearrangeTupleBindings rhs (fun top -> mkLet tgtSeqPtOpt m v top body) with | Some e -> ExpandStructuralBindingRaw cenv e @@ -1512,10 +1488,10 @@ let (|QueryRun|_|) g expr = | _ -> None -let (|MaybeTupled|) e = tryDestTuple e +let (|MaybeRefTupled|) e = tryDestRefTupleExpr e let (|AnyInstanceMethodApp|_|) e = match e with - | Expr.App(Expr.Val (vref,_,_),_,tyargs,[obj; MaybeTupled args],_) -> Some (vref,tyargs,obj,args) + | Expr.App(Expr.Val (vref,_,_),_,tyargs,[obj; MaybeRefTupled args],_) -> Some (vref,tyargs,obj,args) | _ -> None let (|InstanceMethodApp|_|) g (expectedValRef:ValRef) e = @@ -1553,14 +1529,14 @@ let (|QueryZero|_|) g = function | _ -> None /// Look for a possible tuple and transform -let (|AnyTupleTrans|) e = +let (|AnyRefTupleTrans|) e = match e with - | Expr.Op (TOp.Tuple,tys,es,m) -> (es, (fun es -> Expr.Op (TOp.Tuple,tys,es,m))) + | Expr.Op (TOp.Tuple tupInfo,tys,es,m) when not (evalTupInfoIsStruct tupInfo) -> (es, (fun es -> Expr.Op (TOp.Tuple tupInfo,tys,es,m))) | _ -> [e], (function [e] -> e | _ -> assert false; failwith "unreachable") /// Look for any QueryBuilder.* operation and transform let (|AnyQueryBuilderOpTrans|_|) g = function - | Expr.App((Expr.Val (vref,_,_) as v),vty,tyargs,[builder; AnyTupleTrans( (src::rest), replaceArgs) ],m) when + | Expr.App((Expr.Val (vref,_,_) as v),vty,tyargs,[builder; AnyRefTupleTrans( (src::rest), replaceArgs) ],m) when (match vref.ApparentParent with Parent tcref -> tyconRefEq g tcref g.query_builder_tcref | ParentNone -> false) -> Some (src,(fun newSource -> Expr.App(v,vty,tyargs,[builder; replaceArgs(newSource::rest)],m))) | _ -> None @@ -1733,10 +1709,10 @@ let rec OptimizeExpr cenv (env:IncrementalOptimizationEnv) expr = | Expr.Quote(ast,splices,isFromQueryExpression,m,ty) -> let splices = ref (splices.Value |> Option.map (map3Of4 (List.map (OptimizeExpr cenv env >> fst)))) Expr.Quote(ast,splices,isFromQueryExpression,m,ty), - { TotalSize = 10; - FunctionSize = 1; - HasEffect = false; - MightMakeCriticalTailcall=false; + { TotalSize = 10 + FunctionSize = 1 + HasEffect = false + MightMakeCriticalTailcall=false Info=UnknownValue } | Expr.Obj (_,typ,basev,expr,overrides,iimpls,m) -> OptimizeObjectExpr cenv env (typ,basev,expr,overrides,iimpls,m) | Expr.Op (c,tyargs,args,m) -> OptimizeExprOp cenv env (c,tyargs,args,m) @@ -1761,13 +1737,13 @@ let rec OptimizeExpr cenv (env:IncrementalOptimizationEnv) expr = let e2',e2info = OptimizeExpr cenv env e2 let e3',e3info = OptimizeExpr cenv env e3 Expr.StaticOptimization(constraints,e2',e3',m), - { TotalSize = min e2info.TotalSize e3info.TotalSize; - FunctionSize = min e2info.FunctionSize e3info.FunctionSize; - HasEffect = e2info.HasEffect || e3info.HasEffect; + { TotalSize = min e2info.TotalSize e3info.TotalSize + FunctionSize = min e2info.FunctionSize e3info.FunctionSize + HasEffect = e2info.HasEffect || e3info.HasEffect MightMakeCriticalTailcall=e2info.MightMakeCriticalTailcall || e3info.MightMakeCriticalTailcall // seems conservative Info= UnknownValue } | Expr.Link _eref -> - assert ("unexpected reclink" = ""); + assert ("unexpected reclink" = "") failwith "Unexpected reclink" @@ -1776,15 +1752,14 @@ let rec OptimizeExpr cenv (env:IncrementalOptimizationEnv) expr = //------------------------------------------------------------------------- and OptimizeObjectExpr cenv env (typ,baseValOpt,basecall,overrides,iimpls,m) = - if verboseOptimizations then dprintf "OptimizeObjectExpr\n"; let basecall',basecallinfo = OptimizeExpr cenv env basecall let overrides',overrideinfos = OptimizeMethods cenv env baseValOpt overrides let iimpls',iimplsinfos = OptimizeInterfaceImpls cenv env baseValOpt iimpls let expr'=mkObjExpr(typ,baseValOpt,basecall',overrides',iimpls',m) - expr', { TotalSize=closureTotalSize + basecallinfo.TotalSize + AddTotalSizes overrideinfos + AddTotalSizes iimplsinfos; - FunctionSize=1 (* a newobj *) ; - HasEffect=true; - MightMakeCriticalTailcall=false; // creating an object is not a useful tailcall + expr', { TotalSize=closureTotalSize + basecallinfo.TotalSize + AddTotalSizes overrideinfos + AddTotalSizes iimplsinfos + FunctionSize=1 (* a newobj *) + HasEffect=true + MightMakeCriticalTailcall=false // creating an object is not a useful tailcall Info=UnknownValue} //------------------------------------------------------------------------- @@ -1793,7 +1768,6 @@ and OptimizeObjectExpr cenv env (typ,baseValOpt,basecall,overrides,iimpls,m) = and OptimizeMethods cenv env baseValOpt l = OptimizeList (OptimizeMethod cenv env baseValOpt) l and OptimizeMethod cenv env baseValOpt (TObjExprMethod(slotsig, attribs, tps, vs, e, m) as tmethod) = - if verboseOptimizations then dprintf "OptimizeMethod\n"; let env = {env with latestBoundId=Some tmethod.Id; functionVal = None} let env = BindTypeVarsToUnknown tps env let env = BindInternalValsToUnknown cenv vs env @@ -1801,10 +1775,10 @@ and OptimizeMethod cenv env baseValOpt (TObjExprMethod(slotsig, attribs, tps, vs let e',einfo = OptimizeExpr cenv env e (* REVIEW: if we ever change this from being UnknownValue then we should call AbstractExprInfoByVars *) TObjExprMethod(slotsig,attribs,tps,vs,e',m), - { TotalSize = einfo.TotalSize; - FunctionSize = 0; - HasEffect = false; - MightMakeCriticalTailcall=false; + { TotalSize = einfo.TotalSize + FunctionSize = 0 + HasEffect = false + MightMakeCriticalTailcall=false Info=UnknownValue} //------------------------------------------------------------------------- @@ -1813,13 +1787,12 @@ and OptimizeMethod cenv env baseValOpt (TObjExprMethod(slotsig, attribs, tps, vs and OptimizeInterfaceImpls cenv env baseValOpt l = OptimizeList (OptimizeInterfaceImpl cenv env baseValOpt) l and OptimizeInterfaceImpl cenv env baseValOpt (ty,overrides) = - if verboseOptimizations then dprintf "OptimizeInterfaceImpl\n"; let overrides',overridesinfos = OptimizeMethods cenv env baseValOpt overrides (ty, overrides'), - { TotalSize = AddTotalSizes overridesinfos; - FunctionSize = 1; - HasEffect = false; - MightMakeCriticalTailcall=false; + { TotalSize = AddTotalSizes overridesinfos + FunctionSize = 1 + HasEffect = false + MightMakeCriticalTailcall=false Info=UnknownValue} //------------------------------------------------------------------------- @@ -1828,7 +1801,6 @@ and OptimizeInterfaceImpl cenv env baseValOpt (ty,overrides) = and OptimizeExprOp cenv env (op,tyargs,args,m) = - if verboseOptimizations then dprintf "OptimizeExprOp\n"; (* Special cases *) match op,tyargs,args with | TOp.Coerce,[toty;fromty],[e] -> @@ -1836,10 +1808,10 @@ and OptimizeExprOp cenv env (op,tyargs,args,m) = if typeEquiv cenv.g toty fromty then e',einfo else mkCoerceExpr(e',toty,m,fromty), - { TotalSize=einfo.TotalSize + 1; - FunctionSize=einfo.FunctionSize + 1; - HasEffect = true; - MightMakeCriticalTailcall=false; + { TotalSize=einfo.TotalSize + 1 + FunctionSize=einfo.FunctionSize + 1 + HasEffect = true + MightMakeCriticalTailcall=false Info=UnknownValue } (* Handle addresses *) | TOp.LValueOp (LGetAddr,lv),_,_ -> @@ -1850,14 +1822,14 @@ and OptimizeExprOp cenv env (op,tyargs,args,m) = | Expr.Val (v,_,_) when not v.IsCompiledAsTopLevel -> TOp.LValueOp (LGetAddr,v) | _ -> op Expr.Op (op',tyargs,args,m), - { TotalSize = 1; - FunctionSize = 1; - HasEffect = OpHasEffect cenv.g op'; - MightMakeCriticalTailcall = false; + { TotalSize = 1 + FunctionSize = 1 + HasEffect = OpHasEffect cenv.g op' + MightMakeCriticalTailcall = false Info = UnknownValue } (* Handle these as special cases since mutables are allowed inside their bodies *) - | TOp.While (spWhile,marker),_,[Expr.Lambda(_,_,_,[_],e1,_,_);Expr.Lambda(_,_,_,[_],e2,_,_)] -> OptimizeWhileLoop cenv env (spWhile,marker,e1,e2,m) - | TOp.For(spStart,dir),_,[Expr.Lambda(_,_,_,[_],e1,_,_);Expr.Lambda(_,_,_,[_],e2,_,_);Expr.Lambda(_,_,_,[v],e3,_,_)] -> OptimizeFastIntegerForLoop cenv env (spStart,v,e1,dir,e2,e3,m) + | TOp.While (spWhile,marker),_,[Expr.Lambda(_,_,_,[_],e1,_,_);Expr.Lambda(_,_,_,[_],e2,_,_)] -> OptimizeWhileLoop cenv { env with inLoop=true } (spWhile,marker,e1,e2,m) + | TOp.For(spStart,dir),_,[Expr.Lambda(_,_,_,[_],e1,_,_);Expr.Lambda(_,_,_,[_],e2,_,_);Expr.Lambda(_,_,_,[v],e3,_,_)] -> OptimizeFastIntegerForLoop cenv { env with inLoop=true } (spStart,v,e1,dir,e2,e3,m) | TOp.TryFinally(spTry,spFinally),[resty],[Expr.Lambda(_,_,_,[_],e1,_,_); Expr.Lambda(_,_,_,[_],e2,_,_)] -> OptimizeTryFinally cenv env (spTry,spFinally,e1,e2,m,resty) | TOp.TryCatch(spTry,spWith),[resty],[Expr.Lambda(_,_,_,[_],e1,_,_); Expr.Lambda(_,_,_,[vf],ef,_,_); Expr.Lambda(_,_,_,[vh],eh,_,_)] -> OptimizeTryCatch cenv env (e1,vf,ef,vh,eh,m,resty,spTry,spWith) | TOp.TraitCall(traitInfo),[],args -> OptimizeTraitCall cenv env (traitInfo, args, m) @@ -1884,7 +1856,7 @@ and OptimizeExprOp cenv env (op,tyargs,args,m) = let knownValue = match op,arginfos with | TOp.ValFieldGet (rf),[e1info] -> TryOptimizeRecordFieldGet cenv env (e1info,rf,tyargs,m) - | TOp.TupleFieldGet n,[e1info] -> TryOptimizeTupleFieldGet cenv env (e1info,tyargs,n,m) + | TOp.TupleFieldGet (tupInfo,n),[e1info] -> TryOptimizeTupleFieldGet cenv env (tupInfo,e1info,tyargs,n,m) | TOp.UnionCaseFieldGet (cspec,n),[e1info] -> TryOptimizeUnionCaseGet cenv env (e1info,cspec,tyargs,n,m) | _ -> None match knownValue with @@ -1906,7 +1878,10 @@ and OptimizeExprOpFallback cenv env (op,tyargs,args',m) arginfos valu = match op with | TOp.UnionCase c -> 2,MakeValueInfoForUnionCase c (Array.ofList argValues) | TOp.ExnConstr _ -> 2,valu (* REVIEW: information collection possible here *) - | TOp.Tuple -> 1, MakeValueInfoForTuple (Array.ofList argValues) + | TOp.Tuple tupInfo -> + let isStruct = evalTupInfoIsStruct tupInfo + if isStruct then 0,valu + else 1,MakeValueInfoForTuple (Array.ofList argValues) | TOp.ValFieldGet _ | TOp.TupleFieldGet _ | TOp.UnionCaseFieldGet _ @@ -1952,10 +1927,10 @@ and OptimizeExprOpFallback cenv env (op,tyargs,args',m) arginfos valu = | TOp.ILCall (virt,_,newobj,_,_,_,_,_,_,_,_) -> not newobj && virt | _ -> false - let vinfo = { TotalSize=argsTSize + cost; - FunctionSize=argsFSize + cost; - HasEffect=argEffects || effect; - MightMakeCriticalTailcall= mayBeCriticalTailcall; // discard tailcall info for args - these are not in tailcall position + let vinfo = { TotalSize=argsTSize + cost + FunctionSize=argsFSize + cost + HasEffect=argEffects || effect + MightMakeCriticalTailcall= mayBeCriticalTailcall // discard tailcall info for args - these are not in tailcall position Info=valu } // Replace entire expression with known value? @@ -1963,10 +1938,10 @@ and OptimizeExprOpFallback cenv env (op,tyargs,args',m) arginfos valu = | Some res -> res,vinfo | None -> Expr.Op(op,tyargs,args',m), - { TotalSize=argsTSize + cost; - FunctionSize=argsFSize + cost; - HasEffect=argEffects || effect; - MightMakeCriticalTailcall= mayBeCriticalTailcall; // discard tailcall info for args - these are not in tailcall position + { TotalSize=argsTSize + cost + FunctionSize=argsFSize + cost + HasEffect=argEffects || effect + MightMakeCriticalTailcall= mayBeCriticalTailcall // discard tailcall info for args - these are not in tailcall position Info=valu } //------------------------------------------------------------------------- @@ -1978,13 +1953,12 @@ and OptimizeConst cenv env expr (c,m,ty) = | Some(e) -> OptimizeExpr cenv env e | None -> - if verboseOptimizations then dprintf "OptimizeConst\n"; expr, { TotalSize=(match c with | Const.String b -> b.Length/10 - | _ -> 0); - FunctionSize=0; - HasEffect=false; - MightMakeCriticalTailcall=false; + | _ -> 0) + FunctionSize=0 + HasEffect=false + MightMakeCriticalTailcall=false Info=MakeValueInfoForConst c ty} //------------------------------------------------------------------------- @@ -1995,23 +1969,23 @@ and TryOptimizeRecordFieldGet cenv _env (e1info,r:RecdFieldRef,_tinst,m) = match destRecdValue e1info.Info with | Some finfos when cenv.settings.EliminateRecdFieldGet() && not e1info.HasEffect -> let n = r.Index - if n >= finfos.Length then errorR(InternalError( "TryOptimizeRecordFieldGet: term argument out of range",m)); + if n >= finfos.Length then errorR(InternalError( "TryOptimizeRecordFieldGet: term argument out of range",m)) Some finfos.[n] (* Uses INVARIANT on record ValInfos that exprs are in defn order *) | _ -> None -and TryOptimizeTupleFieldGet cenv _env (e1info,tys,n,m) = +and TryOptimizeTupleFieldGet cenv _env (_tupInfo,e1info,tys,n,m) = match destTupleValue e1info.Info with | Some tups when cenv.settings.EliminateTupleFieldGet() && not e1info.HasEffect -> let len = tups.Length - if len <> tys.Length then errorR(InternalError("error: tuple lengths don't match",m)); - if n >= len then errorR(InternalError("TryOptimizeTupleFieldGet: tuple index out of range",m)); + if len <> tys.Length then errorR(InternalError("error: tuple lengths don't match",m)) + if n >= len then errorR(InternalError("TryOptimizeTupleFieldGet: tuple index out of range",m)) Some tups.[n] | _ -> None and TryOptimizeUnionCaseGet cenv _env (e1info,cspec,_tys,n,m) = match e1info.Info with | StripUnionCaseValue(cspec2,args) when cenv.settings.EliminatUnionCaseFieldGet() && not e1info.HasEffect && cenv.g.unionCaseRefEq cspec cspec2 -> - if n >= args.Length then errorR(InternalError( "TryOptimizeUnionCaseGet: term argument out of range",m)); + if n >= args.Length then errorR(InternalError( "TryOptimizeUnionCaseGet: term argument out of range",m)) Some args.[n] | _ -> None @@ -2020,7 +1994,6 @@ and TryOptimizeUnionCaseGet cenv _env (e1info,cspec,_tys,n,m) = //------------------------------------------------------------------------- and OptimizeFastIntegerForLoop cenv env (spStart,v,e1,dir,e2,e3,m) = - if verboseOptimizations then dprintf "OptimizeFastIntegerForLoop\n"; let e1',e1info = OptimizeExpr cenv env e1 let e2',e2info = OptimizeExpr cenv env e2 let env = BindInternalValToUnknown cenv v env @@ -2031,8 +2004,7 @@ and OptimizeFastIntegerForLoop cenv env (spStart,v,e1,dir,e2,e3,m) = let e2', dir = match dir, e2' with // detect upwards for loops with bounds of the form "arr.Length - 1" and convert them to a C#-style for loop - | FSharpForLoopUp, Expr.Op(TOp.ILAsm([ (AI_sub | AI_sub_ovf)],_),_,[Expr.Op(TOp.ILAsm([ I_ldlen; (AI_conv DT_I4)],_),_,[arre],_); - Expr.Const(Const.Int32 1,_,_)],_) + | FSharpForLoopUp, Expr.Op(TOp.ILAsm([ (AI_sub | AI_sub_ovf)],_),_,[Expr.Op(TOp.ILAsm([ I_ldlen; (AI_conv DT_I4)],_),_,[arre],_); Expr.Const(Const.Int32 1,_,_)],_) when not (snd(OptimizeExpr cenv env arre)).HasEffect -> mkLdlen cenv.g (e2'.Range) arre, CSharpForLoopUp @@ -2052,10 +2024,10 @@ and OptimizeFastIntegerForLoop cenv env (spStart,v,e1,dir,e2,e3,m) = mkUnit cenv.g m , { TotalSize=0; FunctionSize=0; HasEffect=false; MightMakeCriticalTailcall=false; Info=UnknownValue } else let expr' = mkFor cenv.g (spStart,v,e1',dir,e2',e3',m) - expr', { TotalSize=AddTotalSizes einfos + forAndWhileLoopSize; - FunctionSize=AddFunctionSizes einfos + forAndWhileLoopSize; - HasEffect=eff; - MightMakeCriticalTailcall=false; + expr', { TotalSize=AddTotalSizes einfos + forAndWhileLoopSize + FunctionSize=AddFunctionSizes einfos + forAndWhileLoopSize + HasEffect=eff + MightMakeCriticalTailcall=false Info=UnknownValue } //------------------------------------------------------------------------- @@ -2063,7 +2035,6 @@ and OptimizeFastIntegerForLoop cenv env (spStart,v,e1,dir,e2,e3,m) = //------------------------------------------------------------------------- and OptimizeLetRec cenv env (binds,bodyExpr,m) = - if verboseOptimizations then dprintf "OptimizeLetRec\n"; let vs = binds |> FlatList.map (fun v -> v.Var) in let env = BindInternalValsToUnknown cenv vs env let binds',env = OptimizeBindings cenv true env binds @@ -2090,11 +2061,9 @@ and OptimizeLinearExpr cenv env expr contf = let expr = DetectAndOptimizeForExpression cenv.g OptimizeAllForExpressions expr - if verboseOptimizations then dprintf "OptimizeLinearExpr\n"; let expr = if cenv.settings.ExpandStructrualValues() then ExpandStructuralBinding cenv expr else expr match expr with | Expr.Sequential (e1,e2,flag,spSeq,m) -> - if verboseOptimizations then dprintf "OptimizeLinearExpr: seq\n"; let e1',e1info = OptimizeExpr cenv env e1 OptimizeLinearExpr cenv env e2 (contf << (fun (e2',e2info) -> if (flag = NormalSeq) && @@ -2105,14 +2074,13 @@ and OptimizeLinearExpr cenv env expr contf = e2', e2info else Expr.Sequential(e1',e2',flag,spSeq,m), - { TotalSize = e1info.TotalSize + e2info.TotalSize; - FunctionSize = e1info.FunctionSize + e2info.FunctionSize; - HasEffect = flag <> NormalSeq || e1info.HasEffect || e2info.HasEffect; + { TotalSize = e1info.TotalSize + e2info.TotalSize + FunctionSize = e1info.FunctionSize + e2info.FunctionSize + HasEffect = flag <> NormalSeq || e1info.HasEffect || e2info.HasEffect MightMakeCriticalTailcall = (if flag = NormalSeq then e2info.MightMakeCriticalTailcall else e1info.MightMakeCriticalTailcall || e2info.MightMakeCriticalTailcall) Info = UnknownValue (* can't propagate value: must access result of computation for its effects *) })) | Expr.Let (bind,body,m,_) -> - if verboseOptimizations then dprintf "OptimizeLinearExpr: let\n"; let (bind',bindingInfo),env = OptimizeBinding cenv false env bind OptimizeLinearExpr cenv env body (contf << (fun (body',bodyInfo) -> // PERF: This call to ValueIsUsedOrHasEffect/freeInExpr amounts to 9% of all optimization time. @@ -2121,19 +2089,19 @@ and OptimizeLinearExpr cenv env expr contf = (* Eliminate let bindings on the way back up *) let expr',adjust = TryEliminateLet cenv env bind' body' m expr', - { TotalSize = bindingInfo.TotalSize + bodyInfo.TotalSize + adjust; - FunctionSize = bindingInfo.FunctionSize + bodyInfo.FunctionSize + adjust; - HasEffect=bindingInfo.HasEffect || bodyInfo.HasEffect; - MightMakeCriticalTailcall = bodyInfo.MightMakeCriticalTailcall; // discard tailcall info from binding - not in tailcall position + { TotalSize = bindingInfo.TotalSize + bodyInfo.TotalSize + adjust + FunctionSize = bindingInfo.FunctionSize + bodyInfo.FunctionSize + adjust + HasEffect=bindingInfo.HasEffect || bodyInfo.HasEffect + MightMakeCriticalTailcall = bodyInfo.MightMakeCriticalTailcall // discard tailcall info from binding - not in tailcall position Info = UnknownValue } else (* On the way back up: Trim out any optimization info that involves escaping values on the way back up *) let evalue' = AbstractExprInfoByVars ([bind'.Var],[]) bodyInfo.Info body', - { TotalSize = bindingInfo.TotalSize + bodyInfo.TotalSize - localVarSize (* eliminated a local var *); - FunctionSize = bindingInfo.FunctionSize + bodyInfo.FunctionSize - localVarSize (* eliminated a local var *); - HasEffect=bindingInfo.HasEffect || bodyInfo.HasEffect; - MightMakeCriticalTailcall = bodyInfo.MightMakeCriticalTailcall; // discard tailcall info from binding - not in tailcall position + { TotalSize = bindingInfo.TotalSize + bodyInfo.TotalSize - localVarSize (* eliminated a local var *) + FunctionSize = bindingInfo.FunctionSize + bodyInfo.FunctionSize - localVarSize (* eliminated a local var *) + HasEffect=bindingInfo.HasEffect || bodyInfo.HasEffect + MightMakeCriticalTailcall = bodyInfo.MightMakeCriticalTailcall // discard tailcall info from binding - not in tailcall position Info = evalue' } )) | LinearMatchExpr (spMatch,exprm,dtree,tg1,e2,spTarget2,m,ty) -> @@ -2153,14 +2121,13 @@ and OptimizeLinearExpr cenv env expr contf = //------------------------------------------------------------------------- and OptimizeTryFinally cenv env (spTry,spFinally,e1,e2,m,ty) = - if verboseOptimizations then dprintf "OptimizeTryFinally\n"; let e1',e1info = OptimizeExpr cenv env e1 let e2',e2info = OptimizeExpr cenv env e2 let info = - { TotalSize = e1info.TotalSize + e2info.TotalSize + tryFinallySize; - FunctionSize = e1info.FunctionSize + e2info.FunctionSize + tryFinallySize; - HasEffect = e1info.HasEffect || e2info.HasEffect; - MightMakeCriticalTailcall = false; // no tailcalls from inside in try/finally + { TotalSize = e1info.TotalSize + e2info.TotalSize + tryFinallySize + FunctionSize = e1info.FunctionSize + e2info.FunctionSize + tryFinallySize + HasEffect = e1info.HasEffect || e2info.HasEffect + MightMakeCriticalTailcall = false // no tailcalls from inside in try/finally Info = UnknownValue } (* try-finally, so no effect means no exception can be raised, so just sequence the finally *) if cenv.settings.EliminateTryCatchAndTryFinally () && not e1info.HasEffect then @@ -2179,7 +2146,6 @@ and OptimizeTryFinally cenv env (spTry,spFinally,e1,e2,m,ty) = //------------------------------------------------------------------------- and OptimizeTryCatch cenv env (e1,vf,ef,vh,eh,m,ty,spTry,spWith) = - if verboseOptimizations then dprintf "OptimizeTryCatch\n"; let e1',e1info = OptimizeExpr cenv env e1 // try-catch, so no effect means no exception can be raised, so discard the catch if cenv.settings.EliminateTryCatchAndTryFinally () && not e1info.HasEffect then @@ -2189,10 +2155,10 @@ and OptimizeTryCatch cenv env (e1,vf,ef,vh,eh,m,ty,spTry,spWith) = let ef',efinfo = OptimizeExpr cenv envinner ef let eh',ehinfo = OptimizeExpr cenv envinner eh let info = - { TotalSize = e1info.TotalSize + efinfo.TotalSize+ ehinfo.TotalSize + tryCatchSize; - FunctionSize = e1info.FunctionSize + efinfo.FunctionSize+ ehinfo.FunctionSize + tryCatchSize; - HasEffect = e1info.HasEffect || efinfo.HasEffect || ehinfo.HasEffect; - MightMakeCriticalTailcall = false; + { TotalSize = e1info.TotalSize + efinfo.TotalSize+ ehinfo.TotalSize + tryCatchSize + FunctionSize = e1info.FunctionSize + efinfo.FunctionSize+ ehinfo.FunctionSize + tryCatchSize + HasEffect = e1info.HasEffect || efinfo.HasEffect || ehinfo.HasEffect + MightMakeCriticalTailcall = false Info = UnknownValue } mkTryWith cenv.g (e1',vf,ef',vh,eh',m,ty,spTry,spWith), info @@ -2202,14 +2168,13 @@ and OptimizeTryCatch cenv env (e1,vf,ef,vh,eh,m,ty,spTry,spWith) = //------------------------------------------------------------------------- and OptimizeWhileLoop cenv env (spWhile,marker,e1,e2,m) = - if verboseOptimizations then dprintf "OptimizeWhileLoop\n"; let e1',e1info = OptimizeExpr cenv env e1 let e2',e2info = OptimizeExpr cenv env e2 mkWhile cenv.g (spWhile,marker,e1',e2',m), - { TotalSize = e1info.TotalSize + e2info.TotalSize + forAndWhileLoopSize; - FunctionSize = e1info.FunctionSize + e2info.FunctionSize + forAndWhileLoopSize; - HasEffect = true; (* may not terminate *) - MightMakeCriticalTailcall = false; + { TotalSize = e1info.TotalSize + e2info.TotalSize + forAndWhileLoopSize + FunctionSize = e1info.FunctionSize + e2info.FunctionSize + forAndWhileLoopSize + HasEffect = true (* may not terminate *) + MightMakeCriticalTailcall = false Info = UnknownValue } //------------------------------------------------------------------------- @@ -2250,10 +2215,8 @@ and TryOptimizeVal cenv env (mustInline,valInfoForVal,m) = //If the more specific info didn't reveal an inline then use the value | None -> Some(exprForValRef m v') | ConstExprValue(_size,expr) -> - if verboseOptimizations then dprintf "Inlining constant expression value at %a\n" outputRange m; Some (remarkExpr m (copyExpr cenv.g CloneAllAndMarkExprValsAsCompilerGenerated expr)) | CurriedLambdaValue (_,_,_,expr,_) when mustInline -> - if verboseOptimizations then dprintf "Inlining mustinline-lambda at %a\n" outputRange m; Some (remarkExpr m (copyExpr cenv.g CloneAllAndMarkExprValsAsCompilerGenerated expr)) | TupleValue _ | UnionCaseValue _ | RecdValue _ when mustInline -> failwith "tuple, union and record values cannot be marked 'inline'" | UnknownValue when mustInline -> warning(Error(FSComp.SR.optValueMarkedInlineHasUnexpectedValue(),m)); None @@ -2288,22 +2251,22 @@ and OptimizeVal cenv env expr (v:ValRef,m) = | Expr.TyLambda _ | Expr.Lambda _ -> e, (AddValEqualityInfo cenv.g m v - { Info=valInfoForVal.ValExprInfo; - HasEffect=false; - MightMakeCriticalTailcall = false; - FunctionSize=10; + { Info=valInfoForVal.ValExprInfo + HasEffect=false + MightMakeCriticalTailcall = false + FunctionSize=10 TotalSize=10}) | _ -> let e,einfo = OptimizeExpr cenv env e e,AddValEqualityInfo cenv.g m v einfo | None -> - if v.MustInline then error(Error(FSComp.SR.optFailedToInlineValue(v.DisplayName),m)); + if v.MustInline then error(Error(FSComp.SR.optFailedToInlineValue(v.DisplayName),m)) expr,(AddValEqualityInfo cenv.g m v - { Info=valInfoForVal.ValExprInfo; - HasEffect=false; - MightMakeCriticalTailcall = false; - FunctionSize=1; + { Info=valInfoForVal.ValExprInfo + HasEffect=false + MightMakeCriticalTailcall = false + FunctionSize=1 TotalSize=1}) //------------------------------------------------------------------------- @@ -2312,9 +2275,9 @@ and OptimizeVal cenv env expr (v:ValRef,m) = and StripToNominalTyconRef cenv ty = if isAppTy cenv.g ty then destAppTy cenv.g ty - elif isTupleTy cenv.g ty then - let tyargs = destTupleTy cenv.g ty - mkCompiledTupleTyconRef cenv.g tyargs, tyargs + elif isRefTupleTy cenv.g ty then + let tyargs = destRefTupleTy cenv.g ty + mkCompiledTupleTyconRef cenv.g false tyargs, tyargs else failwith "StripToNominalTyconRef: unreachable" @@ -2380,7 +2343,7 @@ and TryDevirtualizeApplication cenv env (f,tyargs,args,m) = // the target takes a tupled argument, so we need to reorder the arg expressions in the // arg list, and create a tuple of y & comp // push the comparer to the end and box the argument - let args2 = [x; mkTupledNoTypes cenv.g m [mkCoerceExpr(y,cenv.g.obj_ty,m,ty) ; comp]] + let args2 = [x; mkRefTupledNoTypes cenv.g m [mkCoerceExpr(y,cenv.g.obj_ty,m,ty) ; comp]] Some (DevirtualizeApplication cenv env vref ty tyargs args2 m) | _ -> None @@ -2402,16 +2365,16 @@ and TryDevirtualizeApplication cenv env (f,tyargs,args,m) = match tcref.GeneratedHashAndEqualsWithComparerValues, args with | Some (_,_,withcEqualsVal), [comp; x; y] -> // push the comparer to the end and box the argument - let args2 = [x; mkTupledNoTypes cenv.g m [mkCoerceExpr(y,cenv.g.obj_ty,m,ty) ; comp]] + let args2 = [x; mkRefTupledNoTypes cenv.g m [mkCoerceExpr(y,cenv.g.obj_ty,m,ty) ; comp]] Some (DevirtualizeApplication cenv env withcEqualsVal ty tyargs args2 m) | _ -> None // Optimize/analyze calls to LanguagePrimitives.HashCompare.GenericEqualityWithComparer - | Expr.Val(v,_,_),[ty],_ when CanDevirtualizeApplication cenv v cenv.g.generic_equality_per_inner_vref ty args && not(isTupleTy cenv.g ty) -> + | Expr.Val(v,_,_),[ty],_ when CanDevirtualizeApplication cenv v cenv.g.generic_equality_per_inner_vref ty args && not(isRefTupleTy cenv.g ty) -> let tcref,tyargs = StripToNominalTyconRef cenv ty match tcref.GeneratedHashAndEqualsWithComparerValues, args with | Some (_,_,withcEqualsVal), [x; y] -> - let args2 = [x; mkTupledNoTypes cenv.g m [mkCoerceExpr(y,cenv.g.obj_ty,m,ty); (mkCallGetGenericPEREqualityComparer cenv.g m)]] + let args2 = [x; mkRefTupledNoTypes cenv.g m [mkCoerceExpr(y,cenv.g.obj_ty,m,ty); (mkCallGetGenericPEREqualityComparer cenv.g m)]] Some (DevirtualizeApplication cenv env withcEqualsVal ty tyargs args2 m) | _ -> None @@ -2434,8 +2397,8 @@ and TryDevirtualizeApplication cenv env (f,tyargs,args,m) = | _ -> None // Optimize/analyze calls to LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic for tuple types - | Expr.Val(v,_,_),[ty],_ when valRefEq cenv.g v cenv.g.generic_comparison_inner_vref && isTupleTy cenv.g ty -> - let tyargs = destTupleTy cenv.g ty + | Expr.Val(v,_,_),[ty],_ when valRefEq cenv.g v cenv.g.generic_comparison_inner_vref && isRefTupleTy cenv.g ty -> + let tyargs = destRefTupleTy cenv.g ty let vref = match tyargs.Length with | 2 -> Some cenv.g.generic_compare_withc_tuple2_vref @@ -2448,8 +2411,8 @@ and TryDevirtualizeApplication cenv env (f,tyargs,args,m) = | None -> None // Optimize/analyze calls to LanguagePrimitives.HashCompare.GenericHashWithComparerIntrinsic for tuple types - | Expr.Val(v,_,_),[ty],_ when valRefEq cenv.g v cenv.g.generic_hash_inner_vref && isTupleTy cenv.g ty -> - let tyargs = destTupleTy cenv.g ty + | Expr.Val(v,_,_),[ty],_ when valRefEq cenv.g v cenv.g.generic_hash_inner_vref && isRefTupleTy cenv.g ty -> + let tyargs = destRefTupleTy cenv.g ty let vref = match tyargs.Length with | 2 -> Some cenv.g.generic_hash_withc_tuple2_vref @@ -2465,8 +2428,8 @@ and TryDevirtualizeApplication cenv env (f,tyargs,args,m) = // Optimize/analyze calls to LanguagePrimitives.HashCompare.GenericEqualityIntrinsic for tuple types // REVIEW (5537): GenericEqualityIntrinsic implements PER semantics, and we are replacing it to something also // implementing PER semantics. However GenericEqualityIntrinsic should implement ER semantics. - | Expr.Val(v,_,_),[ty],_ when valRefEq cenv.g v cenv.g.generic_equality_per_inner_vref && isTupleTy cenv.g ty -> - let tyargs = destTupleTy cenv.g ty + | Expr.Val(v,_,_),[ty],_ when valRefEq cenv.g v cenv.g.generic_equality_per_inner_vref && isRefTupleTy cenv.g ty -> + let tyargs = destRefTupleTy cenv.g ty let vref = match tyargs.Length with | 2 -> Some cenv.g.generic_equals_withc_tuple2_vref @@ -2479,8 +2442,8 @@ and TryDevirtualizeApplication cenv env (f,tyargs,args,m) = | None -> None // Optimize/analyze calls to LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic for tuple types - | Expr.Val(v,_,_),[ty],_ when valRefEq cenv.g v cenv.g.generic_comparison_withc_inner_vref && isTupleTy cenv.g ty -> - let tyargs = destTupleTy cenv.g ty + | Expr.Val(v,_,_),[ty],_ when valRefEq cenv.g v cenv.g.generic_comparison_withc_inner_vref && isRefTupleTy cenv.g ty -> + let tyargs = destRefTupleTy cenv.g ty let vref = match tyargs.Length with | 2 -> Some cenv.g.generic_compare_withc_tuple2_vref @@ -2493,8 +2456,8 @@ and TryDevirtualizeApplication cenv env (f,tyargs,args,m) = | None -> None // Optimize/analyze calls to LanguagePrimitives.HashCompare.GenericHashWithComparerIntrinsic for tuple types - | Expr.Val(v,_,_),[ty],_ when valRefEq cenv.g v cenv.g.generic_hash_withc_inner_vref && isTupleTy cenv.g ty -> - let tyargs = destTupleTy cenv.g ty + | Expr.Val(v,_,_),[ty],_ when valRefEq cenv.g v cenv.g.generic_hash_withc_inner_vref && isRefTupleTy cenv.g ty -> + let tyargs = destRefTupleTy cenv.g ty let vref = match tyargs.Length with | 2 -> Some cenv.g.generic_hash_withc_tuple2_vref @@ -2507,8 +2470,8 @@ and TryDevirtualizeApplication cenv env (f,tyargs,args,m) = | None -> None // Optimize/analyze calls to LanguagePrimitives.HashCompare.GenericEqualityWithComparerIntrinsic for tuple types - | Expr.Val(v,_,_),[ty],_ when valRefEq cenv.g v cenv.g.generic_equality_withc_inner_vref && isTupleTy cenv.g ty -> - let tyargs = destTupleTy cenv.g ty + | Expr.Val(v,_,_),[ty],_ when valRefEq cenv.g v cenv.g.generic_equality_withc_inner_vref && isRefTupleTy cenv.g ty -> + let tyargs = destRefTupleTy cenv.g ty let vref = match tyargs.Length with | 2 -> Some cenv.g.generic_equals_withc_tuple2_vref @@ -2540,21 +2503,21 @@ and TryDevirtualizeApplication cenv env (f,tyargs,args,m) = // Don't fiddle with 'methodhandleof' calls - just remake the application | Expr.Val(vref,_,_),_,_ when valRefEq cenv.g vref cenv.g.methodhandleof_vref -> Some( MakeApplicationAndBetaReduce cenv.g (exprForValRef m vref,vref.Type,(if isNil tyargs then [] else [tyargs]),args,m), - { TotalSize=1; + { TotalSize=1 FunctionSize=1 - HasEffect=false; - MightMakeCriticalTailcall = false; + HasEffect=false + MightMakeCriticalTailcall = false Info=UnknownValue}) | _ -> None /// Attempt to inline an application of a known value at callsites and TryInlineApplication cenv env (_f0',finfo) (tyargs: TType list,args: Expr list,m) = - if verboseOptimizations then dprintf "Considering inlining app near %a\n" outputRange m; + // Considering inlining app match finfo.Info with | StripLambdaValue (lambdaId,arities,size,f2,f2ty) when - (if verboseOptimizations then dprintf "Considering inlining lambda near %a, size = %d, finfo.HasEffect = %b\n" outputRange m size finfo.HasEffect; + (// Considering inlining lambda cenv.optimizing && cenv.settings.InlineLambdas () && not finfo.HasEffect && @@ -2562,9 +2525,9 @@ and TryInlineApplication cenv env (_f0',finfo) (tyargs: TType list,args: Expr li not (Zset.contains lambdaId env.dontInline) && (// Check the number of argument groups is enough to saturate the lambdas of the target. (if tyargs |> List.filter (fun t -> match t with TType_measure _ -> false | _ -> true) |> isNil then 0 else 1) + args.Length = arities && - (if verboseOptimizations then dprintn "Enough args"; + (// Enough args (if size > cenv.settings.lambdaInlineThreshold + args.Length then - if verboseOptimizations then dprintf "Not inlining lambda near %a because size = %d\n" outputRange m size; + // Not inlining lambda near, size too big false else true)))) -> @@ -2599,18 +2562,18 @@ and TryInlineApplication cenv env (_f0',finfo) (tyargs: TType list,args: Expr li if isBaseCall || isSecureMethod || isValFromLazyExtensions then None else - if verboseOptimizations then dprintf "Inlining lambda near %a\n" outputRange m; - (* ---------- printf "Inlining lambda near %a = %s\n" outputRange m (showL (exprL f2)); (* JAMES: *) ----------*) + // Inlining lambda + (* ---------- printf "Inlining lambda near %a = %s\n" outputRange m (showL (exprL f2)) (* JAMES: *) ----------*) let f2' = remarkExpr m (copyExpr cenv.g CloneAllAndMarkExprValsAsCompilerGenerated f2) - if verboseOptimizations then dprintf "--- TryInlineApplication, optimizing arguments\n"; + // Optimizing arguments after inlining // REVIEW: this is a cheapshot way of optimizing the arg expressions as well without the restriction of recursive // inlining kicking into effect let args' = args |> List.map (fun e -> let e',_einfo = OptimizeExpr cenv env e in e') // Beta reduce. MakeApplicationAndBetaReduce cenv.g does all the hard work. - if verboseOptimizations then dprintf "--- TryInlineApplication, beta reducing \n"; + // Inlining: beta reducing let expr' = MakeApplicationAndBetaReduce cenv.g (f2',f2ty,[tyargs],args',m) - if verboseOptimizations then dprintf "--- TryInlineApplication, reoptimizing\n"; + // Inlining: reoptimizing Some (OptimizeExpr cenv {env with dontInline= Zset.add lambdaId env.dontInline} expr') | _ -> None @@ -2620,18 +2583,17 @@ and TryInlineApplication cenv env (_f0',finfo) (tyargs: TType list,args: Expr li //------------------------------------------------------------------------- and OptimizeApplication cenv env (f0,f0ty,tyargs,args,m) = - if verboseOptimizations then dprintf "--> OptimizeApplication\n"; let f0',finfo = OptimizeExpr cenv env f0 - if verboseOptimizations then dprintf "--- OptimizeApplication, trying to devirtualize\n"; + // trying to devirtualize match TryDevirtualizeApplication cenv env (f0,tyargs,args,m) with | Some res -> - if verboseOptimizations then dprintf "<-- OptimizeApplication, devirtualized\n"; + // devirtualized res | None -> match TryInlineApplication cenv env (f0',finfo) (tyargs,args,m) with | Some res -> - if verboseOptimizations then dprintf "<-- OptimizeApplication, inlined\n"; + // inlined res | None -> @@ -2652,16 +2614,15 @@ and OptimizeApplication cenv env (f0,f0ty,tyargs,args,m) = | _ -> args |> List.map (fun _ -> UnknownValue) let args',arginfos = OptimizeExprsThenReshapeAndConsiderSplits cenv env (List.zip shapes args) - if verboseOptimizations then dprintf "<-- OptimizeApplication, beta reducing\n"; + // beta reducing let expr' = MakeApplicationAndBetaReduce cenv.g (f0',f0ty, [tyargs],args',m) match f0', expr' with | (Expr.Lambda _ | Expr.TyLambda _), Expr.Let _ -> // we beta-reduced, hence reoptimize - if verboseOptimizations then dprintf "<-- OptimizeApplication, beta reduced\n"; OptimizeExpr cenv env expr' | _ -> - if verboseOptimizations then dprintf "<-- OptimizeApplication, regular\n"; + // regular // Determine if this application is a critical tailcall let mayBeCriticalTailcall = @@ -2690,10 +2651,10 @@ 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; + expr', { TotalSize=finfo.TotalSize + AddTotalSizes arginfos + FunctionSize=finfo.FunctionSize + AddFunctionSizes arginfos + HasEffect=true + MightMakeCriticalTailcall = mayBeCriticalTailcall Info=ValueOfExpr expr' } //------------------------------------------------------------------------- @@ -2701,7 +2662,6 @@ and OptimizeApplication cenv env (f0,f0ty,tyargs,args,m) = //------------------------------------------------------------------------- and OptimizeLambdas (vspec: Val option) cenv env topValInfo e ety = - if verboseOptimizations then dprintf "OptimizeLambdas, #argsl = %d, %a\n" topValInfo.NumCurriedArgs outputRange (e.Range) ; match e with | Expr.Lambda (lambdaId,_,_,_,_,m,_) | Expr.TyLambda(lambdaId,_,_,m,_) -> @@ -2718,8 +2678,6 @@ and OptimizeLambdas (vspec: Val option) cenv env topValInfo e ety = let arities = vsl.Length let arities = if isNil tps then arities else 1+arities let bsize = bodyinfo.TotalSize - if verboseOptimizations then dprintf "lambda @ %a, bsize = %d\n" outputRange m bsize; - /// Set the flag on the value indicating that direct calls can avoid a tailcall (which are expensive on .NET x86) /// MightMakeCriticalTailcall is true whenever the body of the method may itself do a useful tailcall, e.g. has @@ -2761,11 +2719,11 @@ and OptimizeLambdas (vspec: Val option) cenv env topValInfo e ety = 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 *) - FunctionSize=1; - HasEffect=false; - MightMakeCriticalTailcall = false; - Info= valu; } + expr', { TotalSize=bsize + (if isTopLevel then methodDefnTotalSize else closureTotalSize) (* estimate size of new syntactic closure - expensive, in contrast to a method *) + FunctionSize=1 + HasEffect=false + MightMakeCriticalTailcall = false + Info= valu } | _ -> OptimizeExpr cenv env e @@ -2798,8 +2756,8 @@ and OptimizeDecisionTreeTargets cenv env m targets = and ReshapeExpr cenv (shape,e) = match shape,e with | TupleValue(subshapes), Expr.Val(_vref,_vFlags,m) -> - let tinst = destTupleTy cenv.g (tyOfExpr cenv.g e) - mkTupled cenv.g m (List.mapi (fun i subshape -> ReshapeExpr cenv (subshape,mkTupleFieldGet(e,tinst,i,m))) (Array.toList subshapes)) tinst + 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 | _ -> e @@ -2818,6 +2776,7 @@ and ComputeSplitToMethodCondition flag threshold cenv env (e,einfo) = // REVIEW: This should only apply to methods that actually make self-tailcalls (tested further below). // Old comment "don't mess with taking guaranteed tailcalls if used with --no-tailcalls!" cenv.emitTailcalls && + not env.inLoop && einfo.FunctionSize >= threshold && // We can only split an expression out as a method if certain conditions are met. @@ -2860,17 +2819,16 @@ and ConsiderSplitToMethod flag threshold cenv env (e,einfo) = //------------------------------------------------------------------------- and OptimizeMatch cenv env (spMatch,exprm,dtree,targets,m, ty) = - if verboseOptimizations then dprintf "OptimizeMatch\n"; // REVIEW: consider collecting, merging and using information flowing through each line of the decision tree to each target let dtree',dinfo = OptimizeDecisionTree cenv env m dtree let targets',tinfos = OptimizeDecisionTreeTargets cenv env m targets RebuildOptimizedMatch (spMatch,exprm,m,ty,dtree',targets',dinfo,tinfos) and CombineMatchInfos dinfo tinfo = - { TotalSize = dinfo.TotalSize + tinfo.TotalSize; - FunctionSize = dinfo.FunctionSize + tinfo.FunctionSize; - HasEffect = dinfo.HasEffect || tinfo.HasEffect; - MightMakeCriticalTailcall=tinfo.MightMakeCriticalTailcall; // discard tailcall info from decision tree since it's not in tailcall position + { TotalSize = dinfo.TotalSize + tinfo.TotalSize + FunctionSize = dinfo.FunctionSize + tinfo.FunctionSize + HasEffect = dinfo.HasEffect || tinfo.HasEffect + MightMakeCriticalTailcall=tinfo.MightMakeCriticalTailcall // discard tailcall info from decision tree since it's not in tailcall position Info= UnknownValue } and RebuildOptimizedMatch (spMatch,exprm,m,ty,dtree,tgs,dinfo,tinfos) = @@ -2884,17 +2842,16 @@ and RebuildOptimizedMatch (spMatch,exprm,m,ty,dtree,tgs,dinfo,tinfos) = //------------------------------------------------------------------------- and OptimizeDecisionTreeTarget cenv env _m (TTarget(vs,e,spTarget)) = - if verboseOptimizations then dprintf "OptimizeDecisionTreeTarget\n"; (* REVIEW: this is where we should be using information collected for each target *) let env = BindInternalValsToUnknown cenv vs env let e',einfo = OptimizeExpr cenv env e let e',einfo = ConsiderSplitToMethod cenv.settings.abstractBigTargets cenv.settings.bigTargetSize cenv env (e',einfo) let evalue' = AbstractExprInfoByVars (FlatList.toList vs,[]) einfo.Info TTarget(vs,e',spTarget), - { TotalSize=einfo.TotalSize; - FunctionSize=einfo.FunctionSize; - HasEffect=einfo.HasEffect; - MightMakeCriticalTailcall = einfo.MightMakeCriticalTailcall; + { TotalSize=einfo.TotalSize + FunctionSize=einfo.FunctionSize + HasEffect=einfo.HasEffect + MightMakeCriticalTailcall = einfo.MightMakeCriticalTailcall Info=evalue' } //------------------------------------------------------------------------- @@ -2948,7 +2905,6 @@ and TryOptimizeDecisionTreeTest cenv test vinfo = /// Optimize/analyze a switch construct from pattern matching and OptimizeSwitch cenv env (e,cases,dflt,m) = - if verboseOptimizations then dprintf "OptimizeSwitch\n"; let e', einfo = OptimizeExpr cenv env e let cases,dflt = @@ -2977,7 +2933,6 @@ and OptimizeSwitchFallback cenv env (e', einfo, cases,dflt,m) = and OptimizeBinding cenv isRec env (TBind(v,e,spBind)) = try - if verboseOptimizations then dprintf "OptimizeBinding\n"; // The aim here is to stop method splitting for direct-self-tailcalls. We do more than that: if an expression // occurs in the body of recursively defined values RVS, then we refuse to split @@ -3000,12 +2955,12 @@ and OptimizeBinding cenv isRec env (TBind(v,e,spBind)) = match ivalue with | CurriedLambdaValue (_, arities, size, body,_) -> if size > (cenv.settings.lambdaInlineThreshold + arities + 2) then - if verboseOptimizations then dprintf "Discarding lambda for binding %s, size = %d, m = %a\n" v.LogicalName size outputRange body.Range; + // Discarding lambda for binding v.LogicalName UnknownValue (* trim large *) else let fvs = freeInExpr CollectLocals body if fvs.UsesMethodLocalConstructs then - if verboseOptimizations then dprintf "Discarding lambda for binding %s because uses protected members, m = %a\n" v.LogicalName outputRange body.Range; + // Discarding lambda for bindingbecause uses protected members UnknownValue (* trim protected *) else ivalue @@ -3066,15 +3021,12 @@ and OptimizeBinding cenv isRec env (TBind(v,e,spBind)) = then {einfo with Info=UnknownValue} else einfo if v.MustInline && IsPartialExprVal einfo.Info then - errorR(InternalError("the mustinline value '"+v.LogicalName+"' was not inferred to have a known value",v.Range)); -#if DEBUG - if verboseOptimizations then dprintf "val %s gets opt info %s\n" (showL(valL v)) (showL(exprValueInfoL cenv.g einfo.Info)); -#endif + errorR(InternalError("the mustinline value '"+v.LogicalName+"' was not inferred to have a known value",v.Range)) let env = BindInternalLocalVal cenv v (mkValInfo einfo v) env (TBind(v,repr',spBind), einfo), env with exn -> - errorRecovery exn v.Range; + errorRecovery exn v.Range raise (ReportedError (Some exn)) and OptimizeBindings cenv isRec env xs = FlatList.mapFold (OptimizeBinding cenv isRec) env xs @@ -3107,7 +3059,7 @@ and OptimizeModuleExpr cenv env x = // Check the thing is not compiled as a static field or property, since reflected definitions and other reflective stuff might need it not (IsCompiledAsStaticProperty cenv.g bind.Var)) - if verboseOptimizations then dead |> List.iter (fun (bind,_) -> dprintf "dead, hidden, buried, gone: %s\n" (showL (vspecAtBindL bind.Var))); + let deadSet = Zset.addList (dead |> List.map (fun (bind,_) -> bind.Var)) (Zset.empty valOrder) // Eliminate dead private bindings from a module type by mutation. Note that the optimizer doesn't @@ -3125,7 +3077,7 @@ and OptimizeModuleExpr cenv env x = vals= (mtyp.AllValsAndMembers |> QueueList.filter (Zset.memberOf deadSet >> not)), entities= mtyp.AllEntities) mtyp.ModuleAndNamespaceDefinitions |> List.iter (fun mspec -> elimModSpec mspec) - mty; + mty and elimModSpec (mspec:ModuleOrNamespace) = let mtyp = elimModTy mspec.ModuleOrNamespaceType mspec.Data.entity_modul_contents <- notlazy mtyp @@ -3172,7 +3124,7 @@ and OptimizeModuleDef cenv (env,bindInfosColl) x = (* 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) | TMAbstract(mexpr) -> @@ -3183,7 +3135,7 @@ and OptimizeModuleDef cenv (env,bindInfosColl) x = let ((bind',binfo) as bindInfo),env = OptimizeBinding cenv false env bind (* REVIEW: Eliminate unused let bindings from modules *) (TMDefLet(bind',m), - notlazy { ValInfos=ValInfos [mkValBind bind (mkValInfo binfo bind.Var)]; + notlazy { ValInfos=ValInfos [mkValBind bind (mkValInfo binfo bind.Var)] ModuleOrNamespaceInfos = NameMap.ofList []}), (env ,([bindInfo]::bindInfosColl)) @@ -3210,7 +3162,6 @@ and OptimizeModuleBinding cenv (env,bindInfosColl) x = (env,bindInfosColl) and OptimizeModuleDefs cenv (env,bindInfosColl) defs = - if verboseOptimizations then dprintf "OptimizeModuleDefs\n"; let defs,(env,bindInfosColl) = List.mapFold (OptimizeModuleDef cenv) (env,bindInfosColl) defs let defs,minfos = List.unzip defs (defs,UnionOptimizationInfos minfos),(env,bindInfosColl) @@ -3242,17 +3193,18 @@ and OptimizeImplFileInternal cenv env isIncrementalFragment hidden (TImplFile(qn let OptimizeImplFile(settings,ccu,tcGlobals,tcVal, importMap,optEnv,isIncrementalFragment,emitTailcalls,hidden,mimpls) = let cenv = - { settings=settings; - scope=ccu; + { settings=settings + scope=ccu TcVal = tcVal - g=tcGlobals; - amap=importMap; - optimizing=true; - localInternalVals=new System.Collections.Generic.Dictionary(10000); - emitTailcalls=emitTailcalls; + g=tcGlobals + amap=importMap + optimizing=true + localInternalVals=Dictionary(10000) + emitTailcalls=emitTailcalls casApplied=new Dictionary() } - OptimizeImplFileInternal cenv optEnv isIncrementalFragment hidden mimpls - + let (optEnvNew,_,_,_ as results) = OptimizeImplFileInternal cenv optEnv isIncrementalFragment hidden mimpls + let optimizeDuringCodeGen expr = OptimizeExpr cenv optEnvNew expr |> fst + results, optimizeDuringCodeGen //------------------------------------------------------------------------- // Pickle to stable format for cross-module optimization data diff --git a/src/fsharp/Optimizer.fsi b/src/fsharp/Optimizer.fsi index 34891f6a815..439c400481c 100644 --- a/src/fsharp/Optimizer.fsi +++ b/src/fsharp/Optimizer.fsi @@ -44,7 +44,7 @@ type IncrementalOptimizationEnv = val internal BindCcu : CcuThunk -> CcuOptimizationInfo -> IncrementalOptimizationEnv -> TcGlobals -> IncrementalOptimizationEnv /// Optimize one implementation file in the given environment -val internal OptimizeImplFile : OptimizationSettings * CcuThunk * TcGlobals * ConstraintSolver.TcValF * Import.ImportMap * IncrementalOptimizationEnv * isIncrementalFragment: bool * emitTaicalls: bool * SignatureHidingInfo * TypedImplFile -> IncrementalOptimizationEnv * TypedImplFile * ImplFileOptimizationInfo * SignatureHidingInfo +val internal OptimizeImplFile : OptimizationSettings * CcuThunk * TcGlobals * ConstraintSolver.TcValF * Import.ImportMap * IncrementalOptimizationEnv * isIncrementalFragment: bool * emitTaicalls: bool * SignatureHidingInfo * TypedImplFile -> (IncrementalOptimizationEnv * TypedImplFile * ImplFileOptimizationInfo * SignatureHidingInfo) * (Expr -> Expr) #if DEBUG /// Displaying optimization data diff --git a/src/fsharp/PatternMatchCompilation.fs b/src/fsharp/PatternMatchCompilation.fs index 6bff652145d..90e00637fb0 100644 --- a/src/fsharp/PatternMatchCompilation.fs +++ b/src/fsharp/PatternMatchCompilation.fs @@ -42,7 +42,7 @@ type Pattern = | TPat_query of (Expr * TType list * (ValRef * TypeInst) option * int * ActivePatternInfo) * Pattern * range | TPat_unioncase of UnionCaseRef * TypeInst * Pattern list * range | TPat_exnconstr of TyconRef * Pattern list * range - | TPat_tuple of Pattern list * TType list * range + | TPat_tuple of TupInfo * Pattern list * TType list * range | TPat_array of Pattern list * TType * range | TPat_recd of TyconRef * TypeInst * Pattern list * range | TPat_range of char * char * range @@ -58,7 +58,7 @@ type Pattern = | TPat_query(_,_,m) -> m | TPat_unioncase(_,_,_,m) -> m | TPat_exnconstr(_,_,m) -> m - | TPat_tuple(_,_,m) -> m + | TPat_tuple(_,_,_,m) -> m | TPat_array(_,_,m) -> m | TPat_recd(_,_,_,m) -> m | TPat_range(_,_,m) -> m @@ -181,7 +181,7 @@ let RefuteDiscrimSet g m path discrims = | PathConj (p,_j) -> go p tm | PathTuple (p,tys,j) -> - go p (fun _ -> mkTupled g m (mkOneKnown tm j tys) tys) + go p (fun _ -> mkRefTupled g m (mkOneKnown tm j tys) tys) | PathRecd (p,tcref,tinst,j) -> let flds = tcref |> actualTysOfInstanceRecdFields (mkTyconRefInst tcref tinst) |> mkOneKnown tm j go p (fun _ -> Expr.Op(TOp.Recd(RecdExpr, tcref),tinst, flds,m)) @@ -310,7 +310,7 @@ let ShowCounterExample g denv m refuted = match refutations with | [] -> raise CannotRefute | h :: t -> - if verbose then dprintf "h = %s\n" (Layout.showL (exprL h)); + if verbose then dprintf "h = %s\n" (Layout.showL (exprL h)) List.fold (CombineRefutations g) h t let text = Layout.showL (NicePrint.dataExprL denv counterExample) let failingWhenClause = refuted |> List.exists (function RefutedWhenClause -> true | _ -> false) @@ -320,7 +320,7 @@ let ShowCounterExample g denv m refuted = | CannotRefute -> None | e -> - warning(InternalError(sprintf "" (e.ToString()),m)); + warning(InternalError(sprintf "" (e.ToString()),m)) None //--------------------------------------------------------------------------- @@ -494,7 +494,7 @@ let (|ListEmptyDiscrim|_|) g = function /// switches, string switches and floating point switches are treated in the /// same way as Test.IsInst. let rec BuildSwitch inpExprOpt g expr edges dflt m = - if verbose then dprintf "--> BuildSwitch@%a, #edges = %A, dflt.IsSome = %A\n" outputRange m (List.length edges) (Option.isSome dflt); + if verbose then dprintf "--> BuildSwitch@%a, #edges = %A, dflt.IsSome = %A\n" outputRange m (List.length edges) (Option.isSome dflt) match edges,dflt with | [], None -> failwith "internal error: no edges and no default" | [], Some dflt -> dflt (* NOTE: first time around, edges<>[] *) @@ -562,7 +562,6 @@ let rec BuildSwitch inpExprOpt g expr edges dflt m = | _ -> failwith "illtyped term during pattern compilation" let edges' = List.sortWith edgeCompare edges let rec compactify curr edges = - if debug then dprintf "--> compactify@%a\n" outputRange m; match curr,edges with | None,[] -> [] | Some last,[] -> [List.rev last] @@ -592,7 +591,7 @@ let rec BuildSwitch inpExprOpt g expr edges dflt m = // For a total pattern match, run the active pattern, bind the result and // recursively build a switch in the choice type | (TCase(Test.ActivePatternCase _,_)::_), _ -> - error(InternalError("Test.ActivePatternCase should have been eliminated",m)); + error(InternalError("Test.ActivePatternCase should have been eliminated",m)) // For a complete match, optimize one test to be the default | (TCase(_,tree)::rest), None -> TDSwitch (expr,rest,Some tree,m) @@ -602,12 +601,11 @@ let rec BuildSwitch inpExprOpt g expr edges dflt m = #if DEBUG let rec layoutPat pat = - if debug then dprintf "--> layoutPat\n"; match pat with | TPat_query (_,pat,_) -> Layout.(--) (Layout.wordL "query") (layoutPat pat) | TPat_wild _ -> Layout.wordL "wild" | TPat_as _ -> Layout.wordL "var" - | TPat_tuple (pats, _, _) + | TPat_tuple (_, pats, _, _) | TPat_array (pats, _, _) -> Layout.bracketL (Layout.tupleL (List.map layoutPat pats)) | _ -> Layout.wordL "?" @@ -633,7 +631,7 @@ let rec isPatternPartial p = | TPat_wild _ -> false | TPat_as (p,_,_) -> isPatternPartial p | TPat_disjs (ps,_) | TPat_conjs(ps,_) - | TPat_tuple (ps,_,_) | TPat_exnconstr(_,ps,_) + | TPat_tuple (_,ps,_,_) | TPat_exnconstr(_,ps,_) | TPat_array (ps,_,_) | TPat_unioncase (_,_,ps,_) | TPat_recd (_,_,ps,_) -> List.exists isPatternPartial ps | TPat_range _ -> false @@ -648,7 +646,7 @@ let rec erasePartialPatterns inpp = | TPat_as (p,x,m) -> TPat_as (erasePartialPatterns p,x,m) | TPat_disjs (ps,m) -> TPat_disjs(erasePartials ps, m) | TPat_conjs(ps,m) -> TPat_conjs(erasePartials ps, m) - | TPat_tuple (ps,x,m) -> TPat_tuple(erasePartials ps, x, m) + | TPat_tuple (tupInfo,ps,x,m) -> TPat_tuple(tupInfo,erasePartials ps, x, m) | TPat_exnconstr(x,ps,m) -> TPat_exnconstr(x,erasePartials ps,m) | TPat_array (ps,x,m) -> TPat_array (erasePartials ps,x,m) | TPat_unioncase (x,y,ps,m) -> TPat_unioncase (x,y,erasePartials ps,m) @@ -696,9 +694,9 @@ let CompilePatternBasic if warnOnIncomplete then match actionOnFailure with | ThrowIncompleteMatchException -> - warning (MatchIncomplete (false,ShowCounterExample g denv matchm refuted, matchm)); + warning (MatchIncomplete (false,ShowCounterExample g denv matchm refuted, matchm)) | IgnoreWithWarning -> - warning (MatchIncomplete (true,ShowCounterExample g denv matchm refuted, matchm)); + warning (MatchIncomplete (true,ShowCounterExample g denv matchm refuted, matchm)) | _ -> () @@ -722,8 +720,8 @@ let CompilePatternBasic | ThrowIncompleteMatchException -> mkThrow matchm resultTy (mkExnExpr(mk_MFCore_tcref g.fslibCcu "MatchFailureException", - [ mkString g matchm matchm.FileName; - mkInt g matchm matchm.StartLine; + [ mkString g matchm matchm.FileName + mkInt g matchm matchm.StartLine mkInt g matchm matchm.StartColumn],matchm)) | IgnoreWithWarning -> @@ -737,9 +735,9 @@ let CompilePatternBasic // will run the handler and hit the sequence point there. // That sequence point will have the pattern variables bound, which is exactly what we want. let tg = TTarget(FlatList.empty,throwExpr,SuppressSequencePointAtTarget ) - mbuilder.AddTarget tg |> ignore; + mbuilder.AddTarget tg |> ignore let clause = TClause(TPat_wild matchm,None,tg,matchm) - incompleteMatchClauseOnce := Some(clause); + incompleteMatchClauseOnce := Some(clause) clause | Some c -> c @@ -769,7 +767,6 @@ let CompilePatternBasic // The main recursive loop of the pattern match compiler let rec InvestigateFrontiers refuted frontiers = - if debug then dprintf "frontiers = %s\n" (String.concat ";" (List.map (getRuleIndex >> string) frontiers)); match frontiers with | [] -> failwith "CompilePattern:compile - empty clauses: at least the final clause should always succeed" | (Frontier (i,active,valMap)) :: rest -> @@ -779,7 +776,6 @@ let CompilePatternBasic | [] -> CompileSuccessPointAndGuard i refuted valMap rest | _ -> - if debug then dprintf "Investigating based on rule %d, #active = %d\n" i (List.length active); (* Otherwise choose a point (i.e. a path) to investigate. *) let (Active(path,subexpr,pat)) = ChooseInvestigationPointLeftToRight frontiers match pat with @@ -789,7 +785,6 @@ let CompilePatternBasic // Leaving the ones where we have real work to do | _ -> - if debug then dprintf "chooseSimultaneousEdgeSet\n"; let simulSetOfEdgeDiscrims,fallthroughPathFrontiers = ChooseSimultaneousEdges frontiers path let inpExprOpt, bindOpt = ChoosePreBinder simulSetOfEdgeDiscrims subexpr @@ -797,13 +792,7 @@ let CompilePatternBasic // For each case, recursively compile the residue decision trees that result if that case successfully matches let simulSetOfCases, _ = CompileSimultaneousSet frontiers path refuted subexpr simulSetOfEdgeDiscrims inpExprOpt - assert (nonNil(simulSetOfCases)); - - if debug then - dprintf "#fallthroughPathFrontiers = %d, #simulSetOfEdgeDiscrims = %d\n" (List.length fallthroughPathFrontiers) (List.length simulSetOfEdgeDiscrims); - dprintf "Making cases for each discriminator...\n"; - dprintf "#edges = %d\n" (List.length simulSetOfCases); - dprintf "Checking for completeness of edge set from earlier investigation of rule %d, #active = %d\n" i (List.length active); + assert (nonNil(simulSetOfCases)) // Work out what the default/fall-through tree looks like, is any // Check if match is complete, if so optimize the default case away. @@ -822,7 +811,6 @@ let CompilePatternBasic and CompileSuccessPointAndGuard i refuted valMap rest = - if debug then dprintf "generating success node for rule %d\n" i; let vs2 = GetValsBoundByClause i refuted let es2 = vs2 |> FlatList.map (fun v -> @@ -832,7 +820,6 @@ let CompilePatternBasic let rhs' = TDSuccess(es2, i) match GetWhenGuardOfClause i refuted with | Some whenExpr -> - if debug then dprintf "generating success node for rule %d, with 'when' clause\n" i; let m = whenExpr.Range @@ -856,16 +843,14 @@ let CompilePatternBasic /// Record the rule numbers so we know which rule the TPat_query cam from, so that when we project through /// the frontier we only project the right rule. and ChooseSimultaneousEdges frontiers path = - if debug then dprintf "chooseSimultaneousEdgeSet\n"; frontiers |> chooseSimultaneousEdgeSet None (fun prevOpt (Frontier (i',active',_)) -> if isMemOfActives path active' then let p = lookupActive path active' |> snd match getDiscrimOfPattern p with | Some discrim -> - if (match prevOpt with None -> true | Some (EdgeDiscrim(_,discrimPrev,_)) -> discrimsHaveSameSimultaneousClass g discrim discrimPrev) then ( - if debug then dprintf "taking rule %d\n" i'; + if (match prevOpt with None -> true | Some (EdgeDiscrim(_,discrimPrev,_)) -> discrimsHaveSameSimultaneousClass g discrim discrimPrev) then Some (EdgeDiscrim(i',discrim,p.Range)),true - ) else + else None,false | None -> @@ -892,7 +877,7 @@ let CompilePatternBasic let v,vexp = mkCompGenLocal m "typeTestResult" tgty if topv.IsMemberOrModuleBinding then - AdjustValToTopVal v topv.ActualParent ValReprInfo.emptyValData; + AdjustValToTopVal v topv.ActualParent ValReprInfo.emptyValData let argexp = GetSubExprOfInput subexpr let appexp = mkIsInst tgty argexp matchm Some(vexp),Some(mkInvisibleBind v appexp) @@ -907,7 +892,7 @@ let CompilePatternBasic | None -> Some addrexp, None | Some (v,e) -> if topv.IsMemberOrModuleBinding then - AdjustValToTopVal v topv.ActualParent ValReprInfo.emptyValData; + AdjustValToTopVal v topv.ActualParent ValReprInfo.emptyValData Some addrexp, Some (mkInvisibleBind v e) @@ -923,7 +908,7 @@ let CompilePatternBasic let ucaseTy = (mkProvenUnionCaseTy g.cons_ucref tinst) let v,vexp = mkCompGenLocal m "unionTestResult" ucaseTy if topv.IsMemberOrModuleBinding then - AdjustValToTopVal v topv.ActualParent ValReprInfo.emptyValData; + AdjustValToTopVal v topv.ActualParent ValReprInfo.emptyValData let argexp = GetSubExprOfInput subexpr let appexp = mkIsInst ucaseTy argexp matchm Some vexp,Some (mkInvisibleBind v appexp) @@ -931,13 +916,12 @@ let CompilePatternBasic // Active pattern matches: create a variable to hold the results of executing the active pattern. | (EdgeDiscrim(_,(Test.ActivePatternCase(pexp,resTys,_,_,apinfo)),m) :: _) -> - if debug then dprintf "Building result var for active pattern...\n"; - if nonNil topgtvs then error(InternalError("Unexpected generalized type variables when compiling an active pattern",m)); + if nonNil topgtvs then error(InternalError("Unexpected generalized type variables when compiling an active pattern",m)) let rty = apinfo.ResultType g m resTys let v,vexp = mkCompGenLocal m "activePatternResult" rty if topv.IsMemberOrModuleBinding then - AdjustValToTopVal v topv.ActualParent ValReprInfo.emptyValData; + AdjustValToTopVal v topv.ActualParent ValReprInfo.emptyValData let argexp = GetSubExprOfInput subexpr let appexp = mkApps g ((pexp,tyOfExpr g pexp), [], [argexp],m) @@ -990,7 +974,7 @@ let CompilePatternBasic let aparity = apinfo.Names.Length let total = apinfo.IsTotal if not total && aparity > 1 then - error(Error(FSComp.SR.patcPartialActivePatternsGenerateOneResult(),m)); + error(Error(FSComp.SR.patcPartialActivePatternsGenerateOneResult(),m)) if not total then Test.UnionCase(mkSomeCase g,resTys) elif aparity <= 1 then Test.Const(Const.Unit) @@ -1033,7 +1017,6 @@ let CompilePatternBasic (* Add to the refuted set *) let refuted = (RefutedInvestigation(path,simulSetOfDiscrims)) :: refuted - if debug then dprintf "Edge set was incomplete. Compiling remaining cases\n"; match fallthroughPathFrontiers with | [] -> None @@ -1043,11 +1026,9 @@ let CompilePatternBasic // Build a new frontier that represents the result of a successful investigation // at rule point (i',discrim,path) and GenerateNewFrontiersAfterSucccessfulInvestigation inpExprOpt resPostBindOpt (Investigation(i',discrim,path)) (Frontier (i, active,valMap) as frontier) = - if debug then dprintf "projecting success of investigation encompassing rule %d through rule %d \n" i' i; if (isMemOfActives path active) then let (SubExpr(accessf,ve)),pat = lookupActive path active - if debug then dprintf "active...\n"; let mkSubFrontiers path accessf' active' argpats pathBuilder = let mkSubActive j p = @@ -1192,8 +1173,8 @@ let CompilePatternBasic | TPat_as(p',pbind,m) -> let (v,subExpr') = BindSubExprOfInput g amap topgtvs pbind m subExpr BindProjectionPattern (Active(path,subExpr,p')) (accActive,accValMap.Add v subExpr' ) - | TPat_tuple(ps,tyargs,_m) -> - let accessf' j tpinst exprIn = mkTupleFieldGet(accessf tpinst exprIn,instTypes tpinst tyargs,j,exprm) + | TPat_tuple(tupInfo,ps,tyargs,_m) -> + let accessf' j tpinst subExpr' = mkTupleFieldGet g (tupInfo,accessf tpinst subExpr',instTypes tpinst tyargs,j,exprm) let pathBuilder path j = PathTuple(path,tyargs,j) let newActives = List.mapi (mkSubActive pathBuilder accessf') ps BindProjectionPatterns newActives s @@ -1273,7 +1254,6 @@ let rec CompilePattern g denv amap exprm matchm warnOnUnused actionOnFailure (t let warnOnIncomplete = false let rec atMostOnePartialAtATime clauses = - if debug then dprintf "atMostOnePartialAtATime: #clauses = %A\n" clauses; match List.takeUntil isPartialOrWhenClause clauses with | l,[] -> CompilePatternBasic g denv amap exprm matchm warnOnUnused warnOnIncomplete actionOnFailure (topv,topgtvs) l inputTy resultTy @@ -1282,7 +1262,6 @@ let rec CompilePattern g denv amap exprm matchm warnOnUnused actionOnFailure (t doGroupWithAtMostOnePartial (l @ [h]) t and doGroupWithAtMostOnePartial group rest = - if debug then dprintf "doGroupWithAtMostOnePartial: #group = %A\n" group; // Compile the remaining clauses let dtree,targets = atMostOnePartialAtATime rest diff --git a/src/fsharp/PatternMatchCompilation.fsi b/src/fsharp/PatternMatchCompilation.fsi index ec6073435fb..b8f7fc3849a 100644 --- a/src/fsharp/PatternMatchCompilation.fsi +++ b/src/fsharp/PatternMatchCompilation.fsi @@ -32,7 +32,7 @@ type Pattern = | TPat_query of (Expr * TType list * (ValRef * TypeInst) option * int * PrettyNaming.ActivePatternInfo) * Pattern * range | TPat_unioncase of UnionCaseRef * TypeInst * Pattern list * range | TPat_exnconstr of TyconRef * Pattern list * range - | TPat_tuple of Pattern list * TType list * range + | TPat_tuple of TupInfo * Pattern list * TType list * range | TPat_array of Pattern list * TType * range | TPat_recd of TyconRef * TypeInst * Pattern list * range | TPat_range of char * char * range diff --git a/src/fsharp/PostInferenceChecks.fs b/src/fsharp/PostInferenceChecks.fs index 8b5987bb899..1bb13f613ad 100644 --- a/src/fsharp/PostInferenceChecks.fs +++ b/src/fsharp/PostInferenceChecks.fs @@ -132,6 +132,7 @@ let testHookMemberBody (membInfo: ValMemberInfo) (expr:Expr) = type env = { boundTyparNames: string list boundTypars: TyparMap + argVals: ValMap /// "module remap info", i.e. hiding information down the signature chain, used to compute what's hidden by a signature sigToImplRemapInfo: (Remap * SignatureHidingInfo) list /// Constructor limited - are we in the prelude of a constructor, prior to object initialization @@ -156,6 +157,11 @@ let BindTypars g env (tps:Typar list) = tp.Data.typar_id <- ident (nm,tp.Range)) List.fold BindTypar env tps +/// Set the set of vals which are arguments in the active lambda. We are allowed to return +/// byref arguments as byref returns. +let SetArgVals env (vs: Val list) = + { env with argVals = ValMap.OfList (List.map (fun v -> (v,())) vs) } + type cenv = { boundVals: Dictionary // really a hash set mutable potentialUnboundUsesOfVals: StampMap @@ -195,7 +201,7 @@ let BindVals cenv vs = List.iter (BindVal cenv) vs // approx walk of type //-------------------------------------------------------------------------- -let rec CheckTypeDeep ((visitTyp,visitTyconRefOpt,visitByrefsOfByrefsOpt,visitTraitSolutionOpt, visitTyparOpt) as f) g env typ = +let rec CheckTypeDeep ((visitTyp,visitTyconRefOpt,visitAppTyOpt,visitTraitSolutionOpt, visitTyparOpt) as f) g env typ = // We iterate the _solved_ constraints as well, to pick up any record of trait constraint solutions // This means we walk _all_ the constraints _everywhere_ in a type, including // those attached to _solved_ type variables. This is used by PostTypeCheckSemanticChecks to detect uses of @@ -229,14 +235,14 @@ let rec CheckTypeDeep ((visitTyp,visitTyconRefOpt,visitByrefsOfByrefsOpt,visitTr | Some visitTyconRef -> visitTyconRef tcref | None -> () CheckTypesDeep f g env tinst - match visitByrefsOfByrefsOpt with - | Some visitByrefsOfByrefs -> visitByrefsOfByrefs (tcref, tinst) + match visitAppTyOpt with + | Some visitAppTy -> visitAppTy (tcref, tinst) | None -> () | TType_ucase (_,tinst) -> CheckTypesDeep f g env tinst - | TType_tuple typs -> CheckTypesDeep f g env typs - | TType_fun (s,t) -> CheckTypeDeep f g env s; CheckTypeDeep f g env t - | TType_var tp -> + | TType_tuple (_,typs) -> CheckTypesDeep f g env typs + | TType_fun (s,t) -> CheckTypeDeep f g env s; CheckTypeDeep f g env t + | TType_var tp -> if not tp.IsSolved then match visitTyparOpt with | None -> () @@ -273,7 +279,7 @@ and CheckTraitInfoDeep ((_,_,_,visitTraitSolutionOpt,_) as f) g env (TTrait(typs //-------------------------------------------------------------------------- let CheckForByrefLikeType cenv env typ check = - CheckTypeDeep (ignore, Some (fun tcref -> if isByrefLikeTyconRef cenv.g tcref then check()), None, None, None) cenv.g env typ + CheckTypeDeep (ignore, Some (fun tcref -> if isByrefLikeTyconRef cenv.g tcref then check()), None, None, None) cenv.g env typ //-------------------------------------------------------------------------- @@ -338,8 +344,8 @@ let CheckTypeForAccess (cenv:cenv) env objName valAcc m ty = if cenv.reportErrors then let visitType ty = - // We deliberately only check the fully stripped type for accessibility, because references to private type abbreviations are - // permitted + // We deliberately only check the fully stripped type for accessibility, + // because references to private type abbreviations are permitted match tryDestAppTy cenv.g ty with | None -> () | Some tcref -> @@ -348,6 +354,24 @@ let CheckTypeForAccess (cenv:cenv) env objName valAcc m ty = if isLessAccessible tyconAcc valAcc then errorR(Error(FSComp.SR.chkTypeLessAccessibleThanType(tcref.DisplayName, (objName())), m)) + CheckTypeDeep (visitType, None, None, None, None) cenv.g env ty + +let WarnOnWrongTypeForAccess (cenv:cenv) env objName valAcc m ty = + if cenv.reportErrors then + + let visitType ty = + // We deliberately only check the fully stripped type for accessibility, + // because references to private type abbreviations are permitted + match tryDestAppTy cenv.g ty with + | None -> () + | Some tcref -> + let thisCompPath = compPathOfCcu cenv.viewCcu + let tyconAcc = tcref.Accessibility |> AccessInternalsVisibleToAsInternal thisCompPath cenv.internalsVisibleToPaths + if isLessAccessible tyconAcc valAcc then + let errorText = FSComp.SR.chkTypeLessAccessibleThanType(tcref.DisplayName, (objName())) |> snd + let warningText = errorText + System.Environment.NewLine + FSComp.SR.tcTypeAbbreviationsCheckedAtCompileTime() + warning(AttributeChecking.ObsoleteWarning(warningText, m)) + CheckTypeDeep (visitType, None, None, None, None) cenv.g env ty //-------------------------------------------------------------------------- @@ -371,7 +395,7 @@ let CheckType permitByrefs (cenv:cenv) env m ty = errorR(Error(FSComp.SR.chkSystemVoidOnlyInTypeof(), m)) // check if T contains byref types in case of byref - let visitByrefsOfByrefs (tcref,tinst) = + let visitAppTy (tcref,tinst) = if isByrefLikeTyconRef cenv.g tcref then let visitType ty0 = match tryDestAppTy cenv.g ty0 with @@ -390,7 +414,7 @@ let CheckType permitByrefs (cenv:cenv) env m ty = cenv.potentialUnboundUsesOfVals <- cenv.potentialUnboundUsesOfVals.Add(vref.Stamp,m) | _ -> () - CheckTypeDeep (ignore, Some visitTyconRef, Some visitByrefsOfByrefs, Some visitTraitSolution, Some visitTypar) cenv.g env ty + CheckTypeDeep (ignore, Some visitTyconRef, Some visitAppTy, Some visitTraitSolution, Some visitTypar) cenv.g env ty /// Check types occurring in TAST (like CheckType) and additionally reject any byrefs. @@ -409,30 +433,45 @@ let CheckTypeInstPermitByrefs cenv env m tyargs = // check exprs etc //-------------------------------------------------------------------------- -type ByrefCallContext = - /// Tuple of contexts allowing byref typed expr - | KnownArityTuple of int - /// Context allows for byref typed expr - | DirectArg +type ByrefContext = + /// Tuple of arguments where elements can be byrefs + | TupleOfArgsPermitByrefs of int + /// Context allows for byref typed expr. Flag indicates if this is a byref-return position + | PermitByref of isReturn: bool /// General (byref type expr not allowed) - | GeneralContext + | NoByrefs -let mkKnownArity n = if n=1 then DirectArg else KnownArityTuple n +let noByrefs context = match context with PermitByref _ -> false | _ -> true -let argAritiesOfVal (vref:ValRef) = +let mkArgsPermitByrefs isByrefReturnCall n = + if n=1 then PermitByref isByrefReturnCall + else TupleOfArgsPermitByrefs n + +/// Work out what byref-values are allowed at input positions to named F# functions or members +let mkArgsForAppliedVal isByrefReturnCall (vref:ValRef) = match vref.ValReprInfo with - | Some topValInfo -> List.map mkKnownArity topValInfo.AritiesOfArgs + | Some topValInfo -> List.map (mkArgsPermitByrefs isByrefReturnCall) topValInfo.AritiesOfArgs | None -> [] -let rec argAritiesOfFunExpr x = +/// Work out what byref-values are allowed at input positions to functions +let rec mkArgsForAppliedExpr isByrefReturnCall x = match x with - | Expr.Val (vref,_,_) -> argAritiesOfVal vref (* recognise val *) - | Expr.Link eref -> argAritiesOfFunExpr !eref (* step through reclink *) - | Expr.App(f,_fty,_tyargs,[],_) -> argAritiesOfFunExpr f (* step through instantiations *) - | Expr.Op(TOp.Coerce,_,[f],_) -> argAritiesOfFunExpr f (* step through subsumption coercions *) - | _ -> [] + // recognise val + | Expr.Val (vref,_,_) -> mkArgsForAppliedVal isByrefReturnCall vref + // step through reclink + | Expr.Link eref -> mkArgsForAppliedExpr isByrefReturnCall !eref + // step through instantiations + | Expr.App(f,_fty,_tyargs,[],_) -> mkArgsForAppliedExpr isByrefReturnCall f + // step through subsumption coercions + | Expr.Op(TOp.Coerce,_,[f],_) -> mkArgsForAppliedExpr isByrefReturnCall f + | _ -> [] +/// Applied functions get wrapped in coerce nodes for subsumption coercions +let (|OptionalCoerce|) = function + | Expr.Op(TOp.Coerce _, _, [Expr.App(f, _, _, [], _)], _) -> f + | x -> x +/// Check an expression doesn't contain a 'reraise' let CheckNoReraise cenv freesOpt (body:Expr) = if cenv.reportErrors then // Avoid recomputing the free variables @@ -440,8 +479,10 @@ let CheckNoReraise cenv freesOpt (body:Expr) = if fvs.UsesUnboundRethrow then errorR(Error(FSComp.SR.chkErrorContainsCallToRethrow(), body.Range)) -let is_splice g v = valRefEq g v g.splice_expr_vref || valRefEq g v g.splice_raw_expr_vref +/// Check if a function is a quotation splice operator +let isSpliceOperator g v = valRefEq g v g.splice_expr_vref || valRefEq g v g.splice_raw_expr_vref +/// Check conditions associated with implementing multiple instantiations of a generic interface let CheckMultipleInterfaceInstantiations cenv interfaces m = let keyf ty = assert isAppTy cenv.g ty; (tcrefOfAppTy cenv.g ty).Stamp let table = interfaces |> MultiMap.initBy keyf @@ -459,35 +500,37 @@ let CheckMultipleInterfaceInstantiations cenv interfaces m = | Some (typ1,typ2) -> errorR(Error(FSComp.SR.chkMultipleGenericInterfaceInstantiations((NicePrint.minimalStringOfType cenv.denv typ1), (NicePrint.minimalStringOfType cenv.denv typ2)),m)) +/// Check an expression, where the expression is in a position where byrefs can be generated +let rec CheckExprNoByrefs (cenv:cenv) (env:env) expr = + CheckExpr cenv env expr NoByrefs -let rec CheckExpr (cenv:cenv) (env:env) expr = - CheckExprInContext cenv env expr GeneralContext - +/// Check a value and CheckVal (cenv:cenv) (env:env) v m context = if cenv.reportErrors then - if is_splice cenv.g v && not env.quote then errorR(Error(FSComp.SR.chkSplicingOnlyInQuotations(), m)) - if is_splice cenv.g v then errorR(Error(FSComp.SR.chkNoFirstClassSplicing(), m)) - if valRefEq cenv.g v cenv.g.addrof_vref then errorR(Error(FSComp.SR.chkNoFirstClassAddressOf(), m)) - if valRefEq cenv.g v cenv.g.reraise_vref then errorR(Error(FSComp.SR.chkNoFirstClassRethrow(), m)) - if isByrefLikeTy cenv.g v.Type then - // byref typed val can only occur in permitting contexts - if context <> DirectArg then errorR(Error(FSComp.SR.chkNoByrefAtThisPoint(v.DisplayName), m)) + if isSpliceOperator cenv.g v && not env.quote then errorR(Error(FSComp.SR.chkSplicingOnlyInQuotations(), m)) + if isSpliceOperator cenv.g v then errorR(Error(FSComp.SR.chkNoFirstClassSplicing(), m)) + if valRefEq cenv.g v cenv.g.addrof_vref then errorR(Error(FSComp.SR.chkNoFirstClassAddressOf(), m)) + if valRefEq cenv.g v cenv.g.reraise_vref then errorR(Error(FSComp.SR.chkNoFirstClassRethrow(), m)) + if noByrefs context && isByrefLikeTy cenv.g v.Type then + // byref typed val can only occur in permitting contexts + errorR(Error(FSComp.SR.chkNoByrefAtThisPoint(v.DisplayName), m)) CheckTypePermitByrefs cenv env m v.Type -and CheckExprInContext (cenv:cenv) (env:env) expr (context:ByrefCallContext) = +/// Check an expression, given information about the position of the expression +and CheckExpr (cenv:cenv) (env:env) expr (context:ByrefContext) = let expr = stripExpr expr match expr with | Expr.Sequential (e1,e2,dir,_,_) -> - CheckExpr cenv env e1 + CheckExprNoByrefs cenv env e1 match dir with - | NormalSeq -> CheckExprInContext cenv env e2 context // carry context into _;RHS (normal sequencing only) - | ThenDoSeq -> CheckExpr cenv {env with limited=false} e2 + | NormalSeq -> CheckExpr cenv env e2 context // carry context into _;RHS (normal sequencing only) + | ThenDoSeq -> CheckExprNoByrefs cenv {env with limited=false} e2 | Expr.Let (bind,body,_,_) -> CheckBinding cenv env false bind BindVal cenv bind.Var - CheckExprInContext cenv env body context + CheckExpr cenv env body context | Expr.Const (_,m,ty) -> CheckTypePermitByrefs cenv env m ty @@ -500,11 +543,20 @@ and CheckExprInContext (cenv:cenv) (env:env) expr (context:ByrefCallContext) = v.IsConstructor && (match v.ActualParent with Parent tcref -> isAbstractTycon tcref.Deref | _ -> false) then errorR(Error(FSComp.SR.tcAbstractTypeCannotBeInstantiated(),m)) + + if isByrefTy cenv.g v.Type && + // A byref return location... + (match context with PermitByref isReturn -> isReturn | _ -> false) && + // The value is a local.... + v.ValReprInfo.IsNone && + // The value is not an argument... + not (env.argVals.ContainsVal(v.Deref)) then + errorR(Error(FSComp.SR.chkNoByrefReturnOfLocal(v.DisplayName), m)) CheckVal cenv env v m context | Expr.Quote(ast,savedConv,_isFromQueryExpression,m,ty) -> - CheckExpr cenv {env with quote=true} ast + CheckExprNoByrefs cenv {env with quote=true} ast if cenv.reportErrors then cenv.usesQuotations <- true try @@ -520,7 +572,7 @@ and CheckExprInContext (cenv:cenv) (env:env) expr (context:ByrefCallContext) = CheckTypeNoByrefs cenv env m ty | Expr.Obj (_,typ,basev,superInitCall,overrides,iimpls,m) -> - CheckExpr cenv env superInitCall + CheckExprNoByrefs cenv env superInitCall CheckMethods cenv env basev overrides CheckInterfaceImpls cenv env basev iimpls CheckTypePermitByrefs cenv env m typ @@ -533,7 +585,7 @@ and CheckExprInContext (cenv:cenv) (env:env) expr (context:ByrefCallContext) = CheckMultipleInterfaceInstantiations cenv interfaces m // Allow base calls to F# methods - | Expr.App((InnerExprPat(ExprValWithPossibleTypeInst(v,vFlags,_,_) as f)),fty,tyargs,(Expr.Val(baseVal,_,_)::rest),m) + | Expr.App((InnerExprPat(ExprValWithPossibleTypeInst(v,vFlags,_,_) as f)),fty,tyargs,(Expr.Val(baseVal,_,_) :: rest),m) when ((match vFlags with VSlotDirectCall -> true | _ -> false) && baseVal.BaseOrThisInfo = BaseVal) -> // dprintfn "GOT BASE VAL USE" @@ -541,11 +593,11 @@ and CheckExprInContext (cenv:cenv) (env:env) expr (context:ByrefCallContext) = if memberInfo.MemberFlags.IsDispatchSlot then errorR(Error(FSComp.SR.tcCannotCallAbstractBaseMember(v.DisplayName),m)) else - CheckVal cenv env v m GeneralContext - CheckVal cenv env baseVal m GeneralContext + CheckVal cenv env v m NoByrefs + CheckVal cenv env baseVal m NoByrefs CheckTypePermitByrefs cenv env m fty CheckTypeInstPermitByrefs cenv env m tyargs - CheckExprsInContext cenv env rest (argAritiesOfFunExpr f) + CheckExprs cenv env rest (List.tail (mkArgsForAppliedExpr false f)) // Allow base calls to IL methods | Expr.Op (TOp.ILCall (virt,_,_,_,_,_,_,mref,enclTypeArgs,methTypeArgs,tys),tyargs,(Expr.Val(baseVal,_,_)::rest),m) @@ -568,8 +620,8 @@ and CheckExprInContext (cenv:cenv) (env:env) expr (context:ByrefCallContext) = CheckTypeInstNoByrefs cenv env m enclTypeArgs CheckTypeInstNoByrefs cenv env m methTypeArgs CheckTypeInstNoByrefs cenv env m tys - CheckVal cenv env baseVal m GeneralContext - CheckExprDirectArgs cenv env rest + CheckVal cenv env baseVal m NoByrefs + CheckExprsPermitByrefs cenv env rest | Expr.Op (c,tyargs,args,m) -> CheckExprOp cenv env (c,tyargs,args,m) context @@ -582,15 +634,11 @@ and CheckExprInContext (cenv:cenv) (env:env) expr (context:ByrefCallContext) = () // typedefof allowed. Special case. No further checks. // Allow '%expr' in quotations - | Expr.App(Expr.Val(vref,_,_),_,tinst,[arg],m) when is_splice cenv.g vref && env.quote -> + | Expr.App(Expr.Val(vref,_,_),_,tinst,[arg],m) when isSpliceOperator cenv.g vref && env.quote -> CheckTypeInstPermitByrefs cenv env m tinst - CheckExpr cenv env arg - + CheckExprNoByrefs cenv env arg | Expr.App(f,fty,tyargs,argsl,m) -> - let (|OptionalCoerce|) = function - | Expr.Op(TOp.Coerce _, _, [Expr.App(f, _, _, [], _)], _) -> f - | x -> x if cenv.reportErrors then let g = cenv.g match f with @@ -623,54 +671,62 @@ and CheckExprInContext (cenv:cenv) (env:env) expr (context:ByrefCallContext) = CheckTypeInstNoByrefs cenv env m tyargs CheckTypePermitByrefs cenv env m fty CheckTypeInstPermitByrefs cenv env m tyargs - CheckExpr cenv env f - CheckExprsInContext cenv env argsl (argAritiesOfFunExpr f) - - (* REVIEW: fold the next two cases together *) + CheckExprNoByrefs cenv env f + let isByrefReturnCall = + // if return is a byref, and being used as a return, then all arguments must be usable as byref returns + match context with + | PermitByref true when isByrefTy cenv.g (tyOfExpr cenv.g expr) -> true + | _ -> false + CheckExprs cenv env argsl (mkArgsForAppliedExpr isByrefReturnCall f) + + // REVIEW: fold the next two cases together | Expr.Lambda(_,_ctorThisValOpt,_baseValOpt,argvs,_,m,rty) -> let topValInfo = ValReprInfo ([],[argvs |> List.map (fun _ -> ValReprInfo.unnamedTopArg1)],ValReprInfo.unnamedRetVal) let ty = mkMultiLambdaTy m argvs rty in - CheckLambdas None cenv env false topValInfo false expr m ty + CheckLambdas false None cenv env false topValInfo false expr m ty | Expr.TyLambda(_,tps,_,m,rty) -> let topValInfo = ValReprInfo (ValReprInfo.InferTyparInfo tps,[],ValReprInfo.unnamedRetVal) let ty = tryMkForallTy tps rty in - CheckLambdas None cenv env false topValInfo false expr m ty + CheckLambdas false None cenv env false topValInfo false expr m ty | Expr.TyChoose(tps,e1,_) -> let env = BindTypars cenv.g env tps - CheckExpr cenv env e1 + CheckExprNoByrefs cenv env e1 | Expr.Match(_,_,dtree,targets,m,ty) -> CheckTypePermitByrefs cenv env m ty // computed byrefs allowed at each branch CheckDecisionTree cenv env dtree CheckDecisionTreeTargets cenv env targets context + | Expr.LetRec (binds,e,_,_) -> BindVals cenv (valsOfBinds binds) CheckBindings cenv env binds - CheckExpr cenv env e + CheckExprNoByrefs cenv env e + | Expr.StaticOptimization (constraints,e2,e3,m) -> - CheckExpr cenv env e2 - CheckExpr cenv env e3 + CheckExprNoByrefs cenv env e2 + CheckExprNoByrefs cenv env e3 constraints |> List.iter (function | TTyconEqualsTycon(ty1,ty2) -> CheckTypeNoByrefs cenv env m ty1 CheckTypeNoByrefs cenv env m ty2 | TTyconIsStruct(ty1) -> CheckTypeNoByrefs cenv env m ty1) + | Expr.Link _ -> failwith "Unexpected reclink" and CheckMethods cenv env baseValOpt l = l |> List.iter (CheckMethod cenv env baseValOpt) -and CheckMethod cenv env baseValOpt (TObjExprMethod(_,attribs,tps,vs,e,m)) = +and CheckMethod cenv env baseValOpt (TObjExprMethod(_,attribs,tps,vs,body,m)) = let env = BindTypars cenv.g env tps let vs = List.concat vs CheckAttribs cenv env attribs - CheckNoReraise cenv None e - CheckEscapes cenv true m (match baseValOpt with Some x -> x:: vs | None -> vs) e |> ignore - CheckExpr cenv env e + CheckNoReraise cenv None body + CheckEscapes cenv true m (match baseValOpt with Some x -> x:: vs | None -> vs) body |> ignore + CheckExprPermitByref cenv env body and CheckInterfaceImpls cenv env baseValOpt l = l |> List.iter (CheckInterfaceImpl cenv env baseValOpt) @@ -678,129 +734,164 @@ and CheckInterfaceImpls cenv env baseValOpt l = and CheckInterfaceImpl cenv env baseValOpt (_ty,overrides) = CheckMethods cenv env baseValOpt overrides - and CheckExprOp cenv env (op,tyargs,args,m) context = let limitedCheck() = if env.limited then errorR(Error(FSComp.SR.chkObjCtorsCantUseExceptionHandling(), m)) List.iter (CheckTypePermitByrefs cenv env m) tyargs (* Special cases *) - match op,tyargs,args,context with + match op,tyargs,args with // Handle these as special cases since mutables are allowed inside their bodies - | TOp.While _,_,[Expr.Lambda(_,_,_,[_],e1,_,_);Expr.Lambda(_,_,_,[_],e2,_,_)],_ -> + | TOp.While _,_,[Expr.Lambda(_,_,_,[_],e1,_,_);Expr.Lambda(_,_,_,[_],e2,_,_)] -> CheckTypeInstNoByrefs cenv env m tyargs - CheckExprs cenv env [e1;e2] + CheckExprsNoByrefs cenv env [e1;e2] - | TOp.TryFinally _,[_],[Expr.Lambda(_,_,_,[_],e1,_,_); Expr.Lambda(_,_,_,[_],e2,_,_)],_ -> - CheckTypeInstNoByrefs cenv env m tyargs + | TOp.TryFinally _,[_],[Expr.Lambda(_,_,_,[_],e1,_,_); Expr.Lambda(_,_,_,[_],e2,_,_)] -> + CheckTypeInstPermitByrefs cenv env m tyargs // result of a try/finally can be a byref limitedCheck() - CheckExprs cenv env [e1;e2] + CheckExpr cenv env e1 context // result of a try/finally can be a byref if in a position where the overall expression is can be a byref + CheckExprNoByrefs cenv env e2 - | TOp.For(_),_,[Expr.Lambda(_,_,_,[_],e1,_,_);Expr.Lambda(_,_,_,[_],e2,_,_);Expr.Lambda(_,_,_,[_],e3,_,_)],_ -> + | TOp.For(_),_,[Expr.Lambda(_,_,_,[_],e1,_,_);Expr.Lambda(_,_,_,[_],e2,_,_);Expr.Lambda(_,_,_,[_],e3,_,_)] -> CheckTypeInstNoByrefs cenv env m tyargs - CheckExprs cenv env [e1;e2;e3] + CheckExprsNoByrefs cenv env [e1;e2;e3] - | TOp.TryCatch _,[_],[Expr.Lambda(_,_,_,[_],e1,_,_); Expr.Lambda(_,_,_,[_],_e2,_,_); Expr.Lambda(_,_,_,[_],e3,_,_)],_ -> - CheckTypeInstNoByrefs cenv env m tyargs + | TOp.TryCatch _,[_],[Expr.Lambda(_,_,_,[_],e1,_,_); Expr.Lambda(_,_,_,[_],_e2,_,_); Expr.Lambda(_,_,_,[_],e3,_,_)] -> + CheckTypeInstPermitByrefs cenv env m tyargs // result of a try/catch can be a byref limitedCheck() - CheckExprs cenv env [e1;(* e2; -- don't check filter body - duplicates logic in 'catch' body *) e3] - - | TOp.ILCall (_,_,_,_,_,_,_,_,enclTypeArgs,methTypeArgs,tys),_,_,_ -> + CheckExpr cenv env e1 context // result of a try/catch can be a byref if in a position where the overall expression is can be a byref + // [(* e2; -- don't check filter body - duplicates logic in 'catch' body *) e3] + CheckExpr cenv env e3 context // result of a try/catch can be a byref if in a position where the overall expression is can be a byref + + | TOp.ILCall (_,_,_,_,_,_,_,_,enclTypeArgs,methTypeArgs,tys),_,_ -> CheckTypeInstNoByrefs cenv env m tyargs CheckTypeInstNoByrefs cenv env m enclTypeArgs CheckTypeInstNoByrefs cenv env m methTypeArgs - CheckTypeInstNoByrefs cenv env m tys - CheckExprDirectArgs cenv env args + CheckTypeInstPermitByrefs cenv env m tys // permit byref returns - // Tuple expression in known tuple context - | TOp.Tuple,_,_,KnownArityTuple nArity -> - if cenv.reportErrors then - if args.Length <> nArity then - errorR(InternalError("Tuple arity does not correspond to planned function argument arity",m)) - // This tuple should not be generated. The known function arity - // means it just bundles arguments. - CheckExprDirectArgs cenv env args - - | TOp.LValueOp(LGetAddr,v),_,_,arity -> - if arity = DirectArg then - CheckExprs cenv env args (* Address-of operator generates byref, and context permits this. *) - else - if cenv.reportErrors then - errorR(Error(FSComp.SR.chkNoAddressOfAtThisPoint(v.DisplayName), m)) - | TOp.ValFieldGet _rf,_,[arg1],_arity -> + // if return is a byref, and being used as a return, then all arguments must be usable as byref returns + match context,tys with + | PermitByref true, [ty] when isByrefTy cenv.g ty -> CheckExprsPermitByrefReturns cenv env args + | _ -> CheckExprsPermitByrefs cenv env args + + + | TOp.Tuple tupInfo,_,_ when not (evalTupInfoIsStruct tupInfo) -> + match context with + | TupleOfArgsPermitByrefs nArity -> + if cenv.reportErrors then + if args.Length <> nArity then + errorR(InternalError("Tuple arity does not correspond to planned function argument arity",m)) + // This tuple should not be generated. The known function arity + // means it just bundles arguments. + CheckExprsPermitByrefs cenv env args + | _ -> + CheckTypeInstNoByrefs cenv env m tyargs + CheckExprsNoByrefs cenv env args + + | TOp.LValueOp(LGetAddr,v),_,_ -> + if cenv.reportErrors then + if noByrefs context && cenv.reportErrors then + errorR(Error(FSComp.SR.chkNoAddressOfAtThisPoint(v.DisplayName), m)) + elif (// The context is a byref return.... + match context with PermitByref isReturn -> isReturn | _ -> false) && + // The value is a local.... + v.ValReprInfo.IsNone && + // The value is not an argument... + not (env.argVals.ContainsVal(v.Deref)) then + errorR(Error(FSComp.SR.chkNoByrefReturnOfLocal(v.DisplayName), m)) + + // Address-of operator generates byref, and context permits this. + CheckExprsNoByrefs cenv env args + + | TOp.TupleFieldGet _,_,[arg1] -> CheckTypeInstNoByrefs cenv env m tyargs - CheckExprDirectArgs cenv env [arg1] (* See mkRecdFieldGetViaExprAddr -- byref arg1 when #args =1 *) - (* Property getters on mutable structs come through here. *) - | TOp.ValFieldSet _rf,_,[arg1;arg2],_arity -> + CheckExprsPermitByrefs cenv env [arg1] (* Compiled pattern matches on immutable value structs come through here. *) + + | TOp.ValFieldGet _rf,_,[arg1] -> CheckTypeInstNoByrefs cenv env m tyargs - CheckExprDirectArgs cenv env [arg1] (* See mkRecdFieldSetViaExprAddr -- byref arg1 when #args=2 *) - CheckExprs cenv env [arg2] (* Property setters on mutable structs come through here (TBC). *) + //See mkRecdFieldGetViaExprAddr -- byref arg1 when #args =1 + // Property getters on mutable structs come through here. + CheckExprsPermitByrefs cenv env [arg1] - | TOp.Coerce,[_ty1;_ty2],[x],_arity -> + | TOp.ValFieldSet _rf,_,[arg1;arg2] -> CheckTypeInstNoByrefs cenv env m tyargs - CheckExprInContext cenv env x context + // See mkRecdFieldSetViaExprAddr -- byref arg1 when #args=2 + // Field setters on mutable structs come through here + CheckExprsPermitByrefs cenv env [arg1] + CheckExprsNoByrefs cenv env [arg2] + + | TOp.Coerce,[_ty1;_ty2],[x] -> + // Subsumption coercions of functions may involve byrefs in other argument positions + CheckTypeInstPermitByrefs cenv env m tyargs + CheckExpr cenv env x context - | TOp.Reraise,[_ty1],[],_arity -> + | TOp.Reraise,[_ty1],[] -> CheckTypeInstNoByrefs cenv env m tyargs - | TOp.ValFieldGetAddr rfref,tyargs,[],_ -> - if context <> DirectArg && cenv.reportErrors then - errorR(Error(FSComp.SR.chkNoAddressStaticFieldAtThisPoint(rfref.FieldName), m)) + | TOp.ValFieldGetAddr rfref,tyargs,[] -> + if noByrefs context && cenv.reportErrors then + errorR(Error(FSComp.SR.chkNoAddressStaticFieldAtThisPoint(rfref.FieldName), m)) CheckTypeInstNoByrefs cenv env m tyargs - (* NOTE: there are no arg exprs to check in this case *) + // NOTE: there are no arg exprs to check in this case - | TOp.ValFieldGetAddr rfref,tyargs,[rx],_ -> - if context <> DirectArg && cenv.reportErrors then - errorR(Error(FSComp.SR.chkNoAddressFieldAtThisPoint(rfref.FieldName), m)) - (* This construct is used for &(rx.rfield) and &(rx->rfield). Relax to permit byref types for rx. [See Bug 1263]. *) + | TOp.ValFieldGetAddr rfref,tyargs,[rx] -> + if noByrefs context && cenv.reportErrors then + errorR(Error(FSComp.SR.chkNoAddressFieldAtThisPoint(rfref.FieldName), m)) + // This construct is used for &(rx.rfield) and &(rx->rfield). Relax to permit byref types for rx. [See Bug 1263]. CheckTypeInstNoByrefs cenv env m tyargs - CheckExprInContext cenv env rx DirectArg (* allow rx to be byref here *) + CheckExprPermitByref cenv env rx - | TOp.UnionCaseFieldGet _,_,[arg1],_arity -> + | TOp.UnionCaseFieldGet _,_,[arg1] -> CheckTypeInstNoByrefs cenv env m tyargs - CheckExprInContext cenv env arg1 DirectArg + CheckExprPermitByref cenv env arg1 - | TOp.UnionCaseTagGet _,_,[arg1],_arity -> + | TOp.UnionCaseTagGet _,_,[arg1] -> CheckTypeInstNoByrefs cenv env m tyargs - CheckExprInContext cenv env arg1 DirectArg + CheckExprPermitByref cenv env arg1 // allow byref - it may be address-of-struct - | TOp.UnionCaseFieldGetAddr (uref, _idx),tyargs,[rx],_ -> - if context <> DirectArg && cenv.reportErrors then + | TOp.UnionCaseFieldGetAddr (uref, _idx),tyargs,[rx] -> + if noByrefs context && cenv.reportErrors then errorR(Error(FSComp.SR.chkNoAddressFieldAtThisPoint(uref.CaseName), m)) CheckTypeInstNoByrefs cenv env m tyargs - CheckExprInContext cenv env rx DirectArg // allow rx to be byref here + // allow rx to be byref here, for struct unions + CheckExprPermitByref cenv env rx - | TOp.ILAsm (instrs,tys),_,_,_ -> + | TOp.ILAsm (instrs,tys),_,_ -> CheckTypeInstPermitByrefs cenv env m tys CheckTypeInstNoByrefs cenv env m tyargs - begin - match instrs,args with - | [ I_stfld (_alignment,_vol,_fspec) ],[lhs;rhs] -> - CheckExprInContext cenv env lhs DirectArg (* permit byref for lhs lvalue *) - CheckExpr cenv env rhs - | [ I_ldfld (_alignment,_vol,_fspec) ],[lhs] -> - CheckExprInContext cenv env lhs DirectArg (* permit byref for lhs lvalue *) - | [ I_ldfld (_alignment,_vol,_fspec); AI_nop ],[lhs] -> - CheckExprInContext cenv env lhs DirectArg (* permit byref for lhs lvalue of readonly value *) - | [ I_ldflda (fspec) | I_ldsflda (fspec) ],[lhs] -> - if context <> DirectArg && cenv.reportErrors then - errorR(Error(FSComp.SR.chkNoAddressFieldAtThisPoint(fspec.Name), m)) - CheckExprInContext cenv env lhs DirectArg (* permit byref for lhs lvalue *) - | [ I_ldelema (_,isNativePtr,_,_) ],lhsArray::indices -> - if not(isNativePtr) && context <> DirectArg && cenv.reportErrors then - errorR(Error(FSComp.SR.chkNoAddressOfArrayElementAtThisPoint(), m)) - CheckExprInContext cenv env lhsArray DirectArg (* permit byref for lhs lvalue *) - CheckExprs cenv env indices - | [ AI_conv _ ],_ -> - CheckExprDirectArgs cenv env args (* permit byref for args to conv *) - | _instrs -> - CheckExprs cenv env args - end - - | TOp.TraitCall _,_,_,_ -> + match instrs,args with + | [ I_stfld (_alignment,_vol,_fspec) ],[lhs;rhs] -> + // permit byref for lhs lvalue + CheckExprPermitByref cenv env lhs + CheckExprNoByrefs cenv env rhs + | [ I_ldfld (_alignment,_vol,_fspec) ],[lhs] -> + // permit byref for lhs lvalue + CheckExprPermitByref cenv env lhs + | [ I_ldfld (_alignment,_vol,_fspec); AI_nop ],[lhs] -> + // permit byref for lhs lvalue of readonly value + CheckExprPermitByref cenv env lhs + | [ I_ldflda (fspec) | I_ldsflda (fspec) ],[lhs] -> + if noByrefs context && cenv.reportErrors then + errorR(Error(FSComp.SR.chkNoAddressFieldAtThisPoint(fspec.Name), m)) + // permit byref for lhs lvalue + CheckExprPermitByref cenv env lhs + | [ I_ldelema (_,isNativePtr,_,_) ],lhsArray::indices -> + if not(isNativePtr) && noByrefs context && cenv.reportErrors then + errorR(Error(FSComp.SR.chkNoAddressOfArrayElementAtThisPoint(), m)) + // permit byref for lhs lvalue + CheckExprPermitByref cenv env lhsArray + CheckExprsNoByrefs cenv env indices + | [ AI_conv _ ],_ -> + // permit byref for args to conv + CheckExprsPermitByrefs cenv env args + | _ -> + CheckExprsNoByrefs cenv env args + + | TOp.TraitCall _,_,_ -> CheckTypeInstNoByrefs cenv env m tyargs - CheckExprDirectArgs cenv env args (* allow args to be byref here *) + // allow args to be byref here + CheckExprsPermitByrefs cenv env args - | ( TOp.Tuple + | ( TOp.Tuple _ | TOp.UnionCase _ | TOp.ExnConstr _ | TOp.Array @@ -817,17 +908,17 @@ and CheckExprOp cenv env (op,tyargs,args,m) context = | TOp.TupleFieldGet _ | TOp.RefAddrGet | _ (* catch all! *) - ),_,_,_ -> + ),_,_ -> CheckTypeInstNoByrefs cenv env m tyargs - CheckExprs cenv env args + CheckExprsNoByrefs cenv env args -and CheckLambdas (memInfo: ValMemberInfo option) cenv env inlined topValInfo alwaysCheckNoReraise e m ety = +and CheckLambdas isTop (memInfo: ValMemberInfo option) cenv env inlined topValInfo alwaysCheckNoReraise e m ety = // The topValInfo here says we are _guaranteeing_ to compile a function value // as a .NET method with precisely the corresponding argument counts. match e with | Expr.TyChoose(tps,e1,m) -> let env = BindTypars cenv.g env tps - CheckLambdas memInfo cenv env inlined topValInfo alwaysCheckNoReraise e1 m ety + CheckLambdas isTop memInfo cenv env inlined topValInfo alwaysCheckNoReraise e1 m ety | Expr.Lambda (_,_,_,_,_,m,_) | Expr.TyLambda(_,_,_,m,_) -> @@ -837,6 +928,7 @@ and CheckLambdas (memInfo: ValMemberInfo option) cenv env inlined topValInfo alw let thisAndBase = Option.toList ctorThisValOpt @ Option.toList baseValOpt let restArgs = List.concat vsl let syntacticArgs = thisAndBase @ restArgs + let env = SetArgVals env restArgs match memInfo with | None -> () @@ -853,91 +945,113 @@ and CheckLambdas (memInfo: ValMemberInfo option) cenv env inlined topValInfo alw syntacticArgs |> List.iter (CheckValSpec cenv env) syntacticArgs |> List.iter (BindVal cenv) - // Allow access to protected things within members + // Trigger a test hook match memInfo with | None -> () - | Some membInfo -> - testHookMemberBody membInfo body + | Some membInfo -> testHookMemberBody membInfo body - let freesOpt = CheckEscapes cenv (isSome(memInfo)) m syntacticArgs body - CheckNoReraise cenv freesOpt body (* no reraise under lambda expression *) - CheckExpr cenv env body + // Check escapes in the body. Allow access to protected things within members. + let freesOpt = CheckEscapes cenv (isSome memInfo) m syntacticArgs body + + // no reraise under lambda expression + CheckNoReraise cenv freesOpt body + + // Check the body of the lambda + if (nonNil tps || nonNil vsl) && isTop && not cenv.g.compilingFslib && isByrefTy cenv.g bodyty then + // allow byref to occur as return position for byref-typed top level function or method + CheckExprPermitByrefReturn cenv env body + else + CheckExprNoByrefs cenv env body + + // Check byref return types if cenv.reportErrors then - if not inlined then + if (not inlined && (isNil tps && isNil vsl)) || not isTop then CheckForByrefLikeType cenv env bodyty (fun () -> - if vsl.Length = 0 then - errorR(Error(FSComp.SR.chkFirstClassFuncNoByref(), m)) - else - errorR(Error(FSComp.SR.chkReturnTypeNoByref(), m))) + errorR(Error(FSComp.SR.chkFirstClassFuncNoByref(), m))) + + elif not cenv.g.compilingFslib && isByrefTy cenv.g bodyty then + // check no byrefs-in-the-byref + CheckForByrefLikeType cenv env (destByrefTy cenv.g bodyty) (fun () -> + errorR(Error(FSComp.SR.chkReturnTypeNoByref(), m))) + for tp in tps do if tp.Constraints |> List.sumBy (function TyparConstraint.CoercesTo(ty,_) when isClassTy cenv.g ty -> 1 | _ -> 0) > 1 then errorR(Error(FSComp.SR.chkTyparMultipleClassConstraints(), m)) + // This path is for expression bindings that are not actually lambdas | _ -> + // Permit byrefs for let x = ... CheckTypePermitByrefs cenv env m ety if not inlined && isByrefLikeTy cenv.g ety then - CheckExprInContext cenv env e DirectArg (* allow byref to occur as RHS of byref binding. *) + // allow byref to occur as RHS of byref binding. + CheckExprPermitByref cenv env e else - CheckExpr cenv env e + CheckExprNoByrefs cenv env e if alwaysCheckNoReraise then - CheckNoReraise cenv None e (* no reraise *) + CheckNoReraise cenv None e + +and CheckExprs cenv env exprs contexts = + let contexts = Array.ofList contexts + let argArity i = if i < contexts.Length then contexts.[i] else NoByrefs + exprs |> List.iteri (fun i exp -> CheckExpr cenv env exp (argArity i)) -and CheckExprsInContext cenv env exprs arities = - let arities = Array.ofList arities - let argArity i = if i < arities.Length then arities.[i] else GeneralContext - exprs |> List.iteri (fun i exp -> CheckExprInContext cenv env exp (argArity i)) +and CheckExprsNoByrefs cenv env exprs = + exprs |> List.iter (CheckExprNoByrefs cenv env) -and CheckExprs cenv env exprs = - exprs |> List.iter (CheckExpr cenv env) +and CheckExprsPermitByrefs cenv env exprs = + exprs |> List.iter (CheckExprPermitByref cenv env) -and CheckFlatExprs cenv env exprs = - exprs |> FlatList.iter (CheckExpr cenv env) +and CheckExprsPermitByrefReturns cenv env exprs = + exprs |> List.iter (CheckExprPermitByrefReturn cenv env) -and CheckExprDirectArgs cenv env exprs = - exprs |> List.iter (fun x -> CheckExprInContext cenv env x DirectArg) +and CheckExprPermitByref cenv env expr = + CheckExpr cenv env expr (PermitByref false) + +and CheckExprPermitByrefReturn cenv env expr = + CheckExpr cenv env expr (PermitByref true) and CheckDecisionTreeTargets cenv env targets context = - targets |> Array.iter (CheckDecisionTreeTarget cenv env context ) + targets |> Array.iter (CheckDecisionTreeTarget cenv env context) and CheckDecisionTreeTarget cenv env context (TTarget(vs,e,_)) = BindVals cenv vs - vs |> FlatList.iter (CheckValSpec cenv env) - CheckExprInContext cenv env e context + vs |> List.iter (CheckValSpec cenv env) + CheckExpr cenv env e context and CheckDecisionTree cenv env x = match x with - | TDSuccess (es,_) -> CheckFlatExprs cenv env es + | TDSuccess (es,_) -> CheckExprsNoByrefs cenv env es | TDBind(bind,rest) -> CheckBinding cenv env false bind; CheckDecisionTree cenv env rest | TDSwitch (e,cases,dflt,m) -> CheckDecisionTreeSwitch cenv env (e,cases,dflt,m) and CheckDecisionTreeSwitch cenv env (e,cases,dflt,m) = - CheckExprInContext cenv env e DirectArg // can be byref for struct union switch + CheckExprPermitByref cenv env e // can be byref for struct union switch cases |> List.iter (fun (TCase(discrim,e)) -> CheckDecisionTreeTest cenv env m discrim; CheckDecisionTree cenv env e) dflt |> Option.iter (CheckDecisionTree cenv env) and CheckDecisionTreeTest cenv env m discrim = match discrim with | Test.UnionCase (_,tinst) -> CheckTypeInstPermitByrefs cenv env m tinst - | Test.ArrayLength (_,typ) -> CheckTypePermitByrefs cenv env m typ - | Test.Const _ -> () - | Test.IsNull -> () - | Test.IsInst (srcTyp,dstTyp) -> (CheckTypePermitByrefs cenv env m srcTyp; CheckTypePermitByrefs cenv env m dstTyp) - | Test.ActivePatternCase (exp,_,_,_,_) -> CheckExpr cenv env exp + | Test.ArrayLength (_,typ) -> CheckTypePermitByrefs cenv env m typ + | Test.Const _ -> () + | Test.IsNull -> () + | Test.IsInst (srcTyp,dstTyp) -> CheckTypePermitByrefs cenv env m srcTyp; CheckTypePermitByrefs cenv env m dstTyp + | Test.ActivePatternCase (exp,_,_,_,_) -> CheckExprNoByrefs cenv env exp and CheckAttrib cenv env (Attrib(_,_,args,props,_,_,_)) = props |> List.iter (fun (AttribNamedArg(_,_,_,expr)) -> CheckAttribExpr cenv env expr) args |> List.iter (CheckAttribExpr cenv env) and CheckAttribExpr cenv env (AttribExpr(expr,vexpr)) = - CheckExpr cenv env expr - CheckExpr cenv env vexpr + CheckExprNoByrefs cenv env expr + CheckExprNoByrefs cenv env vexpr CheckNoReraise cenv None expr CheckAttribArgExpr cenv env vexpr and CheckAttribArgExpr cenv env expr = match expr with - (* Detect standard constants *) + // Detect standard constants | Expr.Const(c,m,_) -> match c with | Const.Bool _ @@ -990,6 +1104,7 @@ and CheckAttribs cenv env (attribs: Attribs) = |> Seq.toList // Filter for allowMultiple = false |> List.filter (fun (tcref,m) -> TryFindAttributeUsageAttribute cenv.g m tcref <> Some(true)) + if cenv.reportErrors then for (tcref,m) in duplicates do errorR(Error(FSComp.SR.chkAttrHasAllowMultiFalse(tcref.DisplayName), m)) @@ -1017,8 +1132,11 @@ and AdjustAccess isHidden (cpath: unit -> CompilationPath) access = else access -and CheckBinding cenv env alwaysCheckNoReraise (TBind(v,e,_) as bind) = +and CheckBinding cenv env alwaysCheckNoReraise (TBind(v,bindRhs,_) as bind) = + let isTop = isSome bind.Var.ValReprInfo //printfn "visiting %s..." v.DisplayName + + // Check that active patterns don't have free type variables in their result match TryGetActivePatternInfo (mkLocalValRef v) with | Some _apinfo when _apinfo.ActiveTags.Length > 1 -> if doesActivePatternHaveFreeTypars cenv.g (mkLocalValRef v) then @@ -1031,9 +1149,12 @@ and CheckBinding cenv env alwaysCheckNoReraise (TBind(v,e,_) as bind) = let nm = v.DisplayName errorR(Error(FSComp.SR.chkMemberUsedInInvalidWay(nm, nm, stringOfRange m), v.Range)) + // Byrefs allowed for x in 'let x = ...' v.Type |> CheckTypePermitByrefs cenv env v.Range v.Attribs |> CheckAttribs cenv env v.ValReprInfo |> Option.iter (CheckValInfo cenv env) + + // Check accessibility if (v.IsMemberOrModuleBinding || v.IsMember) && not v.IsIncrClassGeneratedMember then let access = AdjustAccess (IsHiddenVal env.sigToImplRemapInfo v) (fun () -> v.TopValActualParent.CompilationPath) v.Accessibility CheckTypeForAccess cenv env (fun () -> NicePrint.stringOfQualifiedValOrMember cenv.denv v) access v.Range v.Type @@ -1041,10 +1162,8 @@ and CheckBinding cenv env alwaysCheckNoReraise (TBind(v,e,_) as bind) = let env = if v.IsConstructor && not v.IsIncrClassConstructor then { env with limited=true } else env if cenv.reportErrors then - if isByrefLikeTy cenv.g v.Type && isSome bind.Var.ValReprInfo then - errorR(Error(FSComp.SR.chkNoByrefAsTopValue(), v.Range)) - // Check top-level let-bound values (arity=0 so not compiled not method) for byref types (not allowed) + // Check top-level let-bound values match bind.Var.ValReprInfo with | Some info when info.HasNoArgs -> CheckForByrefLikeType cenv env v.Type (fun () -> errorR(Error(FSComp.SR.chkNoByrefAsTopValue(),v.Range))) @@ -1071,18 +1190,18 @@ and CheckBinding cenv env alwaysCheckNoReraise (TBind(v,e,_) as bind) = // If we've already recorded a definition then skip this match v.ReflectedDefinition with - | None -> v.Data.val_defn <- Some e + | None -> v.Data.val_defn <- Some bindRhs | Some _ -> () // Run the conversion process over the reflected definition to report any errors in the // front end rather than the back end. We currently re-run this during ilxgen.fs but there's // no real need for that except that it helps us to bundle all reflected definitions up into // one blob for pickling to the binary format try - let ety = tyOfExpr cenv.g e + let ety = tyOfExpr cenv.g bindRhs let tps,taue,_ = - match e with + match bindRhs with | Expr.TyLambda (_,tps,b,_,_) -> tps,b,applyForallTy cenv.g ety (List.map mkTyparTy tps) - | _ -> [],e,ety + | _ -> [],bindRhs,ety let env = QuotationTranslator.QuotationTranslationEnv.Empty.BindTypars tps let qscope = QuotationTranslator.QuotationGenerationScope.Create (cenv.g,cenv.amap,cenv.viewCcu, QuotationTranslator.IsReflectedDefinition.Yes) QuotationTranslator.ConvExprPublic qscope env taue |> ignore @@ -1097,24 +1216,20 @@ and CheckBinding cenv env alwaysCheckNoReraise (TBind(v,e,_) as bind) = match v.MemberInfo with | Some memberInfo when not v.IsIncrClassGeneratedMember -> match memberInfo.MemberFlags.MemberKind with - | (MemberKind.PropertySet | MemberKind.PropertyGet) -> // These routines raise errors for ill-formed properties v |> ReturnTypeOfPropertyVal cenv.g |> ignore v |> ArgInfosOfPropertyVal cenv.g |> ignore - | _ -> - () + + | _ -> () | _ -> () - let topValInfo = match bind.Var.ValReprInfo with Some info -> info | _ -> ValReprInfo.emptyValData - let inlined = v.MustInline - // certain inline functions are permitted to have byref return types - // e.g. for the byref operator itself, &. - CheckLambdas v.MemberInfo cenv env inlined topValInfo alwaysCheckNoReraise e v.Range v.Type -and CheckBindings cenv env xs = FlatList.iter (CheckBinding cenv env false) xs + CheckLambdas isTop v.MemberInfo cenv env v.MustInline topValInfo alwaysCheckNoReraise bindRhs v.Range v.Type + +and CheckBindings cenv env xs = List.iter (CheckBinding cenv env false) xs // Top binds introduce expression, check they are reraise free. let CheckModuleBinding cenv env (TBind(v,e,_) as bind) = @@ -1242,7 +1357,7 @@ let CheckModuleBinding cenv env (TBind(v,e,_) as bind) = CheckBinding cenv env true bind -let CheckModuleBindings cenv env binds = FlatList.iter (CheckModuleBinding cenv env) binds +let CheckModuleBindings cenv env binds = List.iter (CheckModuleBinding cenv env) binds //-------------------------------------------------------------------------- // check tycons @@ -1253,9 +1368,9 @@ let CheckRecdField isUnion cenv env (tycon:Tycon) (rfield:RecdField) = IsHiddenTycon env.sigToImplRemapInfo tycon || IsHiddenTyconRepr env.sigToImplRemapInfo tycon || (not isUnion && IsHiddenRecdField env.sigToImplRemapInfo ((mkLocalTyconRef tycon).MakeNestedRecdFieldRef rfield)) - let access = AdjustAccess isHidden (fun () -> tycon.CompilationPath) rfield.Accessibility + let access = AdjustAccess isHidden (fun () -> tycon.CompilationPath) rfield.Accessibility CheckTypeForAccess cenv env (fun () -> rfield.Name) access rfield.Range rfield.FormalType - CheckTypePermitByrefs cenv env rfield.Range rfield.FormalType + CheckTypeNoByrefs cenv env rfield.Range rfield.FormalType CheckAttribs cenv env rfield.PropertyAttribs CheckAttribs cenv env rfield.FieldAttribs if cenv.reportErrors then @@ -1269,8 +1384,11 @@ let CheckEntityDefn cenv env (tycon:Entity) = let m = tycon.Range let env = BindTypars cenv.g env (tycon.Typars(m)) CheckAttribs cenv env tycon.Attribs + match tycon.TypeAbbrev with + | Some abbrev -> WarnOnWrongTypeForAccess cenv env (fun () -> tycon.CompiledName) tycon.Accessibility tycon.Range abbrev + | _ -> () - if cenv.reportErrors then begin + if cenv.reportErrors then if not tycon.IsTypeAbbrev then let typ = generalizedTyconRef (mkLocalTyconRef tycon) let allVirtualMethsInParent = @@ -1455,25 +1573,29 @@ let CheckEntityDefn cenv env (tycon:Entity) = errorR(Error(FSComp.SR.chkDuplicateMethodInheritedType(nm),m)) else errorR(Error(FSComp.SR.chkDuplicateMethodInheritedTypeWithSuffix(nm),m)) - - end - // Considers TFSharpObjectRepr, TRecdRepr and TUnionRepr. // [Review] are all cases covered: TILObjectRepr,TAsmRepr. [Yes - these are FSharp.Core.dll only] tycon.AllFieldsArray |> Array.iter (CheckRecdField false cenv env tycon) - abstractSlotValsOfTycons [tycon] |> List.iter (typeOfVal >> CheckTypePermitByrefs cenv env m) (* check vslots = abstract slots *) - tycon.ImmediateInterfaceTypesOfFSharpTycon |> List.iter (CheckTypePermitByrefs cenv env m) (* check implemented interface types *) - superOfTycon cenv.g tycon |> CheckTypePermitByrefs cenv env m (* check super type *) + + // Abstract slots can have byref arguments and returns + abstractSlotValsOfTycons [tycon] |> List.iter (typeOfVal >> CheckTypePermitByrefs cenv env m) + + // Interface slots can have byref arguments and returns + tycon.ImmediateInterfaceTypesOfFSharpTycon |> List.iter (CheckTypePermitByrefs cenv env m) - if tycon.IsUnionTycon then (* This covers finite unions. *) + superOfTycon cenv.g tycon |> CheckTypeNoByrefs cenv env m + + if tycon.IsUnionTycon then tycon.UnionCasesAsList |> List.iter (fun uc -> CheckAttribs cenv env uc.Attribs uc.RecdFields |> List.iter (CheckRecdField true cenv env tycon)) + // Access checks let access = AdjustAccess (IsHiddenTycon env.sigToImplRemapInfo tycon) (fun () -> tycon.CompilationPath) tycon.Accessibility let visitType ty = CheckTypeForAccess cenv env (fun () -> tycon.DisplayNameWithStaticParametersAndUnderscoreTypars) access tycon.Range ty - abstractSlotValsOfTycons [tycon] |> List.iter (typeOfVal >> visitType) (* check vslots = abstract slots *) + abstractSlotValsOfTycons [tycon] |> List.iter (typeOfVal >> visitType) superOfTycon cenv.g tycon |> visitType + // We do not have to check access of interface implementations. See FSharp 1.0 5042 //implements_of_tycon cenv.g tycon |> List.iter visitType if tycon.IsFSharpDelegateTycon then @@ -1493,7 +1615,8 @@ let CheckEntityDefn cenv env (tycon:Entity) = AllSuperTypesOfType cenv.g cenv.amap tycon.Range AllowMultiIntfInstantiations.Yes (generalizedTyconRef (mkLocalTyconRef tycon)) |> List.filter (isInterfaceTy cenv.g) - if tycon.IsFSharpInterfaceTycon then List.iter visitType interfaces // Check inherited interface is as accessible + if tycon.IsFSharpInterfaceTycon then + List.iter visitType interfaces // Check inherited interface is as accessible if cenv.reportErrors then if not tycon.IsTypeAbbrev then @@ -1507,15 +1630,16 @@ let CheckEntityDefn cenv env (tycon:Entity) = // Check struct fields. We check these late because we have to have first checked that the structs are // free of cycles if tycon.IsStructOrEnumTycon then - tycon.AllInstanceFieldsAsList |> List.iter (fun f -> + for f in tycon.AllInstanceFieldsAsList do // Check if it's marked unsafe let zeroInitUnsafe = TryFindFSharpBoolAttribute cenv.g cenv.g.attrib_DefaultValueAttribute f.FieldAttribs if zeroInitUnsafe = Some(true) then let ty' = generalizedTyconRef (mkLocalTyconRef tycon) if not (TypeHasDefaultValue cenv.g m ty') then errorR(Error(FSComp.SR.chkValueWithDefaultValueMustHaveDefaultValue(), m)) - ) - match tycon.TypeAbbrev with (* And type abbreviations *) + + // Check type abbreviations + match tycon.TypeAbbrev with | None -> () | Some typ -> CheckForByrefLikeType cenv env typ (fun () -> errorR(Error(FSComp.SR.chkNoByrefInTypeAbbrev(), tycon.Range))) @@ -1555,7 +1679,7 @@ and CheckDefnInModule cenv env x = | TMDefDo(e,m) -> CheckNothingAfterEntryPoint cenv m CheckNoReraise cenv None e - CheckExpr cenv env e + CheckExprNoByrefs cenv env e | TMAbstract(def) -> CheckModuleExpr cenv env def | TMDefs(defs) -> CheckDefnsInModule cenv env defs @@ -1600,6 +1724,7 @@ let CheckTopImpl (g,amap,reportErrors,infoReader,internalsVisibleToPaths,viewCcu quote=false limited=false boundTyparNames=[] + argVals = ValMap.Empty boundTypars= TyparMap.Empty reflect=false } diff --git a/src/fsharp/QuotationTranslator.fs b/src/fsharp/QuotationTranslator.fs index 3361b5ec54f..1037acc09ea 100644 --- a/src/fsharp/QuotationTranslator.fs +++ b/src/fsharp/QuotationTranslator.fs @@ -38,9 +38,9 @@ type QuotationSerializationFormat = | FSharp_20_Plus type QuotationGenerationScope = - { g: TcGlobals; - amap: Import.ImportMap; - scope: CcuThunk; + { g: TcGlobals + amap: Import.ImportMap + scope: CcuThunk // Accumulate the references to type definitions referencedTypeDefs: ResizeArray referencedTypeDefsTable: Dictionary @@ -78,10 +78,10 @@ type QuotationGenerationScope = type QuotationTranslationEnv = { //Map from Val to binding index - vs: ValMap; - nvs: int; + vs: ValMap + nvs: int //Map from typar stamps to binding index - tyvs: StampMap; + tyvs: StampMap // Map for values bound by the // 'let v = isinst e in .... if nonnull v then ...v .... ' // construct arising out the compilation of pattern matching. We decode these back to the form @@ -90,9 +90,9 @@ type QuotationTranslationEnv = substVals: ValMap } static member Empty = - { vs=ValMap<_>.Empty; - nvs=0; - tyvs = Map.empty ; + { vs=ValMap<_>.Empty + nvs=0 + tyvs = Map.empty isinstVals = ValMap<_>.Empty substVals = ValMap<_>.Empty } @@ -178,15 +178,15 @@ let rec EmitDebugInfoIfNecessary cenv env m astExpr : QP.ExprData = if cenv.emitDebugInfoInQuotations && not (QP.isAttributedExpression astExpr) then cenv.emitDebugInfoInQuotations <- false try - let mk_tuple g m es = mkTupled g m es (List.map (tyOfExpr g) es) + let mk_tuple g m es = mkRefTupled g m es (List.map (tyOfExpr g) es) let rangeExpr = mk_tuple cenv.g m - [ mkString cenv.g m m.FileName; - mkInt cenv.g m m.StartLine; - mkInt cenv.g m m.StartColumn; - mkInt cenv.g m m.EndLine; - mkInt cenv.g m m.EndColumn; ] + [ mkString cenv.g m m.FileName + mkInt cenv.g m m.StartLine + mkInt cenv.g m m.StartColumn + mkInt cenv.g m m.EndLine + mkInt cenv.g m m.EndColumn; ] let attrExpr = mk_tuple cenv.g m [ mkString cenv.g m "DebugRange"; rangeExpr ] @@ -224,7 +224,7 @@ and private ConvExprCore cenv (env : QuotationTranslationEnv) (expr: Expr) : QP. match (freeInExpr CollectTyparsAndLocalsNoCaching x0).FreeLocals |> Seq.tryPick (fun v -> if env.vs.ContainsVal v then Some(v) else None) with | Some v -> errorR(Error(FSComp.SR.crefBoundVarUsedInSplice(v.DisplayName), v.Range)) | None -> () - cenv.exprSplices.Add((x0, m)); + cenv.exprSplices.Add((x0, m)) let hole = QP.mkHole(ConvType cenv env m ty,idx) (hole, rest) ||> List.fold (fun fR arg -> QP.mkApp (fR,ConvExpr cenv env arg)) @@ -264,7 +264,7 @@ and private ConvExprCore cenv (env : QuotationTranslationEnv) (expr: Expr) : QP. // If so, adjust and try again if curriedArgs.Length < curriedArgInfos.Length || ((List.take curriedArgInfos.Length curriedArgs,curriedArgInfos) ||> List.exists2 (fun arg argInfo -> - (argInfo.Length > (tryDestTuple arg).Length))) then + (argInfo.Length > (tryDestRefTupleExpr arg).Length))) then if verboseCReflect then dprintfn "vref.DisplayName = %A was under applied" vref.DisplayName @@ -292,7 +292,7 @@ and private ConvExprCore cenv (env : QuotationTranslationEnv) (expr: Expr) : QP. let numUntupledArgs = curriedArgInfo.Length (if numUntupledArgs = 0 then [] elif numUntupledArgs = 1 then [arg] - else tryDestTuple arg)) + else tryDestRefTupleExpr arg)) if verboseCReflect then dprintfn "vref.DisplayName = %A , after unit adjust, #untupledCurriedArgs = %A, #curriedArgInfos = %d" vref.DisplayName (List.map List.length untupledCurriedArgs) curriedArgInfos.Length @@ -345,7 +345,7 @@ and private ConvExprCore cenv (env : QuotationTranslationEnv) (expr: Expr) : QP. // Simple applications | Expr.App(f,_fty,tyargs,args,m) -> - if nonNil tyargs then wfail(Error(FSComp.SR.crefQuotationsCantContainGenericExprs(), m)); + if nonNil tyargs then wfail(Error(FSComp.SR.crefQuotationsCantContainGenericExprs(), m)) List.fold (fun fR arg -> QP.mkApp (fR,ConvExpr cenv env arg)) (ConvExpr cenv env f) args // REVIEW: what is the quotation view of literals accessing enumerations? Currently they show up as integers. @@ -372,7 +372,7 @@ and private ConvExprCore cenv (env : QuotationTranslationEnv) (expr: Expr) : QP. QP.mkLetRec(FlatList.toList bindsR,bodyR) | Expr.Lambda(_,_,_,vs,b,_,_) -> - let v,b = MultiLambdaToTupledLambda vs b + let v,b = MultiLambdaToTupledLambda cenv.g vs b let vR = ConvVal cenv env v let bR = ConvExpr cenv (BindVal env v) b QP.mkLambda(vR, bR) @@ -415,10 +415,10 @@ and private ConvExprCore cenv (env : QuotationTranslationEnv) (expr: Expr) : QP. let tyargsR = ConvTypes cenv env m tyargs let argsR = ConvExprs cenv env args QP.mkSum(mkR,tyargsR,argsR) - | TOp.Tuple,tyargs,_ -> - let tyR = ConvType cenv env m (mkTupledTy cenv.g tyargs) + | TOp.Tuple tupInfo,tyargs,_ -> + let tyR = ConvType cenv env m (mkAnyTupledTy cenv.g tupInfo tyargs) let argsR = ConvExprs cenv env args - QP.mkTuple(tyR,argsR) + QP.mkTuple(tyR,argsR) // TODO: propagate to quotations | TOp.Recd (_,tcref),_,_ -> let rgtypR = ConvTyconRef cenv tcref m let tyargsR = ConvTypes cenv env m tyargs @@ -442,8 +442,8 @@ and private ConvExprCore cenv (env : QuotationTranslationEnv) (expr: Expr) : QP. | TOp.ValFieldGet(rfref),tyargs,args -> ConvRFieldGet cenv env m rfref tyargs args - | TOp.TupleFieldGet(n),tyargs,[e] -> - let tyR = ConvType cenv env m (mkTupledTy cenv.g tyargs) + | TOp.TupleFieldGet(tupInfo,n),tyargs,[e] when not (evalTupInfoIsStruct tupInfo) -> + let tyR = ConvType cenv env m (mkRefTupledTy cenv.g tyargs) QP.mkTupleGet(tyR, n, ConvExpr cenv env e) | TOp.ILAsm(([ I_ldfld(_,_,fspec) ] @@ -478,8 +478,8 @@ and private ConvExprCore cenv (env : QuotationTranslationEnv) (expr: Expr) : QP. let methArgTypesR = ConvTypes cenv env m argtys let argsR = ConvExprs cenv env args let objR = - QP.mkCtorCall( { ctorParent = parentTyconR; - ctorArgTypes = methArgTypesR }, + QP.mkCtorCall( { ctorParent = parentTyconR + ctorArgTypes = methArgTypesR }, [], argsR) let exnTypeR = ConvType cenv env m cenv.g.exn_ty QP.mkCoerce(exnTypeR, objR) @@ -687,17 +687,19 @@ and ConvObjectModelCallCore cenv env m (isPropGet,isPropSet,isNewObj,parentTycon QP.mkPropSet( (parentTyconR, propName,propTy,args),tyargsR, callArgsR) elif isNewObj then - QP.mkCtorCall( { ctorParent = parentTyconR; - ctorArgTypes = methArgTypesR }, - tyargsR, callArgsR) + let ctorR : QuotationPickler.CtorData = + { ctorParent = parentTyconR + ctorArgTypes = methArgTypesR } + QP.mkCtorCall(ctorR, tyargsR, callArgsR) else - QP.mkMethodCall( { methParent = parentTyconR; - methArgTypes = methArgTypesR; - methRetType = methRetTypeR; - methName = methName; - numGenericArgs=numGenericArgs }, - tyargsR, callArgsR) + let methR : QuotationPickler.MethodData = + { methParent = parentTyconR + methArgTypes = methArgTypesR + methRetType = methRetTypeR + methName = methName + numGenericArgs=numGenericArgs } + QP.mkMethodCall(methR, tyargsR, callArgsR) and ConvModuleValueApp cenv env m (vref:ValRef) tyargs (args: Expr list list) = EmitDebugInfoIfNecessary cenv env m (ConvModuleValueAppCore cenv env m vref tyargs args) @@ -727,7 +729,7 @@ and private ConvValRefCore holeOk cenv env m (vref:ValRef) tyargs = let e = env.substVals.[v] ConvExpr cenv env e elif env.vs.ContainsVal v then - if nonNil tyargs then wfail(InternalError("ignoring generic application of local quoted variable",m)); + if nonNil tyargs then wfail(InternalError("ignoring generic application of local quoted variable",m)) QP.mkVar(env.vs.[v]) elif v.BaseOrThisInfo = CtorThisVal && cenv.isReflectedDefinition = IsReflectedDefinition.Yes then QP.mkThisVar(ConvType cenv env m v.Type) @@ -738,7 +740,7 @@ and private ConvValRefCore holeOk cenv env m (vref:ValRef) tyargs = // References to local values are embedded by value if not holeOk then wfail(Error(FSComp.SR.crefNoSetOfHole(),m)) let idx = cenv.exprSplices.Count - cenv.exprSplices.Add((mkCallLiftValueWithName cenv.g m vty v.LogicalName (exprForValRef m vref), m)); + cenv.exprSplices.Add((mkCallLiftValueWithName cenv.g m vty v.LogicalName (exprForValRef m vref), m)) QP.mkHole(ConvType cenv env m vty,idx) | Parent _ -> ConvModuleValueApp cenv env m vref tyargs [] @@ -772,7 +774,7 @@ and ConvTyparRef cenv env m (tp:Typar) = | Some idx -> idx | None -> let idx = cenv.typeSplices.Count - cenv.typeSplices.Add((tp, m)); + cenv.typeSplices.Add((tp, m)) idx and FilterMeasureTyargs tys = @@ -793,7 +795,7 @@ and ConvType cenv env m typ = QP.mkILNamedTy(ConvTyconRef cenv tcref m, ConvTypes cenv env m tyargs) | TType_fun(a,b) -> QP.mkFunTy(ConvType cenv env m a,ConvType cenv env m b) - | TType_tuple(l) -> ConvType cenv env m (mkCompiledTupleTy cenv.g l) + | TType_tuple(tupInfo,l) -> ConvType cenv env m (mkCompiledTupleTy cenv.g (evalTupInfoIsStruct tupInfo) l) | TType_var(tp) -> QP.mkVarTy(ConvTyparRef cenv env m tp) | TType_forall(_spec,_ty) -> wfail(Error(FSComp.SR.crefNoInnerGenericsInQuotations(),m)) | _ -> wfail(Error (FSComp.SR.crefQuotationsCantContainThisType(),m)) @@ -1022,14 +1024,14 @@ let ConvMethodBase cenv env (methName, v:Val) = if isNewObj then QP.MethodBaseData.Ctor - { ctorParent = parentTyconR; + { ctorParent = parentTyconR ctorArgTypes = methArgTypesR } else QP.MethodBaseData.Method - { methParent = parentTyconR; - methArgTypes = methArgTypesR; - methRetType = methRetTypeR; - methName = methName; + { methParent = parentTyconR + methArgTypes = methArgTypesR + methRetType = methRetTypeR + methName = methName numGenericArgs=numGenericArgs } | _ when v.IsExtensionMember -> @@ -1050,8 +1052,8 @@ let ConvMethodBase cenv env (methName, v:Val) = | _ -> QP.MethodBaseData.ModuleDefn - { Name = methName; - Module = parentTyconR; + { Name = methName + Module = parentTyconR IsProperty = IsCompiledAsStaticProperty cenv.g v } diff --git a/src/fsharp/ReferenceResolution.fs b/src/fsharp/ReferenceResolution.fs index 7340b8a429f..b2a275b8f28 100644 --- a/src/fsharp/ReferenceResolution.fs +++ b/src/fsharp/ReferenceResolution.fs @@ -39,7 +39,6 @@ module internal MSBuildResolver = open Microsoft.Build.Tasks open Microsoft.Build.Utilities open Microsoft.Build.Framework - open Microsoft.Build.BuildEngine open System.IO type ResolvedFile = @@ -135,13 +134,18 @@ module internal MSBuildResolver = [] let private Net451 = "v4.5.1" - /// The list of supported .NET Framework version numbers, using the monikers of the Reference Assemblies folder. - let SupportedNetFrameworkVersions = set [ Net20; Net30; Net35; Net40; Net45; Net451; (*SL only*) "v5.0" ] + //[] + //let private Net452 = "v4.5.2" // not available in Dev15 MSBuild version + + [] + let private Net46 = "v4.6" + + [] + let private Net461 = "v4.6.1" /// Get the path to the .NET Framework implementation assemblies by using ToolLocationHelper.GetPathToDotNetFramework. /// This is only used to specify the "last resort" path for assembly resolution. let GetPathToDotNetFrameworkImlpementationAssemblies(v) = -#if FX_ATLEAST_45 let v = match v with | Net11 -> Some TargetDotNetFrameworkVersion.Version11 @@ -151,6 +155,9 @@ module internal MSBuildResolver = | Net40 -> Some TargetDotNetFrameworkVersion.Version40 | Net45 -> Some TargetDotNetFrameworkVersion.Version45 | Net451 -> Some TargetDotNetFrameworkVersion.Version451 + //| Net452 -> Some TargetDotNetFrameworkVersion.Version452 // not available in Dev15 MSBuild version + | Net46 -> Some TargetDotNetFrameworkVersion.Version46 + | Net461 -> Some TargetDotNetFrameworkVersion.Version461 | _ -> assert false; None match v with | Some v -> @@ -158,20 +165,17 @@ module internal MSBuildResolver = | null -> [] | x -> [x] | _ -> [] -#else - // FX_ATLEAST_45 is not defined for step when we build compiler with proto compiler. - ignore v - [] -#endif let GetPathToDotNetFrameworkReferenceAssembliesFor40Plus(version) = -#if FX_ATLEAST_45 // starting with .Net 4.0, the runtime dirs (WindowsFramework) are never used by MSBuild RAR let v = match version with | Net40 -> Some TargetDotNetFrameworkVersion.Version40 | Net45 -> Some TargetDotNetFrameworkVersion.Version45 | Net451 -> Some TargetDotNetFrameworkVersion.Version451 + //| Net452 -> Some TargetDotNetFrameworkVersion.Version452 // not available in Dev15 MSBuild version + | Net46 -> Some TargetDotNetFrameworkVersion.Version46 + | Net461 -> Some TargetDotNetFrameworkVersion.Version461 | _ -> assert false; None // unknown version - some parts in the code are not synced match v with | Some v -> @@ -179,22 +183,16 @@ module internal MSBuildResolver = | null -> [] | x -> [x] | None -> [] -#else - // FX_ATLEAST_45 is not defined for step when we build compiler with proto compiler. - ignore version - [] -#endif /// Use MSBuild to determine the version of the highest installed framework. let HighestInstalledNetFrameworkVersionMajorMinor() = -#if FX_ATLEAST_45 - if box (ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version451)) <> null then 4, Net451 + if box (ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version461)) <> null then 4, Net461 + elif box (ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version46)) <> null then 4, Net46 + // 4.5.2 enumeration is not available in Dev15 MSBuild version + //elif box (ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version452)) <> null then 4, Net452 + elif box (ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version451)) <> null then 4, Net451 elif box (ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version45)) <> null then 4, Net45 else 4, Net40 // version is 4.0 assumed since this code is running. -#else - // FX_ATLEAST_45 is not defined is required for step when we build compiler with proto compiler and this branch should not be hit - 4, Net40 -#endif /// Derive the target framework directories. let DeriveTargetFrameworkDirectories (targetFrameworkVersion:string, logMessage) = diff --git a/src/fsharp/ReferenceResolution.fsi b/src/fsharp/ReferenceResolution.fsi index 555dc07ad45..4c7b87cffbf 100644 --- a/src/fsharp/ReferenceResolution.fsi +++ b/src/fsharp/ReferenceResolution.fsi @@ -7,8 +7,6 @@ module internal MSBuildResolver = exception ResolutionFailure - val SupportedNetFrameworkVersions : Set - val HighestInstalledNetFrameworkVersionMajorMinor : unit -> int * string /// Describes the location where the reference was found. diff --git a/src/fsharp/TastOps.fs b/src/fsharp/TastOps.fs old mode 100755 new mode 100644 index 2be517b27dd..83a80cb4152 --- a/src/fsharp/TastOps.fs +++ b/src/fsharp/TastOps.fs @@ -111,9 +111,8 @@ let rec instTyparRef tpinst ty tp = if typarEq tp tp' then ty' else instTyparRef t ty tp -let instUnitTyparRef tpinst unt (tp:Typar) = +let instMeasureTyparRef tpinst unt (tp:Typar) = match tp.Kind with - | TyparKind.Type -> failwith "instUnitTyparRef: kind=Type" | TyparKind.Measure -> let rec loop tpinst = match tpinst with @@ -122,10 +121,11 @@ let instUnitTyparRef tpinst unt (tp:Typar) = if typarEq tp tp' then match ty' with | TType_measure unt -> unt - | _ -> failwith "instUnitTyparRef incorrect kind"; + | _ -> failwith "instMeasureTyparRef incorrect kind"; else loop t loop tpinst + | _ -> failwith "instMeasureTyparRef: kind=Type" let remapTyconRef (tcmap: TyconRefMap<_>) tcr = match tcmap.TryFind tcr with @@ -166,33 +166,37 @@ let rec remapTypeAux (tyenv : Remap) (ty:TType) = | Some tcr' -> TType_ucase (UCRef(tcr',n),remapTypesAux tyenv tinst) | None -> TType_ucase (UCRef(tcr,n),remapTypesAux tyenv tinst) - | TType_tuple l as ty -> + | TType_tuple (tupInfo, l) as ty -> + let tupInfo' = remapTupInfoAux tyenv tupInfo let l' = remapTypesAux tyenv l - if l === l' then ty else - TType_tuple (l') + if tupInfo === tupInfo' && l === l' then ty else + TType_tuple (tupInfo', l') + | TType_fun (d,r) as ty -> let d' = remapTypeAux tyenv d let r' = remapTypeAux tyenv r if d === d' && r === r' then ty else TType_fun (d', r') + | TType_forall (tps,ty) -> let tps',tyenv = copyAndRemapAndBindTypars tyenv tps TType_forall (tps', remapTypeAux tyenv ty) + | TType_measure unt -> TType_measure (remapMeasureAux tyenv unt) and remapMeasureAux tyenv unt = match unt with - | MeasureOne -> unt - | MeasureCon tcr -> + | Measure.One -> unt + | Measure.Con tcr -> match tyenv.tyconRefRemap.TryFind tcr with - | Some tcr -> MeasureCon tcr + | Some tcr -> Measure.Con tcr | None -> unt - | MeasureProd(u1,u2) -> MeasureProd(remapMeasureAux tyenv u1, remapMeasureAux tyenv u2) - | MeasureRationalPower(u,q) -> MeasureRationalPower(remapMeasureAux tyenv u, q) - | MeasureInv u -> MeasureInv(remapMeasureAux tyenv u) - | MeasureVar tp as unt -> + | Measure.Prod(u1,u2) -> Measure.Prod(remapMeasureAux tyenv u1, remapMeasureAux tyenv u2) + | Measure.RationalPower(u,q) -> Measure.RationalPower(remapMeasureAux tyenv u, q) + | Measure.Inv u -> Measure.Inv(remapMeasureAux tyenv u) + | Measure.Var tp as unt -> match tp.Solution with | None -> if ListAssoc.containsKey typarEq tp tyenv.tpinst then @@ -202,6 +206,11 @@ and remapMeasureAux tyenv unt = else unt | Some (TType_measure unt) -> remapMeasureAux tyenv unt | Some ty -> failwithf "incorrect kinds: %A" ty + +and remapTupInfoAux _tyenv unt = + match unt with + | TupInfo.Const _ -> unt + and remapTypesAux tyenv types = List.mapq (remapTypeAux tyenv) types and remapTyparConstraintsAux tyenv cs = cs |> List.choose (fun x -> @@ -381,7 +390,7 @@ let reduceTyconRefAbbrevMeasureable (tcref:TyconRef) = let rec stripUnitEqnsFromMeasureAux canShortcut unt = match stripUnitEqnsAux canShortcut unt with - | MeasureCon tcref when tcref.IsTypeAbbrev -> + | Measure.Con tcref when tcref.IsTypeAbbrev -> stripUnitEqnsFromMeasureAux canShortcut (reduceTyconRefAbbrevMeasureable tcref) | m -> m @@ -392,41 +401,41 @@ let stripUnitEqnsFromMeasure m = stripUnitEqnsFromMeasureAux false m //--------------------------------------------------------------------------- /// What is the contribution of unit-of-measure constant ucref to unit-of-measure expression measure? -let rec MeasureConExponent g abbrev ucref unt = +let rec MeasureExprConExponent g abbrev ucref unt = match (if abbrev then stripUnitEqnsFromMeasure unt else stripUnitEqns unt) with - | MeasureCon ucref' -> if tyconRefEq g ucref' ucref then OneRational else ZeroRational - | MeasureInv unt' -> NegRational(MeasureConExponent g abbrev ucref unt') - | MeasureProd(unt1,unt2) -> AddRational(MeasureConExponent g abbrev ucref unt1) (MeasureConExponent g abbrev ucref unt2) - | MeasureRationalPower(unt',q) -> MulRational (MeasureConExponent g abbrev ucref unt') q + | Measure.Con ucref' -> if tyconRefEq g ucref' ucref then OneRational else ZeroRational + | Measure.Inv unt' -> NegRational(MeasureExprConExponent g abbrev ucref unt') + | Measure.Prod(unt1,unt2) -> AddRational(MeasureExprConExponent g abbrev ucref unt1) (MeasureExprConExponent g abbrev ucref unt2) + | Measure.RationalPower(unt',q) -> MulRational (MeasureExprConExponent g abbrev ucref unt') q | _ -> ZeroRational /// What is the contribution of unit-of-measure constant ucref to unit-of-measure expression measure /// after remapping tycons? let rec MeasureConExponentAfterRemapping g r ucref unt = match stripUnitEqnsFromMeasure unt with - | MeasureCon ucref' -> if tyconRefEq g (r ucref') ucref then OneRational else ZeroRational - | MeasureInv unt' -> NegRational(MeasureConExponentAfterRemapping g r ucref unt') - | MeasureProd(unt1,unt2) -> AddRational(MeasureConExponentAfterRemapping g r ucref unt1) (MeasureConExponentAfterRemapping g r ucref unt2) - | MeasureRationalPower(unt',q) -> MulRational (MeasureConExponentAfterRemapping g r ucref unt') q + | Measure.Con ucref' -> if tyconRefEq g (r ucref') ucref then OneRational else ZeroRational + | Measure.Inv unt' -> NegRational(MeasureConExponentAfterRemapping g r ucref unt') + | Measure.Prod(unt1,unt2) -> AddRational(MeasureConExponentAfterRemapping g r ucref unt1) (MeasureConExponentAfterRemapping g r ucref unt2) + | Measure.RationalPower(unt',q) -> MulRational (MeasureConExponentAfterRemapping g r ucref unt') q | _ -> ZeroRational /// What is the contribution of unit-of-measure variable tp to unit-of-measure expression unt? let rec MeasureVarExponent tp unt = match stripUnitEqnsFromMeasure unt with - | MeasureVar tp' -> if typarEq tp tp' then OneRational else ZeroRational - | MeasureInv unt' -> NegRational(MeasureVarExponent tp unt') - | MeasureProd(unt1,unt2) -> AddRational(MeasureVarExponent tp unt1) (MeasureVarExponent tp unt2) - | MeasureRationalPower(unt',q) -> MulRational (MeasureVarExponent tp unt') q + | Measure.Var tp' -> if typarEq tp tp' then OneRational else ZeroRational + | Measure.Inv unt' -> NegRational(MeasureVarExponent tp unt') + | Measure.Prod(unt1,unt2) -> AddRational(MeasureVarExponent tp unt1) (MeasureVarExponent tp unt2) + | Measure.RationalPower(unt',q) -> MulRational (MeasureVarExponent tp unt') q | _ -> ZeroRational /// List the *literal* occurrences of unit variables in a unit expression, without repeats let ListMeasureVarOccs unt = let rec gather acc unt = match stripUnitEqnsFromMeasure unt with - MeasureVar tp -> if List.exists (typarEq tp) acc then acc else tp::acc - | MeasureProd(unt1,unt2) -> gather (gather acc unt1) unt2 - | MeasureRationalPower(unt',_) -> gather acc unt' - | MeasureInv unt' -> gather acc unt' + Measure.Var tp -> if List.exists (typarEq tp) acc then acc else tp::acc + | Measure.Prod(unt1,unt2) -> gather (gather acc unt1) unt2 + | Measure.RationalPower(unt',_) -> gather acc unt' + | Measure.Inv unt' -> gather acc unt' | _ -> acc gather [] unt @@ -434,11 +443,12 @@ let ListMeasureVarOccs unt = let ListMeasureVarOccsWithNonZeroExponents untexpr = let rec gather acc unt = match stripUnitEqnsFromMeasure unt with - MeasureVar tp -> if List.exists (fun (tp', _) -> typarEq tp tp') acc then acc - else let e = MeasureVarExponent tp untexpr in if e = ZeroRational then acc else (tp,e)::acc - | MeasureProd(unt1,unt2) -> gather (gather acc unt1) unt2 - | MeasureInv unt' -> gather acc unt' - | MeasureRationalPower(unt',_) -> gather acc unt' + | Measure.Var tp -> + if List.exists (fun (tp', _) -> typarEq tp tp') acc then acc + else let e = MeasureVarExponent tp untexpr in if e = ZeroRational then acc else (tp,e)::acc + | Measure.Prod(unt1,unt2) -> gather (gather acc unt1) unt2 + | Measure.Inv unt' -> gather acc unt' + | Measure.RationalPower(unt',_) -> gather acc unt' | _ -> acc gather [] untexpr @@ -446,11 +456,12 @@ let ListMeasureVarOccsWithNonZeroExponents untexpr = let ListMeasureConOccsWithNonZeroExponents g eraseAbbrevs untexpr = let rec gather acc unt = match (if eraseAbbrevs then stripUnitEqnsFromMeasure unt else stripUnitEqns unt) with - | MeasureCon c -> if List.exists (fun (c', _) -> tyconRefEq g c c') acc then acc - else let e = MeasureConExponent g eraseAbbrevs c untexpr in if e = ZeroRational then acc else (c,e)::acc - | MeasureProd(unt1,unt2) -> gather (gather acc unt1) unt2 - | MeasureInv unt' -> gather acc unt' - | MeasureRationalPower(unt',_) -> gather acc unt' + | Measure.Con c -> + if List.exists (fun (c', _) -> tyconRefEq g c c') acc then acc else + let e = MeasureExprConExponent g eraseAbbrevs c untexpr in if e = ZeroRational then acc else (c,e)::acc + | Measure.Prod(unt1,unt2) -> gather (gather acc unt1) unt2 + | Measure.Inv unt' -> gather acc unt' + | Measure.RationalPower(unt',_) -> gather acc unt' | _ -> acc gather [] untexpr @@ -459,28 +470,28 @@ let ListMeasureConOccsWithNonZeroExponents g eraseAbbrevs untexpr = let ListMeasureConOccsAfterRemapping g r unt = let rec gather acc unt = match (stripUnitEqnsFromMeasure unt) with - | MeasureCon c -> if List.exists (tyconRefEq g (r c)) acc then acc else r c::acc - | MeasureProd(unt1,unt2) -> gather (gather acc unt1) unt2 - | MeasureRationalPower(unt',_) -> gather acc unt' - | MeasureInv unt' -> gather acc unt' + | Measure.Con c -> if List.exists (tyconRefEq g (r c)) acc then acc else r c::acc + | Measure.Prod(unt1,unt2) -> gather (gather acc unt1) unt2 + | Measure.RationalPower(unt',_) -> gather acc unt' + | Measure.Inv unt' -> gather acc unt' | _ -> acc gather [] unt /// Construct a measure expression representing the n'th power of a measure let MeasurePower u n = - if n=0 then MeasureOne + if n=0 then Measure.One elif n=1 then u - else MeasureRationalPower (u, intToRational n) + else Measure.RationalPower (u, intToRational n) let MeasureProdOpt m1 m2 = match m1, m2 with - | MeasureOne, _ -> m2 - | _, MeasureOne -> m1 - | _, _ -> MeasureProd (m1,m2) + | Measure.One, _ -> m2 + | _, Measure.One -> m1 + | _, _ -> Measure.Prod (m1,m2) /// Construct a measure expression representing the product of a list of measures -let ProdMeasures ms = match ms with [] -> MeasureOne | m::ms -> List.foldBack MeasureProdOpt ms m +let ProdMeasures ms = match ms with [] -> Measure.One | m::ms -> List.foldBack MeasureProdOpt ms m let isDimensionless g tyarg = match stripTyparEqns tyarg with @@ -509,13 +520,13 @@ let normalizeMeasure g ms = let vs = ListMeasureVarOccsWithNonZeroExponents ms let cs = ListMeasureConOccsWithNonZeroExponents g false ms match vs, cs with - | [],[] -> MeasureOne - | [(v,e)], [] when e = OneRational -> MeasureVar v - | vs, cs -> List.foldBack (fun (v,e) -> fun m -> MeasureProd (MeasureRationalPower (MeasureVar v, e), m)) vs (List.foldBack (fun (c,e) -> fun m -> MeasureProd (MeasureRationalPower (MeasureCon c, e), m)) cs MeasureOne) + | [],[] -> Measure.One + | [(v,e)], [] when e = OneRational -> Measure.Var v + | vs, cs -> List.foldBack (fun (v,e) -> fun m -> Measure.Prod (Measure.RationalPower (Measure.Var v, e), m)) vs (List.foldBack (fun (c,e) -> fun m -> Measure.Prod (Measure.RationalPower (Measure.Con c, e), m)) cs Measure.One) let tryNormalizeMeasureInType g ty = match ty with - | TType_measure (MeasureVar v) -> + | TType_measure (Measure.Var v) -> match v.Solution with | Some (TType_measure ms) -> (v.Data.typar_solution <- Some (TType_measure (normalizeMeasure g ms)); ty) @@ -523,15 +534,6 @@ let tryNormalizeMeasureInType g ty = | _ -> ty -let rec sizeMeasure g ms = - match stripUnitEqns ms with - | MeasureVar _ -> 1 - | MeasureCon _ -> 1 - | MeasureProd (ms1,ms2) -> sizeMeasure g ms1 + sizeMeasure g ms2 - | MeasureRationalPower (ms,_) -> sizeMeasure g ms - | MeasureInv ms -> sizeMeasure g ms - | MeasureOne -> 1 - //--------------------------------------------------------------------------- // Some basic type builders //--------------------------------------------------------------------------- @@ -557,34 +559,42 @@ let goodTupleFields = maxTuple-1 let isCompiledTupleTyconRef g tcref = match tcref with | x when - (tyconRefEq g g.tuple1_tcr x || - tyconRefEq g g.tuple2_tcr x || - tyconRefEq g g.tuple3_tcr x || - tyconRefEq g g.tuple4_tcr x || - tyconRefEq g g.tuple5_tcr x || - tyconRefEq g g.tuple6_tcr x || - tyconRefEq g g.tuple7_tcr x || - tyconRefEq g g.tuple8_tcr x) -> true + (tyconRefEq g g.ref_tuple1_tcr x || + tyconRefEq g g.ref_tuple2_tcr x || + tyconRefEq g g.ref_tuple3_tcr x || + tyconRefEq g g.ref_tuple4_tcr x || + tyconRefEq g g.ref_tuple5_tcr x || + tyconRefEq g g.ref_tuple6_tcr x || + tyconRefEq g g.ref_tuple7_tcr x || + tyconRefEq g g.ref_tuple8_tcr x || + tyconRefEq g g.struct_tuple1_tcr x || + tyconRefEq g g.struct_tuple2_tcr x || + tyconRefEq g g.struct_tuple3_tcr x || + tyconRefEq g g.struct_tuple4_tcr x || + tyconRefEq g g.struct_tuple5_tcr x || + tyconRefEq g g.struct_tuple6_tcr x || + tyconRefEq g g.struct_tuple7_tcr x || + tyconRefEq g g.struct_tuple8_tcr x) -> true | _ -> false -let mkCompiledTupleTyconRef g tys = +let mkCompiledTupleTyconRef g isStruct tys = let n = List.length tys - if n = 1 then g.tuple1_tcr - elif n = 2 then g.tuple2_tcr - elif n = 3 then g.tuple3_tcr - elif n = 4 then g.tuple4_tcr - elif n = 5 then g.tuple5_tcr - elif n = 6 then g.tuple6_tcr - elif n = 7 then g.tuple7_tcr - elif n = 8 then g.tuple8_tcr + if n = 1 then (if isStruct then g.struct_tuple1_tcr else g.ref_tuple1_tcr) + elif n = 2 then (if isStruct then g.struct_tuple2_tcr else g.ref_tuple2_tcr) + elif n = 3 then (if isStruct then g.struct_tuple3_tcr else g.ref_tuple3_tcr) + elif n = 4 then (if isStruct then g.struct_tuple4_tcr else g.ref_tuple4_tcr) + elif n = 5 then (if isStruct then g.struct_tuple5_tcr else g.ref_tuple5_tcr) + elif n = 6 then (if isStruct then g.struct_tuple6_tcr else g.ref_tuple6_tcr) + elif n = 7 then (if isStruct then g.struct_tuple7_tcr else g.ref_tuple7_tcr) + elif n = 8 then (if isStruct then g.struct_tuple8_tcr else g.ref_tuple8_tcr) else failwithf "mkCompiledTupleTyconRef, n = %d" n -let rec mkCompiledTupleTy g tys = +let rec mkCompiledTupleTy g isStruct tys = let n = List.length tys - if n < maxTuple then TType_app (mkCompiledTupleTyconRef g tys, tys) + if n < maxTuple then TType_app (mkCompiledTupleTyconRef g isStruct tys, tys) else let tysA,tysB = List.splitAfter goodTupleFields tys - TType_app (g.tuple8_tcr, tysA@[mkCompiledTupleTy g tysB]) + TType_app ((if isStruct then g.struct_tuple8_tcr else g.ref_tuple8_tcr), tysA@[mkCompiledTupleTy g isStruct tysB]) //--------------------------------------------------------------------------- // Remove inference equations and abbreviations from types @@ -614,7 +624,7 @@ let reduceTyconMeasureableOrProvided g (tycon:Tycon) tyargs = | TProvidedTypeExtensionPoint info when info.IsErased -> info.BaseTypeForErased (range0, g.obj_ty) #endif | _ -> invalidArg "tc" "this type definition is not a refinement" - + let reduceTyconRefMeasureableOrProvided (g:TcGlobals) (tcref:TyconRef) tyargs = reduceTyconMeasureableOrProvided g tcref.Deref tyargs @@ -635,6 +645,10 @@ let rec stripTyEqnsA g canShortcut ty = let stripTyEqns g ty = stripTyEqnsA g false ty +let evalTupInfoIsStruct aexpr = + match aexpr with + | TupInfo.Const b -> b + /// This erases outermost occurences of inference equations, type abbreviations, non-generated provided types /// and measureable types (float<_>). /// It also optionally erases all "compilation representations", i.e. function and @@ -651,7 +665,7 @@ let rec stripTyEqnsAndErase eraseFuncAndTuple g ty = else ty | TType_fun(a,b) when eraseFuncAndTuple -> TType_app(g.fastFunc_tcr,[ a; b]) - | TType_tuple(l) when eraseFuncAndTuple -> mkCompiledTupleTy g l + | TType_tuple(tupInfo,l) when eraseFuncAndTuple -> mkCompiledTupleTy g (evalTupInfoIsStruct tupInfo) l | ty -> ty let stripTyEqnsAndMeasureEqns g ty = @@ -674,13 +688,17 @@ let rec stripExnEqns (eref:TyconRef) = let primDestForallTy g ty = ty |> stripTyEqns g |> (function TType_forall (tyvs,tau) -> (tyvs,tau) | _ -> failwith "primDestForallTy: not a forall type") let destFunTy g ty = ty |> stripTyEqns g |> (function TType_fun (tyv,tau) -> (tyv,tau) | _ -> failwith "destFunTy: not a function type") -let destTupleTy g ty = ty |> stripTyEqns g |> (function TType_tuple l -> l | _ -> failwith "destTupleTy: not a tuple type") +let destAnyTupleTy g ty = ty |> stripTyEqns g |> (function TType_tuple (tupInfo,l) -> tupInfo,l | _ -> failwith "destAnyTupleTy: not a tuple type") +let destRefTupleTy g ty = ty |> stripTyEqns g |> (function TType_tuple (tupInfo,l) when not (evalTupInfoIsStruct tupInfo) -> l | _ -> failwith "destRefTupleTy: not a reference tuple type") +let destStructTupleTy g ty = ty |> stripTyEqns g |> (function TType_tuple (tupInfo,l) when evalTupInfoIsStruct tupInfo -> l | _ -> failwith "destStructTupleTy: not a struct tuple type") let destTyparTy g ty = ty |> stripTyEqns g |> (function TType_var v -> v | _ -> failwith "destTyparTy: not a typar type") let destAnyParTy g ty = ty |> stripTyEqns g |> (function TType_var v -> v | TType_measure unt -> destUnitParMeasure g unt | _ -> failwith "destAnyParTy: not a typar or unpar type") let destMeasureTy g ty = ty |> stripTyEqns g |> (function TType_measure m -> m | _ -> failwith "destMeasureTy: not a unit-of-measure type") let isFunTy g ty = ty |> stripTyEqns g |> (function TType_fun _ -> true | _ -> false) let isForallTy g ty = ty |> stripTyEqns g |> (function TType_forall _ -> true | _ -> false) -let isTupleTy g ty = ty |> stripTyEqns g |> (function TType_tuple _ -> true | _ -> false) +let isAnyTupleTy g ty = ty |> stripTyEqns g |> (function TType_tuple _ -> true | _ -> false) +let isRefTupleTy g ty = ty |> stripTyEqns g |> (function TType_tuple (tupInfo,_) -> not (evalTupInfoIsStruct tupInfo) | _ -> false) +let isStructTupleTy g ty = ty |> stripTyEqns g |> (function TType_tuple (tupInfo,_) -> evalTupInfoIsStruct tupInfo | _ -> false) let isUnionTy g ty = ty |> stripTyEqns g |> (function TType_app(tcr,_) -> tcr.IsUnionTycon | _ -> false) let isReprHiddenTy g ty = ty |> stripTyEqns g |> (function TType_app(tcr,_) -> tcr.IsHiddenReprTycon | _ -> false) let isFSharpObjModelTy g ty = ty |> stripTyEqns g |> (function TType_app(tcr,_) -> tcr.IsFSharpObjectModelTycon | _ -> false) @@ -689,14 +707,6 @@ let isTyparTy g ty = ty |> stripTyEqns g |> (function TType_var _ -> true | let isAnyParTy g ty = ty |> stripTyEqns g |> (function TType_var _ -> true | TType_measure unt -> isUnitParMeasure g unt | _ -> false) let isMeasureTy g ty = ty |> stripTyEqns g |> (function TType_measure _ -> true | _ -> false) -// WARNING: If you increase this you must make the corresponding types in FSharp.Core.dll structs -#if TUPLE_STRUXT -let highestTupleStructType = 2 -let isTupleStructTy g ty = ty |> stripTyEqns g |> (function TType_tuple l -> l.Length <= highestTupleStructType | _ -> false) -#else -let isTupleStructTy (_g:TcGlobals) (_ty:TType) = false -#endif - let isProvenUnionCaseTy ty = match ty with TType_ucase _ -> true | _ -> false @@ -707,7 +717,7 @@ let destAppTy g ty = ty |> stripTyEqns g |> (function TType_app(tcref,tinst) -> let tcrefOfAppTy g ty = ty |> stripTyEqns g |> (function TType_app(tcref,_) -> tcref | _ -> failwith "tcrefOfAppTy") let tryDestAppTy g ty = ty |> stripTyEqns g |> (function TType_app(tcref,_) -> Some tcref | _ -> None) let (|AppTy|_|) g ty = ty |> stripTyEqns g |> (function TType_app(tcref,tinst) -> Some (tcref,tinst) | _ -> None) -let (|TupleTy|_|) g ty = ty |> stripTyEqns g |> (function TType_tuple(tys) -> Some tys | _ -> None) +let (|RefTupleTy|_|) g ty = ty |> stripTyEqns g |> (function TType_tuple(tupInfo,tys) when not (evalTupInfoIsStruct tupInfo) -> Some tys | _ -> None) let (|FunTy|_|) g ty = ty |> stripTyEqns g |> (function TType_fun(dty, rty) -> Some (dty, rty) | _ -> None) let argsOfAppTy g ty = ty |> stripTyEqns g |> (function TType_app(_,tinst) -> tinst | _ -> []) let tyconOfAppTy g ty = (tcrefOfAppTy g ty).Deref @@ -717,7 +727,7 @@ let tryNiceEntityRefOfTy ty = let ty = stripTyparEqnsAux false ty match ty with | TType_app (tcref,_) -> Some tcref - | TType_measure (MeasureExpr.MeasureCon tcref) -> Some tcref + | TType_measure (Measure.Con tcref) -> Some tcref | _ -> None @@ -853,8 +863,8 @@ and typeAEquivAux erasureFlag g aenv ty1 ty2 = n1=n2 && tcrefAEquiv g aenv tc1 tc2 && typesAEquivAux erasureFlag g aenv b1 b2 - | TType_tuple l1,TType_tuple l2 -> - typesAEquivAux erasureFlag g aenv l1 l2 + | TType_tuple (s1,l1),TType_tuple (s2,l2) -> + structnessAEquiv s1 s2 && typesAEquivAux erasureFlag g aenv l1 l2 | TType_fun (dtys1,rty1),TType_fun (dtys2,rty2) -> typeAEquivAux erasureFlag g aenv dtys1 dtys2 && typeAEquivAux erasureFlag g aenv rty1 rty2 | TType_measure m1, TType_measure m2 -> @@ -863,6 +873,10 @@ and typeAEquivAux erasureFlag g aenv ty1 ty2 = | _ -> true | _ -> false +and structnessAEquiv un1 un2 = + match un1, un2 with + | TupInfo.Const b1, TupInfo.Const b2 -> (b1 = b2) + and measureAEquiv g aenv un1 un2 = let vars1 = ListMeasureVarOccs un1 let trans tp1 = if aenv.EquivTypars.ContainsKey tp1 then destAnyParTy g aenv.EquivTypars.[tp1] else tp1 @@ -899,14 +913,13 @@ let isErasedType g ty = // Return all components of this type expression that cannot be tested at runtime let rec getErasedTypes g ty = let ty = stripTyEqns g ty - if isErasedType g ty then [ty] - else + if isErasedType g ty then [ty] else match ty with | TType_forall(_,rty) -> getErasedTypes g rty | TType_var tp -> if tp.IsErased then [ty] else [] - | TType_app (_,b) | TType_ucase(_,b) | TType_tuple b -> + | TType_app (_,b) | TType_ucase(_,b) | TType_tuple (_, b) -> List.foldBack (fun ty tys -> getErasedTypes g ty @ tys) b [] | TType_fun (dty,rty) -> getErasedTypes g dty @ getErasedTypes g rty @@ -943,14 +956,13 @@ let (-->) d r = mkFunTy d r let mkForallTy d r = TType_forall (d,r) let tryMkForallTy d r = if isNil d then r else mkForallTy d r let (+->) d r = tryMkForallTy d r -let mkTupleTy l = TType_tuple l let mkIteratedFunTy dl r = List.foldBack (-->) dl r let mkLambdaArgTy m tys = match tys with | [] -> error(InternalError("mkLambdaArgTy",m)) | [h] -> h - | _ -> mkTupleTy tys + | _ -> mkRawRefTupleTy tys let typeOfLambdaArg m vs = mkLambdaArgTy m (typesOfVals vs) let mkMultiLambdaTy m vs rty = mkFunTy (typeOfLambdaArg m vs) rty @@ -990,8 +1002,8 @@ let rec stripExpr e = let mkCase (a,b) = TCase(a,b) -let isTupleExpr e = match e with Expr.Op (TOp.Tuple,_,_,_) -> true | _ -> false -let tryDestTuple e = match e with Expr.Op (TOp.Tuple,_,es,_) -> es | _ -> [e] +let isRefTupleExpr e = match e with Expr.Op (TOp.Tuple tupInfo,_,_,_) -> not (evalTupInfoIsStruct tupInfo) | _ -> false +let tryDestRefTupleExpr e = match e with Expr.Op (TOp.Tuple tupInfo,_,es,_) when not (evalTupInfoIsStruct tupInfo) -> es | _ -> [e] //--------------------------------------------------------------------------- // Range info for expressions @@ -1172,7 +1184,7 @@ let mkCoerceExpr(e,to_ty,m,from_ty) = Expr.Op (TOp.Coerce,[t let mkAsmExpr(code,tinst,args,rettys,m) = Expr.Op (TOp.ILAsm(code,rettys),tinst,args,m) let mkUnionCaseExpr(uc,tinst,args,m) = Expr.Op (TOp.UnionCase uc,tinst,args,m) let mkExnExpr(uc,args,m) = Expr.Op (TOp.ExnConstr uc,[],args,m) -let mkTupleFieldGet(e,tinst,i,m) = Expr.Op (TOp.TupleFieldGet(i), tinst, [e],m) +let mkTupleFieldGetViaExprAddr(tupInfo,e,tinst,i,m) = Expr.Op (TOp.TupleFieldGet(tupInfo,i), tinst, [e],m) let mkRecdFieldGetViaExprAddr(e,fref,tinst,m) = Expr.Op (TOp.ValFieldGet(fref), tinst, [e],m) let mkRecdFieldGetAddrViaExprAddr(e,fref,tinst,m) = Expr.Op (TOp.ValFieldGetAddr(fref), tinst, [e],m) @@ -1375,8 +1387,11 @@ let rec stripFunTyN g n ty = else [],ty -let tryDestTupleTy g ty = - if isTupleTy g ty then destTupleTy g ty else [ty] +let tryDestAnyTupleTy g ty = + if isAnyTupleTy g ty then destAnyTupleTy g ty else tupInfoRef,[ty] + +let tryDestRefTupleTy g ty = + if isRefTupleTy g ty then destRefTupleTy g ty else [ty] type UncurriedArgInfos = (TType * ArgReprInfo) list type CurriedArgInfos = (TType * ArgReprInfo) list list @@ -1392,7 +1407,7 @@ let GetTopTauTypeInFSharpForm g (curriedArgInfos: ArgReprInfo list list) tau m = match argInfos with | [] -> [ (g.unit_ty, ValReprInfo.unnamedTopArg1) ] | [argInfo] -> [ (argty, argInfo) ] - | _ -> List.zip (destTupleTy g argty) argInfos) + | _ -> List.zip (destRefTupleTy g argty) argInfos) argtysl,rty let destTopForallTy g (ValReprInfo (ntps,_,_)) ty = @@ -1566,13 +1581,14 @@ let isClassTy g ty = let isStructOrEnumTyconTy g ty = isAppTy g ty && (tyconOfAppTy g ty).IsStructOrEnumTycon -let isStructTy g ty = isStructOrEnumTyconTy g ty +let isStructTy g ty = + isStructOrEnumTyconTy g ty || isStructTupleTy g ty let isRefTy g ty = not (isStructOrEnumTyconTy g ty) && ( isUnionTy g ty || - isTupleTy g ty || + isRefTupleTy g ty || isRecdTy g ty || isILReferenceTy g ty || isFunTy g ty || @@ -1891,7 +1907,7 @@ and accFreeTyparRef opts (tp:Typar) acc = and accFreeInType opts ty acc = match stripTyparEqns ty with - | TType_tuple l -> accFreeInTypes opts l acc + | TType_tuple (tupInfo,l) -> accFreeInTypes opts l (accFreeInTupInfo opts tupInfo acc) | TType_app (tc,tinst) -> let acc = accFreeTycon opts tc acc match tinst with @@ -1904,6 +1920,9 @@ and accFreeInType opts ty acc = | TType_forall (tps,r) -> unionFreeTyvars (boundTypars opts tps (freeInType opts r)) acc | TType_measure unt -> accFreeInMeasure opts unt acc +and accFreeInTupInfo _opts unt acc = + match unt with + | TupInfo.Const _ -> acc and accFreeInMeasure opts unt acc = List.foldBack (fun (tp,_) acc -> accFreeTyparRef opts tp acc) (ListMeasureVarOccsWithNonZeroExponents unt) acc and accFreeInTypes opts tys acc = match tys with @@ -1978,7 +1997,9 @@ and accFreeTyparRefLeftToRight g cxFlag thruFlag acc (tp:Typar) = and accFreeInTypeLeftToRight g cxFlag thruFlag acc ty = if verbose then dprintf "--> accFreeInTypeLeftToRight \n"; match (if thruFlag then stripTyEqns g ty else stripTyparEqns ty) with - | TType_tuple l -> accFreeInTypesLeftToRight g cxFlag thruFlag acc l + | TType_tuple (tupInfo, l) -> + let acc = accFreeInTupInfoLeftToRight g cxFlag thruFlag acc tupInfo + accFreeInTypesLeftToRight g cxFlag thruFlag acc l | TType_app (_,tinst) -> accFreeInTypesLeftToRight g cxFlag thruFlag acc tinst | TType_ucase (_,tinst) -> accFreeInTypesLeftToRight g cxFlag thruFlag acc tinst | TType_fun (d,r) -> accFreeInTypeLeftToRight g cxFlag thruFlag (accFreeInTypeLeftToRight g cxFlag thruFlag acc d ) r @@ -1986,6 +2007,10 @@ and accFreeInTypeLeftToRight g cxFlag thruFlag acc ty = | TType_forall (tps,r) -> unionFreeTyparsLeftToRight (boundTyparsLeftToRight g cxFlag thruFlag false tps (accFreeInTypeLeftToRight g cxFlag thruFlag emptyFreeTyparsLeftToRight r)) acc | TType_measure unt -> List.foldBack (fun (tp,_) acc -> accFreeTyparRefLeftToRight g cxFlag thruFlag acc tp) (ListMeasureVarOccsWithNonZeroExponents unt) acc +and accFreeInTupInfoLeftToRight _g _cxFlag _thruFlag acc unt = + match unt with + | TupInfo.Const _ -> acc + and accFreeInTypesLeftToRight g cxFlag thruFlag acc tys = match tys with | [] -> acc @@ -2317,7 +2342,7 @@ module SimplifyTypes = begin | TType_forall (_,body) -> foldTypeButNotConstraints f z body | TType_app (_,tinst) -> List.fold (foldTypeButNotConstraints f) z tinst | TType_ucase (_,tinst) -> List.fold (foldTypeButNotConstraints f) z tinst - | TType_tuple typs -> List.fold (foldTypeButNotConstraints f) z typs + | TType_tuple (_,typs) -> List.fold (foldTypeButNotConstraints f) z typs | TType_fun (s,t) -> foldTypeButNotConstraints f (foldTypeButNotConstraints f z s) t | TType_var _ -> z | TType_measure _ -> z @@ -2881,7 +2906,7 @@ module DebugPrint = begin let prefix = tcref.IsPrefixDisplay let tcL = layoutTyconRef tcref auxTyparsL env tcL prefix tinst - | TType_tuple typs -> sepListL (wordL "*") (List.map (auxTypeAtomL env) typs) |> wrap + | TType_tuple (_tupInfo,typs) -> sepListL (wordL "*") (List.map (auxTypeAtomL env) typs) |> wrap | TType_fun (f,x) -> ((auxTypeAtomL env f ^^ wordL "->") --- auxTypeL env x) |> wrap | TType_var typar -> auxTyparWrapL env isAtomic typar | TType_measure unt -> @@ -3291,7 +3316,7 @@ module DebugPrint = begin (unionCaseRefL c ++ spaceListL (List.map atomL args)) |> wrap | Expr.Op (TOp.ExnConstr (ecref),_,args,_) -> wordL ecref.LogicalName ^^ bracketL (commaListL (List.map atomL args)) - | Expr.Op (TOp.Tuple,_,xs,_) -> + | Expr.Op (TOp.Tuple _,_,xs,_) -> tupleL (List.map exprL xs) | Expr.Op (TOp.Recd (ctor,tc),_,xs,_) -> let fields = tc.TrueInstanceFieldsAsList @@ -3321,7 +3346,7 @@ module DebugPrint = begin wordL ("#" ^ c.CaseName ^ "." ^ string i) --- atomL x | Expr.Op (TOp.UnionCaseFieldSet (c,i),_,[x;y],_) -> ((atomL x --- (rightL ("#" ^ c.CaseName ^ "." ^ string i))) ^^ wordL ":=") --- exprL y - | Expr.Op (TOp.TupleFieldGet i,_,[x],_) -> + | Expr.Op (TOp.TupleFieldGet (_,i),_,[x],_) -> wordL ("#" ^ string i) --- atomL x | Expr.Op (TOp.Coerce,[typ;_],[x],_) -> atomL x --- (wordL ":>" ^^ typeL typ) @@ -3378,9 +3403,9 @@ module DebugPrint = begin then leftL "{" ^^ (rangeL expr.Range ^^ rightL ":") ++ lay ^^ rightL "}" else lay - and assemblyL (TAssembly(implFiles)) = + and implFilesL implFiles = aboveListL (List.map implFileL implFiles) - + and appL flayout tys args = let z = flayout let z = z ^^ instL typeL tys @@ -4142,12 +4167,13 @@ and accFreeInOp opts op acc = | TOp.For _ | TOp.Coerce | TOp.RefAddrGet - | TOp.Tuple | TOp.Array | TOp.While _ | TOp.Goto _ | TOp.Label _ | TOp.Return | TOp.TupleFieldGet _ -> acc + | TOp.Tuple tupInfo -> accFreeTyvars opts accFreeInTupInfo tupInfo acc + | TOp.UnionCaseTagGet tr -> accUsedRecdOrUnionTyconRepr opts tr.Deref acc // Things containing just a union case reference @@ -4291,7 +4317,7 @@ let InferArityOfExpr g ty partialArgAttribsL retAttribs e = let curriedArgInfos = (List.zip vsl dtys) |> List.mapi (fun i (vs,ty) -> let partialAttribs = if i < partialArgAttribsL.Length then partialArgAttribsL.[i] else [] - let tys = if (i = 0 && isUnitTy g ty) then [] else tryDestTupleTy g ty + let tys = if (i = 0 && isUnitTy g ty) then [] else tryDestRefTupleTy g ty let ids = if vs.Length = tys.Length then vs |> List.map (fun v -> Some v.Id) else tys |> List.map (fun _ -> None) @@ -4371,19 +4397,19 @@ let decideStaticOptimizationConstraint g c = match b with | AppTy g (tcref2, _) -> if tyconRefEq g tcref1 tcref2 then StaticOptimizationAnswer.Yes else StaticOptimizationAnswer.No - | TupleTy g _ | FunTy g _ -> StaticOptimizationAnswer.No + | RefTupleTy g _ | FunTy g _ -> StaticOptimizationAnswer.No | _ -> StaticOptimizationAnswer.Unknown | FunTy g _ -> let b = normalizeEnumTy g (stripTyEqnsAndMeasureEqns g b) match b with | FunTy g _ -> StaticOptimizationAnswer.Yes - | AppTy g _ | TupleTy g _ -> StaticOptimizationAnswer.No + | AppTy g _ | RefTupleTy g _ -> StaticOptimizationAnswer.No | _ -> StaticOptimizationAnswer.Unknown - | TupleTy g ts1 -> + | RefTupleTy g ts1 -> let b = normalizeEnumTy g (stripTyEqnsAndMeasureEqns g b) match b with - | TupleTy g ts2 -> + | RefTupleTy g ts2 -> if ts1.Length = ts2.Length then StaticOptimizationAnswer.Yes else StaticOptimizationAnswer.No | AppTy g _ | FunTy g _ -> StaticOptimizationAnswer.No @@ -4971,10 +4997,6 @@ and remapAndRenameModBind g compgen tmenv x = and remapImplFile g compgen tmenv mv = mapAccImplFile (remapAndBindModExpr g compgen) tmenv mv -and remapAssembly g compgen tmenv (TAssembly(mvs)) = - let mvs,z = List.mapFold (remapImplFile g compgen) tmenv mvs - TAssembly(mvs),z - let copyModuleOrNamespaceType g compgen mtyp = copyAndRemapAndBindModTy g compgen Remap.Empty mtyp |> fst let copyExpr g compgen e = remapExpr g compgen Remap.Empty e let copyImplFile g compgen e = remapImplFile g compgen Remap.Empty e |> fst @@ -5094,16 +5116,16 @@ let destQuotedExprTy g ty = match ty with AppTy g (_,[ty]) -> ty | _ -> failwit let mkQuotedExprTy g ty = TType_app(g.expr_tcr,[ty]) let mkRawQuotedExprTy g = TType_app(g.raw_expr_tcr,[]) -let mkTupledTy g tys = +let mkAnyTupledTy g tupInfo tys = match tys with | [] -> g.unit_ty | [h] -> h - | _ -> mkTupleTy tys + | _ -> TType_tuple(tupInfo, tys) -let mkTupledVarsTy g vs = - mkTupledTy g (typesOfVals vs) +let mkRefTupledTy g tys = mkAnyTupledTy g tupInfoRef tys +let mkRefTupledVarsTy g vs = mkRefTupledTy g (typesOfVals vs) -let mkMethodTy g argtys rty = mkIteratedFunTy (List.map (mkTupledTy g) argtys) rty +let mkMethodTy g argtys rty = mkIteratedFunTy (List.map (mkRefTupledTy g) argtys) rty let mkArrayType g ty = TType_app (g.array_tcr_nice, [ty]) let mkByteArrayTy g = mkArrayType g g.byte_ty @@ -5121,7 +5143,7 @@ let rec tyOfExpr g e = | Expr.Const(_,_,ty) -> (ty) | Expr.Val(vref,_,_) -> vref.Type | Expr.Sequential(a,b,k,_,_) -> tyOfExpr g (match k with NormalSeq -> b | ThenDoSeq -> a) - | Expr.Lambda(_,_,_,vs,_,_,rty) -> (mkTupledVarsTy g vs --> rty) + | Expr.Lambda(_,_,_,vs,_,_,rty) -> (mkRefTupledVarsTy g vs --> rty) | Expr.TyLambda(_,tyvs,_,_,rty) -> (tyvs +-> rty) | Expr.Let(_,e,_,_) | Expr.TyChoose(_,e,_) @@ -5138,8 +5160,8 @@ let rec tyOfExpr g e = | TOp.ExnConstr _ -> g.exn_ty | TOp.Bytes _ -> mkByteArrayTy g | TOp.UInt16s _ -> mkArrayType g g.uint16_ty - | TOp.TupleFieldGet(i) -> List.item i tinst - | TOp.Tuple -> mkTupleTy tinst + | TOp.TupleFieldGet(_,i) -> List.item i tinst + | TOp.Tuple tupInfo -> mkAnyTupledTy g tupInfo tinst | (TOp.For _ | TOp.While _) -> g.unit_ty | TOp.Array -> (match tinst with [ty] -> mkArrayType g ty | _ -> failwith "bad TOp.Array node") | (TOp.TryCatch _ | TOp.TryFinally _) -> (match tinst with [ty] -> ty | _ -> failwith "bad TOp_try node") @@ -5527,6 +5549,10 @@ let mkExprAddrOfExpr g mustTakeAddress useReadonlyForGenericArrayAddress mut e a | None -> (fun x -> x), addre | Some (tmp,rval) -> (fun x -> mkCompGenLet m tmp rval x), addre +let mkTupleFieldGet g (tupInfo,e,tinst,i,m) = + let wrap,e' = mkExprAddrOfExpr g (evalTupInfoIsStruct tupInfo) false NeverMutates e None m + wrap (mkTupleFieldGetViaExprAddr(tupInfo,e',tinst,i,m)) + let mkRecdFieldGet g (e,fref:RecdFieldRef,tinst,m) = assert (not (isByrefTy g (tyOfExpr g e))) let wrap,e' = mkExprAddrOfExpr g fref.Tycon.IsStructOrEnumTycon false NeverMutates e None m @@ -5564,10 +5590,10 @@ let rec IterateRecursiveFixups g (selfv : Val option) rvs ((access : Expr),set) let exprToFix = stripExpr exprToFix match exprToFix with | Expr.Const _ -> () - | Expr.Op (TOp.Tuple,argtys,args,m) -> + | Expr.Op (TOp.Tuple tupInfo,argtys,args,m) when not (evalTupInfoIsStruct tupInfo) -> args |> List.iteri (fun n -> IterateRecursiveFixups g None rvs - (mkTupleFieldGet(access,argtys,n,m), + (mkTupleFieldGet g (tupInfo,access,argtys,n,m), (fun e -> // NICE: it would be better to do this check in the type checker errorR(Error(FSComp.SR.tastRecursiveValuesMayNotBeInConstructionOfTuple(),m)); @@ -5671,6 +5697,7 @@ let mkFolders (folders : _ ExprFolder) = | Expr.Lambda(_lambdaId ,_ctorThisValOpt,_baseValOpt,_argvs,body,_m,_rty) -> exprF z body | Expr.TyLambda(_lambdaId,_argtyvs,body,_m,_rty) -> exprF z body | Expr.TyChoose(_,body,_) -> exprF z body + | Expr.App (f,_fty,_tys,argtys,_) -> let z = exprF z f let z = exprsF z argtys @@ -5684,17 +5711,24 @@ let mkFolders (folders : _ ExprFolder) = let z = exprF z body z | Expr.Link rX -> exprF z (!rX) + | Expr.Match (_spBind,_exprm,dtree,targets,_m,_ty) -> let z = dtreeF z dtree let z = Array.fold targetF z targets z - | Expr.Quote(_e,{contents=Some(_typeDefs,_argTypes,argExprs,_)},_,_,_) -> exprsF z argExprs - | Expr.Quote(_e,{contents=None},_,_m,_) -> z + | Expr.Quote(e,{contents=Some(_typeDefs,_argTypes,argExprs,_)},_,_,_) -> + let z = exprF z e + exprsF z argExprs + + | Expr.Quote(e,{contents=None},_,_m,_) -> + exprF z e + | Expr.Obj (_n,_typ,_basev,basecall,overrides,iimpls,_m) -> let z = exprF z basecall let z = List.fold tmethodF z overrides let z = List.fold (foldOn snd (List.fold tmethodF)) z iimpls z + | Expr.StaticOptimization (_tcs,csx,x,_) -> exprsF z [csx;x] and valBindF dtree z bind = @@ -5761,12 +5795,10 @@ let mkFolders (folders : _ ExprFolder) = and implF z x = foldTImplFile mexprF z x - and implsF z (TAssembly(x)) = List.fold implF z x - - exprF, implF,implsF + exprF, implF -let FoldExpr folders = let exprF,_,_ = mkFolders folders in exprF -let FoldImplFile folders = let _,implF,_ = mkFolders folders in implF +let FoldExpr folders = let exprF,_ = mkFolders folders in exprF +let FoldImplFile folders = let _,implF = mkFolders folders in implF #if DEBUG //------------------------------------------------------------------------- @@ -5827,15 +5859,16 @@ let mkGetArg0 m ty = mkAsmExpr( [ mkLdarg0 ],[],[],[ty],m) // Tuples... //------------------------------------------------------------------------- -let mkTupled g m es tys = +let mkAnyTupled g m tupInfo es tys = match es with | [] -> mkUnit g m | [e] -> e - | _ -> Expr.Op (TOp.Tuple,tys,es,m) + | _ -> Expr.Op (TOp.Tuple tupInfo,tys,es,m) -let mkTupledNoTypes g m args = mkTupled g m args (List.map (tyOfExpr g) args) -let mkTupledVars g m vs = mkTupled g m (List.map (exprForVal m) vs) (typesOfVals vs) +let mkRefTupled g m es tys = mkAnyTupled g m tupInfoRef es tys +let mkRefTupledNoTypes g m args = mkRefTupled g m args (List.map (tyOfExpr g) args) +let mkRefTupledVars g m vs = mkRefTupled g m (List.map (exprForVal m) vs) (typesOfVals vs) //-------------------------------------------------------------------------- // Permute expressions @@ -6049,11 +6082,11 @@ let mkCallSeqEmpty g m ty1 = let mkCallDeserializeQuotationFSharp20Plus g m e1 e2 e3 e4 = let args = [ e1; e2; e3; e4 ] - mkApps g (typedExprForIntrinsic g m g.deserialize_quoted_FSharp_20_plus_info, [], [ mkTupledNoTypes g m args ], m) + mkApps g (typedExprForIntrinsic g m g.deserialize_quoted_FSharp_20_plus_info, [], [ mkRefTupledNoTypes g m args ], m) let mkCallDeserializeQuotationFSharp40Plus g m e1 e2 e3 e4 e5 = let args = [ e1; e2; e3; e4; e5 ] - mkApps g (typedExprForIntrinsic g m g.deserialize_quoted_FSharp_40_plus_info, [], [ mkTupledNoTypes g m args ], m) + mkApps g (typedExprForIntrinsic g m g.deserialize_quoted_FSharp_40_plus_info, [], [ mkRefTupledNoTypes g m args ], m) let mkCallCastQuotation g m ty e1 = mkApps g (typedExprForIntrinsic g m g.cast_quotation_info, [[ty]], [ e1 ], m) @@ -6063,7 +6096,7 @@ let mkCallLiftValueWithName g m ty nm e1 = // Use "Expr.ValueWithName" if it exists in FSharp.Core match vref.TryDeref with | Some _ -> - mkApps g (typedExprForIntrinsic g m g.lift_value_with_name_info , [[ty]], [mkTupledNoTypes g m [e1; mkString g m nm]], m) + mkApps g (typedExprForIntrinsic g m g.lift_value_with_name_info , [[ty]], [mkRefTupledNoTypes g m [e1; mkString g m nm]], m) | None -> mkApps g (typedExprForIntrinsic g m g.lift_value_info , [[ty]], [e1], m) @@ -6076,7 +6109,7 @@ let mkCallLiftValueWithDefn g m qty e1 = | Some _ -> let copyOfExpr = copyExpr g ValCopyFlag.CloneAll e1 let quoteOfCopyOfExpr = Expr.Quote(copyOfExpr, ref None, false, m, qty) - mkApps g (typedExprForIntrinsic g m g.lift_value_with_defn_info , [[ty]], [mkTupledNoTypes g m [e1; quoteOfCopyOfExpr]], m) + mkApps g (typedExprForIntrinsic g m g.lift_value_with_defn_info , [[ty]], [mkRefTupledNoTypes g m [e1; quoteOfCopyOfExpr]], m) | None -> Expr.Quote(e1, ref None, false, m, qty) @@ -6271,11 +6304,11 @@ let mkCompilerGeneratedAttr g n = //-------------------------------------------------------------------------- -let untupledToTupled vs = +let untupledToRefTupled g vs = let untupledTys = typesOfVals vs let m = (List.head vs).Range - let tupledv,tuplede = mkCompGenLocal m "tupledArg" (mkTupleTy untupledTys) - let untupling_es = List.mapi (fun i _ -> mkTupleFieldGet(tuplede,untupledTys,i,m)) untupledTys + let tupledv,tuplede = mkCompGenLocal m "tupledArg" (mkRefTupledTy g untupledTys) + let untupling_es = List.mapi (fun i _ -> mkTupleFieldGet g (tupInfoRef,tuplede,untupledTys,i,m)) untupledTys tupledv, mkInvisibleLets m vs untupling_es // The required tupled-arity (arity) can either be 1 @@ -6290,24 +6323,24 @@ let AdjustArityOfLambdaBody g arity (vs:Val list) body = vs,body elif nvs = 1 then let v = vs.Head - let untupledTys = destTupleTy g v.Type + let untupledTys = destRefTupleTy g v.Type if (untupledTys.Length <> arity) then failwith "length untupledTys <> arity"; let dummyvs,dummyes = untupledTys |> List.mapi (fun i ty -> mkCompGenLocal v.Range (v.LogicalName ^"_"^string i) ty) |> List.unzip - let body = mkInvisibleLet v.Range v (mkTupled g v.Range dummyes untupledTys) body + let body = mkInvisibleLet v.Range v (mkRefTupled g v.Range dummyes untupledTys) body dummyvs,body else - let tupledv, untupler = untupledToTupled vs + let tupledv, untupler = untupledToRefTupled g vs [tupledv],untupler body -let MultiLambdaToTupledLambda vs body = +let MultiLambdaToTupledLambda g vs body = match vs with | [] -> failwith "MultiLambdaToTupledLambda: expected some argments" | [v] -> v,body | vs -> - let tupledv, untupler = untupledToTupled vs + let tupledv, untupler = untupledToRefTupled g vs tupledv, untupler body @@ -6362,7 +6395,7 @@ let rec MakeApplicationAndBetaReduceAux g (f, fty, tyargsl : TType list list, ar match tryStripLambdaN argsl.Length f with | Some (argvsl, body) -> assert (argvsl.Length = argsl.Length) - let argvs,body = List.mapFoldBack MultiLambdaToTupledLambda argvsl body + let argvs,body = List.mapFoldBack (MultiLambdaToTupledLambda g) argvsl body mkLetsBind m (mkCompGenBinds argvs argsl) body | _ -> mkExprApplAux g f fty argsl m @@ -6396,10 +6429,10 @@ let AdjustValForExpectedArity g m (vref:ValRef) flags topValInfo = let tpenv = bindTypars tps tyargs' emptyTyparInst let rty' = instType tpenv rty let vsl = MakeArgsForTopArgs g m argtysl tpenv - let call = MakeApplicationAndBetaReduce g (Expr.Val(vref,flags,m),vref.Type,[tyargs'],(List.map (mkTupledVars g m) vsl),m) + let call = MakeApplicationAndBetaReduce g (Expr.Val(vref,flags,m),vref.Type,[tyargs'],(List.map (mkRefTupledVars g m) vsl),m) let tauexpr,tauty = List.foldBack - (fun vs (e,ty) -> mkMultiLambda m vs (e, ty), (mkTupledVarsTy g vs --> ty)) + (fun vs (e,ty) -> mkMultiLambda m vs (e, ty), (mkRefTupledVarsTy g vs --> ty)) vsl (call, rty') // Build a type-lambda expression for the toplevel value if needed... @@ -6419,7 +6452,7 @@ let IsSubsumptionExpr g expr = let stripTupledFunTy g ty = let argTys,retTy = stripFunTy g ty - let curriedArgTys = argTys |> List.map (tryDestTupleTy g) + let curriedArgTys = argTys |> List.map (tryDestRefTupleTy g) curriedArgTys, retTy let (|ExprValWithPossibleTypeInst|_|) expr = @@ -6533,7 +6566,7 @@ let AdjustPossibleSubsumptionExpr g (expr: Expr) (suppliedArgs: Expr list) : (Ex assert (actualTys.Length = detupledArgs.Length) // Inject the coercions into the user-supplied explicit tuple let argm = List.reduce unionRanges (detupledArgs |> List.map (fun e -> e.Range)) - mkTupled g argm (List.map3 (mkCoerceIfNeeded g) actualTys argTys detupledArgs) actualTys + mkRefTupled g argm (List.map3 (mkCoerceIfNeeded g) actualTys argTys detupledArgs) actualTys /// Given an argument variable of tuple type that has been evaluated and stored in the /// given variable, where the tuple type that satisfies the input argument types, @@ -6541,9 +6574,9 @@ let AdjustPossibleSubsumptionExpr g (expr: Expr) (suppliedArgs: Expr list) : (Ex let CoerceBoundTuple tupleVar argTys (actualTys : TType list) = assert (actualTys.Length > 1) - mkTupled g appm + mkRefTupled g appm ((actualTys,argTys) ||> List.mapi2 (fun i actualTy dummyTy -> - let argExprElement = mkTupleFieldGet(tupleVar,argTys,i,appm) + let argExprElement = mkTupleFieldGet g (tupInfoRef,tupleVar,argTys,i,appm) mkCoerceIfNeeded g actualTy dummyTy argExprElement)) actualTys @@ -6557,7 +6590,7 @@ let AdjustPossibleSubsumptionExpr g (expr: Expr) (suppliedArgs: Expr list) : (Ex | [_] -> [tyOfExpr g argExpr] | _ -> - tryDestTupleTy g argExprTy + tryDestRefTupleTy g argExprTy assert (actualTys.Length = argTys.Length) let nm = match niceNames with [nm] -> nm | _ -> "arg" @@ -6579,7 +6612,7 @@ let AdjustPossibleSubsumptionExpr g (expr: Expr) (suppliedArgs: Expr list) : (Ex binderBuilder,expr else - if typeEquiv g (mkTupledTy g actualTys) argExprTy then + if typeEquiv g (mkRefTupledTy g actualTys) argExprTy then (fun tm -> tm), argExpr else @@ -6588,7 +6621,7 @@ let AdjustPossibleSubsumptionExpr g (expr: Expr) (suppliedArgs: Expr list) : (Ex | [_actualType] -> [argExpr],[tyOfExpr g argExpr] | _ -> - tryDestTuple argExpr,tryDestTupleTy g argExprTy + tryDestRefTupleExpr argExpr,tryDestRefTupleTy g argExprTy // OK, the tuples match, or there is no de-tupling, // f x @@ -6625,13 +6658,13 @@ let AdjustPossibleSubsumptionExpr g (expr: Expr) (suppliedArgs: Expr list) : (Ex let inpArgTys = match actualArgTys with | [_] -> [inpArgTy] - | _ -> destTupleTy g inpArgTy + | _ -> destRefTupleTy g inpArgTy assert (inpArgTys.Length = actualArgTys.Length) let inpsAsVars,inpsAsExprs = inpArgTys |> List.mapi (fun j ty -> mkCompGenLocal appm ("arg"^string i^string j) ty) |> List.unzip let inpsAsActualArg = CoerceDetupled inpArgTys inpsAsExprs actualArgTys - let inpCloVarType = (mkFunTy (mkTupledTy g actualArgTys) cloVar.Type) + let inpCloVarType = (mkFunTy (mkRefTupledTy g actualArgTys) cloVar.Type) let newResTy = mkFunTy inpArgTy resTy let inpCloVar,inpCloVarAsExpr = mkCompGenLocal appm ("clo"^string i) inpCloVarType let newRes = @@ -6668,7 +6701,7 @@ let AdjustPossibleSubsumptionExpr g (expr: Expr) (suppliedArgs: Expr list) : (Ex let inpArgTys = match actualArgTys with | [_] -> [inpArgTy] - | _ -> destTupleTy g inpArgTy + | _ -> destRefTupleTy g inpArgTy /// Note: there might not be enough nice names, and they might not match in arity @@ -6775,7 +6808,7 @@ let LinearizeTopMatchAux g parent (spBind,m,tree,targets,m2,ty) = match tys with | [] -> failwith "itemsProj: no items?" | [_] -> x (* no projection needed *) - | tys -> Expr.Op (TOp.TupleFieldGet(i),tys,[x],m) + | tys -> Expr.Op (TOp.TupleFieldGet(tupInfoRef, i),tys,[x],m) let isThrowingTarget = function TTarget(_,x,_) -> isThrow x if 1 + List.count isThrowingTarget targetsL = targetsL.Length then (* Have failing targets and ONE successful one, so linearize *) @@ -6783,12 +6816,12 @@ let LinearizeTopMatchAux g parent (spBind,m,tree,targets,m2,ty) = (* note - old code here used copy value to generate locals - this was not right *) let fvs = vs |> FlatList.map (fun v -> fst(mkLocal v.Range v.LogicalName v.Type)) (* fresh *) let vtys = vs |> FlatList.map (fun v -> v.Type) - let tmpTy = mkTupledVarsTy g (FlatList.toList vs) + let tmpTy = mkRefTupledVarsTy g (FlatList.toList vs) let tmp,tmpe = mkCompGenLocal m "matchResultHolder" tmpTy AdjustValToTopVal tmp parent ValReprInfo.emptyValData; - let newTg = TTarget (fvs,mkTupledVars g m (FlatList.toList fvs),spTarget) + let newTg = TTarget (fvs,mkRefTupledVars g m (FlatList.toList fvs),spTarget) let fixup (TTarget (tvs,tx,spTarget)) = match destThrow tx with | Some (m,_,e) -> let tx = mkThrow m tmpTy e @@ -6874,8 +6907,11 @@ let rec typeEnc g (gtpsType,gtpsMethod) ty = textOfPath (List.map DemangleGenericTypeName path) | _ -> assert(false); failwith "impossible" tyName + tyargsEnc g (gtpsType,gtpsMethod) tinst - | TType_tuple typs -> - sprintf "System.Tuple%s"(tyargsEnc g (gtpsType,gtpsMethod) typs) + | TType_tuple (tupInfo, typs) -> + if evalTupInfoIsStruct tupInfo then + sprintf "System.ValueTuple%s"(tyargsEnc g (gtpsType,gtpsMethod) typs) + else + sprintf "System.Tuple%s"(tyargsEnc g (gtpsType,gtpsMethod) typs) | TType_fun (f,x) -> "Microsoft.FSharp.Core.FSharpFunc" + tyargsEnc g (gtpsType,gtpsMethod) [f;x] | TType_var typar -> @@ -7037,17 +7073,20 @@ let rec TypeHasDefaultValue g m ty = |> List.filter (fun fld -> not (TryFindFSharpBoolAttribute g g.attrib_DefaultValueAttribute fld.FieldAttribs = Some(false))) flds |> List.forall (actualTyOfRecdField (mkTyconRefInst tcref tinst) >> TypeHasDefaultValue g m) - elif isTupleStructTy g ty then - destTupleTy g ty |> List.forall (TypeHasDefaultValue g m) + elif isStructTupleTy g ty then + destStructTupleTy g ty |> List.forall (TypeHasDefaultValue g m) else // All struct types defined in other .NET languages have a DefaultValue regardless of their // instantiation true)) +/// Determines types that are potentially known to satisfy the 'comparable' constraint and returns +/// a set of residual types that must also satisfy the constraint let (|SpecialComparableHeadType|_|) g ty = - if isTupleTy g ty then - Some (destTupleTy g ty) + if isAnyTupleTy g ty then + let _tupInfo, elemTys = destAnyTupleTy g ty + Some elemTys elif isAppTy g ty then let tcref,tinst = destAppTy g ty if isArrayTyconRef g tcref || @@ -7760,10 +7799,10 @@ let GetTypeOfIntrinsicMemberInCompiledForm g (vref:ValRef) = //------------------------------------------------------------------------ -let rec mkCompiledTuple g (argtys,args,m) = +let rec mkCompiledTuple g isStruct (argtys,args,m) = let n = List.length argtys if n <= 0 then failwith "mkCompiledTuple" - elif n < maxTuple then (mkCompiledTupleTyconRef g argtys, argtys, args, m) + elif n < maxTuple then (mkCompiledTupleTyconRef g isStruct argtys, argtys, args, m) else let argtysA,argtysB = List.splitAfter goodTupleFields argtys let argsA,argsB = List.splitAfter (goodTupleFields) args @@ -7775,23 +7814,28 @@ let rec mkCompiledTuple g (argtys,args,m) = | TType_app(tn, _) when (isCompiledTupleTyconRef g tn) -> ty8,arg8 | _ -> - let ty8enc = TType_app(g.tuple1_tcr,[ty8]) - let v8enc = Expr.Op (TOp.Tuple,[ty8],[arg8],m) + let ty8enc = TType_app((if isStruct then g.struct_tuple1_tcr else g.ref_tuple1_tcr),[ty8]) + let v8enc = Expr.Op (TOp.Tuple (TupInfo.Const isStruct),[ty8],[arg8],m) ty8enc,v8enc | _ -> - let a,b,c,d = mkCompiledTuple g (argtysB, argsB, m) + let a,b,c,d = mkCompiledTuple g isStruct (argtysB, argsB, m) let ty8plus = TType_app(a,b) - let v8plus = Expr.Op (TOp.Tuple,b,c,d) + let v8plus = Expr.Op (TOp.Tuple(TupInfo.Const isStruct),b,c,d) ty8plus,v8plus let argtysAB = argtysA @ [ty8] - (mkCompiledTupleTyconRef g argtysAB, argtysAB,argsA @ [v8],m) + (mkCompiledTupleTyconRef g isStruct argtysAB, argtysAB,argsA @ [v8],m) let mkILMethodSpecForTupleItem (_g : TcGlobals) (typ:ILType) n = mkILNonGenericInstanceMethSpecInTy(typ, (if n < goodTupleFields then "get_Item"+(n+1).ToString() else "get_Rest"), [], mkILTyvarTy (uint16 n)) -let mkGetTupleItemN g m n typ te retty = - mkAsmExpr([IL.mkNormalCall(mkILMethodSpecForTupleItem g typ n)],[],[te],[retty],m) +let mkILFieldSpecForTupleItem (typ:ILType) n = + mkILFieldSpecInTy (typ,(if n < goodTupleFields then "Item"+(n+1).ToString() else "Rest"), mkILTyvarTy (uint16 n)) +let mkGetTupleItemN g m n (typ:ILType) isStruct te retty = + if isStruct then + mkAsmExpr([mkNormalLdfld (mkILFieldSpecForTupleItem typ n) ],[],[te],[retty],m) + else + mkAsmExpr([IL.mkNormalCall(mkILMethodSpecForTupleItem g typ n)],[],[te],[retty],m) /// Match an Int32 constant expression let (|Int32Expr|_|) expr = match expr with @@ -7844,18 +7888,19 @@ let (|CompiledForEachExpr|_|) g expr = enumerableVar.IsCompilerGenerated && enumeratorVar.IsCompilerGenerated && (let fvs = (freeInExpr CollectLocals bodyExpr) - not (Zset.contains enumerableVar fvs.FreeLocals) && - not (Zset.contains enumeratorVar fvs.FreeLocals)) -> + not (Zset.contains enumerableVar fvs.FreeLocals) && + not (Zset.contains enumeratorVar fvs.FreeLocals)) -> // Extract useful ranges - let m = enumerableExpr.Range + let mEnumExpr = enumerableExpr.Range let mBody = bodyExpr.Range + let mWholeExpr = expr.Range - let spForLoop,mForLoop = match enumeratorBind with SequencePointAtBinding(spStart) -> SequencePointAtForLoop(spStart),spStart | _ -> NoSequencePointAtForLoop,m + let spForLoop,mForLoop = match enumeratorBind with SequencePointAtBinding(spStart) -> SequencePointAtForLoop(spStart),spStart | _ -> NoSequencePointAtForLoop,mEnumExpr let spWhileLoop = match enumeratorBind with SequencePointAtBinding(spStart) -> SequencePointAtWhileLoop(spStart)| _ -> NoSequencePointAtWhileLoop let enumerableTy = tyOfExpr g enumerableExpr - Some (enumerableTy, enumerableExpr, elemVar, bodyExpr, (m, mBody, spForLoop, mForLoop, spWhileLoop)) + Some (enumerableTy, enumerableExpr, elemVar, bodyExpr, (mEnumExpr, mBody, spForLoop, mForLoop, spWhileLoop, mWholeExpr)) | _ -> None @@ -7873,12 +7918,12 @@ let DetectAndOptimizeForExpression g option expr = match option, expr with | _, CompiledInt32RangeForEachExpr g (startExpr, (1 | -1 as step), finishExpr, elemVar, bodyExpr, ranges) -> - let (m, _mBody, spForLoop, _mForLoop, _spWhileLoop) = ranges - mkFastForLoop g (spForLoop,m,elemVar,startExpr,(step = 1),finishExpr,bodyExpr) + let (_mEnumExpr, _mBody, spForLoop, _mForLoop, _spWhileLoop, mWholeExpr) = ranges + mkFastForLoop g (spForLoop,mWholeExpr,elemVar,startExpr,(step = 1),finishExpr,bodyExpr) | OptimizeAllForExpressions,CompiledForEachExpr g (enumerableTy, enumerableExpr, elemVar, bodyExpr, ranges) -> - let (m, mBody, spForLoop, mForLoop, spWhileLoop) = ranges + let (mEnumExpr, mBody, spForLoop, mForLoop, spWhileLoop, mWholeExpr) = ranges if isStringTy g enumerableTy then // type is string, optimize for expression as: @@ -7887,18 +7932,18 @@ let DetectAndOptimizeForExpression g option expr = // let elem = str.[idx] // body elem - let strVar ,strExpr = mkCompGenLocal m "str" enumerableTy - let idxVar ,idxExpr = mkCompGenLocal m "idx" g.int32_ty + let strVar ,strExpr = mkCompGenLocal mEnumExpr "str" enumerableTy + let idxVar ,idxExpr = mkCompGenLocal elemVar.Range "idx" g.int32_ty - let lengthExpr = mkGetStringLength g m strExpr - let charExpr = mkGetStringChar g m strExpr idxExpr + let lengthExpr = mkGetStringLength g mForLoop strExpr + let charExpr = mkGetStringChar g mForLoop strExpr idxExpr - let startExpr = mkZero g m + let startExpr = mkZero g mForLoop let finishExpr = mkDecr g mForLoop lengthExpr let loopItemExpr = mkCoerceIfNeeded g elemVar.Type g.char_ty charExpr // for compat reasons, loop item over string is sometimes object, not char - let bodyExpr = mkCompGenLet mBody elemVar loopItemExpr bodyExpr - let forExpr = mkFastForLoop g (spForLoop,m,idxVar,startExpr,true,finishExpr,bodyExpr) - let expr = mkCompGenLet m strVar enumerableExpr forExpr + let bodyExpr = mkCompGenLet mForLoop elemVar loopItemExpr bodyExpr + let forExpr = mkFastForLoop g (spForLoop,mWholeExpr,idxVar,startExpr,true,finishExpr,bodyExpr) + let expr = mkCompGenLet mEnumExpr strVar enumerableExpr forExpr expr @@ -7915,27 +7960,31 @@ let DetectAndOptimizeForExpression g option expr = let IndexHead = 0 let IndexTail = 1 - let currentVar ,currentExpr = mkMutableCompGenLocal m "current" enumerableTy - let nextVar ,nextExpr = mkMutableCompGenLocal m "next" enumerableTy + let currentVar ,currentExpr = mkMutableCompGenLocal mEnumExpr "current" enumerableTy + let nextVar ,nextExpr = mkMutableCompGenLocal mEnumExpr "next" enumerableTy let elemTy = destListTy g enumerableTy - let guardExpr = mkNonNullTest g m nextExpr - let headOrDefaultExpr = mkUnionCaseFieldGetUnprovenViaExprAddr (currentExpr,g.cons_ucref,[elemTy],IndexHead,m) - let tailOrNullExpr = mkUnionCaseFieldGetUnprovenViaExprAddr (currentExpr,g.cons_ucref,[elemTy],IndexTail,mBody) + let guardExpr = mkNonNullTest g mForLoop nextExpr + let headOrDefaultExpr = mkUnionCaseFieldGetUnprovenViaExprAddr (currentExpr,g.cons_ucref,[elemTy],IndexHead,mForLoop) + let tailOrNullExpr = mkUnionCaseFieldGetUnprovenViaExprAddr (currentExpr,g.cons_ucref,[elemTy],IndexTail,mForLoop) let bodyExpr = - mkCompGenLet m elemVar headOrDefaultExpr - (mkCompGenSequential mBody + mkCompGenLet mForLoop elemVar headOrDefaultExpr + (mkCompGenSequential mForLoop bodyExpr - (mkCompGenSequential mBody - (mkValSet mBody (mkLocalValRef currentVar) nextExpr) - (mkValSet mBody (mkLocalValRef nextVar) tailOrNullExpr) + (mkCompGenSequential mForLoop + (mkValSet mForLoop (mkLocalValRef currentVar) nextExpr) + (mkValSet mForLoop (mkLocalValRef nextVar) tailOrNullExpr) ) ) - let whileExpr = mkWhile g (spWhileLoop, WhileLoopForCompiledForEachExprMarker, guardExpr, bodyExpr, m) let expr = - mkCompGenLet m currentVar enumerableExpr - (mkCompGenLet m nextVar tailOrNullExpr whileExpr) + // let mutable current = enumerableExpr + let spBind = (match spForLoop with SequencePointAtForLoop(spStart) -> SequencePointAtBinding(spStart) | NoSequencePointAtForLoop -> NoSequencePointAtStickyBinding) + mkLet spBind mEnumExpr currentVar enumerableExpr + // let mutable next = current.TailOrNull + (mkCompGenLet mForLoop nextVar tailOrNullExpr + // while nonNull next dp + (mkWhile g (spWhileLoop, WhileLoopForCompiledForEachExprMarker, guardExpr, bodyExpr, mBody))) expr diff --git a/src/fsharp/TastOps.fsi b/src/fsharp/TastOps.fsi index ad0ce3d440e..ed924b26921 100755 --- a/src/fsharp/TastOps.fsi +++ b/src/fsharp/TastOps.fsi @@ -31,7 +31,7 @@ type Erasure = EraseAll | EraseMeasures | EraseNone val typeEquivAux : Erasure -> TcGlobals -> TType -> TType -> bool val typeEquiv : TcGlobals -> TType -> TType -> bool -val measureEquiv : TcGlobals -> MeasureExpr -> MeasureExpr -> bool +val measureEquiv : TcGlobals -> Measure -> Measure -> bool val stripTyEqnsWrtErasure: Erasure -> TcGlobals -> TType -> TType //------------------------------------------------------------------------- @@ -42,7 +42,6 @@ val mkFunTy : TType -> TType -> TType val ( --> ) : TType -> TType -> TType val tryMkForallTy : Typars -> TType -> TType val ( +-> ) : Typars -> TType -> TType -val mkTupleTy : TTypes -> TType val mkIteratedFunTy : TTypes -> TType -> TType val typeOfLambdaArg : range -> Val list -> TType val mkMultiLambdaTy : range -> Val list -> TType -> TType @@ -181,7 +180,7 @@ val mkReraiseLibCall : TcGlobals -> TType -> range -> Expr // Make projection operations //------------------------------------------------------------------------- -val mkTupleFieldGet : Expr * TypeInst * int * range -> Expr +val mkTupleFieldGet : TcGlobals -> TupInfo * Expr * TypeInst * int * range -> Expr val mkRecdFieldGetViaExprAddr : Expr * RecdFieldRef * TypeInst * range -> Expr val mkRecdFieldGetAddrViaExprAddr : Expr * RecdFieldRef * TypeInst * range -> Expr val mkStaticRecdFieldGet : RecdFieldRef * TypeInst * range -> Expr @@ -228,10 +227,12 @@ val mkArrayElemAddress : TcGlobals -> ILReadonly * bool * ILArrayShape * TType * val maxTuple : int val goodTupleFields : int val isCompiledTupleTyconRef : TcGlobals -> TyconRef -> bool -val mkCompiledTupleTyconRef : TcGlobals -> 'a list -> TyconRef -val mkCompiledTupleTy : TcGlobals -> TTypes -> TType -val mkCompiledTuple : TcGlobals -> TTypes * Exprs * range -> TyconRef * TTypes * Exprs * range -val mkGetTupleItemN : TcGlobals -> range -> int -> ILType -> Expr -> TType -> Expr +val mkCompiledTupleTyconRef : TcGlobals -> bool -> 'a list -> TyconRef +val mkCompiledTupleTy : TcGlobals -> bool -> TTypes -> TType +val mkCompiledTuple : TcGlobals -> bool -> TTypes * Exprs * range -> TyconRef * TTypes * Exprs * range +val mkGetTupleItemN : TcGlobals -> range -> int -> ILType -> bool -> Expr -> TType -> Expr + +val evalTupInfoIsStruct : TupInfo -> bool //------------------------------------------------------------------------- // Take the address of an expression, or force it into a mutable local. Any allocated @@ -371,7 +372,7 @@ val mkTyparToTyparRenaming : Typars -> Typars -> TyparInst * TTypes val reduceTyconRefAbbrev : TyconRef -> TypeInst -> TType val reduceTyconRefMeasureableOrProvided : TcGlobals -> TyconRef -> TypeInst -> TType -val reduceTyconRefAbbrevMeasureable : TyconRef -> MeasureExpr +val reduceTyconRefAbbrevMeasureable : TyconRef -> Measure /// set bool to 'true' to allow shortcutting of type parameter equation chains during stripping val stripTyEqnsA : TcGlobals -> bool -> TType -> TType @@ -396,16 +397,19 @@ val recdFieldTysOfExnDefRef : TyconRef -> TType list val destForallTy : TcGlobals -> TType -> Typars * TType val destFunTy : TcGlobals -> TType -> TType * TType -val destTupleTy : TcGlobals -> TType -> TTypes +val destAnyTupleTy : TcGlobals -> TType -> TupInfo * TTypes +val destRefTupleTy : TcGlobals -> TType -> TTypes +val destStructTupleTy : TcGlobals -> TType -> TTypes val destTyparTy : TcGlobals -> TType -> Typar val destAnyParTy : TcGlobals -> TType -> Typar -val destMeasureTy : TcGlobals -> TType -> MeasureExpr +val destMeasureTy : TcGlobals -> TType -> Measure val tryDestForallTy : TcGlobals -> TType -> Typars * TType val isFunTy : TcGlobals -> TType -> bool val isForallTy : TcGlobals -> TType -> bool -val isTupleTy : TcGlobals -> TType -> bool -val isTupleStructTy : TcGlobals -> TType -> bool +val isAnyTupleTy : TcGlobals -> TType -> bool +val isRefTupleTy : TcGlobals -> TType -> bool +val isStructTupleTy : TcGlobals -> TType -> bool val isUnionTy : TcGlobals -> TType -> bool val isReprHiddenTy : TcGlobals -> TType -> bool val isFSharpObjModelTy : TcGlobals -> TType -> bool @@ -438,7 +442,8 @@ val stripFunTyN : TcGlobals -> int -> TType -> TType list * TType val applyForallTy : TcGlobals -> TType -> TypeInst -> TType -val tryDestTupleTy : TcGlobals -> TType -> TType list +val tryDestAnyTupleTy : TcGlobals -> TType -> TupInfo * TType list +val tryDestRefTupleTy : TcGlobals -> TType -> TType list //------------------------------------------------------------------------- // Compute actual types of union cases and fields given an instantiation @@ -563,13 +568,13 @@ val getErasedTypes : TcGlobals -> TType -> TType list // Unit operations //------------------------------------------------------------------------- -val MeasurePower : MeasureExpr -> int -> MeasureExpr -val ListMeasureVarOccsWithNonZeroExponents : MeasureExpr -> (Typar * Rational) list -val ListMeasureConOccsWithNonZeroExponents : TcGlobals -> bool -> MeasureExpr -> (TyconRef * Rational) list -val ProdMeasures : MeasureExpr list -> MeasureExpr -val MeasureVarExponent : Typar -> MeasureExpr -> Rational -val MeasureConExponent : TcGlobals -> bool -> TyconRef -> MeasureExpr -> Rational -val normalizeMeasure : TcGlobals -> MeasureExpr -> MeasureExpr +val MeasurePower : Measure -> int -> Measure +val ListMeasureVarOccsWithNonZeroExponents : Measure -> (Typar * Rational) list +val ListMeasureConOccsWithNonZeroExponents : TcGlobals -> bool -> Measure -> (TyconRef * Rational) list +val ProdMeasures : Measure list -> Measure +val MeasureVarExponent : Typar -> Measure -> Rational +val MeasureExprConExponent : TcGlobals -> bool -> TyconRef -> Measure -> Rational +val normalizeMeasure : TcGlobals -> Measure -> Measure //------------------------------------------------------------------------- @@ -866,8 +871,8 @@ val IterateRecursiveFixups : // of tuple type. //------------------------------------------------------------------------- -val MultiLambdaToTupledLambda: Val list -> Expr -> Val * Expr -val AdjustArityOfLambdaBody : TcGlobals -> int -> Val list -> Expr -> Val list * Expr +val MultiLambdaToTupledLambda : TcGlobals -> Val list -> Expr -> Val * Expr +val AdjustArityOfLambdaBody : TcGlobals -> int -> Val list -> Expr -> Val list * Expr //------------------------------------------------------------------------- // Make applications, doing beta reduction by introducing let-bindings @@ -905,7 +910,7 @@ module DebugPrint = val tyconL : Tycon -> layout val decisionTreeL : DecisionTree -> layout val implFileL : TypedImplFile -> layout - val assemblyL : TypedAssembly -> layout + val implFilesL : TypedImplFile list -> layout val recdFieldRefL : RecdFieldRef -> layout //------------------------------------------------------------------------- @@ -1292,13 +1297,17 @@ val isByrefLikeTy : TcGlobals -> TType -> bool // Tuple constructors/destructors //------------------------------------------------------------------------- -val isTupleExpr : Expr -> bool -val tryDestTuple : Expr -> Exprs -val mkTupled : TcGlobals -> range -> Exprs -> TType list -> Expr -val mkTupledNoTypes : TcGlobals -> range -> Exprs -> Expr -val mkTupledTy : TcGlobals -> TType list -> TType -val mkTupledVarsTy : TcGlobals -> Val list -> TType -val mkTupledVars : TcGlobals -> range -> Val list -> Expr +val isRefTupleExpr : Expr -> bool +val tryDestRefTupleExpr : Expr -> Exprs + +val mkAnyTupledTy : TcGlobals -> TupInfo -> TType list -> TType + +val mkAnyTupled : TcGlobals -> range -> TupInfo -> Exprs -> TType list -> Expr +val mkRefTupled : TcGlobals -> range -> Exprs -> TType list -> Expr +val mkRefTupledNoTypes : TcGlobals -> range -> Exprs -> Expr +val mkRefTupledTy : TcGlobals -> TType list -> TType +val mkRefTupledVarsTy : TcGlobals -> Val list -> TType +val mkRefTupledVars : TcGlobals -> range -> Val list -> Expr val mkMethodTy : TcGlobals -> TType list list -> TType -> TType //------------------------------------------------------------------------- diff --git a/src/fsharp/TastPickle.fs b/src/fsharp/TastPickle.fs index cf37fbfc193..268c9b5b67e 100755 --- a/src/fsharp/TastPickle.fs +++ b/src/fsharp/TastPickle.fs @@ -1420,8 +1420,8 @@ let p_measure_one = p_byte 4 // Pickle a unit-of-measure variable or constructor let p_measure_varcon unt st = match unt with - | MeasureCon tcref -> p_measure_con tcref st - | MeasureVar v -> p_measure_var v st + | Measure.Con tcref -> p_measure_con tcref st + | Measure.Var v -> p_measure_var v st | _ -> pfailwith st ("p_measure_varcon: expected measure variable or constructor") // Pickle a positive integer power of a unit-of-measure variable or constructor @@ -1449,12 +1449,12 @@ let rec p_measure_power unt q st = let rec p_normalized_measure unt st = let unt = stripUnitEqnsAux false unt match unt with - | MeasureCon tcref -> p_measure_con tcref st - | MeasureInv x -> p_byte 1 st; p_normalized_measure x st - | MeasureProd(x1,x2) -> p_byte 2 st; p_normalized_measure x1 st; p_normalized_measure x2 st - | MeasureVar v -> p_measure_var v st - | MeasureOne -> p_measure_one st - | MeasureRationalPower(x,q) -> p_measure_power x q st + | Measure.Con tcref -> p_measure_con tcref st + | Measure.Inv x -> p_byte 1 st; p_normalized_measure x st + | Measure.Prod(x1,x2) -> p_byte 2 st; p_normalized_measure x1 st; p_normalized_measure x2 st + | Measure.Var v -> p_measure_var v st + | Measure.One -> p_measure_one st + | Measure.RationalPower(x,q) -> p_measure_power x q st // By normalizing the unit-of-measure and treating integer powers as a special case, // we ensure that the pickle format for rational powers of units (byte 5 followed by @@ -1472,12 +1472,12 @@ let u_rational st = let rec u_measure_expr st = let tag = u_byte st match tag with - | 0 -> let a = u_tcref st in MeasureCon a - | 1 -> let a = u_measure_expr st in MeasureInv a - | 2 -> let a,b = u_tup2 u_measure_expr u_measure_expr st in MeasureProd (a,b) - | 3 -> let a = u_tpref st in MeasureVar a - | 4 -> MeasureOne - | 5 -> let a = u_measure_expr st in let b = u_rational st in MeasureRationalPower (a,b) + | 0 -> let a = u_tcref st in Measure.Con a + | 1 -> let a = u_measure_expr st in Measure.Inv a + | 2 -> let a,b = u_tup2 u_measure_expr u_measure_expr st in Measure.Prod (a,b) + | 3 -> let a = u_tpref st in Measure.Var a + | 4 -> Measure.One + | 5 -> let a = u_measure_expr st in let b = u_rational st in Measure.RationalPower (a,b) | _ -> ufailwith st "u_measure_expr" #if INCLUDE_METADATA_WRITER @@ -1561,7 +1561,11 @@ let u_typar_specs = (u_list u_typar_spec) let _ = fill_p_typ (fun ty st -> let ty = stripTyparEqns ty match ty with - | TType_tuple l -> p_byte 0 st; p_typs l st + | TType_tuple (tupInfo,l) -> + if evalTupInfoIsStruct tupInfo then + p_byte 8 st; p_typs l st + else + p_byte 0 st; p_typs l st | TType_app(ERefNonLocal nleref,[]) -> p_byte 1 st; p_simpletyp nleref st | TType_app (tc,tinst) -> p_byte 2 st; p_tup2 (p_tcref "typ") p_typs (tc,tinst) st | TType_fun (d,r) -> p_byte 3 st; p_tup2 p_typ p_typ (d,r) st @@ -1575,7 +1579,7 @@ let _ = fill_p_typ (fun ty st -> let _ = fill_u_typ (fun st -> let tag = u_byte st match tag with - | 0 -> let l = u_typs st in TType_tuple l + | 0 -> let l = u_typs st in TType_tuple (tupInfoRef, l) | 1 -> u_simpletyp st | 2 -> let tc = u_tcref st in let tinst = u_typs st in TType_app (tc,tinst) | 3 -> let d = u_typ st in let r = u_typ st in TType_fun (d,r) @@ -1583,6 +1587,7 @@ let _ = fill_u_typ (fun st -> | 5 -> let tps = u_typar_specs st in let r = u_typ st in TType_forall (tps,r) | 6 -> let unt = u_measure_expr st in TType_measure unt | 7 -> let uc = u_ucref st in let tinst = u_typs st in TType_ucase (uc,tinst) + | 8 -> let l = u_typs st in TType_tuple (tupInfoStruct, l) | _ -> ufailwith st "u_typ") @@ -2288,7 +2293,11 @@ and p_op x st = match x with | TOp.UnionCase c -> p_byte 0 st; p_ucref c st | TOp.ExnConstr c -> p_byte 1 st; p_tcref "op" c st - | TOp.Tuple -> p_byte 2 st + | TOp.Tuple tupInfo -> + if evalTupInfoIsStruct tupInfo then + p_byte 29 st + else + p_byte 2 st | TOp.Recd (a,b) -> p_byte 3 st; p_tup2 p_recdInfo (p_tcref "recd op") (a,b) st | TOp.ValFieldSet (a) -> p_byte 4 st; p_rfref a st | TOp.ValFieldGet (a) -> p_byte 5 st; p_rfref a st @@ -2297,7 +2306,11 @@ and p_op x st = | TOp.UnionCaseFieldSet (a,b) -> p_byte 8 st; p_tup2 p_ucref p_int (a,b) st | TOp.ExnFieldGet (a,b) -> p_byte 9 st; p_tup2 (p_tcref "exn op") p_int (a,b) st | TOp.ExnFieldSet (a,b) -> p_byte 10 st; p_tup2 (p_tcref "exn op") p_int (a,b) st - | TOp.TupleFieldGet (a) -> p_byte 11 st; p_int a st + | TOp.TupleFieldGet (tupInfo,a) -> + if evalTupInfoIsStruct tupInfo then + p_byte 30 st; p_int a st + else + p_byte 11 st; p_int a st | TOp.ILAsm (a,b) -> p_byte 12 st; p_tup2 (p_list p_ILInstr) p_typs (a,b) st | TOp.RefAddrGet -> p_byte 13 st | TOp.UnionCaseProof (a) -> p_byte 14 st; p_ucref a st @@ -2316,6 +2329,8 @@ and p_op x st = | TOp.UInt16s arr -> p_byte 26 st; p_array p_uint16 arr st | TOp.Reraise -> p_byte 27 st | TOp.UnionCaseFieldGetAddr (a,b) -> p_byte 28 st; p_tup2 p_ucref p_int (a,b) st + // Note tag byte 29 is taken for struct tuples, see above + // Note tag byte 30 is taken for struct tuples, see above | TOp.Goto _ | TOp.Label _ | TOp.Return -> failwith "unexpected backend construct in pickled TAST" #endif @@ -2326,7 +2341,7 @@ and u_op st = TOp.UnionCase a | 1 -> let a = u_tcref st TOp.ExnConstr a - | 2 -> TOp.Tuple + | 2 -> TOp.Tuple tupInfoRef | 3 -> let b = u_tcref st TOp.Recd (RecdExpr,b) | 4 -> let a = u_rfref st @@ -2348,7 +2363,7 @@ and u_op st = let b = u_int st TOp.ExnFieldSet (a,b) | 11 -> let a = u_int st - TOp.TupleFieldGet a + TOp.TupleFieldGet (tupInfoRef, a) | 12 -> let a = (u_list u_ILInstr) st let b = u_typs st TOp.ILAsm (a,b) @@ -2380,6 +2395,9 @@ and u_op st = | 28 -> let a = u_ucref st let b = u_int st TOp.UnionCaseFieldGetAddr (a,b) + | 29 -> TOp.Tuple tupInfoStruct + | 30 -> let a = u_int st + TOp.TupleFieldGet (tupInfoStruct, a) | _ -> ufailwith st "u_op" #if INCLUDE_METADATA_WRITER diff --git a/src/fsharp/TcGlobals.fs b/src/fsharp/TcGlobals.fs index 6d23531256f..b6f149a8eb3 100755 --- a/src/fsharp/TcGlobals.fs +++ b/src/fsharp/TcGlobals.fs @@ -177,14 +177,22 @@ type public TcGlobals = measureinverse_tcr : TyconRef measureone_tcr : TyconRef il_arr_tcr_map : TyconRef[] - tuple1_tcr : TyconRef - tuple2_tcr : TyconRef - tuple3_tcr : TyconRef - tuple4_tcr : TyconRef - tuple5_tcr : TyconRef - tuple6_tcr : TyconRef - tuple7_tcr : TyconRef - tuple8_tcr : TyconRef + ref_tuple1_tcr : TyconRef + ref_tuple2_tcr : TyconRef + ref_tuple3_tcr : TyconRef + ref_tuple4_tcr : TyconRef + ref_tuple5_tcr : TyconRef + ref_tuple6_tcr : TyconRef + ref_tuple7_tcr : TyconRef + ref_tuple8_tcr : TyconRef + struct_tuple1_tcr : TyconRef + struct_tuple2_tcr : TyconRef + struct_tuple3_tcr : TyconRef + struct_tuple4_tcr : TyconRef + struct_tuple5_tcr : TyconRef + struct_tuple6_tcr : TyconRef + struct_tuple7_tcr : TyconRef + struct_tuple8_tcr : TyconRef tcref_IQueryable : TyconRef tcref_IObservable : TyconRef @@ -676,13 +684,13 @@ let mkTcGlobals (compilingFslib,sysCcu,ilg,fslibCcu,directoryToResolveRelativePa let mkFunTy d r = TType_fun (d,r) let (-->) d r = mkFunTy d r let mkIteratedFunTy dl r = List.foldBack (-->) dl r - let mkSmallTupledTy l = match l with [] -> unit_ty | [h] -> h | tys -> TType_tuple tys + let mkSmallRefTupledTy l = match l with [] -> unit_ty | [h] -> h | tys -> mkRawRefTupleTy tys let tryMkForallTy d r = match d with [] -> r | tps -> TType_forall(tps,r) let knownIntrinsics = Dictionary<(string*string), ValRef>(HashIdentity.Structural) let makeIntrinsicValRef (enclosingEntity, logicalName, memberParentName, compiledNameOpt, typars, (argtys,rty)) = - let ty = tryMkForallTy typars (mkIteratedFunTy (List.map mkSmallTupledTy argtys) rty) + let ty = tryMkForallTy typars (mkIteratedFunTy (List.map mkSmallRefTupledTy argtys) rty) let isMember = isSome memberParentName let argCount = if isMember then List.sum (List.map List.length argtys) else 0 let linkageType = if isMember then Some ty else None @@ -765,14 +773,22 @@ let mkTcGlobals (compilingFslib,sysCcu,ilg,fslibCcu,directoryToResolveRelativePa let fslib_MFLinqRuntimeHelpersQuotationConverter_nleref = mkNestedNonLocalEntityRef fslib_MFLinqRuntimeHelpers_nleref "LeafExpressionConverter" let fslib_MFLazyExtensions_nleref = mkNestedNonLocalEntityRef fslib_MFControl_nleref "LazyExtensions" - let tuple1_tcr = mkSysTyconRef sys "Tuple`1" - let tuple2_tcr = mkSysTyconRef sys "Tuple`2" - let tuple3_tcr = mkSysTyconRef sys "Tuple`3" - let tuple4_tcr = mkSysTyconRef sys "Tuple`4" - let tuple5_tcr = mkSysTyconRef sys "Tuple`5" - let tuple6_tcr = mkSysTyconRef sys "Tuple`6" - let tuple7_tcr = mkSysTyconRef sys "Tuple`7" - let tuple8_tcr = mkSysTyconRef sys "Tuple`8" + let ref_tuple1_tcr = mkSysTyconRef sys "Tuple`1" + let ref_tuple2_tcr = mkSysTyconRef sys "Tuple`2" + let ref_tuple3_tcr = mkSysTyconRef sys "Tuple`3" + let ref_tuple4_tcr = mkSysTyconRef sys "Tuple`4" + let ref_tuple5_tcr = mkSysTyconRef sys "Tuple`5" + let ref_tuple6_tcr = mkSysTyconRef sys "Tuple`6" + let ref_tuple7_tcr = mkSysTyconRef sys "Tuple`7" + let ref_tuple8_tcr = mkSysTyconRef sys "Tuple`8" + let struct_tuple1_tcr = mkSysTyconRef sys "ValueTuple`1" + let struct_tuple2_tcr = mkSysTyconRef sys "ValueTuple`2" + let struct_tuple3_tcr = mkSysTyconRef sys "ValueTuple`3" + let struct_tuple4_tcr = mkSysTyconRef sys "ValueTuple`4" + let struct_tuple5_tcr = mkSysTyconRef sys "ValueTuple`5" + let struct_tuple6_tcr = mkSysTyconRef sys "ValueTuple`6" + let struct_tuple7_tcr = mkSysTyconRef sys "ValueTuple`7" + let struct_tuple8_tcr = mkSysTyconRef sys "ValueTuple`8" let choice2_tcr = mk_MFCore_tcref fslibCcu "Choice`2" let choice3_tcr = mk_MFCore_tcref fslibCcu "Choice`3" @@ -820,14 +836,15 @@ let mkTcGlobals (compilingFslib,sysCcu,ilg,fslibCcu,directoryToResolveRelativePa yield nleref.LastItemMangledName, ERefNonLocal nleref ] - let decodeTupleTy l = + let decodeTupleTy tupInfo l = match l with | [t1;t2;t3;t4;t5;t6;t7;marker] -> match marker with - | TType_app(tcref,[t8]) when tyconRefEq tcref tuple1_tcr -> TType_tuple [t1;t2;t3;t4;t5;t6;t7;t8] - | TType_tuple t8plus -> TType_tuple ([t1;t2;t3;t4;t5;t6;t7] @ t8plus) - | _ -> TType_tuple l - | _ -> TType_tuple l + | TType_app(tcref,[t8]) when tyconRefEq tcref ref_tuple1_tcr -> mkRawRefTupleTy [t1;t2;t3;t4;t5;t6;t7;t8] + | TType_app(tcref,[t8]) when tyconRefEq tcref struct_tuple1_tcr -> mkRawStructTupleTy [t1;t2;t3;t4;t5;t6;t7;t8] + | TType_tuple (_structness2, t8plus) -> TType_tuple (tupInfo, [t1;t2;t3;t4;t5;t6;t7] @ t8plus) + | _ -> TType_tuple (tupInfo, l) + | _ -> TType_tuple (tupInfo, l) let mk_MFCore_attrib nm : BuiltinAttribInfo = @@ -869,19 +886,19 @@ let mkTcGlobals (compilingFslib,sysCcu,ilg,fslibCcu,directoryToResolveRelativePa let enumOfValue_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "EnumOfValue" ,None ,None ,[vara; varb], ([[varaTy]], varbTy)) let generic_comparison_withc_outer_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "GenericComparisonWithComparer" ,None ,None ,[vara], mk_compare_withc_sig varaTy) - let generic_hash_withc_tuple2_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastHashTuple2" ,None ,None ,[vara;varb], mk_hash_withc_sig (decodeTupleTy [varaTy; varbTy])) - let generic_hash_withc_tuple3_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastHashTuple3" ,None ,None ,[vara;varb;varc], mk_hash_withc_sig (decodeTupleTy [varaTy; varbTy; varcTy])) - let generic_hash_withc_tuple4_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastHashTuple4" ,None ,None ,[vara;varb;varc;vard], mk_hash_withc_sig (decodeTupleTy [varaTy; varbTy; varcTy; vardTy])) - let generic_hash_withc_tuple5_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastHashTuple5" ,None ,None ,[vara;varb;varc;vard;vare],mk_hash_withc_sig (decodeTupleTy [varaTy; varbTy; varcTy; vardTy; vareTy])) - let generic_equals_withc_tuple2_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastEqualsTuple2" ,None ,None ,[vara;varb], mk_equality_withc_sig (decodeTupleTy [varaTy; varbTy])) - let generic_equals_withc_tuple3_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastEqualsTuple3" ,None ,None ,[vara;varb;varc], mk_equality_withc_sig (decodeTupleTy [varaTy; varbTy; varcTy])) - let generic_equals_withc_tuple4_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastEqualsTuple4" ,None ,None ,[vara;varb;varc;vard], mk_equality_withc_sig (decodeTupleTy [varaTy; varbTy; varcTy; vardTy])) - let generic_equals_withc_tuple5_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastEqualsTuple5" ,None ,None ,[vara;varb;varc;vard;vare],mk_equality_withc_sig (decodeTupleTy [varaTy; varbTy; varcTy; vardTy; vareTy])) + let generic_hash_withc_tuple2_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastHashTuple2" ,None ,None ,[vara;varb], mk_hash_withc_sig (decodeTupleTy tupInfoRef [varaTy; varbTy])) + let generic_hash_withc_tuple3_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastHashTuple3" ,None ,None ,[vara;varb;varc], mk_hash_withc_sig (decodeTupleTy tupInfoRef [varaTy; varbTy; varcTy])) + let generic_hash_withc_tuple4_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastHashTuple4" ,None ,None ,[vara;varb;varc;vard], mk_hash_withc_sig (decodeTupleTy tupInfoRef [varaTy; varbTy; varcTy; vardTy])) + let generic_hash_withc_tuple5_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastHashTuple5" ,None ,None ,[vara;varb;varc;vard;vare],mk_hash_withc_sig (decodeTupleTy tupInfoRef [varaTy; varbTy; varcTy; vardTy; vareTy])) + let generic_equals_withc_tuple2_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastEqualsTuple2" ,None ,None ,[vara;varb], mk_equality_withc_sig (decodeTupleTy tupInfoRef [varaTy; varbTy])) + let generic_equals_withc_tuple3_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastEqualsTuple3" ,None ,None ,[vara;varb;varc], mk_equality_withc_sig (decodeTupleTy tupInfoRef [varaTy; varbTy; varcTy])) + let generic_equals_withc_tuple4_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastEqualsTuple4" ,None ,None ,[vara;varb;varc;vard], mk_equality_withc_sig (decodeTupleTy tupInfoRef [varaTy; varbTy; varcTy; vardTy])) + let generic_equals_withc_tuple5_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastEqualsTuple5" ,None ,None ,[vara;varb;varc;vard;vare],mk_equality_withc_sig (decodeTupleTy tupInfoRef [varaTy; varbTy; varcTy; vardTy; vareTy])) - let generic_compare_withc_tuple2_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastCompareTuple2" ,None ,None ,[vara;varb], mk_compare_withc_sig (decodeTupleTy [varaTy; varbTy])) - let generic_compare_withc_tuple3_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastCompareTuple3" ,None ,None ,[vara;varb;varc], mk_compare_withc_sig (decodeTupleTy [varaTy; varbTy; varcTy])) - let generic_compare_withc_tuple4_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastCompareTuple4" ,None ,None ,[vara;varb;varc;vard], mk_compare_withc_sig (decodeTupleTy [varaTy; varbTy; varcTy; vardTy])) - let generic_compare_withc_tuple5_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastCompareTuple5" ,None ,None ,[vara;varb;varc;vard;vare],mk_compare_withc_sig (decodeTupleTy [varaTy; varbTy; varcTy; vardTy; vareTy])) + let generic_compare_withc_tuple2_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastCompareTuple2" ,None ,None ,[vara;varb], mk_compare_withc_sig (decodeTupleTy tupInfoRef [varaTy; varbTy])) + let generic_compare_withc_tuple3_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastCompareTuple3" ,None ,None ,[vara;varb;varc], mk_compare_withc_sig (decodeTupleTy tupInfoRef [varaTy; varbTy; varcTy])) + let generic_compare_withc_tuple4_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastCompareTuple4" ,None ,None ,[vara;varb;varc;vard], mk_compare_withc_sig (decodeTupleTy tupInfoRef [varaTy; varbTy; varcTy; vardTy])) + let generic_compare_withc_tuple5_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastCompareTuple5" ,None ,None ,[vara;varb;varc;vard;vare],mk_compare_withc_sig (decodeTupleTy tupInfoRef [varaTy; varbTy; varcTy; vardTy; vareTy])) let generic_equality_er_outer_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "GenericEqualityER" ,None ,None ,[vara], mk_rel_sig varaTy) @@ -1066,14 +1083,22 @@ let mkTcGlobals (compilingFslib,sysCcu,ilg,fslibCcu,directoryToResolveRelativePa measureinverse_tcr = mk_MFCompilerServices_tcref fslibCcu "MeasureInverse`1" measureone_tcr = mk_MFCompilerServices_tcref fslibCcu "MeasureOne" il_arr_tcr_map = il_arr_tcr_map - tuple1_tcr = tuple1_tcr - tuple2_tcr = tuple2_tcr - tuple3_tcr = tuple3_tcr - tuple4_tcr = tuple4_tcr - tuple5_tcr = tuple5_tcr - tuple6_tcr = tuple6_tcr - tuple7_tcr = tuple7_tcr - tuple8_tcr = tuple8_tcr + ref_tuple1_tcr = ref_tuple1_tcr + ref_tuple2_tcr = ref_tuple2_tcr + ref_tuple3_tcr = ref_tuple3_tcr + ref_tuple4_tcr = ref_tuple4_tcr + ref_tuple5_tcr = ref_tuple5_tcr + ref_tuple6_tcr = ref_tuple6_tcr + ref_tuple7_tcr = ref_tuple7_tcr + ref_tuple8_tcr = ref_tuple8_tcr + struct_tuple1_tcr = struct_tuple1_tcr + struct_tuple2_tcr = struct_tuple2_tcr + struct_tuple3_tcr = struct_tuple3_tcr + struct_tuple4_tcr = struct_tuple4_tcr + struct_tuple5_tcr = struct_tuple5_tcr + struct_tuple6_tcr = struct_tuple6_tcr + struct_tuple7_tcr = struct_tuple7_tcr + struct_tuple8_tcr = struct_tuple8_tcr choice2_tcr = choice2_tcr choice3_tcr = choice3_tcr choice4_tcr = choice4_tcr @@ -1286,15 +1311,24 @@ let mkTcGlobals (compilingFslib,sysCcu,ilg,fslibCcu,directoryToResolveRelativePa |> List.map (fun (nm,tcr) -> let ty = mkNonGenericTy tcr nm, mkSysTyconRef sys nm, (fun _ -> ty)) + let entries2 = [ "FSharpFunc`2", fastFunc_tcr, (fun tinst -> mkFunTy (List.item 0 tinst) (List.item 1 tinst)) - "Tuple`2", tuple2_tcr, decodeTupleTy - "Tuple`3", tuple3_tcr, decodeTupleTy - "Tuple`4", tuple4_tcr, decodeTupleTy - "Tuple`5", tuple5_tcr, decodeTupleTy - "Tuple`6", tuple6_tcr, decodeTupleTy - "Tuple`7", tuple7_tcr, decodeTupleTy - "Tuple`8", tuple8_tcr, decodeTupleTy] + "Tuple`2", ref_tuple2_tcr, decodeTupleTy tupInfoRef + "Tuple`3", ref_tuple3_tcr, decodeTupleTy tupInfoRef + "Tuple`4", ref_tuple4_tcr, decodeTupleTy tupInfoRef + "Tuple`5", ref_tuple5_tcr, decodeTupleTy tupInfoRef + "Tuple`6", ref_tuple6_tcr, decodeTupleTy tupInfoRef + "Tuple`7", ref_tuple7_tcr, decodeTupleTy tupInfoRef + "Tuple`8", ref_tuple8_tcr, decodeTupleTy tupInfoRef + "ValueTuple`2", struct_tuple2_tcr, decodeTupleTy tupInfoStruct + "ValueTuple`3", struct_tuple3_tcr, decodeTupleTy tupInfoStruct + "ValueTuple`4", struct_tuple4_tcr, decodeTupleTy tupInfoStruct + "ValueTuple`5", struct_tuple5_tcr, decodeTupleTy tupInfoStruct + "ValueTuple`6", struct_tuple6_tcr, decodeTupleTy tupInfoStruct + "ValueTuple`7", struct_tuple7_tcr, decodeTupleTy tupInfoStruct + "ValueTuple`8", struct_tuple8_tcr, decodeTupleTy tupInfoStruct] + let entries = (entries1 @ entries2) if compilingFslib then @@ -1316,6 +1350,7 @@ let mkTcGlobals (compilingFslib,sysCcu,ilg,fslibCcu,directoryToResolveRelativePa // So this dictionary is indexed by integers. let dict = entries + |> List.filter (fun (_,tcref,_) -> tcref.CanDeref) |> List.map (fun (_,tcref,builder) -> tcref.Stamp, builder) |> Dictionary.ofList (fun tcref2 tinst -> diff --git a/src/fsharp/TraceCall.fs b/src/fsharp/TraceCall.fs deleted file mode 100644 index db24974fece..00000000000 --- a/src/fsharp/TraceCall.fs +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -namespace Internal.Utilities.Debug - -open System -open System.IO -open System.Threading -open System.Diagnostics -open System.Runtime.InteropServices - - -module internal TraceInterop = - type MessageBeepType = - | Default = -1 - | Ok = 0x00000000 - | Error = 0x00000010 - | Question = 0x00000020 - | Warning = 0x00000030 - | Information = 0x00000040 - - [] - let MessageBeep(_mbt:MessageBeepType):bool=failwith "" - -[] -[] -type internal Trace private() = - static let mutable log = "" -#if DEBUG_WITH_TIME_AND_THREAD_INFO - static let TMinusZero = DateTime.Now -#endif - static let noopDisposable = - { new IDisposable with - member this.Dispose() = () - } - static let mutable out = Console.Out - [] [] static val mutable private indent:int - [] [] static val mutable private threadName:string - - /// Set to the semicolon-delimited names of the logging classes to be reported. - /// Use * to mean all. - static member Log - with get() = log - and set(value) = log<-value - - /// Output destination. - static member Out - with get() = out - and set(value:TextWriter) = out<-value - - /// True if the given logging class should be logged. - static member ShouldLog(loggingClass) = - let result = Trace.Log = "*" || Trace.Log.Contains(loggingClass^";") || Trace.Log.EndsWith(loggingClass,StringComparison.Ordinal) - result - - /// Description of the current thread. - static member private CurrentThreadInfo() = - if String.IsNullOrEmpty(Trace.threadName) then sprintf "(id=%d)" Thread.CurrentThread.ManagedThreadId - else sprintf "(id=%d,name=%s)" Thread.CurrentThread.ManagedThreadId Trace.threadName - - /// Report the elapsed time since start. - static member private ElapsedTime(start) = - let elapsed : TimeSpan = (DateTime.Now-start) - sprintf "%A ms" elapsed.TotalMilliseconds - - /// Get a string with spaces for indention. - static member private IndentSpaces() = new string(' ', Trace.indent) - - /// Log a message. - static member private LogMessage(msg:string) = - Trace.Out.Write(sprintf "%s%s" (Trace.IndentSpaces()) msg) - Trace.Out.Flush() - if Trace.Out<>Console.Out then - // Always log to console. - Console.Out.Write(sprintf "%s%s" (Trace.IndentSpaces()) msg) - - /// Name the current thread. - static member private NameCurrentThread(threadName) = - match threadName with - | Some(threadName)-> - let current = Trace.threadName - if String.IsNullOrEmpty(current) then Trace.threadName <- threadName - else if not(current.Contains(threadName)) then Trace.threadName <- current^","^threadName - | None -> () - - /// Base implementation of the call function. - static member private CallImpl(loggingClass,functionName,descriptionFunc,threadName:string option) : IDisposable = - #if DEBUG - if Trace.ShouldLog(loggingClass) then - Trace.NameCurrentThread(threadName) - - let description = try descriptionFunc() with e->"No description because of exception" - -#if DEBUG_WITH_TIME_AND_THREAD_INFO - let threadInfo = Trace.CurrentThreadInfo() - let indent = Trace.IndentSpaces() - let start = DateTime.Now - Trace.LogMessage(sprintf "Entering %s(%s) %s t-plus %fms %s\n" - functionName - loggingClass - threadInfo - (start-TMinusZero).TotalMilliseconds - description) -#else - Trace.LogMessage(sprintf "Entering %s(%s) %s\n" - functionName - loggingClass - description) -#endif - Trace.indent<-Trace.indent+1 - - {new IDisposable with - member d.Dispose() = - Trace.indent<-Trace.indent-1 -#if DEBUG_WITH_TIME_AND_THREAD_INFO - Trace.LogMessage(sprintf "Exitting %s %s %s\n" - functionName - threadInfo - (Trace.ElapsedTime(start)))} -#else - Trace.LogMessage(sprintf "Exiting %s\n" - functionName)} -#endif - else - noopDisposable : IDisposable - #else - ignore(loggingClass,functionName,descriptionFunc,threadName) - noopDisposable : IDisposable - #endif - - /// Log a method as it's called. - static member Call(loggingClass:string,functionName:string,descriptionFunc:unit->string) = Trace.CallImpl(loggingClass,functionName,descriptionFunc,None) - /// Log a method as it's called. Expected always to be called on the same thread which will be named 'threadName'. - static member CallByThreadNamed(loggingClass:string,functionName:string,threadName:string,descriptionFunc:unit->string) = Trace.CallImpl(loggingClass,functionName,descriptionFunc,Some(threadName)) - /// Log a message by logging class. - static member PrintLine(loggingClass:string, messageFunc:unit->string) = - #if DEBUG - if Trace.ShouldLog(loggingClass) then - let message = try messageFunc() with _-> "No message because of exception.\n" - Trace.LogMessage(sprintf "%s%s" message System.Environment.NewLine) - #else - ignore(loggingClass,messageFunc) - #endif - - /// Log a message by logging class. - static member Print(loggingClass:string, messageFunc:unit->string) = - #if DEBUG - if Trace.ShouldLog(loggingClass) then - let message = try messageFunc() with _-> "No message because of exception.\n" - Trace.LogMessage(message) - #else - ignore(loggingClass,messageFunc) - #endif - - /// Make a beep when the given loggingClass is matched. - static member private BeepHelper(loggingClass,beeptype) = - #if DEBUG - if Trace.ShouldLog(loggingClass) then - TraceInterop.MessageBeep(beeptype) |> ignore - #else - ignore(loggingClass,beeptype) - #endif - - /// Make the "OK" sound when the given loggingClass is matched. - static member BeepOk(loggingClass:string) = Trace.BeepHelper(loggingClass,TraceInterop.MessageBeepType.Ok) - - /// Make the "Error" sound when the given loggingClass is matched. - static member BeepError(loggingClass:string) = Trace.BeepHelper(loggingClass,TraceInterop.MessageBeepType.Error) - - /// Make the default sound when the given loggingClass is matched. - static member Beep(loggingClass:string) = Trace.BeepHelper(loggingClass,TraceInterop.MessageBeepType.Default) - - diff --git a/src/fsharp/TraceCall.fsi b/src/fsharp/TraceCall.fsi deleted file mode 100644 index 609d1d1bb0e..00000000000 --- a/src/fsharp/TraceCall.fsi +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -namespace Internal.Utilities.Debug - module internal TraceInterop = - type MessageBeepType = - | Default = -1 - | Ok = 0 - | Error = 16 - | Question = 32 - | Warning = 48 - | Information = 64 - val MessageBeep : MessageBeepType -> bool - [] - type internal Trace = - static member Beep : loggingClass:string -> unit - static member BeepError : loggingClass:string -> unit - static member BeepOk : loggingClass:string -> unit - static member Call : loggingClass:string * functionName:string * descriptionFunc:(unit->string) -> System.IDisposable - static member CallByThreadNamed : loggingClass:string * functionName:string * threadName:string * descriptionFunc:(unit->string) -> System.IDisposable - static member Print : loggingClass:string * messageFunc:(unit->string) -> unit - static member PrintLine : loggingClass:string * messageFunc:(unit->string) -> unit - static member ShouldLog : loggingClass:string -> bool - static member Log : string with get, set - static member Out : System.IO.TextWriter with get, set - diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs index b5da2a0281b..5c0d9cb9e4c 100755 --- a/src/fsharp/TypeChecker.fs +++ b/src/fsharp/TypeChecker.fs @@ -668,10 +668,10 @@ let ImplicitlyOpenOwnNamespace tcSink g amap scopem enclosingNamespacePath env = /// Optimized unification routine that avoids creating new inference /// variables unnecessarily -let UnifyTupleType contextInfo cenv denv m ty ps = +let UnifyRefTupleType contextInfo cenv denv m ty ps = let ptys = - if isTupleTy cenv.g ty then - let ptys = destTupleTy cenv.g ty + if isRefTupleTy cenv.g ty then + let ptys = destRefTupleTy cenv.g ty if (List.length ps) = (List.length ptys) then ptys else NewInferenceTypes ps else NewInferenceTypes ps @@ -681,7 +681,20 @@ let UnifyTupleType contextInfo cenv denv m ty ps = | ContextInfo.RecordFields -> ContextInfo.TupleInRecordFields | _ -> contextInfo - AddCxTypeEqualsType contextInfo denv cenv.css m ty (TType_tuple ptys) + AddCxTypeEqualsType contextInfo denv cenv.css m ty (TType_tuple (tupInfoRef, ptys)) + ptys + +/// Optimized unification routine that avoids creating new inference +/// variables unnecessarily +let UnifyStructTupleType contextInfo cenv denv m ty ps = + let ptys = + if isStructTupleTy cenv.g ty then + let ptys = destStructTupleTy cenv.g ty + if (List.length ps) = (List.length ptys) then ptys + else NewInferenceTypes ps + else NewInferenceTypes ps + AddCxTypeEqualsType contextInfo denv cenv.css m ty (TType_tuple (tupInfoStruct, ptys)) + ptys /// Optimized unification routine that avoids creating new inference @@ -817,21 +830,21 @@ let rec TcSynRationalConst c = let TcConst cenv ty m env c = let rec tcMeasure ms = match ms with - | SynMeasure.One -> MeasureOne + | SynMeasure.One -> Measure.One | SynMeasure.Named(tc,m) -> let ad = env.eAccessRights let tcref = ForceRaise(ResolveTypeLongIdent cenv.tcSink cenv.nameResolver ItemOccurence.Use OpenQualified env.eNameResEnv ad tc TypeNameResolutionStaticArgsInfo.DefiniteEmpty PermitDirectReferenceToGeneratedType.No) match tcref.TypeOrMeasureKind with | TyparKind.Type -> error(Error(FSComp.SR.tcExpectedUnitOfMeasureNotType(), m)) - | TyparKind.Measure -> MeasureCon tcref + | TyparKind.Measure -> Measure.Con tcref - | SynMeasure.Power(ms, exponent, _) -> MeasureRationalPower (tcMeasure ms, TcSynRationalConst exponent) - | SynMeasure.Product(ms1,ms2,_) -> MeasureProd(tcMeasure ms1, tcMeasure ms2) + | SynMeasure.Power(ms, exponent, _) -> Measure.RationalPower (tcMeasure ms, TcSynRationalConst exponent) + | SynMeasure.Product(ms1,ms2,_) -> Measure.Prod(tcMeasure ms1, tcMeasure ms2) | SynMeasure.Divide(ms1, ((SynMeasure.Seq (_::(_::_), _)) as ms2), m) -> warning(Error(FSComp.SR.tcImplicitMeasureFollowingSlash(),m)) - MeasureProd(tcMeasure ms1, MeasureInv (tcMeasure ms2)) + Measure.Prod(tcMeasure ms1, Measure.Inv (tcMeasure ms2)) | SynMeasure.Divide(ms1,ms2,_) -> - MeasureProd(tcMeasure ms1, MeasureInv (tcMeasure ms2)) + Measure.Prod(tcMeasure ms1, Measure.Inv (tcMeasure ms2)) | SynMeasure.Seq(mss,_) -> ProdMeasures (List.map tcMeasure mss) | SynMeasure.Anon _ -> error(Error(FSComp.SR.tcUnexpectedMeasureAnon(),m)) | SynMeasure.Var(_,m) -> error(Error(FSComp.SR.tcNonZeroConstantCannotHaveGenericUnit(),m)) @@ -841,10 +854,10 @@ let TcConst cenv ty m env c = let measureTy = match c with | SynConst.Measure(_, SynMeasure.Anon _) -> - (mkAppTy tcr [TType_measure (MeasureVar (NewAnonTypar (TyparKind.Measure,m,TyparRigidity.Anon,(if iszero then NoStaticReq else HeadTypeStaticReq),TyparDynamicReq.No)))]) + (mkAppTy tcr [TType_measure (Measure.Var (NewAnonTypar (TyparKind.Measure,m,TyparRigidity.Anon,(if iszero then NoStaticReq else HeadTypeStaticReq),TyparDynamicReq.No)))]) | SynConst.Measure(_, ms) -> mkAppTy tcr [TType_measure (tcMeasure ms)] - | _ -> mkAppTy tcr [TType_measure MeasureOne] + | _ -> mkAppTy tcr [TType_measure Measure.One] unif measureTy @@ -2039,7 +2052,7 @@ module GeneralizationHelpers = | Expr.Op(op,_,args,_) -> match op with - | TOp.Tuple -> true + | TOp.Tuple _ -> true | TOp.UnionCase uc -> not (isUnionCaseRefAllocObservable uc) | TOp.Recd(ctorInfo,tcref) -> match ctorInfo with @@ -2117,7 +2130,7 @@ module GeneralizationHelpers = // The type of the value is ty11 * ... * ty1N -> ... -> tyM1 * ... * tyMM -> retTy // This is computed REGARDLESS of the arity of the expression. let curriedArgTys,retTy = stripFunTy cenv.g tauTy - let allUntupledArgTys = curriedArgTys |> List.collect (tryDestTupleTy cenv.g) + let allUntupledArgTys = curriedArgTys |> List.collect (tryDestRefTupleTy cenv.g) // Compute the type variables in 'retTy' let returnTypeFreeTypars = freeInTypeLeftToRight cenv.g false retTy @@ -2177,7 +2190,6 @@ module GeneralizationHelpers = let ComputeAndGeneralizeGenericTypars (cenv, denv:DisplayEnv, m, - canGeneralize, freeInEnv:FreeTypars, canInferTypars, genConstrainedTyparFlag, @@ -2190,7 +2202,7 @@ module GeneralizationHelpers = let allDeclaredTypars = NormalizeDeclaredTyparsForEquiRecursiveInference cenv.g allDeclaredTypars let typarsToAttemptToGeneralize = - if canGeneralize && (match exprOpt with None -> true | Some e -> IsGeneralizableValue cenv.g e) + if (match exprOpt with None -> true | Some e -> IsGeneralizableValue cenv.g e) then (ListSet.unionFavourLeft typarEq allDeclaredTypars maxInferredTypars) else allDeclaredTypars @@ -2823,7 +2835,7 @@ let MakeApplicableExprWithFlex cenv (env: TcEnv) expr = let isNonFlexibleType ty = isSealedTy cenv.g ty let argTys,retTy = stripFunTy cenv.g exprTy - let curriedActualTypes = argTys |> List.map (tryDestTupleTy cenv.g) + let curriedActualTypes = argTys |> List.map (tryDestRefTupleTy cenv.g) if (curriedActualTypes.IsEmpty || curriedActualTypes |> List.exists (List.exists (isByrefTy cenv.g)) || curriedActualTypes |> List.forall (List.forall isNonFlexibleType)) then @@ -2840,7 +2852,7 @@ let MakeApplicableExprWithFlex cenv (env: TcEnv) expr = flexibleType) // Create a coercion to represent the expansion of the application - let expr = mkCoerceExpr (expr,mkIteratedFunTy (List.map (mkTupledTy cenv.g) curriedFlexibleTypes) retTy,m,exprTy) + let expr = mkCoerceExpr (expr,mkIteratedFunTy (List.map (mkRefTupledTy cenv.g) curriedFlexibleTypes) retTy,m,exprTy) ApplicableExpr (cenv,expr,true) @@ -3463,7 +3475,7 @@ module MutRecShapes = | MutRecShape.Tycon a -> MutRecShape.Tycon (f2 parent a) | MutRecShape.Lets b -> MutRecShape.Lets (f3 parent b) | MutRecShape.Module (c,d) -> - let c2, parent2 = f1 parent c + let c2, parent2 = f1 parent c d MutRecShape.Module (c2, mapWithParent parent2 f1 f2 f3 d)) let rec computeEnvs f1 f2 (env: 'Env) xs = @@ -3630,7 +3642,7 @@ let EliminateInitializationGraphs | Expr.Val (v,_,m) -> CheckValRef st v m // Expressions where subparts may be fixable - | Expr.Op((TOp.Tuple | TOp.UnionCase _ | TOp.Recd _),_,args,_) -> + | Expr.Op((TOp.Tuple _ | TOp.UnionCase _ | TOp.Recd _),_,args,_) -> List.iter (CheckExpr (fixable st)) args // Composite expressions @@ -4133,13 +4145,12 @@ let rec TcTyparConstraint ridx cenv newOk checkCxs occ (env: TcEnv) tpenv c = AddCxMethodConstraint env.DisplayEnv cenv.css m NoTrace traitInfo tpenv -and TcPseudoMemberSpec cenv newOk env synTypars tpenv memSpfn m = +and TcPseudoMemberSpec cenv newOk env synTypes tpenv memSpfn m = #if ALLOW_MEMBER_CONSTRAINTS_ON_MEASURES let tps,tpenv = List.mapFold (TcTyparOrMeasurePar None cenv env newOk) tpenv synTypars #else - let tps,tpenv = List.mapFold (TcTypar cenv env newOk) tpenv synTypars + let tys,tpenv = List.mapFold (TcTypeAndRecover cenv newOk CheckCxs ItemOccurence.UseInType env) tpenv synTypes #endif - let tys = List.map mkTyparTy tps match memSpfn with | SynMemberSig.Member (valSpfn,memberFlags,m) -> // REVIEW: Test pseudo constraints cannot refer to polymorphic methods. @@ -4223,7 +4234,7 @@ and TcValSpec cenv env declKind newOk containerInfo memFlagsOpt thisTyOpt tpenv else declaredTy,valSynInfo | _ -> - let setterTy = (mkTupledTy cenv.g (List.map fst (List.concat arginfos) @ [returnTy]) --> cenv.g.unit_ty) + let setterTy = (mkRefTupledTy cenv.g (List.map fst (List.concat arginfos) @ [returnTy]) --> cenv.g.unit_ty) let synInfo = SynInfo.IncorporateSetterArg valSynInfo setterTy, synInfo | MemberKind.PropertyGetSet -> @@ -4257,7 +4268,7 @@ and TcValSpec cenv env declKind newOk containerInfo memFlagsOpt thisTyOpt tpenv |> List.map (fun (argty,argInfo) -> if SynInfo.IsOptionalArg argInfo then mkOptionTy cenv.g argty else argty)) - mkIteratedFunTy (List.map (mkTupledTy cenv.g) argtysl) returnTy + mkIteratedFunTy (List.map (mkRefTupledTy cenv.g) argtysl) returnTy else ty' let memberInfoOpt = @@ -4380,7 +4391,7 @@ and TcTypeOrMeasure optKind cenv newOk checkCxs occ env (tpenv:SyntacticUnscoped error(Error(FSComp.SR.tcExpectedUnitOfMeasureNotType(), m)) TType_measure (NewErrorMeasure ()), tpenv | _, TyparKind.Measure -> - TType_measure (MeasureCon tcref), tpenv + TType_measure (Measure.Con tcref), tpenv | _, TyparKind.Type -> TcTypeApp cenv newOk checkCxs occ env tpenv m tcref [] [] @@ -4402,7 +4413,7 @@ and TcTypeOrMeasure optKind cenv newOk checkCxs occ env (tpenv:SyntacticUnscoped match args,postfix with | [arg], true -> let ms,tpenv = TcMeasure cenv newOk checkCxs occ env tpenv arg m - TType_measure (MeasureProd(MeasureCon tcref, ms)), tpenv + TType_measure (Measure.Prod(Measure.Con tcref, ms)), tpenv | _, _ -> errorR(Error(FSComp.SR.tcUnitsOfMeasureInvalidInTypeConstructor(), m)) @@ -4423,7 +4434,11 @@ and TcTypeOrMeasure optKind cenv newOk checkCxs occ env (tpenv:SyntacticUnscoped TType_measure ms,tpenv else let args',tpenv = TcTypesAsTuple cenv newOk checkCxs occ env tpenv args m - TType_tuple(args'),tpenv + TType_tuple(tupInfoRef,args'),tpenv + + | SynType.StructTuple(args,m) -> + let args',tpenv = TcTypesAsTuple cenv newOk checkCxs occ env tpenv args m + TType_tuple(tupInfoStruct,args'),tpenv | SynType.Fun(domainTy,resultTy,_) -> let domainTy',tpenv = TcTypeAndRecover cenv newOk checkCxs occ env tpenv domainTy @@ -4437,14 +4452,14 @@ and TcTypeOrMeasure optKind cenv newOk checkCxs occ env (tpenv:SyntacticUnscoped | SynType.Var (tp,_) -> let tp',tpenv = TcTyparOrMeasurePar optKind cenv env newOk tpenv tp match tp'.Kind with - | TyparKind.Measure -> TType_measure (MeasureVar tp'), tpenv + | TyparKind.Measure -> TType_measure (Measure.Var tp'), tpenv | TyparKind.Type -> mkTyparTy tp',tpenv // _ types | SynType.Anon m -> let tp:Typar = TcAnonTypeOrMeasure optKind cenv TyparRigidity.Anon TyparDynamicReq.No newOk m match tp.Kind with - | TyparKind.Measure -> TType_measure (MeasureVar tp), tpenv + | TyparKind.Measure -> TType_measure (Measure.Var tp), tpenv | TyparKind.Type -> mkTyparTy tp,tpenv | SynType.WithGlobalConstraints(ty,wcs,_) -> @@ -4465,7 +4480,7 @@ and TcTypeOrMeasure optKind cenv newOk checkCxs occ env (tpenv:SyntacticUnscoped errorR(Error(FSComp.SR.parsInvalidLiteralInType(), m)) NewErrorType (), tpenv | SynConst.Int32 1, _ -> - TType_measure MeasureOne, tpenv + TType_measure Measure.One, tpenv | _ -> errorR(Error(FSComp.SR.parsInvalidLiteralInType(), m)) NewErrorType (), tpenv @@ -4482,7 +4497,7 @@ and TcTypeOrMeasure optKind cenv newOk checkCxs occ env (tpenv:SyntacticUnscoped NewErrorType (), tpenv | _ -> let ms,tpenv = TcMeasure cenv newOk checkCxs occ env tpenv typ m - TType_measure (MeasureRationalPower (ms, TcSynRationalConst exponent)), tpenv + TType_measure (Measure.RationalPower (ms, TcSynRationalConst exponent)), tpenv | SynType.MeasureDivide(typ1, typ2, m) -> match optKind with @@ -4492,14 +4507,14 @@ and TcTypeOrMeasure optKind cenv newOk checkCxs occ env (tpenv:SyntacticUnscoped | _ -> let ms1,tpenv = TcMeasure cenv newOk checkCxs occ env tpenv typ1 m let ms2,tpenv = TcMeasure cenv newOk checkCxs occ env tpenv typ2 m - TType_measure (MeasureProd(ms1,MeasureInv ms2)), tpenv + TType_measure (Measure.Prod(ms1,Measure.Inv ms2)), tpenv | SynType.App((SynType.Var(_,m1) | SynType.MeasurePower(_,_,m1)) as arg1,_,args,_commas,_,postfix,m) -> match optKind, args, postfix with | (None | Some TyparKind.Measure), [arg2], true -> let ms1,tpenv = TcMeasure cenv newOk checkCxs occ env tpenv arg1 m1 let ms2,tpenv = TcMeasure cenv newOk checkCxs occ env tpenv arg2 m - TType_measure (MeasureProd(ms1, ms2)), tpenv + TType_measure (Measure.Prod(ms1, ms2)), tpenv | _, _, _ -> errorR(Error(FSComp.SR.tcTypeParameterInvalidAsTypeConstructor(), m)) @@ -4551,8 +4566,8 @@ and TcMeasuresAsTuple cenv newOk checkCxs occ env (tpenv:SyntacticUnscopedTyparE | [] -> acc,tpenv | (nextisquot,typ)::args -> let ms1,tpenv = TcMeasure cenv newOk checkCxs occ env tpenv typ m - gather args tpenv nextisquot (if isquot then MeasureProd(acc,MeasureInv ms1) else MeasureProd(acc,ms1)) - gather args tpenv false MeasureOne + gather args tpenv nextisquot (if isquot then Measure.Prod(acc,Measure.Inv ms1) else Measure.Prod(acc,ms1)) + gather args tpenv false Measure.One and TcTypesOrMeasures optKinds cenv newOk checkCxs occ env tpenv args m = @@ -4784,7 +4799,7 @@ and TcTypeOrMeasureAndRecover optKind cenv newOk checkCxs occ env tpenv ty = errorRecovery e ty.Range let rty = match optKind, newOk with - | Some TyparKind.Measure, NoNewTypars -> TType_measure MeasureOne + | Some TyparKind.Measure, NoNewTypars -> TType_measure Measure.One | Some TyparKind.Measure, _ -> TType_measure (NewErrorMeasure ()) | _, NoNewTypars -> cenv.g.obj_ty | _ -> NewErrorType () @@ -4889,7 +4904,7 @@ and TcSimplePats cenv optArgsOK checkCxs ty env (tpenv,names,takenNames:Set<_>) [v],(tpenv,names,takenNames) | SynSimplePats.SimplePats (ps,m) -> - let ptys = UnifyTupleType env.eContextInfo cenv env.DisplayEnv m ty ps + let ptys = UnifyRefTupleType env.eContextInfo cenv env.DisplayEnv m ty ps let ps',(tpenv,names,takenNames) = List.mapFold (fun tpenv (ty,e) -> TcSimplePat optArgsOK checkCxs cenv ty env tpenv e) (tpenv,names,takenNames) (List.zip ptys ps) ps',(tpenv,names,takenNames) @@ -5219,9 +5234,15 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv,names,takenNames) ty pat | SynPat.Tuple (args,m) -> let argtys = NewInferenceTypes args - UnifyTypes cenv env m ty (TType_tuple argtys) + UnifyTypes cenv env m ty (TType_tuple (tupInfoRef, argtys)) let args',acc = TcPatterns warnOnUpper cenv env vFlags (tpenv,names,takenNames) argtys args - (fun values -> TPat_tuple(List.map (fun f -> f values) args',argtys,m)), acc + (fun values -> TPat_tuple(tupInfoRef,List.map (fun f -> f values) args',argtys,m)), acc + + | SynPat.StructTuple (args,m) -> + let argtys = NewInferenceTypes args + UnifyTypes cenv env m ty (TType_tuple (tupInfoStruct, argtys)) + let args',acc = TcPatterns warnOnUpper cenv env vFlags (tpenv,names,takenNames) argtys args + (fun values -> TPat_tuple(tupInfoStruct,List.map (fun f -> f values) args',argtys,m)), acc | SynPat.Paren (p,_) -> TcPat warnOnUpper cenv env None vFlags (tpenv,names,takenNames) ty p @@ -5344,9 +5365,8 @@ and TcExprNoRecover cenv ty (env: TcEnv) tpenv (expr: SynExpr) = if GetCtorShapeCounter env > 0 then AdjustCtorShapeCounter (fun x -> x - 1) env else env - let tm,tpenv = TcExprThen cenv ty env tpenv expr [] + TcExprThen cenv ty env tpenv expr [] - tm,tpenv // This recursive entry is only used from one callsite (DiscardAfterMissingQualificationAfterDot) // and has been added relatively late in F# 4.0 to preserve the structure of previous code. It pushes a 'delayed' parameter @@ -5581,11 +5601,18 @@ and TcExprUndelayed cenv overallTy env tpenv (expr: SynExpr) = mkLazyDelayed cenv.g m ety (mkUnitDelayLambda cenv.g m e'), tpenv | SynExpr.Tuple (args,_,m) -> - let argtys = UnifyTupleType env.eContextInfo cenv env.DisplayEnv m overallTy args + let argtys = UnifyRefTupleType env.eContextInfo cenv env.DisplayEnv m overallTy args + // No subsumption at tuple construction + let flexes = argtys |> List.map (fun _ -> false) + let args',tpenv = TcExprs cenv env m tpenv flexes argtys args + mkRefTupled cenv.g m args' argtys, tpenv + + | SynExpr.StructTuple (args,_,m) -> + let argtys = UnifyStructTupleType env.eContextInfo cenv env.DisplayEnv m overallTy args // No subsumption at tuple construction let flexes = argtys |> List.map (fun _ -> false) let args',tpenv = TcExprs cenv env m tpenv flexes argtys args - mkTupled cenv.g m args' argtys, tpenv + mkAnyTupled cenv.g m tupInfoStruct args' argtys, tpenv | SynExpr.ArrayOrList (isArray,args,m) -> CallExprHasTypeSink cenv.tcSink (m,env.NameEnv,overallTy, env.DisplayEnv,env.eAccessRights) @@ -5635,10 +5662,10 @@ and TcExprUndelayed cenv overallTy env tpenv (expr: SynExpr) = let bodyExpr,tpenv = TcStmt cenv envinner tpenv body mkFastForLoop cenv.g (spBind,m,idv,startExpr,dir,finishExpr,bodyExpr), tpenv - | SynExpr.ForEach (spBind, SeqExprOnly seqExprOnly, isFromSource, pat, enumExpr, body, m) -> + | SynExpr.ForEach (spForLoop, SeqExprOnly seqExprOnly, isFromSource, pat, enumSynExpr, bodySynExpr, m) -> assert isFromSource if seqExprOnly then warning (Error(FSComp.SR.tcExpressionRequiresSequence(),m)) - TcForEachExpr cenv overallTy env tpenv (pat,enumExpr,body,m,spBind) + TcForEachExpr cenv overallTy env tpenv (pat,enumSynExpr,bodySynExpr,m,spForLoop) | SynExpr.CompExpr (isArrayOrList,isNotNakedRefCell,comp,m) -> let env = ExitFamilyRegion env @@ -5697,8 +5724,8 @@ and TcExprUndelayed cenv overallTy env tpenv (expr: SynExpr) = ((if cenv.g.compilingFslib then id else mkCallSeq cenv.g m genCollElemTy) (mkCoerceExpr(expr,genEnumTy,expr.Range,exprty))),tpenv - | SynExpr.LetOrUse (isRec,isUse,binds,body,m) -> - TcLinearLetExprs (TcExprThatCanBeCtorBody cenv) cenv env overallTy (fun x -> x) tpenv (true(*consume use bindings*),isRec,isUse,binds,body,m) + | SynExpr.LetOrUse _ -> + TcLinearExprs (TcExprThatCanBeCtorBody cenv) cenv env overallTy tpenv false expr (fun x -> x) | SynExpr.TryWith (e1,_mTryToWith,clauses,mWithToLast,mTryToLast,spTry,spWith) -> let e1',tpenv = TcExpr cenv overallTy env tpenv e1 @@ -5737,17 +5764,7 @@ and TcExprUndelayed cenv overallTy env tpenv (expr: SynExpr) = | SynExpr.Sequential (sp,dir,e1,e2,m) -> if dir then - // Use continuations to cope with long linear sequences - let rec TcLinearSeqs expr cont = - match expr with - | SynExpr.Sequential (sp,true,e1,e2,m) -> - let e1',_ = TcStmtThatCantBeCtorBody cenv env tpenv e1 - TcLinearSeqs e2 (fun (e2',tpenv) -> - cont (Expr.Sequential(e1',e2',NormalSeq,sp,m),tpenv)) - - | _ -> - cont (TcExprThatCanBeCtorBody cenv overallTy env tpenv expr) - TcLinearSeqs expr (fun res -> res) + TcLinearExprs (TcExprThatCanBeCtorBody cenv) cenv env overallTy tpenv false expr (fun x -> x) else // Constructors using "new (...) = then " let e1',tpenv = TcExprThatCanBeCtorBody cenv overallTy env tpenv e1 @@ -5824,7 +5841,8 @@ and TcExprUndelayed cenv overallTy env tpenv (expr: SynExpr) = TcLongIdentThen cenv overallTy env tpenv lidwd [ DelayedApp(ExprAtomicFlag.Atomic, e1, mStmt); MakeDelayedSet(e2,mStmt) ] | SynExpr.TraitCall(tps,memSpfn,arg,m) -> - let (TTrait(_,logicalCompiledName,_,argtys,returnTy,_) as traitInfo),tpenv = TcPseudoMemberSpec cenv NewTyparsOK env tps tpenv memSpfn m + let synTypes = tps |> List.map (fun tp -> SynType.Var(tp,m)) + let (TTrait(_,logicalCompiledName,_,argtys,returnTy,_) as traitInfo),tpenv = TcPseudoMemberSpec cenv NewTyparsOK env synTypes tpenv memSpfn m if List.contains logicalCompiledName BakedInTraitConstraintNames then warning(BakedInMemberConstraintName(logicalCompiledName,m)) @@ -6221,16 +6239,44 @@ and GetNameAndArityOfObjExprBinding _cenv _env b = lookPat pat -and FreshenObjExprAbstractSlot cenv (_env: TcEnv) implty virtNameAndArityPairs (bind,bindAttribs,bindName,absSlots:(_ * MethInfo) list) = - let (NormalizedBinding (_,_,_,_,_,_,synTyparDecls,_,_,_,mBinding,_)) = bind +and FreshenObjExprAbstractSlot cenv (env: TcEnv) (implty:TType) virtNameAndArityPairs (bind,bindAttribs,bindName,absSlots:(_ * MethInfo) list) = + let (NormalizedBinding (_,_,_,_,_,_,synTyparDecls,_,_,_,mBinding,_)) = bind match absSlots with | [] when not (CompileAsEvent cenv.g bindAttribs) -> let absSlotsByName = List.filter (fst >> fst >> (=) bindName) virtNameAndArityPairs + let getSignature absSlot = (NicePrint.stringOfMethInfo cenv.amap mBinding env.DisplayEnv absSlot).Replace("abstract ","") + let getDetails (absSlot:MethInfo) = + if absSlot.GetParamTypes(cenv.amap,mBinding,[]) |> List.existsSquared (isAnyTupleTy cenv.g) then + FSComp.SR.tupleRequiredInAbstractMethod() + else "" + + // Compute the argument counts of the member arguments + let _,synValInfo = GetNameAndArityOfObjExprBinding cenv env bind + let arity = + match SynInfo.AritiesOfArgs synValInfo with + | _::x::_ -> x + | _ -> 0 match absSlotsByName with - | [] -> errorR(Error(FSComp.SR.tcNoAbstractOrVirtualMemberFound(bindName),mBinding)) - | [(_,absSlot:MethInfo)] -> errorR(Error(FSComp.SR.tcArgumentArityMismatch(bindName, (List.sum absSlot.NumArgs)),mBinding)) - | (_,absSlot:MethInfo) :: _ -> errorR(Error(FSComp.SR.tcArgumentArityMismatchOneOverload(bindName, (List.sum absSlot.NumArgs)),mBinding)) + | [] -> + let tcref = tcrefOfAppTy cenv.g implty + let containsNonAbstractMemberWithSameName = + tcref.MembersOfFSharpTyconByName + |> Seq.exists (fun kv -> kv.Value |> List.exists (fun valRef -> valRef.DisplayName = bindName)) + + let predictions = + virtNameAndArityPairs + |> List.map (fst >> fst) + |> ErrorResolutionHints.FilterPredictions bindName + + if containsNonAbstractMemberWithSameName then + errorR(Error(FSComp.SR.tcMemberFoundIsNotAbstractOrVirtual(tcref.DisplayName, bindName, ErrorResolutionHints.FormatPredictions predictions),mBinding)) + else + errorR(Error(FSComp.SR.tcNoAbstractOrVirtualMemberFound(bindName, ErrorResolutionHints.FormatPredictions predictions),mBinding)) + | [(_,absSlot:MethInfo)] -> + errorR(Error(FSComp.SR.tcArgumentArityMismatch(bindName, List.sum absSlot.NumArgs, arity, getSignature absSlot, getDetails absSlot),mBinding)) + | (_,absSlot:MethInfo) :: _ -> + errorR(Error(FSComp.SR.tcArgumentArityMismatchOneOverload(bindName, List.sum absSlot.NumArgs, arity, getSignature absSlot, getDetails absSlot),mBinding)) None @@ -6283,7 +6329,7 @@ and TcObjectExprBinding cenv (env: TcEnv) implty tpenv (absSlotInfo,bind) = let (CheckedBindingInfo(inlineFlag,bindingAttribs,_,_,ExplicitTyparInfo(_,declaredTypars,_),nameToPrelimValSchemeMap,rhsExpr,_,_,m,_,_,_,_),tpenv) = let flex, tpenv = TcNonrecBindingTyparDecls cenv env tpenv bind - TcNormalizedBinding ObjectExpressionOverrideBinding cenv env tpenv false bindingTy None NoSafeInitInfo ([],flex) bind + TcNormalizedBinding ObjectExpressionOverrideBinding cenv env tpenv bindingTy None NoSafeInitInfo ([],flex) bind // 4c. generalize the binding - only relevant when implementing a generic virtual method @@ -6302,7 +6348,7 @@ and TcObjectExprBinding cenv (env: TcEnv) implty tpenv (absSlotInfo,bind) = let freeInEnv = GeneralizationHelpers.ComputeUngeneralizableTypars env - let generalizedTypars = GeneralizationHelpers.ComputeAndGeneralizeGenericTypars(cenv,denv,m,true,freeInEnv,false,CanGeneralizeConstrainedTypars,inlineFlag,Some(rhsExpr),declaredTypars,[],bindingTy,false) + let generalizedTypars = GeneralizationHelpers.ComputeAndGeneralizeGenericTypars(cenv,denv,m,freeInEnv,false,CanGeneralizeConstrainedTypars,inlineFlag,Some(rhsExpr),declaredTypars,[],bindingTy,false) let declaredTypars = ChooseCanonicalDeclaredTyparsAfterInference cenv.g env.DisplayEnv declaredTypars m let generalizedTypars = PlaceTyparsInDeclarationOrder declaredTypars generalizedTypars @@ -6644,7 +6690,7 @@ and TcRecdExpr cenv overallTy env tpenv (inherits, optOrigExpr, flds, mWholeExpr ] match flds with | [] -> [] - | _ -> + | _ -> let tcref,_,fldsList = BuildFieldMap cenv env (isSome optOrigExpr) overallTy flds mWholeExpr let _,_,_,gtyp = infoOfTyconRef mWholeExpr tcref UnifyTypes cenv env mWholeExpr overallTy gtyp @@ -6701,12 +6747,18 @@ and TcRecdExpr cenv overallTy env tpenv (inherits, optOrigExpr, flds, mWholeExpr // TcForEachExpr //------------------------------------------------------------------------- -and TcForEachExpr cenv overallTy env tpenv (pat,enumSynExpr,body,m,spForLoop) = - UnifyTypes cenv env m overallTy cenv.g.unit_ty +and TcForEachExpr cenv overallTy env tpenv (pat,enumSynExpr,bodySynExpr,mWholeExpr,spForLoop) = + UnifyTypes cenv env mWholeExpr overallTy cenv.g.unit_ty - let enumExpr,enumExprTy,tpenv = - TcExprOfUnknownType cenv env tpenv enumSynExpr + let mPat = pat.Range + //let mBodyExpr = bodySynExpr.Range + let mEnumExpr = enumSynExpr.Range + let mForLoopStart = (match spForLoop with SequencePointAtForLoop(mStart) -> mStart | NoSequencePointAtForLoop -> mEnumExpr) + // Check the expression being enumerated + let enumExpr,enumExprTy,tpenv = TcExprOfUnknownType cenv env tpenv enumSynExpr + + // Depending on its type we compile it in different ways let enumElemTy, bodyExprFixup, overallExprFixup, iterationTechnique = match enumExpr with @@ -6717,24 +6769,24 @@ and TcForEachExpr cenv overallTy env tpenv (pat,enumSynExpr,body,m,spForLoop) = // optimize 'for i in arr do' | _ when isArray1DTy cenv.g enumExprTy -> - let arrVar,arrExpr = mkCompGenLocal m "arr" enumExprTy - let idxVar,idxExpr = mkCompGenLocal m "idx" cenv.g.int32_ty + let arrVar,arrExpr = mkCompGenLocal mEnumExpr "arr" enumExprTy + let idxVar,idxExpr = mkCompGenLocal mPat "idx" cenv.g.int32_ty let elemTy = destArrayTy cenv.g enumExprTy // Evaluate the array index lookup - let bodyExprFixup = (fun elemVar bodyExpr -> mkCompGenLet m elemVar (mkLdelem cenv.g m elemTy arrExpr idxExpr) bodyExpr) + let bodyExprFixup = (fun elemVar bodyExpr -> mkCompGenLet mForLoopStart elemVar (mkLdelem cenv.g mForLoopStart elemTy arrExpr idxExpr) bodyExpr) // Evaluate the array expression once and put it in arrVar - let overallExprFixup = (fun overallExpr -> mkCompGenLet m arrVar enumExpr overallExpr) + let overallExprFixup = (fun overallExpr -> mkCompGenLet mForLoopStart arrVar enumExpr overallExpr) // Ask for a loop over integers for the given range - (elemTy, bodyExprFixup, overallExprFixup, Choice2Of3 (idxVar,mkZero cenv.g m,mkDecr cenv.g m (mkLdlen cenv.g m arrExpr))) + (elemTy, bodyExprFixup, overallExprFixup, Choice2Of3 (idxVar,mkZero cenv.g mForLoopStart,mkDecr cenv.g mForLoopStart (mkLdlen cenv.g mForLoopStart arrExpr))) | _ -> - let enumerableVar,enumerableExprInVar = mkCompGenLocal enumExpr.Range "inputSequence" enumExprTy + let enumerableVar,enumerableExprInVar = mkCompGenLocal mEnumExpr "inputSequence" enumExprTy let enumeratorVar, enumeratorExpr,_,enumElemTy,getEnumExpr,getEnumTy,guardExpr,_,currentExpr = - AnalyzeArbitraryExprAsEnumerable cenv env true enumExpr.Range enumExprTy enumerableExprInVar + AnalyzeArbitraryExprAsEnumerable cenv env true mEnumExpr enumExprTy enumerableExprInVar (enumElemTy, (fun _ x -> x), id, Choice3Of3(enumerableVar,enumeratorVar, enumeratorExpr,getEnumExpr,getEnumTy,guardExpr,currentExpr)) let pat,_,vspecs,envinner,tpenv = TcMatchPattern cenv enumElemTy env tpenv (pat,None) @@ -6744,44 +6796,52 @@ and TcForEachExpr cenv overallTy env tpenv (pat,enumSynExpr,body,m,spForLoop) = | TPat_as (pat1,PBind(v,TypeScheme([],_)),_) -> v,pat1 | _ -> - let tmp,_ = mkCompGenLocal m "forLoopVar" enumElemTy + let tmp,_ = mkCompGenLocal pat.Range "forLoopVar" enumElemTy tmp,pat - let bodyExpr,tpenv = TcStmt cenv envinner tpenv body + // Check the body of the loop + let bodyExpr,tpenv = TcStmt cenv envinner tpenv bodySynExpr + // Add the pattern match compilation let bodyExpr = let valsDefinedByMatching = FlatListSet.remove valEq elemVar vspecs - CompilePatternForMatch cenv env enumSynExpr.Range pat.Range false IgnoreWithWarning (elemVar,[]) - [TClause(pat,None,TTarget(valsDefinedByMatching,bodyExpr,SequencePointAtTarget),m)] enumElemTy overallTy + CompilePatternForMatch + cenv env enumSynExpr.Range pat.Range false IgnoreWithWarning (elemVar,[]) + [TClause(pat,None,TTarget(valsDefinedByMatching,bodyExpr,SequencePointAtTarget),mForLoopStart)] + enumElemTy + overallTy // Apply the fixup to bind the elemVar if needed let bodyExpr = bodyExprFixup elemVar bodyExpr + // Build the overall loop let overallExpr = match iterationTechnique with // Build iteration as a for loop | Choice1Of3(startExpr,finishExpr) -> - mkFastForLoop cenv.g (spForLoop,m,elemVar,startExpr,true,finishExpr,bodyExpr) + mkFastForLoop cenv.g (spForLoop,mWholeExpr,elemVar,startExpr,true,finishExpr,bodyExpr) // Build iteration as a for loop with a specific index variable that is not the same as the elemVar | Choice2Of3(idxVar,startExpr,finishExpr) -> - mkFastForLoop cenv.g (spForLoop,m,idxVar,startExpr,true,finishExpr,bodyExpr) + mkFastForLoop cenv.g (spForLoop,mWholeExpr,idxVar,startExpr,true,finishExpr,bodyExpr) // Build iteration as a while loop with a try/finally disposal | Choice3Of3(enumerableVar,enumeratorVar, _,getEnumExpr,_,guardExpr,currentExpr) -> // This compiled for must be matched EXACTLY by CompiledForEachExpr in opt.fs and creflect.fs - mkCompGenLet enumExpr.Range enumerableVar enumExpr - (let cleanupE = BuildDisposableCleanup cenv env m enumeratorVar + mkCompGenLet mForLoopStart enumerableVar enumExpr + (let cleanupE = BuildDisposableCleanup cenv env mWholeExpr enumeratorVar let spBind = (match spForLoop with SequencePointAtForLoop(spStart) -> SequencePointAtBinding(spStart) | NoSequencePointAtForLoop -> NoSequencePointAtStickyBinding) - (mkLet spBind getEnumExpr.Range enumeratorVar getEnumExpr + (mkLet spBind mForLoopStart enumeratorVar getEnumExpr (mkTryFinally cenv.g (mkWhile cenv.g - (NoSequencePointAtWhileLoop, WhileLoopForCompiledForEachExprMarker, guardExpr, - mkCompGenLet bodyExpr.Range elemVar currentExpr bodyExpr,m), - cleanupE,m,cenv.g.unit_ty,NoSequencePointAtTry,NoSequencePointAtFinally)))) + (NoSequencePointAtWhileLoop, + WhileLoopForCompiledForEachExprMarker, guardExpr, + mkCompGenLet mForLoopStart elemVar currentExpr bodyExpr, + mForLoopStart), + cleanupE,mForLoopStart,cenv.g.unit_ty,NoSequencePointAtTry,NoSequencePointAtFinally)))) let overallExpr = overallExprFixup overallExpr overallExpr, tpenv @@ -7932,13 +7992,14 @@ and TcSequenceExpression cenv env tpenv comp overallTy m = Some(mkCond spIfToThen SequencePointAtTarget mIfToEndOfElseBranch genOuterTy guardExpr' thenExpr elseExpr, tpenv) // 'let x = expr in expr' - | SynExpr.LetOrUse (isRec,false (* not a 'use' binding *),binds,body,m) -> - TcLinearLetExprs + | SynExpr.LetOrUse (_,false (* not a 'use' binding *),_,_,_) -> + TcLinearExprs (fun ty envinner tpenv e -> tcSequenceExprBody envinner ty tpenv e) cenv env overallTy - (fun x -> x) tpenv - (false(* don't consume 'use' bindings*),isRec,false,binds,body,m) |> Some + true + comp + (fun x -> x) |> Some // 'use x = expr in expr' | SynExpr.LetOrUse (_isRec,true,[Binding (_vis,NormalBinding,_,_,_,_,_,pat,_,rhsExpr,_,_spBind)],innerComp,wholeExprMark) -> @@ -8249,16 +8310,16 @@ and TcItemThen cenv overallTy env tpenv (item,mItem,rest,afterOverloadResolution else error(Error(FSComp.SR.tcUnionCaseFieldCannotBeUsedMoreThanOnce(id.idText), id.idRange)) currentIndex <- SEEN_NAMED_ARGUMENT | None -> - // ambiguity may apprear only when if argument is boolean\generic. + // ambiguity may appear only when if argument is boolean\generic. // if // - we didn't find argument with specified name AND // - we have not seen any named arguments so far AND // - type of current argument is bool\generic // then we'll favor old behavior and treat current argument as positional. let isSpecialCaseForBackwardCompatibility = - if currentIndex = SEEN_NAMED_ARGUMENT then false - else - match stripTyEqns cenv.g (List.item currentIndex argtys) with + (currentIndex <> SEEN_NAMED_ARGUMENT) && + (currentIndex < nargtys) && + match stripTyEqns cenv.g argtys.[currentIndex] with | TType_app(tcref, _) -> tyconRefEq cenv.g cenv.g.bool_tcr tcref || tyconRefEq cenv.g cenv.g.system_Bool_tcref tcref | TType_var(_) -> true | _ -> false @@ -8464,11 +8525,13 @@ and TcItemThen cenv overallTy env tpenv (item,mItem,rest,afterOverloadResolution let logicalCompiledName = ComputeLogicalName id memberFlags let traitInfo = TTrait(argTys,logicalCompiledName,memberFlags,argTys,Some retTy, sln) - AddCxMethodConstraint env.DisplayEnv cenv.css mItem NoTrace traitInfo - let expr = Expr.Op(TOp.TraitCall(traitInfo), [], ves, mItem) let expr = mkLambdas mItem [] vs (expr,retTy) - PropagateThenTcDelayed cenv overallTy env tpenv mItem (MakeApplicableExprNoFlex cenv expr) (tyOfExpr cenv.g expr) ExprAtomicFlag.NonAtomic delayed + let resultExpr = PropagateThenTcDelayed cenv overallTy env tpenv mItem (MakeApplicableExprNoFlex cenv expr) (tyOfExpr cenv.g expr) ExprAtomicFlag.NonAtomic delayed + // Add the constraint after the arguments have been checked to allow annotations to kick in on rigid type parameters + AddCxMethodConstraint env.DisplayEnv cenv.css mItem NoTrace traitInfo + resultExpr + | Item.DelegateCtor typ -> match delayed with @@ -9039,7 +9102,7 @@ and TcMethodApplication let returnTy = (exprTy,curriedArgTys) ||> List.fold (fun exprTy argTys -> let domainTy,resultTy = UnifyFunctionType None cenv denv mMethExpr exprTy - UnifyTypes cenv env mMethExpr domainTy (mkTupledTy cenv.g argTys) + UnifyTypes cenv env mMethExpr domainTy (mkRefTupledTy cenv.g argTys) resultTy) curriedArgTys,returnTy @@ -9078,7 +9141,7 @@ and TcMethodApplication | None,_ -> let domainTy,returnTy = UnifyFunctionType None cenv denv mMethExpr exprTy - let argTys = if isUnitTy cenv.g domainTy then [] else tryDestTupleTy cenv.g domainTy + let argTys = if isUnitTy cenv.g domainTy then [] else tryDestRefTupleTy cenv.g domainTy // Only apply this rule if a candidate method exists with this number of arguments let argTys = if candidates |> List.exists (CalledMethHasSingleArgumentGroupOfThisLength argTys.Length) then @@ -9143,7 +9206,7 @@ and TcMethodApplication UnifyMatchingSimpleArgumentTypes exprTy calledMeth | _ -> let domainTy,returnTy = UnifyFunctionType None cenv denv mMethExpr exprTy - let argTys = if isUnitTy cenv.g domainTy then [] else tryDestTupleTy cenv.g domainTy + let argTys = if isUnitTy cenv.g domainTy then [] else tryDestRefTupleTy cenv.g domainTy // Only apply this rule if a candidate method exists with this number of arguments let argTys = if candidates |> List.exists (CalledMethHasSingleArgumentGroupOfThisLength argTys.Length) then @@ -9552,8 +9615,8 @@ and TcMethodApplication if isNil outArgTmpBinds then expr,exprty else let outArgTys = outArgExprs |> List.map (tyOfExpr cenv.g) - let expr = if isUnitTy cenv.g exprty then mkCompGenSequential mMethExpr expr (mkTupled cenv.g mMethExpr outArgExprs outArgTys) - else mkTupled cenv.g mMethExpr (expr :: outArgExprs) (exprty :: outArgTys) + let expr = if isUnitTy cenv.g exprty then mkCompGenSequential mMethExpr expr (mkRefTupled cenv.g mMethExpr outArgExprs outArgTys) + else mkRefTupled cenv.g mMethExpr (expr :: outArgExprs) (exprty :: outArgTys) let expr = mkLetsBind mMethExpr outArgTmpBinds expr expr, tyOfExpr cenv.g expr @@ -9619,7 +9682,7 @@ and TcMethodApplication | Some synArgExpr -> match lambdaVars with | Some [lambdaVars] -> - let argExpr,tpenv = TcExpr cenv (mkTupledVarsTy cenv.g lambdaVars) env tpenv synArgExpr + let argExpr,tpenv = TcExpr cenv (mkRefTupledVarsTy cenv.g lambdaVars) env tpenv synArgExpr mkApps cenv.g ((expr,tyOfExpr cenv.g expr),[],[argExpr],mMethExpr), tpenv | _ -> error(InternalError("unreachable - expected some lambda vars for a tuple mismatch",mItem)) @@ -9750,32 +9813,34 @@ and CheckRecursiveBindingIds binds = error(Duplicate("value",nm,m)) else hashOfBinds.[nm] <- b -/// Process a sequence of iterated lets "let ... in let ... in ..." in a tail recursive way -/// This avoids stack overflow on really larger "let" and "letrec" lists -and TcLinearLetExprs bodyChecker cenv env overallTy builder tpenv (processUseBindings,isRec,isUse,binds,body,m) = - assert (not isUse || processUseBindings) +/// Process a sequence of seqeuntials mixed with iterated lets "let ... in let ... in ..." in a tail recursive way +/// This avoids stack overflow on really large "let" and "letrec" lists +and TcLinearExprs bodyChecker cenv env overallTy tpenv isCompExpr expr cont = + match expr with + | SynExpr.Sequential (sp,true,e1,e2,m) when not isCompExpr -> + let e1',_ = TcStmtThatCantBeCtorBody cenv env tpenv e1 + // tailcall + TcLinearExprs bodyChecker cenv env overallTy tpenv isCompExpr e2 (fun (e2',tpenv) -> + cont (Expr.Sequential(e1',e2',NormalSeq,sp,m),tpenv)) + + | SynExpr.LetOrUse (isRec,isUse,binds,body,m) when not (isUse && isCompExpr) -> - if isRec then - // TcLinearLetExprs processes at most one recursive binding - CheckRecursiveBindingIds binds - let binds = List.map (fun x -> RecDefnBindingInfo(ExprContainerInfo,NoNewSlots,ExpressionBinding,x)) binds - if isUse then errorR(Error(FSComp.SR.tcBindingCannotBeUseAndRec(),m)) - let binds,envinner,tpenv = TcLetrec ErrorOnOverrides cenv env tpenv (binds,m,m) - let bodyExpr,tpenv = bodyChecker overallTy envinner tpenv body - let bodyExpr = bindLetRec (FlatList.ofList binds) m bodyExpr - fst (builder (bodyExpr,overallTy)),tpenv - else - // TcLinearLetExprs processes multiple 'let' bindings in a tail recursive way - // We process one binding, then look for additional linear bindings and accumulate the builder continuation. - // Don't processes 'use' bindings (e.g. in sequence expressions) unless directed to. - let mkf,envinner,tpenv = TcLetBinding cenv isUse env ExprContainerInfo ExpressionBinding tpenv (binds,m,body.Range) - let builder' x = builder (mkf x) - match body with - | SynExpr.LetOrUse (isRec',isUse',binds',bodyExpr,m') when (not isUse' || processUseBindings) -> - TcLinearLetExprs bodyChecker cenv envinner overallTy builder' tpenv (processUseBindings,isRec',isUse',binds',bodyExpr,m') - | _ -> + if isRec then + // TcLinearExprs processes at most one recursive binding, this is not tailcalling + CheckRecursiveBindingIds binds + let binds = List.map (fun x -> RecDefnBindingInfo(ExprContainerInfo,NoNewSlots,ExpressionBinding,x)) binds + if isUse then errorR(Error(FSComp.SR.tcBindingCannotBeUseAndRec(),m)) + let binds,envinner,tpenv = TcLetrec ErrorOnOverrides cenv env tpenv (binds,m,m) let bodyExpr,tpenv = bodyChecker overallTy envinner tpenv body - fst (builder' (bodyExpr,overallTy)),tpenv + let bodyExpr = bindLetRec (FlatList.ofList binds) m bodyExpr + cont (bodyExpr,tpenv) + else + // TcLinearExprs processes multiple 'let' bindings in a tail recursive way + let mkf,envinner,tpenv = TcLetBinding cenv isUse env ExprContainerInfo ExpressionBinding tpenv (binds,m,body.Range) + TcLinearExprs bodyChecker cenv envinner overallTy tpenv isCompExpr body (fun (x,tpenv) -> + cont (fst (mkf (x,overallTy)), tpenv)) + | _ -> + cont (bodyChecker overallTy env tpenv expr) /// Typecheck and compile pattern-matching constructs and TcAndPatternCompileMatchClauses mExpr matchm actionOnFailure cenv inputTy resultTy env tpenv clauses = @@ -9890,7 +9955,7 @@ and TcAndBuildFixedExpr cenv env (overallPatTy, fixedExpr, overallExprTy, mBindi /// Binding checking code, for all bindings including let bindings, let-rec bindings, member bindings and object-expression bindings and -and TcNormalizedBinding declKind (cenv:cenv) env tpenv isUse overallTy safeThisValOpt safeInitInfo (enclosingDeclaredTypars,(ExplicitTyparInfo(_,declaredTypars,_) as flex)) bind = +and TcNormalizedBinding declKind (cenv:cenv) env tpenv overallTy safeThisValOpt safeInitInfo (enclosingDeclaredTypars,(ExplicitTyparInfo(_,declaredTypars,_) as flex)) bind = let envinner = AddDeclaredTypars NoCheckForDuplicateTypars (enclosingDeclaredTypars@declaredTypars) env match bind with @@ -9938,7 +10003,6 @@ and TcNormalizedBinding declKind (cenv:cenv) env tpenv isUse overallTy safeThisV let argAttribs = spatsL |> List.map (SynInfo.InferSynArgInfoFromSimplePats >> List.map (SynInfo.AttribsOfArgData >> TcAttrs AttributeTargets.Parameter)) - let retAttribs = match rtyOpt with | Some (SynBindingReturnInfo(_,_,retAttrs)) -> TcAttrs AttributeTargets.ReturnValue retAttrs @@ -9964,9 +10028,6 @@ and TcNormalizedBinding declKind (cenv:cenv) env tpenv isUse overallTy safeThisV if declKind <> ExpressionBinding || isInline || isMutable then errorR(Error(FSComp.SR.tcFixedNotAllowed(),mBinding)) - if isUse && isMutable then - warning(Error(FSComp.SR.tcUseMayNotBeMutable(),mBinding)) - if HasFSharpAttributeOpt cenv.g cenv.g.attrib_DllImportAttribute valAttribs then if not declKind.CanBeDllImport || (match memberFlagsOpt with Some memberFlags -> memberFlags.IsInstance | _ -> false) then errorR(Error(FSComp.SR.tcDllImportNotAllowed(),mBinding)) @@ -10116,10 +10177,10 @@ and TcNonrecBindingTyparDecls cenv env tpenv bind = let (NormalizedBinding(_,_,_,_,_,_,synTyparDecls,_,_,_,_,_)) = bind TcBindingTyparDecls true cenv env tpenv synTyparDecls -and TcNonRecursiveBinding declKind cenv env tpenv isUse ty b = +and TcNonRecursiveBinding declKind cenv env tpenv ty b = let b = BindingNormalization.NormalizeBinding ValOrMemberBinding cenv env b let flex, tpenv = TcNonrecBindingTyparDecls cenv env tpenv b - TcNormalizedBinding declKind cenv env tpenv isUse ty None NoSafeInitInfo ([],flex) b + TcNormalizedBinding declKind cenv env tpenv ty None NoSafeInitInfo ([],flex) b //------------------------------------------------------------------------- // TcAttribute* @@ -10272,8 +10333,7 @@ and TcAttribute canFail cenv (env: TcEnv) attrTgt (synAttr: SynAttribute) = Attrib(tcref,ILAttrib(ilMethRef),args,namedAttribArgMap,isAppliedToGetterOrSetter,Some constrainedTgts,m) | Expr.App((InnerExprPat(ExprValWithPossibleTypeInst(vref,_,_,_))),_,_,args,_) -> - let tryDestUnitOrTuple = function Expr.Const(Const.Unit,_,_) -> [] | expr -> tryDestTuple expr - let args = args |> List.collect tryDestUnitOrTuple |> List.map mkAttribExpr + let args = args |> List.collect (function Expr.Const(Const.Unit,_,_) -> [] | expr -> tryDestRefTupleExpr expr) |> List.map mkAttribExpr Attrib(tcref,FSAttrib(vref),args,namedAttribArgMap,isAppliedToGetterOrSetter,Some constrainedTgts,mAttr) | _ -> @@ -10322,7 +10382,7 @@ and TcAttributes cenv env attrTgt synAttribs = and TcLetBinding cenv isUse env containerInfo declKind tpenv (binds,bindsm,scopem) = // Typecheck all the bindings... - let binds',tpenv = List.mapFold (fun tpenv b -> TcNonRecursiveBinding declKind cenv env tpenv isUse (NewInferenceType ()) b) tpenv binds + let binds',tpenv = List.mapFold (fun tpenv b -> TcNonRecursiveBinding declKind cenv env tpenv (NewInferenceType ()) b) tpenv binds let (ContainerInfo(altActualParent,_)) = containerInfo // Canonicalize constraints prior to generalization @@ -10352,7 +10412,7 @@ and TcLetBinding cenv isUse env containerInfo declKind tpenv (binds,bindsm,scope [] else let freeInEnv = lazyFreeInEnv.Force() - GeneralizationHelpers.ComputeAndGeneralizeGenericTypars(cenv,denv, m, true, freeInEnv, canInferTypars, GeneralizationHelpers.CanGeneralizeConstrainedTyparsForDecl(declKind), inlineFlag, Some rhsExpr, allDeclaredTypars, maxInferredTypars,tauTy,false) + GeneralizationHelpers.ComputeAndGeneralizeGenericTypars(cenv,denv, m, freeInEnv, canInferTypars, GeneralizationHelpers.CanGeneralizeConstrainedTyparsForDecl(declKind), inlineFlag, Some rhsExpr, allDeclaredTypars, maxInferredTypars,tauTy,false) let prelimValSchemes2 = GeneralizeVals cenv denv enclosingDeclaredTypars generalizedTypars nameToPrelimValSchemeMap @@ -10421,7 +10481,7 @@ and TcLetBinding cenv isUse env containerInfo declKind tpenv (binds,bindsm,scope else (bodyExpr,bodyExprTy) - ((mkRhsBind << mkPatBind << mkCleanup << mkf_sofar), + ((mkf_sofar >> mkCleanup >> mkPatBind >> mkRhsBind), AddLocalValMap cenv.tcSink scopem prelimRecValues env, tpenv)) @@ -10608,7 +10668,7 @@ and ApplyAbstractSlotInference cenv (envinner:TcEnv) (bindingTy,m,synTyparDecls, then mkMethodTy cenv.g argTysFromAbsSlot retTyFromAbsSlot else match argTysFromAbsSlot with - | [argTysFromAbsSlot] -> mkTupledTy cenv.g argTysFromAbsSlot --> cenv.g.unit_ty + | [argTysFromAbsSlot] -> mkRefTupledTy cenv.g argTysFromAbsSlot --> cenv.g.unit_ty | _ -> error(Error(FSComp.SR.tcInvalidSignatureForSet(),memberId.idRange)) retTyFromAbsSlot --> cenv.g.unit_ty @@ -10971,7 +11031,7 @@ and TcLetrecBinding let envRec = MakeInnerEnvForMember cenv envRec vspec let checkedBind,tpenv = - TcNormalizedBinding declKind cenv envRec tpenv false tau safeThisValOpt safeInitInfo (enclosingDeclaredTypars,flex) rbind.SyntacticBinding + TcNormalizedBinding declKind cenv envRec tpenv tau safeThisValOpt safeInitInfo (enclosingDeclaredTypars,flex) rbind.SyntacticBinding (try UnifyTypes cenv envRec vspec.Range (allDeclaredTypars +-> tau) vspec.Type with e -> error (Recursion(envRec.DisplayEnv,vspec.Id,tau,vspec.Type,vspec.Range))) @@ -11209,7 +11269,7 @@ and TcLetrecComputeAndGeneralizeGenericTyparsForBinding cenv denv freeInEnv (pgr let maxInferredTypars = freeInTypeLeftToRight cenv.g false tau let canGeneralizeConstrained = GeneralizationHelpers.CanGeneralizeConstrainedTyparsForDecl rbinfo.DeclKind - let generalizedTypars = GeneralizationHelpers.ComputeAndGeneralizeGenericTypars (cenv,denv,m,true,freeInEnv,canInferTypars,canGeneralizeConstrained,inlineFlag, Some(expr), allDeclaredTypars, maxInferredTypars,tau,isCtor) + let generalizedTypars = GeneralizationHelpers.ComputeAndGeneralizeGenericTypars (cenv,denv,m,freeInEnv,canInferTypars,canGeneralizeConstrained,inlineFlag, Some(expr), allDeclaredTypars, maxInferredTypars,tau,isCtor) generalizedTypars /// Compute the type variables which may have member constraints that need to be canonicalized prior to generalization @@ -11451,7 +11511,7 @@ let TcAndPublishValSpec (cenv, env, containerInfo: ContainerInfo, declKind, memF let flex = ExplicitTyparInfo(declaredTypars,declaredTypars,synCanInferTypars) - let generalizedTypars = GeneralizationHelpers.ComputeAndGeneralizeGenericTypars(cenv,denv,id.idRange,canInferTypars,emptyFreeTypars,canInferTypars,CanGeneralizeConstrainedTypars,inlineFlag,None,allDeclaredTypars,freeInType,ty,false) + let generalizedTypars = GeneralizationHelpers.ComputeAndGeneralizeGenericTypars(cenv,denv,id.idRange,emptyFreeTypars,canInferTypars,CanGeneralizeConstrainedTypars,inlineFlag,None,allDeclaredTypars,freeInType,ty,false) let valscheme1 = PrelimValScheme1(id,flex,ty,Some(partialValReprInfo),memberInfoOpt,mutableFlag,inlineFlag,NormalVal,noArgOrRetAttribs,vis,false) @@ -11816,7 +11876,7 @@ module IncrClassChecking = // NOTE: the type scheme here is not complete!!! The ctorTy is more or less // just a type variable. The type and typars get fixed-up after inference let ctorValScheme,ctorVal = - let argty = mkTupledTy cenv.g (typesOfVals ctorArgs) + let argty = mkRefTupledTy cenv.g (typesOfVals ctorArgs) // Initial type has known information let ctorTy = mkFunTy argty objTy // REVIEW: no attributes can currently be specified for the implicit constructor @@ -12651,7 +12711,10 @@ module MutRecBindingChecking = let (TyconBindingDefn(containerInfo,newslotsOK,declKind,classMemberDef,m)) = defn let (incrClassCtorLhsOpt,envForTycon,tpenv,recBindIdx,uncheckedBindsRev) = innerState - if tcref.IsTypeAbbrev then error(Error(FSComp.SR.tcTypeAbbreviationsMayNotHaveMembers(),(trimRangeToLine m))) // ideally we'd have the 'm' of the type declaration stored here, to avoid needing to trim to line to approx + if tcref.IsTypeAbbrev then + // ideally we'd have the 'm' of the type declaration stored here, to avoid needing to trim to line to approx + error(Error(FSComp.SR.tcTypeAbbreviationsMayNotHaveMembers(),(trimRangeToLine m))) + if tcref.IsEnumTycon && (declKind <> ExtrinsicExtensionBinding) then error(Error(FSComp.SR.tcEnumerationsMayNotHaveMembers(),(trimRangeToLine m))) // ideally we'd have the 'm' of the type declaration stored here, to avoid needing to trim to line to approx match classMemberDef, containerInfo with @@ -14111,19 +14174,28 @@ module EstablishTypeDefinitionCores = | _ -> () ] - let ComputeModuleOrNamespaceKind g isModule attribs = + let ComputeModuleOrNamespaceKind g isModule typeNames attribs nm = if not isModule then Namespace - elif ModuleNameIsMangled g attribs then FSharpModuleWithSuffix + elif ModuleNameIsMangled g attribs || Set.contains nm typeNames then FSharpModuleWithSuffix else ModuleOrType let AdjustModuleName modKind nm = (match modKind with FSharpModuleWithSuffix -> nm+FSharpModuleSuffix | _ -> nm) - let TcTyconDefnCore_Phase1A_BuildInitialModule cenv envInitial parent compInfo = + let TypeNamesInMutRecDecls (compDecls: MutRecShapes) = + [ for d in compDecls do + match d with + | MutRecShape.Tycon (MutRecDefnsPhase1DataForTycon(ComponentInfo(_,_,_,ids,_,_,_,_),_,_,_,_,isAtOriginalTyconDefn),_) -> + if isAtOriginalTyconDefn then + yield (List.last ids).idText + | _ -> () ] + |> set + + let TcTyconDefnCore_Phase1A_BuildInitialModule cenv envInitial parent typeNames compInfo compDecls = let (ComponentInfo(attribs,_parms, _constraints,longPath,xml,_,vis,im)) = compInfo let id = ComputeModuleName longPath let modAttrs = TcAttributes cenv envInitial AttributeTargets.ModuleDecl attribs - let modKind = ComputeModuleOrNamespaceKind cenv.g true modAttrs + let modKind = ComputeModuleOrNamespaceKind cenv.g true typeNames modAttrs id.idText let modName = AdjustModuleName modKind id.idText let vis,_ = ComputeAccessAndCompPath envInitial None id.idRange vis parent @@ -14136,7 +14208,8 @@ module EstablishTypeDefinitionCores = let envForDecls, mtypeAcc = MakeInnerEnv envInitial id modKind let mspec = NewModuleOrNamespace (Some envInitial.eCompPath) vis id (xml.ToXmlDoc()) modAttrs (notlazy (NewEmptyModuleOrNamespaceType modKind)) let innerParent = Parent (mkLocalModRef mspec) - MutRecDefnsPhase2DataForModule (mtypeAcc, mspec), (innerParent, envForDecls) + let typeNames = TypeNamesInMutRecDecls compDecls + MutRecDefnsPhase2DataForModule (mtypeAcc, mspec), (innerParent, typeNames, envForDecls) /// Establish 'type C < T1... TN > = ...' including /// - computing the mangled name for C @@ -14154,7 +14227,6 @@ module EstablishTypeDefinitionCores = // Augmentations of type definitions are allowed within the same file as long as no new type representation or abbreviation is given CheckForDuplicateConcreteType env id.idText id.idRange - CheckForDuplicateModule env id.idText id.idRange let vis,cpath = ComputeAccessAndCompPath env None id.idRange synVis parent // Establish the visibility of the representation, e.g. @@ -14478,7 +14550,7 @@ module EstablishTypeDefinitionCores = /// Note that for /// type PairOfInts = int * int /// then after running this phase and checking for cycles, operations - // such as 'isTupleTy' will return reliable results, e.g. isTupleTy on the + // such as 'isRefTupleTy' will return reliable results, e.g. isRefTupleTy on the /// TAST type for 'PairOfInts' will report 'true' // let private TcTyconDefnCore_Phase1C_Phase1E_EstablishAbbreviations cenv envinner inSig tpenv pass (MutRecDefnsPhase1DataForTycon(_,synTyconRepr,_,_,_,_)) (tycon:Tycon) (attrs:Attribs) = @@ -14530,8 +14602,6 @@ module EstablishTypeDefinitionCores = let typars = tycon.Typars(m) if ftyvs.Length <> typars.Length then errorR(Deprecated(FSComp.SR.tcTypeAbbreviationHasTypeParametersMissingOnType(),tycon.Range)) - //elif not ((ftyvs,typars) ||> List.forall2 typarEq) then - // warning(Deprecated("The declared type parameters of this type abbreviation are not declared in the same order they are used in the type being abbreviated. Consider reordering the type parameters, or use a concrete type definition that wraps an underlying type, such as 'type C<'a,'b> = C of ...'",tycon.Range)) if firstPass then tycon.Data.entity_tycon_abbrev <- Some ty @@ -14806,9 +14876,11 @@ module EstablishTypeDefinitionCores = noAllowNullLiteralAttributeCheck() structLayoutAttributeCheck(false) let unionCases = TcRecdUnionAndEnumDeclarations.TcUnionCaseDecls cenv envinner innerParent thisTy tpenv unionCases - + if tycon.IsStructRecordOrUnionTycon && unionCases.Length > 1 then - errorR(Error(FSComp.SR.tcStructUnionMultiCase(),m)) + let fieldNames = [ for uc in unionCases do for ft in uc.FieldTable.TrueInstanceFieldsAsList do yield ft.Name ] + if fieldNames |> List.distinct |> List.length <> fieldNames.Length then + errorR(Error(FSComp.SR.tcStructUnionMultiCaseDistinctFields(),m)) writeFakeUnionCtorsToSink unionCases MakeUnionRepr unionCases, None, NoSafeInitInfo @@ -14999,16 +15071,16 @@ module EstablishTypeDefinitionCores = let rec accInAbbrevType ty acc = match stripTyparEqns ty with - | TType_tuple l -> accInAbbrevTypes l acc + | TType_tuple (_,l) -> accInAbbrevTypes l acc | TType_ucase (UCRef(tc,_),tinst) | TType_app (tc,tinst) -> let tycon2 = tc.Deref - let acc = accInAbbrevTypes tinst acc + let acc = accInAbbrevTypes tinst acc // Record immediate recursive references if ListSet.contains (===) tycon2 tycons then - (tycon,tycon2) ::acc + (tycon,tycon2) :: acc // Expand the representation of abbreviations - elif tc.IsTypeAbbrev then + elif tc.IsTypeAbbrev then accInAbbrevType (reduceTyconRefAbbrev tc tinst) acc // Otherwise H - explore the instantiation. else @@ -15025,27 +15097,20 @@ module EstablishTypeDefinitionCores = and accInMeasure ms acc = match stripUnitEqns ms with - | MeasureCon tc when ListSet.contains (===) tc.Deref tycons -> + | Measure.Con tc when ListSet.contains (===) tc.Deref tycons -> (tycon, tc.Deref) :: acc - | MeasureCon tc when tc.IsTypeAbbrev -> + | Measure.Con tc when tc.IsTypeAbbrev -> accInMeasure (reduceTyconRefAbbrevMeasureable tc) acc - | MeasureProd (ms1, ms2) -> accInMeasure ms1 (accInMeasure ms2 acc) - | MeasureInv ms -> accInMeasure ms acc + | Measure.Prod (ms1, ms2) -> accInMeasure ms1 (accInMeasure ms2 acc) + | Measure.Inv ms -> accInMeasure ms acc | _ -> acc and accInAbbrevTypes tys acc = List.foldBack accInAbbrevType tys acc - - let acc = [] - let acc = - match tycon.TypeAbbrev with - | None -> acc - | Some ty -> - //if not cenv.isSig && not cenv.haveSig && (tycon.Accessibility <> taccessPublic || tycon.TypeReprAccessibility <> taccessPublic) then - // errorR(Error(FSComp.SR.tcTypeAbbreviationMustBePublic(),tycon.Range)) - accInAbbrevType ty acc - - acc + + match tycon.TypeAbbrev with + | None -> [] + | Some ty -> accInAbbrevType ty [] let edges = List.collect edgesFrom tycons let graph = Graph ((fun tc -> tc.Stamp), tycons, edges) @@ -15202,20 +15267,20 @@ module EstablishTypeDefinitionCores = | _ -> ()) - let TcMutRecDefns_Phase1 mkLetInfo cenv envInitial parent inSig tpenv m scopem mutRecNSInfo (typeDefCores:MutRecShapes) = + let TcMutRecDefns_Phase1 mkLetInfo cenv envInitial parent inSig tpenv m scopem mutRecNSInfo (mutRecDefns:MutRecShapes) = // Phase1A - build Entity for type definitions, exception definitions and module definitions. // Also for abbreviations of any of these. Augmentations are skipped in this phase. let withEntities = - typeDefCores + mutRecDefns |> MutRecShapes.mapWithParent - (parent, envInitial) + (parent, TypeNamesInMutRecDecls mutRecDefns, envInitial) // Build the initial entity for each module definition - (fun (innerParent, envForDecls) compInfo -> - TcTyconDefnCore_Phase1A_BuildInitialModule cenv envForDecls innerParent compInfo) + (fun (innerParent, typeNames, envForDecls) compInfo decls -> + TcTyconDefnCore_Phase1A_BuildInitialModule cenv envForDecls innerParent typeNames compInfo decls) // Build the initial Tycon for each type definition - (fun (innerParent, envForDecls) (typeDefCore,tyconMemberInfo) -> + (fun (innerParent, _, envForDecls) (typeDefCore,tyconMemberInfo) -> let (MutRecDefnsPhase1DataForTycon(_,_,_,_,_,isAtOriginalTyconDefn)) = typeDefCore let tyconOpt = if isAtOriginalTyconDefn then @@ -15225,7 +15290,7 @@ module EstablishTypeDefinitionCores = (typeDefCore, tyconMemberInfo, innerParent), tyconOpt) // Bundle up the data for each 'val', 'member' or 'let' definition (just package up the data, no processing yet) - (fun (innerParent,_) synBinds -> + (fun (innerParent, _, _) synBinds -> let containerInfo = ModuleOrNamespaceContainerInfo(match innerParent with Parent p -> p | _ -> failwith "unreachable") mkLetInfo containerInfo synBinds) @@ -15246,7 +15311,6 @@ module EstablishTypeDefinitionCores = tyconOpt |> Option.iter (fun tycon -> // recheck these in case type is a duplicate in a mutually recursive set CheckForDuplicateConcreteType envAbove tycon.LogicalName tycon.Range - CheckForDuplicateModule envAbove tycon.LogicalName tycon.Range PublishTypeDefn cenv envAbove tycon)) // Updates the types of the modules to contain the contents so far @@ -15657,7 +15721,7 @@ module TcDeclarations = | SynTypeDefnRepr.Simple(repr,_) -> let members = [] - let isAtOriginalTyconDefn = not (isAugmentationTyconDefnRepr repr) + let isAtOriginalTyconDefn = true let core = MutRecDefnsPhase1DataForTycon(synTyconInfo, repr, implements1, false, false, isAtOriginalTyconDefn) core, members @ extraMembers @@ -15738,8 +15802,10 @@ module TcDeclarations = /// Separates the signature declaration into core (shape) and body. let rec private SplitTyconSignature (TypeDefnSig(synTyconInfo,trepr,extraMembers,_)) = + let implements1 = extraMembers |> List.choose (function SynMemberSig.Interface (f,m) -> Some(f,m) | _ -> None) + match trepr with | SynTypeDefnSigRepr.ObjectModel(kind,cspec,m) -> let fields = cspec |> List.choose (function SynMemberSig.ValField (f,_) -> Some(f) | _ -> None) @@ -15847,7 +15913,7 @@ module TcDeclarations = // Bind module types //------------------------------------------------------------------------- -let rec TcSignatureElementNonMutRec cenv parent endm (env: TcEnv) synSigDecl : Eventually = +let rec TcSignatureElementNonMutRec cenv parent typeNames endm (env: TcEnv) synSigDecl : Eventually = eventually { try match synSigDecl with @@ -15888,10 +15954,9 @@ let rec TcSignatureElementNonMutRec cenv parent endm (env: TcEnv) synSigDecl : E let vis,_ = ComputeAccessAndCompPath env None im vis parent let attribs = TcAttributes cenv env AttributeTargets.ModuleDecl attribs CheckNamespaceModuleOrTypeName cenv.g id - let modKind = EstablishTypeDefinitionCores.ComputeModuleOrNamespaceKind cenv.g true attribs + let modKind = EstablishTypeDefinitionCores.ComputeModuleOrNamespaceKind cenv.g true typeNames attribs id.idText let modName = EstablishTypeDefinitionCores.AdjustModuleName modKind id.idText CheckForDuplicateConcreteType env modName id.idRange - CheckForDuplicateModule env id.idText id.idRange // Now typecheck the signature, accumulating and then recording the submodule description. let id = ident (modName, id.idRange) @@ -15999,7 +16064,19 @@ and TcSignatureElements cenv parent endm env xml mutRecNSInfo defs = and TcSignatureElementsNonMutRec cenv parent endm env defs = eventually { - return! Eventually.fold (TcSignatureElementNonMutRec cenv parent endm ) env defs + // Collect the type names so we can implicitly add the compilation suffix to module names + let typeNames = + [ for def in defs do + match def with + | SynModuleSigDecl.Types (typeSpecs,_) -> + for (TypeDefnSig(ComponentInfo(_,_,_,ids,_,_,_,_),trepr,extraMembers,_)) in typeSpecs do + match trepr with + | SynTypeDefnSigRepr.Simple((SynTypeDefnSimpleRepr.None _),_) when nonNil extraMembers -> () + | _ -> yield (List.last ids).idText + | _ -> () ] + |> set + + return! Eventually.fold (TcSignatureElementNonMutRec cenv parent typeNames endm) env defs } and TcSignatureElementsMutRec cenv parent endm mutRecNSInfo envInitial (defs: SynModuleSigDecl list) = @@ -16116,7 +16193,7 @@ let CheckLetOrDoInNamespace binds m = error(NumberedError(FSComp.SR.tcNamespaceCannotContainValues(),binds.Head.RangeOfHeadPat)) /// The non-mutually recursive case for a declaration -let rec TcModuleOrNamespaceElementNonMutRec (cenv:cenv) parent scopem env synDecl = +let rec TcModuleOrNamespaceElementNonMutRec (cenv:cenv) parent typeNames scopem env synDecl = eventually { cenv.synArgNameGenerator.Reset() let tpenv = emptyUnscopedTyparEnv @@ -16188,7 +16265,7 @@ let rec TcModuleOrNamespaceElementNonMutRec (cenv:cenv) parent scopem env synDec let id = ComputeModuleName longPath let modAttrs = TcAttributes cenv env AttributeTargets.ModuleDecl attribs - let modKind = EstablishTypeDefinitionCores.ComputeModuleOrNamespaceKind cenv.g true modAttrs + let modKind = EstablishTypeDefinitionCores.ComputeModuleOrNamespaceKind cenv.g true typeNames modAttrs id.idText let modName = EstablishTypeDefinitionCores.AdjustModuleName modKind id.idText CheckForDuplicateConcreteType env modName im CheckForDuplicateModule env id.idText id.idRange @@ -16292,7 +16369,7 @@ let rec TcModuleOrNamespaceElementNonMutRec (cenv:cenv) parent scopem env synDec } /// The non-mutually recursive case for a sequence of declarations -and TcModuleOrNamespaceElementsNonMutRec cenv parent endm (defsSoFar, env, envAtEnd) (moreDefs: SynModuleDecl list) = +and TcModuleOrNamespaceElementsNonMutRec cenv parent typeNames endm (defsSoFar, env, envAtEnd) (moreDefs: SynModuleDecl list) = eventually { match moreDefs with | (firstDef :: otherDefs) -> @@ -16304,9 +16381,9 @@ and TcModuleOrNamespaceElementsNonMutRec cenv parent endm (defsSoFar, env, envAt // Possibly better: //let scopem = unionRanges h1.Range.EndRange endm - let! firstDef',env', envAtEnd' = TcModuleOrNamespaceElementNonMutRec cenv parent scopem env firstDef + let! firstDef',env', envAtEnd' = TcModuleOrNamespaceElementNonMutRec cenv parent typeNames scopem env firstDef // tail recursive - return! TcModuleOrNamespaceElementsNonMutRec cenv parent endm ( (firstDef' :: defsSoFar), env', envAtEnd') otherDefs + return! TcModuleOrNamespaceElementsNonMutRec cenv parent typeNames endm ( (firstDef' :: defsSoFar), env', envAtEnd') otherDefs | [] -> return List.rev defsSoFar, envAtEnd } @@ -16416,7 +16493,19 @@ and TcModuleOrNamespaceElements cenv parent endm env xml mutRecNSInfo defs = return (mexpr, topAttrsNew, envAtEnd) | None -> - let! compiledDefs, envAtEnd = TcModuleOrNamespaceElementsNonMutRec cenv parent endm ([], env, env) defs + // Collect the type names so we can implicitly add the compilation suffix to module names + let typeNames = + [ for def in defs do + match def with + | SynModuleDecl.Types (typeSpecs,_) -> + for (TypeDefn(ComponentInfo(_,_,_,ids,_,_,_,_),trepr,_,_)) in typeSpecs do + match trepr with + | SynTypeDefnRepr.ObjectModel(TyconAugmentation,_,_) -> () + | _ -> yield (List.last ids).idText + | _ -> () ] + |> set + + let! compiledDefs, envAtEnd = TcModuleOrNamespaceElementsNonMutRec cenv parent typeNames endm ([], env, env) defs // Apply the functions for each declaration to build the overall expression-builder let mexpr = TMDefs(List.foldBack (fun (f,_) x -> f x) compiledDefs []) @@ -16464,7 +16553,12 @@ let AddCcuToTcEnv(g,amap,scopem,env,assemblyName,ccu,autoOpens,internalsVisible) env let CreateInitialTcEnv(g,amap,scopem,assemblyName,ccus) = - List.fold (fun env (ccu,autoOpens,internalsVisible) -> AddCcuToTcEnv(g,amap,scopem,env,assemblyName,ccu,autoOpens,internalsVisible)) (emptyTcEnv g) ccus + (emptyTcEnv g, ccus) ||> List.fold (fun env (ccu,autoOpens,internalsVisible) -> + try + AddCcuToTcEnv(g,amap,scopem,env,assemblyName,ccu,autoOpens,internalsVisible) + with e -> + errorRecovery e scopem + env) type ConditionalDefines = string list diff --git a/src/fsharp/TypeRelations.fs b/src/fsharp/TypeRelations.fs index b0bb80e9824..201f8d790a6 100644 --- a/src/fsharp/TypeRelations.fs +++ b/src/fsharp/TypeRelations.fs @@ -53,7 +53,8 @@ let rec TypeDefinitelySubsumesTypeNoCoercion ndeep g amap m ty1 ty2 = List.lengthsEqAndForall2 (typeEquiv g) l1 l2 | TType_ucase (tc1,l1) ,TType_ucase (tc2,l2) when g.unionCaseRefEq tc1 tc2 -> List.lengthsEqAndForall2 (typeEquiv g) l1 l2 - | TType_tuple l1 ,TType_tuple l2 -> + | TType_tuple (tupInfo1,l1) ,TType_tuple (tupInfo2,l2) -> + evalTupInfoIsStruct tupInfo1 = evalTupInfoIsStruct tupInfo2 && List.lengthsEqAndForall2 (typeEquiv g) l1 l2 | TType_fun (d1,r1) ,TType_fun (d2,r2) -> typeEquiv g d1 d2 && typeEquiv g r1 r2 @@ -88,7 +89,8 @@ let rec TypesFeasiblyEquiv ndeep g amap m ty1 ty2 = | _, TType_var _ -> true | TType_app (tc1,l1) ,TType_app (tc2,l2) when tyconRefEq g tc1 tc2 -> List.lengthsEqAndForall2 (TypesFeasiblyEquiv ndeep g amap m) l1 l2 - | TType_tuple l1 ,TType_tuple l2 -> + | TType_tuple (tupInfo1, l1) ,TType_tuple (tupInfo2, l2) -> + evalTupInfoIsStruct tupInfo1 = evalTupInfoIsStruct tupInfo2 && List.lengthsEqAndForall2 (TypesFeasiblyEquiv ndeep g amap m) l1 l2 | TType_fun (d1,r1) ,TType_fun (d2,r2) -> (TypesFeasiblyEquiv ndeep g amap m) d1 d2 && (TypesFeasiblyEquiv ndeep g amap m) r1 r2 @@ -109,7 +111,8 @@ let rec TypeFeasiblySubsumesType ndeep g amap m ty1 canCoerce ty2 = | TType_app (tc1,l1) ,TType_app (tc2,l2) when tyconRefEq g tc1 tc2 -> List.lengthsEqAndForall2 (TypesFeasiblyEquiv ndeep g amap m) l1 l2 - | TType_tuple l1 ,TType_tuple l2 -> + | TType_tuple (tupInfo1,l1) ,TType_tuple (tupInfo2,l2) -> + evalTupInfoIsStruct tupInfo1 = evalTupInfoIsStruct tupInfo2 && List.lengthsEqAndForall2 (TypesFeasiblyEquiv ndeep g amap m) l1 l2 | TType_fun (d1,r1) ,TType_fun (d2,r2) -> (TypesFeasiblyEquiv ndeep g amap m) d1 d2 && (TypesFeasiblyEquiv ndeep g amap m) r1 r2 @@ -140,7 +143,7 @@ let ChooseTyparSolutionAndRange g amap (tp:Typar) = let initial = match tp.Kind with | TyparKind.Type -> g.obj_ty - | TyparKind.Measure -> TType_measure MeasureOne + | TyparKind.Measure -> TType_measure Measure.One // Loop through the constraints computing the lub ((initial,m), tp.Constraints) ||> List.fold (fun (maxSoFar,_) tpc -> let join m x = @@ -185,7 +188,7 @@ let ChooseTyparSolutionAndRange g amap (tp:Typar) = let ChooseTyparSolution g amap tp = let ty,_m = ChooseTyparSolutionAndRange g amap tp - if tp.Rigidity = TyparRigidity.Anon && typeEquiv g ty (TType_measure MeasureOne) then + if tp.Rigidity = TyparRigidity.Anon && typeEquiv g ty (TType_measure Measure.One) then warning(Error(FSComp.SR.csCodeLessGeneric(),tp.Range)) ty diff --git a/src/fsharp/ast.fs b/src/fsharp/ast.fs index 03a9f4c0fe4..3a17d24684c 100644 --- a/src/fsharp/ast.fs +++ b/src/fsharp/ast.fs @@ -391,7 +391,7 @@ and /// F# syntax is 'typar :> type | WhereTyparSubtypeOfType of SynTypar * SynType * range /// F# syntax is ^T : (static member MemberName : ^T * int -> ^T) - | WhereTyparSupportsMember of SynTypar list * SynMemberSig * range + | WhereTyparSupportsMember of SynType list * SynMemberSig * range /// F# syntax is 'typar : enum<'UnderlyingType> | WhereTyparIsEnum of SynTypar * SynType list * range /// F# syntax is 'typar : delegate<'Args,unit> @@ -414,9 +414,15 @@ and /// F# syntax : type.A.B.C /// commasm: ranges for interstitial commas, these only matter for parsing/design-time tooling, the typechecker may munge/discard them | LongIdentApp of SynType * LongIdentWithDots * range option * SynType list * range list * range option * range + /// F# syntax : type * ... * type // the bool is true if / rather than * follows the type | Tuple of (bool*SynType) list * range + + /// F# syntax : struct (type * ... * type) + // the bool is true if / rather than * follows the type + | StructTuple of (bool*SynType) list * range + /// F# syntax : type[] | Array of int * SynType * range /// F# syntax : type -> type @@ -444,7 +450,7 @@ and member x.Range = match x with | SynType.LongIdent(lidwd) -> lidwd.Range - | SynType.App(_,_,_,_,_,_,m) | SynType.LongIdentApp(_,_,_,_,_,_,m) | SynType.Tuple(_,m) | SynType.Array(_,_,m) | SynType.Fun(_,_,m) + | SynType.App(_,_,_,_,_,_,m) | SynType.LongIdentApp(_,_,_,_,_,_,m) | SynType.Tuple(_,m) | SynType.StructTuple(_,m) | SynType.Array(_,_,m) | SynType.Fun(_,_,m) | SynType.Var(_,m) | SynType.Anon m | SynType.WithGlobalConstraints(_,_,m) | SynType.StaticConstant(_,m) | SynType.StaticConstantExpr(_,m) | SynType.StaticConstantNamed(_,_,m) | SynType.HashConstraint(_,m) | SynType.MeasureDivide(_,_,m) | SynType.MeasurePower(_,_,m) -> m @@ -476,6 +482,9 @@ and /// F# syntax: e1, ..., eN | Tuple of SynExpr list * range list * range // "range list" is for interstitial commas, these only matter for parsing/design-time tooling, the typechecker may munge/discard them + /// F# syntax: struct (e1, ..., eN) + | StructTuple of SynExpr list * range list * range // "range list" is for interstitial commas, these only matter for parsing/design-time tooling, the typechecker may munge/discard them + /// F# syntax: [ e1; ...; en ], [| e1; ...; en |] | ArrayOrList of bool * SynExpr list * range @@ -695,6 +704,7 @@ and | SynExpr.Const(_,m) | SynExpr.Typed (_,_,m) | SynExpr.Tuple (_,_,m) + | SynExpr.StructTuple (_,_,m) | SynExpr.ArrayOrList (_,_,m) | SynExpr.Record (_,_,_,m) | SynExpr.New (_,_,_,m) @@ -756,6 +766,7 @@ and | SynExpr.Const(_,m) | SynExpr.Typed (_,_,m) | SynExpr.Tuple (_,_,m) + | SynExpr.StructTuple (_,_,m) | SynExpr.ArrayOrList (_,_,m) | SynExpr.Record (_,_,_,m) | SynExpr.New (_,_,_,m) @@ -817,6 +828,7 @@ and | SynExpr.Const(_,m) | SynExpr.Typed (_,_,m) | SynExpr.Tuple (_,_,m) + | SynExpr.StructTuple (_,_,m) | SynExpr.ArrayOrList (_,_,m) | SynExpr.Record (_,_,_,m) | SynExpr.New (_,_,_,m) @@ -945,6 +957,7 @@ and | Ands of SynPat list * range | LongIdent of LongIdentWithDots * (* holds additional ident for tooling *) Ident option * SynValTyparDecls option (* usually None: temporary used to parse "f<'a> x = x"*) * SynConstructorArgs * SynAccess option * range | Tuple of SynPat list * range + | StructTuple of SynPat list * range | Paren of SynPat * range | ArrayOrList of bool * SynPat list * range | Record of ((LongIdent * Ident) * SynPat) list * range @@ -968,7 +981,7 @@ and member p.Range = match p with | SynPat.Const(_,m) | SynPat.Wild m | SynPat.Named (_,_,_,_,m) | SynPat.Or (_,_,m) | SynPat.Ands (_,m) - | SynPat.LongIdent (_,_,_,_,_,m) | SynPat.ArrayOrList(_,_,m) | SynPat.Tuple (_,m) |SynPat.Typed(_,_,m) |SynPat.Attrib(_,_,m) + | SynPat.LongIdent (_,_,_,_,_,m) | SynPat.ArrayOrList(_,_,m) | SynPat.Tuple (_,m) | SynPat.StructTuple (_,m) |SynPat.Typed(_,_,m) |SynPat.Attrib(_,_,m) | SynPat.Record (_,m) | SynPat.DeprecatedCharRange (_,_,m) | SynPat.Null m | SynPat.IsInst (_,m) | SynPat.QuoteExpr (_,m) | SynPat.InstanceMember(_,_,_,_,m) | SynPat.OptionalVal(_,m) | SynPat.Paren(_,m) | SynPat.FromParseError (_,m) -> m @@ -1000,7 +1013,7 @@ and SynAttributes = SynAttribute list and [] SynAttribute = - { TypeName: LongIdentWithDots; + { TypeName: LongIdentWithDots ArgExpr: SynExpr /// Target specifier, e.g. "assembly","module",etc. Target: Ident option @@ -1046,10 +1059,10 @@ and and [] MemberFlags = - { IsInstance: bool; - IsDispatchSlot: bool; - IsOverrideOrExplicitImpl: bool; - IsFinal: bool; + { IsInstance: bool + IsDispatchSlot: bool + IsOverrideOrExplicitImpl: bool + IsFinal: bool MemberKind: MemberKind } /// Note the member kind is actually computed partially by a syntax tree transformation in tc.fs @@ -2254,7 +2267,8 @@ let rec synExprContainsError inpExpr = walkExpr e1 || walkExpr e2 | SynExpr.ArrayOrList (_,es,_) - | SynExpr.Tuple (es,_,_) -> + | SynExpr.Tuple (es,_,_) + | SynExpr.StructTuple (es,_,_) -> walkExprs es | SynExpr.Record (_,_,fs,_) -> diff --git a/src/fsharp/fsc.fs b/src/fsharp/fsc.fs index 344fc582482..583d1a3d29d 100755 --- a/src/fsharp/fsc.fs +++ b/src/fsharp/fsc.fs @@ -24,6 +24,7 @@ open System.Threading open Internal.Utilities open Internal.Utilities.Collections +open Internal.Utilities.Filename open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.AbstractIL @@ -130,9 +131,8 @@ let ConsoleErrorLoggerThatQuitsAfterMaxErrors (tcConfigB:TcConfigBuilder, exiter member this.HandleIssue(tcConfigB, err, isWarning) = DoWithErrorColor isWarning (fun () -> - (writeViaBufferWithEnvironmentNewLines stderr (OutputErrorOrWarning (tcConfigB.implicitIncludeDir,tcConfigB.showFullPaths,tcConfigB.flatErrors,tcConfigB.errorStyle,isWarning)) err; - stderr.WriteLine()) - ) + (writeViaBufferWithEnvironmentNewLines stderr (OutputErrorOrWarning (tcConfigB.implicitIncludeDir,tcConfigB.showFullPaths,tcConfigB.flatErrors,tcConfigB.errorStyle,isWarning)) err + stderr.WriteLine())) } :> _ /// This error logger delays the messages it receives. At the end, call ForwardDelayedErrorsAndWarnings @@ -283,14 +283,13 @@ let ProcessCommandLineFlags (tcConfigB: TcConfigBuilder,setProcessThreadLocals,a setProcessThreadLocals(tcConfigB) (* step - get dll references *) - let dllFiles,sourceFiles = List.partition Filename.isDll inputFiles + let dllFiles,sourceFiles = inputFiles |> List.map(fun p -> trimQuotes p) |> List.partition Filename.isDll match dllFiles with | [] -> () | h::_ -> errorR (Error(FSComp.SR.fscReferenceOnCommandLine(h),rangeStartup)) dllFiles |> List.iter (fun f->tcConfigB.AddReferencedAssemblyByPath(rangeStartup,f)) sourceFiles - /////////////////////////////////////////////////////////////////////////////////////////////////////////////// // This code has logic for a prefix of the compile that is also used by the project system to do the front-end @@ -478,8 +477,7 @@ module InterfaceFileWriter = FSharpLib.ControlPath (IL.splitNamespace FSharpLib.ExtraTopLevelOperatorsName) ] - let WriteInterfaceFile (tcGlobals, tcConfig:TcConfig, infoReader, typedAssembly) = - let (TAssembly declaredImpls) = typedAssembly + let WriteInterfaceFile (tcGlobals, tcConfig:TcConfig, infoReader, declaredImpls) = /// Use a UTF-8 Encoding with no Byte Order Mark let os = @@ -541,22 +539,22 @@ module XmlDocWriter = | Some "" -> Some mspec.LogicalName | Some p -> Some (p+"."+mspec.LogicalName) let ptext = match path with None -> "" | Some t -> t - if mspec.IsModule then doModuleMemberSig ptext mspec; + if mspec.IsModule then doModuleMemberSig ptext mspec let vals = mtype.AllValsAndMembers |> Seq.toList |> List.filter (fun x -> not x.IsCompilerGenerated) |> List.filter (fun x -> x.MemberInfo.IsNone || x.IsExtensionMember) - List.iter (doModuleSig path) mtype.ModuleAndNamespaceDefinitions; - List.iter (doTyconSig ptext) mtype.ExceptionDefinitions; - List.iter (doValSig ptext) vals; + List.iter (doModuleSig path) mtype.ModuleAndNamespaceDefinitions + List.iter (doTyconSig ptext) mtype.ExceptionDefinitions + List.iter (doValSig ptext) vals List.iter (doTyconSig ptext) mtype.TypeDefinitions - doModuleSig None generatedCcu.Contents; + doModuleSig None generatedCcu.Contents let writeXmlDoc (assemblyName,generatedCcu:CcuThunk,xmlfile) = if not (Filename.hasSuffixCaseInsensitive "xml" xmlfile ) then - error(Error(FSComp.SR.docfileNoXmlSuffix(), Range.rangeStartup)); + error(Error(FSComp.SR.docfileNoXmlSuffix(), Range.rangeStartup)) (* the xmlDocSigOf* functions encode type into string to be used in "id" *) let members = ref [] let addMember id xmlDoc = @@ -567,7 +565,7 @@ module XmlDocWriter = let doUnionCase (uc:UnionCase) = addMember uc.XmlDocSig uc.XmlDoc let doField (rf:RecdField) = addMember rf.XmlDocSig rf.XmlDoc let doTycon (tc:Tycon) = - addMember tc.XmlDocSig tc.XmlDoc; + addMember tc.XmlDocSig tc.XmlDoc for vref in tc.MembersOfFSharpTyconSorted do doVal vref.Deref for uc in tc.UnionCasesAsList do @@ -580,31 +578,31 @@ module XmlDocWriter = (* moduleSpec - recurses *) let rec doModule (mspec:ModuleOrNamespace) = let mtype = mspec.ModuleOrNamespaceType - if mspec.IsModule then modulMember mspec; + if mspec.IsModule then modulMember mspec let vals = mtype.AllValsAndMembers |> Seq.toList |> List.filter (fun x -> not x.IsCompilerGenerated) |> List.filter (fun x -> x.MemberInfo.IsNone || x.IsExtensionMember) - List.iter doModule mtype.ModuleAndNamespaceDefinitions; - List.iter doTycon mtype.ExceptionDefinitions; - List.iter doVal vals; + List.iter doModule mtype.ModuleAndNamespaceDefinitions + List.iter doTycon mtype.ExceptionDefinitions + List.iter doVal vals List.iter doTycon mtype.TypeDefinitions - doModule generatedCcu.Contents; + doModule generatedCcu.Contents use os = File.CreateText(xmlfile) - fprintfn os (""); - fprintfn os (""); - fprintfn os ("%s") assemblyName; - fprintfn os (""); + fprintfn os ("") + fprintfn os ("") + fprintfn os ("%s") assemblyName + fprintfn os ("") !members |> List.iter (fun (id,doc) -> fprintfn os "" id fprintfn os "%s" doc - fprintfn os ""); - fprintfn os ""; - fprintfn os ""; + fprintfn os "") + fprintfn os "" + fprintfn os "" //---------------------------------------------------------------------------- @@ -635,13 +633,13 @@ type ILResource with let EncodeInterfaceData(tcConfig:TcConfig,tcGlobals,exportRemapping,generatedCcu,outfile,isIncrementalBuild) = if GenerateInterfaceData(tcConfig) then - if verbose then dprintfn "Generating interface data attribute..."; + if verbose then dprintfn "Generating interface data attribute..." let resource = WriteSignatureData (tcConfig,tcGlobals,exportRemapping,generatedCcu,outfile) - if verbose then dprintf "Generated interface data attribute!\n"; + if verbose then dprintf "Generated interface data attribute!\n" // REVIEW: need a better test for this if (tcConfig.useOptimizationDataFile || tcGlobals.compilingFslib) && not isIncrementalBuild then let sigDataFileName = (Filename.chopExtension outfile)+".sigdata" - File.WriteAllBytes(sigDataFileName,resource.Bytes); + File.WriteAllBytes(sigDataFileName,resource.Bytes) let sigAttr = mkSignatureDataVersionAttr tcGlobals (IL.parseILVersion Internal.Utilities.FSharpEnvironment.FSharpBinaryMetadataFormatRevision) // The resource gets written to a file for FSharp.Core let resources = @@ -663,13 +661,13 @@ let GenerateOptimizationData(tcConfig) = let EncodeOptimizationData(tcGlobals,tcConfig,outfile,exportRemapping,data) = if GenerateOptimizationData tcConfig then let data = map2Of2 (Optimizer.RemapOptimizationInfo tcGlobals exportRemapping) data - if verbose then dprintn "Generating optimization data attribute..."; + if verbose then dprintn "Generating optimization data attribute..." // REVIEW: need a better test for this if tcConfig.useOptimizationDataFile || tcGlobals.compilingFslib then let ccu,modulInfo = data let bytes = TastPickle.pickleObjWithDanglingCcus outfile tcGlobals ccu Optimizer.p_CcuOptimizationInfo modulInfo let optDataFileName = (Filename.chopExtension outfile)+".optdata" - File.WriteAllBytes(optDataFileName,bytes); + File.WriteAllBytes(optDataFileName,bytes) // As with the sigdata file, the optdata gets written to a file for FSharp.Core if tcGlobals.compilingFslib then [] @@ -729,7 +727,7 @@ module VersionResourceFormat = open BinaryGenerationUtilities let VersionInfoNode(data:byte[]) = - [| yield! i16 (data.Length + 2) // wLength : int16; // Specifies the length, in bytes, of the VS_VERSION_INFO structure. This length does not include any padding that aligns any subsequent version resource data on a 32-bit boundary. + [| yield! i16 (data.Length + 2) // wLength : int16 // Specifies the length, in bytes, of the VS_VERSION_INFO structure. This length does not include any padding that aligns any subsequent version resource data on a 32-bit boundary. yield! data |] let VersionInfoElement(wType, szKey, valueOpt: byte[] option, children:byte[][], isString) = @@ -737,7 +735,7 @@ module VersionResourceFormat = let wValueLength = (match valueOpt with None -> 0 | Some value -> (if isString then value.Length / 2 else value.Length)) VersionInfoNode [| yield! i16 wValueLength // wValueLength: int16. Specifies the length, in words, of the Value member. This value is zero if there is no Value member associated with the current version structure. - yield! i16 wType // wType : int16; Specifies the type of data in the version resource. This member is 1 if the version resource contains text data and 0 if the version resource contains binary data. + yield! i16 wType // wType : int16 Specifies the type of data in the version resource. This member is 1 if the version resource contains text data and 0 if the version resource contains binary data. yield! Padded 2 szKey match valueOpt with | None -> yield! [] @@ -746,8 +744,8 @@ module VersionResourceFormat = yield! child |] let Version((v1,v2,v3,v4):ILVersionInfo) = - [| yield! i32 (int32 v1 <<< 16 ||| int32 v2) // DWORD dwFileVersionMS; // Specifies the most significant 32 bits of the file's binary version number. This member is used with dwFileVersionLS to form a 64-bit value used for numeric comparisons. - yield! i32 (int32 v3 <<< 16 ||| int32 v4) // DWORD dwFileVersionLS; // Specifies the least significant 32 bits of the file's binary version number. This member is used with dwFileVersionMS to form a 64-bit value used for numeric comparisons. + [| yield! i32 (int32 v1 <<< 16 ||| int32 v2) // DWORD dwFileVersionMS // Specifies the most significant 32 bits of the file's binary version number. This member is used with dwFileVersionLS to form a 64-bit value used for numeric comparisons. + yield! i32 (int32 v3 <<< 16 ||| int32 v4) // DWORD dwFileVersionLS // Specifies the least significant 32 bits of the file's binary version number. This member is used with dwFileVersionMS to form a 64-bit value used for numeric comparisons. |] let String(string,value) = @@ -793,12 +791,12 @@ module VersionResourceFormat = dwFileType,dwFileSubtype, lwFileDate:int64) = let dwStrucVersion = 0x00010000 - [| yield! i32 0xFEEF04BD // DWORD dwSignature; // Contains the value 0xFEEFO4BD. This is used with the szKey member of the VS_VERSION_INFO structure when searching a file for the VS_FIXEDFILEINFO structure. - yield! i32 dwStrucVersion // DWORD dwStrucVersion; // Specifies the binary version number of this structure. The high-order word of this member contains the major version number, and the low-order word contains the minor version number. - yield! Version fileVersion // DWORD dwFileVersionMS,dwFileVersionLS; // Specifies the most/least significant 32 bits of the file's binary version number. This member is used with dwFileVersionLS to form a 64-bit value used for numeric comparisons. - yield! Version productVersion // DWORD dwProductVersionMS,dwProductVersionLS; // Specifies the most/least significant 32 bits of the file's binary version number. This member is used with dwFileVersionLS to form a 64-bit value used for numeric comparisons. - yield! i32 dwFileFlagsMask // DWORD dwFileFlagsMask; // Contains a bitmask that specifies the valid bits in dwFileFlags. A bit is valid only if it was defined when the file was created. - yield! i32 dwFileFlags // DWORD dwFileFlags; // Contains a bitmask that specifies the Boolean attributes of the file. This member can include one or more of the following values: + [| yield! i32 0xFEEF04BD // DWORD dwSignature // Contains the value 0xFEEFO4BD. This is used with the szKey member of the VS_VERSION_INFO structure when searching a file for the VS_FIXEDFILEINFO structure. + yield! i32 dwStrucVersion // DWORD dwStrucVersion // Specifies the binary version number of this structure. The high-order word of this member contains the major version number, and the low-order word contains the minor version number. + yield! Version fileVersion // DWORD dwFileVersionMS,dwFileVersionLS // Specifies the most/least significant 32 bits of the file's binary version number. This member is used with dwFileVersionLS to form a 64-bit value used for numeric comparisons. + yield! Version productVersion // DWORD dwProductVersionMS,dwProductVersionLS // Specifies the most/least significant 32 bits of the file's binary version number. This member is used with dwFileVersionLS to form a 64-bit value used for numeric comparisons. + yield! i32 dwFileFlagsMask // DWORD dwFileFlagsMask // Contains a bitmask that specifies the valid bits in dwFileFlags. A bit is valid only if it was defined when the file was created. + yield! i32 dwFileFlags // DWORD dwFileFlags // Contains a bitmask that specifies the Boolean attributes of the file. This member can include one or more of the following values: // VS_FF_DEBUG 0x1L The file contains debugging information or is compiled with debugging features enabled. // VS_FF_INFOINFERRED The file's version structure was created dynamically; therefore, some of the members in this structure may be empty or incorrect. This flag should never be set in a file's VS_VERSION_INFO data. // VS_FF_PATCHED The file has been modified and is not identical to the original shipping file of the same version number. @@ -907,7 +905,7 @@ module AttributeHelpers = | Some versionString -> try Some(IL.parseILVersion versionString) with e -> - warning(Error(FSComp.SR.fscBadAssemblyVersion(attribName, versionString),Range.rangeStartup)); + warning(Error(FSComp.SR.fscBadAssemblyVersion(attribName, versionString),Range.rangeStartup)) None | _ -> None @@ -927,27 +925,27 @@ let injectedCompatTypes = "System.Collections.IStructuralEquatable" ] let typesForwardedToMscorlib = - set [ "System.AggregateException"; - "System.Threading.CancellationTokenRegistration"; - "System.Threading.CancellationToken"; - "System.Threading.CancellationTokenSource"; - "System.Lazy`1"; - "System.IObservable`1"; - "System.IObserver`1"; + set [ "System.AggregateException" + "System.Threading.CancellationTokenRegistration" + "System.Threading.CancellationToken" + "System.Threading.CancellationTokenSource" + "System.Lazy`1" + "System.IObservable`1" + "System.IObserver`1" ] let typesForwardedToSystemNumerics = - set [ "System.Numerics.BigInteger"; ] + set [ "System.Numerics.BigInteger" ] let createMscorlibExportList tcGlobals = // We want to write forwarders out for all injected types except for System.ITuple, which is internal // Forwarding System.ITuple will cause FxCop failures on 4.0 Set.union (Set.filter (fun t -> t <> "System.ITuple") injectedCompatTypes) typesForwardedToMscorlib |> Seq.map (fun t -> - { ScopeRef = tcGlobals.sysCcu.ILScopeRef ; - Name = t ; - IsForwarder = true ; - Access = ILTypeDefAccess.Public ; - Nested = mkILNestedExportedTypes List.empty ; + { ScopeRef = tcGlobals.sysCcu.ILScopeRef + Name = t + IsForwarder = true + Access = ILTypeDefAccess.Public + Nested = mkILNestedExportedTypes List.empty CustomAttrs = mkILCustomAttrs List.empty }) |> Seq.toList @@ -957,10 +955,10 @@ let createSystemNumericsExportList tcGlobals = typesForwardedToSystemNumerics |> Seq.map (fun t -> { ScopeRef = ILScopeRef.Assembly(systemNumericsAssemblyRef) - Name = t; - IsForwarder = true ; - Access = ILTypeDefAccess.Public ; - Nested = mkILNestedExportedTypes List.empty ; + Name = t + IsForwarder = true + Access = ILTypeDefAccess.Public + Nested = mkILNestedExportedTypes List.empty CustomAttrs = mkILCustomAttrs List.empty }) |> Seq.toList @@ -1005,7 +1003,7 @@ module MainModuleBuilder = codegenResults,assemVerFromAttrib,metadataVersion,secDecls) = - if !progress then dprintf "Creating main module...\n"; + if !progress then dprintf "Creating main module...\n" let ilTypeDefs = //let topTypeDef = mkILTypeDefForGlobalFunctions tcGlobals.ilg (mkILMethods [], emptyILFields) mkILTypeDefs codegenResults.ilTypeDefs @@ -1039,9 +1037,9 @@ module MainModuleBuilder = | QuotationTranslator.QuotationSerializationFormat.FSharp_20_Plus -> [ ] let reflectedDefinitionResource = - { Name=reflectedDefinitionResourceName; - Location = ILResourceLocation.Local (fun () -> reflectedDefinitionBytes); - Access= ILResourceAccess.Public; + { Name=reflectedDefinitionResourceName + Location = ILResourceLocation.Local (fun () -> reflectedDefinitionBytes) + Access= ILResourceAccess.Public CustomAttrs = emptyILCustomAttrs } reflectedDefinitionAttrs, reflectedDefinitionResource) |> List.unzip @@ -1056,7 +1054,7 @@ module MainModuleBuilder = yield! iattrs yield! codegenResults.ilAssemAttrs if Option.isSome pdbfile then - yield (tcGlobals.ilg.mkDebuggableAttributeV2 (tcConfig.ignoreSymbolStoreSequencePoints, disableJitOptimizations, false (* enableEnC *) )) + yield (tcGlobals.ilg.mkDebuggableAttributeV2 (tcConfig.jitTracking, tcConfig.ignoreSymbolStoreSequencePoints, disableJitOptimizations, false (* enableEnC *) )) yield! reflectedDefinitionAttrs ] // Make the manifest of the assembly @@ -1067,9 +1065,10 @@ module MainModuleBuilder = match assemVerFromAttrib with | None -> tcVersion | Some v -> v - Some { man with Version= Some ver; - CustomAttrs = manifestAttrs; - DisableJitOptimizations=disableJitOptimizations; + Some { man with Version= Some ver + CustomAttrs = manifestAttrs + DisableJitOptimizations=disableJitOptimizations + JitTracking= tcConfig.jitTracking SecurityDecls=secDecls } let resources = @@ -1091,7 +1090,7 @@ module MainModuleBuilder = let writeResources((r:(string * obj) list),(f:string)) = use writer = new System.Resources.ResourceWriter(f) r |> List.iter (fun (k,v) -> writer.AddResource(k,v)) - writeResources(readResX(file),outfile); + writeResources(readResX(file),outfile) let file,name,pub = TcConfigBuilder.SplitCommandLineResourceInfo outfile let file = tcConfig.ResolveSourceFile(rangeStartup,file,tcConfig.implicitIncludeDir) let bytes = FileSystem.ReadAllBytesShim file @@ -1103,9 +1102,9 @@ module MainModuleBuilder = let file = tcConfig.ResolveSourceFile(rangeStartup,file,tcConfig.implicitIncludeDir) let bytes = FileSystem.ReadAllBytesShim file name,bytes,pub - yield { Name=name; - Location=ILResourceLocation.Local (fun () -> bytes); - Access=pub; + yield { Name=name + Location=ILResourceLocation.Local (fun () -> bytes) + Access=pub CustomAttrs=emptyILCustomAttrs } yield! reflectedDefinitionResources @@ -1113,9 +1112,9 @@ module MainModuleBuilder = yield! optDataResources for ri in tcConfig.linkResources do let file,name,pub = TcConfigBuilder.SplitCommandLineResourceInfo ri - yield { Name=name; - Location=ILResourceLocation.File(ILModuleRef.Create(name=file, hasMetadata=false, hash=Some (sha1HashBytes (FileSystem.ReadAllBytesShim file))), 0); - Access=pub; + yield { Name=name + Location=ILResourceLocation.File(ILModuleRef.Create(name=file, hasMetadata=false, hash=Some (sha1HashBytes (FileSystem.ReadAllBytesShim file))), 0) + Access=pub CustomAttrs=emptyILCustomAttrs } ] let assemblyVersion = @@ -1208,18 +1207,14 @@ module MainModuleBuilder = // a user cannot specify both win32res and win32manifest if not(tcConfig.win32manifest = "") && not(tcConfig.win32res = "") then - error(Error(FSComp.SR.fscTwoResourceManifests(),rangeCmdArgs)); + error(Error(FSComp.SR.fscTwoResourceManifests(),rangeCmdArgs)) let win32Manifest = // use custom manifest if provided if not(tcConfig.win32manifest = "") then tcConfig.win32manifest // don't embed a manifest if target is not an exe, if manifest is specifically excluded, if another native resource is being included, or if running on mono -#if ENABLE_MONO_SUPPORT elif not(tcConfig.target.IsExe) || not(tcConfig.includewin32manifest) || not(tcConfig.win32res = "") || runningOnMono then "" -#else - elif not(tcConfig.target.IsExe) || not(tcConfig.includewin32manifest) || not(tcConfig.win32res = "") then "" -#endif // otherwise, include the default manifest else #if FX_NO_RUNTIMEENVIRONMENT @@ -1234,32 +1229,28 @@ module MainModuleBuilder = yield Lazy<_>.CreateFromValue av if not(tcConfig.win32res = "") then yield Lazy<_>.CreateFromValue (FileSystem.ReadAllBytesShim tcConfig.win32res) -#if ENABLE_MONO_SUPPORT - if tcConfig.includewin32manifest && not(win32Manifest = "") && not(runningOnMono) then -#else - if tcConfig.includewin32manifest && not(win32Manifest = "") then -#endif + if tcConfig.includewin32manifest && not(win32Manifest = "") && not runningOnMono then yield Lazy<_>.CreateFromValue [| yield! ResFileFormat.ResFileHeader() yield! (ManifestResourceFormat.VS_MANIFEST_RESOURCE((FileSystem.ReadAllBytesShim win32Manifest), tcConfig.target = Dll)) |]] // Add attributes, version number, resources etc. {mainModule with StackReserveSize = tcConfig.stackReserveSize - Name = (if tcConfig.target = Module then Filename.fileNameOfPath outfile else mainModule.Name); - SubSystemFlags = (if tcConfig.target = WinExe then 2 else 3) ; - Resources= resources; - ImageBase = (match tcConfig.baseAddress with None -> 0x00400000l | Some b -> b); - IsDLL=(tcConfig.target = Dll || tcConfig.target=Module); - Platform = tcConfig.platform ; - Is32Bit=(match tcConfig.platform with Some X86 -> true | _ -> false); - Is64Bit=(match tcConfig.platform with Some AMD64 | Some IA64 -> true | _ -> false); - Is32BitPreferred = if tcConfig.prefer32Bit && not tcConfig.target.IsExe then (error(Error(FSComp.SR.invalidPlatformTarget(),rangeCmdArgs))) else tcConfig.prefer32Bit; + Name = (if tcConfig.target = Module then Filename.fileNameOfPath outfile else mainModule.Name) + SubSystemFlags = (if tcConfig.target = WinExe then 2 else 3) + Resources= resources + ImageBase = (match tcConfig.baseAddress with None -> 0x00400000l | Some b -> b) + IsDLL=(tcConfig.target = Dll || tcConfig.target=Module) + Platform = tcConfig.platform + Is32Bit=(match tcConfig.platform with Some X86 -> true | _ -> false) + Is64Bit=(match tcConfig.platform with Some AMD64 | Some IA64 -> true | _ -> false) + Is32BitPreferred = if tcConfig.prefer32Bit && not tcConfig.target.IsExe then (error(Error(FSComp.SR.invalidPlatformTarget(),rangeCmdArgs))) else tcConfig.prefer32Bit CustomAttrs= mkILCustomAttrs [ if tcConfig.target = Module then yield! iattrs - yield! codegenResults.ilNetModuleAttrs ]; - NativeResources=nativeResources; + yield! codegenResults.ilNetModuleAttrs ] + NativeResources=nativeResources Manifest = manifest } @@ -1276,7 +1267,7 @@ module StaticLinker = // Check no dependent assemblies use quotations let dependentCcuUsingQuotations = dependentILModules |> List.tryPick (function (Some ccu,_) when ccu.UsesFSharp20PlusQuotations -> Some ccu | _ -> None) match dependentCcuUsingQuotations with - | Some ccu -> error(Error(FSComp.SR.fscQuotationLiteralsStaticLinking(ccu.AssemblyName),rangeStartup)); + | Some ccu -> error(Error(FSComp.SR.fscQuotationLiteralsStaticLinking(ccu.AssemblyName),rangeStartup)) | None -> () // Check we're not static linking a .EXE @@ -1360,10 +1351,10 @@ module StaticLinker = let ilxMainModule = { ilxMainModule with - Manifest = (let m = ilxMainModule.ManifestOfAssembly in Some {m with CustomAttrs = mkILCustomAttrs (m.CustomAttrs.AsList @ savedManifestAttrs) }); - CustomAttrs = mkILCustomAttrs [ for m in moduls do yield! m.CustomAttrs.AsList ]; - TypeDefs = mkILTypeDefs (topTypeDef :: List.concat normalTypeDefs); - Resources = mkILResources (savedResources @ ilxMainModule.Resources.AsList); + Manifest = (let m = ilxMainModule.ManifestOfAssembly in Some {m with CustomAttrs = mkILCustomAttrs (m.CustomAttrs.AsList @ savedManifestAttrs) }) + CustomAttrs = mkILCustomAttrs [ for m in moduls do yield! m.CustomAttrs.AsList ] + TypeDefs = mkILTypeDefs (topTypeDef :: List.concat normalTypeDefs) + Resources = mkILResources (savedResources @ ilxMainModule.Resources.AsList) NativeResources = savedNativeResources } ilxMainModule, rewriteExternalRefsToLocalRefs @@ -1379,8 +1370,8 @@ module StaticLinker = let ilBinaryReader = let ilGlobals = mkILGlobals (IL.mkMscorlibBasedTraits ILScopeRef.Local) (Some ilGlobals.primaryAssemblyName) tcConfig.noDebugData let opts = { ILBinaryReader.mkDefault (ilGlobals) with - optimizeForMemory=tcConfig.optimizeForMemory; - pdbPath = None; } + optimizeForMemory=tcConfig.optimizeForMemory + pdbPath = None } ILBinaryReader.OpenILModuleReader mscorlib40 opts let tdefs1 = ilxMainModule.TypeDefs.AsList |> List.filter (fun td -> not (injectedCompatTypes.Contains(td.Name))) @@ -1420,16 +1411,16 @@ module StaticLinker = let ilxMainModule = { ilxMainModule with - TypeDefs = mkILTypeDefs (tdefs1 @ tdefs2); } + TypeDefs = mkILTypeDefs (tdefs1 @ tdefs2) } ilxMainModule [] type Node = - { name: string; - data: ILModuleDef; - ccu: option; - refs: ILReferences; - mutable edges: list; + { name: string + data: ILModuleDef + ccu: option + refs: ILReferences + mutable edges: list mutable visited: bool } // Find all IL modules that are to be statically linked given the static linking roots. @@ -1440,11 +1431,11 @@ module StaticLinker = // Recursively find all referenced modules and add them to a module graph let depModuleTable = HashMultiMap(0, HashIdentity.Structural) let dummyEntry nm = - { refs = IL.emptyILRefs ; - name=nm; - ccu=None; - data=ilxMainModule; // any old module - edges = []; + { refs = IL.emptyILRefs + name=nm + ccu=None + data=ilxMainModule // any old module + edges = [] visited = true } let assumedIndependentSet = set [ "mscorlib"; "System"; "System.Core"; "System.Xml"; "Microsoft.Build.Framework"; "Microsoft.Build.Utilities" ] @@ -1452,7 +1443,7 @@ module StaticLinker = let remaining = ref (computeILRefs ilxMainModule).AssemblyReferences while nonNil !remaining do let ilAssemRef = List.head !remaining - remaining := List.tail !remaining; + remaining := List.tail !remaining if assumedIndependentSet.Contains ilAssemRef.Name || (ilAssemRef.PublicKey = Some ecmaPublicKey) then depModuleTable.[ilAssemRef.Name] <- dummyEntry ilAssemRef.Name else @@ -1473,27 +1464,27 @@ module StaticLinker = warning(Error(FSComp.SR.fscIgnoringMixedWhenLinking ilAssemRef.Name,rangeStartup)) IL.emptyILRefs else - { AssemblyReferences = dllInfo.ILAssemblyRefs; + { AssemblyReferences = dllInfo.ILAssemblyRefs ModuleReferences = [] } depModuleTable.[ilAssemRef.Name] <- - { refs=refs; - name=ilAssemRef.Name; - ccu=ccu; - data=modul; - edges = []; - visited = false }; + { refs=refs + name=ilAssemRef.Name + ccu=ccu + data=modul + edges = [] + visited = false } // Push the new work items - remaining := refs.AssemblyReferences @ !remaining; + remaining := refs.AssemblyReferences @ !remaining | None -> - warning(Error(FSComp.SR.fscAssumeStaticLinkContainsNoDependencies(ilAssemRef.Name),rangeStartup)); + warning(Error(FSComp.SR.fscAssumeStaticLinkContainsNoDependencies(ilAssemRef.Name),rangeStartup)) depModuleTable.[ilAssemRef.Name] <- dummyEntry ilAssemRef.Name - done; - end; + done + end - ReportTime tcConfig "Find dependencies"; + ReportTime tcConfig "Find dependencies" // Add edges from modules to the modules that depend on them for (KeyValue(_,n)) in depModuleTable do @@ -1508,18 +1499,18 @@ module StaticLinker = for n in tcConfig.extraStaticLinkRoots do match depModuleTable.TryFind n with | Some x -> yield x - | None -> error(Error(FSComp.SR.fscAssemblyNotFoundInDependencySet(n),rangeStartup)); + | None -> error(Error(FSComp.SR.fscAssemblyNotFoundInDependencySet(n),rangeStartup)) ] let remaining = ref roots [ while nonNil !remaining do let n = List.head !remaining - remaining := List.tail !remaining; + remaining := List.tail !remaining if not n.visited then - if verbose then dprintn ("Module "+n.name+" depends on "+GetFSharpCoreLibraryName()); - n.visited <- true; + if verbose then dprintn ("Module "+n.name+" depends on "+GetFSharpCoreLibraryName()) + n.visited <- true remaining := n.edges @ !remaining - yield (n.ccu, n.data); ] + yield (n.ccu, n.data) ] // Add all provider-generated assemblies into the static linking set let FindProviderGeneratedILModules (tcImports:TcImports, providerGeneratedAssemblies: (ImportedBinary * _) list) = @@ -1563,11 +1554,11 @@ module StaticLinker = (fun ilxMainModule -> ilxMainModule) else (fun ilxMainModule -> - ReportTime tcConfig "Find assembly references"; + ReportTime tcConfig "Find assembly references" let dependentILModules = FindDependentILModulesForStaticLinking (tcConfig, tcImports,ilxMainModule) - ReportTime tcConfig "Static link"; + ReportTime tcConfig "Static link" #if EXTENSIONTYPING Morphs.enableMorphCustomAttributeData() @@ -1606,7 +1597,7 @@ module StaticLinker = // Build a dictionary of all IL type defs, mapping ilOrigTyRef --> ilTypeDef let allTypeDefsInProviderGeneratedAssemblies = let rec loop ilOrigTyRef (ilTypeDef:ILTypeDef) = - seq { yield (ilOrigTyRef,ilTypeDef); + seq { yield (ilOrigTyRef,ilTypeDef) for ntdef in ilTypeDef.NestedTypes do yield! loop (mkILTyRefInTyRef (ilOrigTyRef, ntdef.Name)) ntdef } dict [ @@ -1741,7 +1732,7 @@ let GetSigner signingInfo = module FileWriter = let EmitIL (tcConfig:TcConfig, ilGlobals, errorLogger:ErrorLogger, outfile, pdbfile, ilxMainModule, signingInfo:SigningInfo, exiter:Exiter) = try - if !progress then dprintn "Writing assembly..."; + if !progress then dprintn "Writing assembly..." try ILBinaryWriter.WriteILBinary (outfile, @@ -1774,7 +1765,7 @@ let ValidateKeySigningAttributes (tcConfig : TcConfig,tcGlobals,topAttrs) = match delaySignAttrib with | Some delaysign -> if tcConfig.delaysign then - warning(Error(FSComp.SR.fscDelaySignWarning(),rangeCmdArgs)) ; + warning(Error(FSComp.SR.fscDelaySignWarning(),rangeCmdArgs)) tcConfig.delaysign else delaysign @@ -1785,7 +1776,7 @@ let ValidateKeySigningAttributes (tcConfig : TcConfig,tcGlobals,topAttrs) = match signerAttrib with | Some signer -> if tcConfig.signer.IsSome && tcConfig.signer <> Some signer then - warning(Error(FSComp.SR.fscKeyFileWarning(),rangeCmdArgs)) ; + warning(Error(FSComp.SR.fscKeyFileWarning(),rangeCmdArgs)) tcConfig.signer else Some signer @@ -1798,7 +1789,7 @@ let ValidateKeySigningAttributes (tcConfig : TcConfig,tcGlobals,topAttrs) = match containerAttrib with | Some container -> if tcConfig.container.IsSome && tcConfig.container <> Some container then - warning(Error(FSComp.SR.fscKeyNameWarning(),rangeCmdArgs)) ; + warning(Error(FSComp.SR.fscKeyNameWarning(),rangeCmdArgs)) tcConfig.container else Some container @@ -1860,7 +1851,7 @@ let main0(argv,bannerAlreadyPrinted,exiter:Exiter, errorLoggerProvider : ErrorLo None #endif - let tcGlobals,tcImports,frameworkTcImports,generatedCcu,typedAssembly,topAttrs,tcConfig,outfile,pdbfile,assemblyName,errorLogger = + let tcGlobals,tcImports,frameworkTcImports,generatedCcu,typedImplFiles,topAttrs,tcConfig,outfile,pdbfile,assemblyName,errorLogger = GetTcImportsFromCommandLine( argv,defaultFSharpBinariesDir,Directory.GetCurrentDirectory(), #if FX_LCIDFROMCODEPAGE @@ -1889,9 +1880,9 @@ let main0(argv,bannerAlreadyPrinted,exiter:Exiter, errorLoggerProvider : ErrorLo errorLoggerProvider, disposables) - tcGlobals,tcImports,frameworkTcImports,generatedCcu,typedAssembly,topAttrs,tcConfig,outfile,pdbfile,assemblyName,errorLogger,exiter + tcGlobals,tcImports,frameworkTcImports,generatedCcu,typedImplFiles,topAttrs,tcConfig,outfile,pdbfile,assemblyName,errorLogger,exiter -let main1(tcGlobals, tcImports: TcImports, frameworkTcImports, generatedCcu, typedAssembly, topAttrs, tcConfig: TcConfig, outfile, pdbfile, assemblyName, errorLogger, exiter: Exiter) = +let main1(tcGlobals, tcImports: TcImports, frameworkTcImports, generatedCcu, typedImplFiles, topAttrs, tcConfig: TcConfig, outfile, pdbfile, assemblyName, errorLogger, exiter: Exiter) = if tcConfig.typeCheckOnly then exiter.Exit 0 @@ -1904,9 +1895,7 @@ let main1(tcGlobals, tcImports: TcImports, frameworkTcImports, generatedCcu, typ // it as the updated global error logger and never remove it let oldLogger = errorLogger let errorLogger = - let scopedPragmas = - let (TAssembly(impls)) = typedAssembly - [ for (TImplFile(_,pragmas,_,_,_)) in impls do yield! pragmas ] + let scopedPragmas = [ for (TImplFile(_,pragmas,_,_,_)) in typedImplFiles do yield! pragmas ] GetErrorLoggerFilteringByScopedPragmas(true,scopedPragmas,oldLogger) let _unwindEL_3 = PushErrorLoggerPhaseUntilUnwind(fun _ -> errorLogger) @@ -1922,9 +1911,9 @@ let main1(tcGlobals, tcImports: TcImports, frameworkTcImports, generatedCcu, typ // write interface, xmldoc begin - ReportTime tcConfig ("Write Interface File"); + ReportTime tcConfig ("Write Interface File") use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Output) - if tcConfig.printSignature then InterfaceFileWriter.WriteInterfaceFile (tcGlobals,tcConfig, InfoReader(tcGlobals,tcImports.GetImportMap()), typedAssembly); + if tcConfig.printSignature then InterfaceFileWriter.WriteInterfaceFile (tcGlobals,tcConfig, InfoReader(tcGlobals,tcImports.GetImportMap()), typedImplFiles) ReportTime tcConfig ("Write XML document signatures") if tcConfig.xmlDocOutputFile.IsSome then XmlDocWriter.computeXmlDocSigs (tcGlobals,generatedCcu) @@ -1939,12 +1928,12 @@ let main1(tcGlobals, tcImports: TcImports, frameworkTcImports, generatedCcu, typ // Pass on only the minimum information required for the next phase to ensure GC kicks in. // In principle the JIT should be able to do good liveness analysis to clean things up, but the // data structures involved here are so large we can't take the risk. - Args(tcConfig, tcImports, frameworkTcImports, tcGlobals, errorLogger, generatedCcu, outfile, typedAssembly, topAttrs, pdbfile, assemblyName, assemVerFromAttrib, signingInfo, exiter) + Args(tcConfig, tcImports, frameworkTcImports, tcGlobals, errorLogger, generatedCcu, outfile, typedImplFiles, topAttrs, pdbfile, assemblyName, assemVerFromAttrib, signingInfo, exiter) -let main2(Args(tcConfig, tcImports, frameworkTcImports: TcImports, tcGlobals, errorLogger: ErrorLogger, generatedCcu: CcuThunk, outfile, typedAssembly, topAttrs, pdbfile, assemblyName, assemVerFromAttrib, signingInfo, exiter: Exiter)) = +let main2(Args(tcConfig, tcImports, frameworkTcImports: TcImports, tcGlobals, errorLogger: ErrorLogger, generatedCcu: CcuThunk, outfile, typedImplFiles, topAttrs, pdbfile, assemblyName, assemVerFromAttrib, signingInfo, exiter: Exiter)) = - ReportTime tcConfig ("Encode Interface Data"); + ReportTime tcConfig ("Encode Interface Data") let exportRemapping = MakeExportRemapping generatedCcu generatedCcu.Contents let sigDataAttributes,sigDataResources = @@ -1956,7 +1945,7 @@ let main2(Args(tcConfig, tcImports, frameworkTcImports: TcImports, tcGlobals, er exiter.Exit 1 if !progress && tcConfig.optSettings.jitOptUser = Some false then - dprintf "Note, optimizations are off.\n"; + dprintf "Note, optimizations are off.\n" (* optimize *) use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Optimize) @@ -1967,11 +1956,11 @@ let main2(Args(tcConfig, tcImports, frameworkTcImports: TcImports, tcGlobals, er match tcConfig.metadataVersion with | Some(v) -> v | _ -> match (frameworkTcImports.DllTable.TryFind tcConfig.primaryAssembly.Name) with | Some(ib) -> ib.RawMetadata.TryGetRawILModule().Value.MetadataVersion | _ -> "" - let optimizedImpls,optimizationData,_ = ApplyAllOptimizations (tcConfig, tcGlobals, (LightweightTcValForUsingInBuildMethodCall tcGlobals), outfile, importMap, false, optEnv0, generatedCcu, typedAssembly) + let optimizedImpls,optimizationData,_ = ApplyAllOptimizations (tcConfig, tcGlobals, (LightweightTcValForUsingInBuildMethodCall tcGlobals), outfile, importMap, false, optEnv0, generatedCcu, typedImplFiles) AbortOnError(errorLogger,tcConfig,exiter) - ReportTime tcConfig ("Encoding OptData"); + ReportTime tcConfig ("Encoding OptData") let optDataResources = EncodeOptimizationData(tcGlobals,tcConfig,outfile,exportRemapping,(generatedCcu,optimizationData)) let sigDataResources, _optimizationData = @@ -2002,10 +1991,10 @@ let main2b(Args(tcConfig: TcConfig, tcImports, tcGlobals, errorLogger, generated // Compute a static linker. let ilGlobals = tcGlobals.ilg if tcConfig.standalone && generatedCcu.UsesFSharp20PlusQuotations then - error(Error(FSComp.SR.fscQuotationLiteralsStaticLinking0(),rangeStartup)); + error(Error(FSComp.SR.fscQuotationLiteralsStaticLinking0(),rangeStartup)) let staticLinker = StaticLinker.StaticLink (tcConfig,tcImports,ilGlobals) - ReportTime tcConfig "TAST -> ILX"; + ReportTime tcConfig "TAST -> ILX" use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.IlxGen) let ilxGenerator = CreateIlxAssemblyGenerator (tcConfig,tcImports,tcGlobals, (LightweightTcValForUsingInBuildMethodCall tcGlobals), generatedCcu) diff --git a/src/fsharp/fsharp.core.netcore.nuget/Microsoft.FSharp.Core.netcore.nuspec b/src/fsharp/fsharp.core.netcore.nuget/Microsoft.FSharp.Core.netcore.nuspec index f4dcefd9a8c..2cf75164d6b 100644 --- a/src/fsharp/fsharp.core.netcore.nuget/Microsoft.FSharp.Core.netcore.nuspec +++ b/src/fsharp/fsharp.core.netcore.nuget/Microsoft.FSharp.Core.netcore.nuspec @@ -33,10 +33,12 @@ + + diff --git a/src/fsharp/fsharp.core.netcore.nuget/layoutfscorenuget.fsx b/src/fsharp/fsharp.core.netcore.nuget/layoutfscorenuget.fsx index 1b9c03d7096..a756ab9d594 100644 --- a/src/fsharp/fsharp.core.netcore.nuget/layoutfscorenuget.fsx +++ b/src/fsharp/fsharp.core.netcore.nuget/layoutfscorenuget.fsx @@ -59,6 +59,7 @@ try let fsharpCoreFiles = seq { + yield Path.Combine(bindir, "FSharp.Core.xml") yield Path.Combine(bindir, "FSharp.Core.dll") yield Path.Combine(bindir, "FSharp.Core.sigdata") yield Path.Combine(bindir, "FSharp.Core.optdata") diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index 0e5ded12cc6..c4b2759f917 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -820,7 +820,6 @@ type internal FsiDynamicCompiler #if DEBUG // Logging/debugging if tcConfig.printAst then - let (TAssembly(declaredImpls)) = declaredImpls for input in declaredImpls do fprintfn fsiConsoleOutput.Out "AST:" fprintfn fsiConsoleOutput.Out "%+A" input @@ -835,11 +834,7 @@ type internal FsiDynamicCompiler errorLogger.AbortOnError(); let fragName = textOfLid prefixPath -#if ENABLE_MONO_SUPPORT let codegenResults = GenerateIlxCode (IlReflectBackend, isInteractiveItExpr, runningOnMono, tcConfig, topCustomAttrs, optimizedImpls, fragName, true, ilxGenerator) -#else - let codegenResults = GenerateIlxCode (IlReflectBackend, isInteractiveItExpr, false, tcConfig, topCustomAttrs, optimizedImpls, fragName, true, ilxGenerator) -#endif errorLogger.AbortOnError(); // Each input is like a small separately compiled extension to a single source file. @@ -914,7 +909,6 @@ type internal FsiDynamicCompiler // 'Open' the path for the fragment we just compiled for any future printing. let denv = denv.AddOpenPath (pathOfLid prefixPath) - let (TAssembly(declaredImpls)) = declaredImpls for (TImplFile(_qname,_,mexpr,_,_)) in declaredImpls do let responseL = NicePrint.layoutInferredSigOfModuleExpr false denv infoReader AccessibleFromSomewhere rangeStdin mexpr if not (Layout.isEmptyL responseL) then @@ -1098,7 +1092,7 @@ type internal FsiDynamicCompiler let tcState = GetInitialTcState (rangeStdin, ccuName, tcConfig, tcGlobals, tcImports, niceNameGen, tcEnv) - let ilxGenerator = CreateIlxAssemblyGenerator(tcConfig,tcImports,tcGlobals, (LightweightTcValForUsingInBuildMethodCall tcGlobals), tcState.Ccu ) + let ilxGenerator = CreateIlxAssemblyGenerator (tcConfig, tcImports, tcGlobals, (LightweightTcValForUsingInBuildMethodCall tcGlobals), tcState.Ccu) {optEnv = optEnv0 emEnv = emEnv tcGlobals = tcGlobals @@ -2229,7 +2223,7 @@ type internal FsiEvaluationSession (argv:string[], inReader:TextReader, outWrite do tcConfigB.useFsiAuxLib <- true #if TODO_REWORK_ASSEMBLY_LOAD - do tcConfigB.useMonoResolution<-true + do tcConfigB.useSimpleResolution<-true #else #endif @@ -2250,7 +2244,7 @@ type internal FsiEvaluationSession (argv:string[], inReader:TextReader, outWrite do InstallErrorLoggingOnThisThread errorLogger // FSI error logging on main thread. let updateBannerText() = - tcConfigB.productNameForBannerText <- FSIstrings.SR.fsiProductName(FSharpEnvironment.DotNetBuildString) + tcConfigB.productNameForBannerText <- FSIstrings.SR.fsiProductName(FSharpEnvironment.FSharpBannerVersion) do updateBannerText() // setting the correct banner so that 'fsi -?' display the right thing diff --git a/src/fsharp/fsiaux.fs b/src/fsharp/fsiaux.fs index b3651de4ddb..1fbeeef15f3 100644 --- a/src/fsharp/fsiaux.fs +++ b/src/fsharp/fsiaux.fs @@ -31,34 +31,34 @@ type internal SimpleEventLoop() = let restart = ref false interface IEventLoop with member x.Run() = - running := true; + running := true let rec run() = match waitSignal2 runSignal exitSignal with | 0 -> - !queue |> List.iter (fun f -> result := try Some(f()) with _ -> None); - setSignal doneSignal; + !queue |> List.iter (fun f -> result := try Some(f()) with _ -> None) + setSignal doneSignal run() | 1 -> - running := false; + running := false !restart | _ -> run() - run(); + run() member x.Invoke(f : unit -> 'T) : 'T = - queue := [f >> box]; - setSignal runSignal; + queue := [f >> box] + setSignal runSignal waitSignal doneSignal !result |> Option.get |> unbox member x.ScheduleRestart() = // nb. very minor race condition here on running here, but totally // unproblematic as ScheduleRestart and Exit are almost never called. if !running then - restart := true; + restart := true setSignal exitSignal interface System.IDisposable with member x.Dispose() = - runSignal.Dispose(); - exitSignal.Dispose(); - doneSignal.Dispose(); + runSignal.Dispose() + exitSignal.Dispose() + doneSignal.Dispose() diff --git a/src/fsharp/import.fs b/src/fsharp/import.fs index 7f29cacc8ee..423d769bacd 100644 --- a/src/fsharp/import.fs +++ b/src/fsharp/import.fs @@ -277,16 +277,16 @@ let rec ImportProvidedType (env:ImportMap) (m:range) (* (tinst:TypeInst) *) (st: if tp.Kind = TyparKind.Measure then let rec conv ty = match ty with - | TType_app (tcref,[t1;t2]) when tyconRefEq g tcref g.measureproduct_tcr -> MeasureProd (conv t1, conv t2) - | TType_app (tcref,[t1]) when tyconRefEq g tcref g.measureinverse_tcr -> MeasureInv (conv t1) - | TType_app (tcref,[]) when tyconRefEq g tcref g.measureone_tcr -> MeasureOne - | TType_app (tcref,[]) when tcref.TypeOrMeasureKind = TyparKind.Measure -> MeasureCon tcref + | TType_app (tcref,[t1;t2]) when tyconRefEq g tcref g.measureproduct_tcr -> Measure.Prod (conv t1, conv t2) + | TType_app (tcref,[t1]) when tyconRefEq g tcref g.measureinverse_tcr -> Measure.Inv (conv t1) + | TType_app (tcref,[]) when tyconRefEq g tcref g.measureone_tcr -> Measure.One + | TType_app (tcref,[]) when tcref.TypeOrMeasureKind = TyparKind.Measure -> Measure.Con tcref | TType_app (tcref,_) -> errorR(Error(FSComp.SR.impInvalidMeasureArgument1(tcref.CompiledName, tp.Name),m)) - MeasureOne + Measure.One | _ -> errorR(Error(FSComp.SR.impInvalidMeasureArgument2(tp.Name),m)) - MeasureOne + Measure.One TType_measure (conv genericArg) else diff --git a/src/fsharp/infos.fs b/src/fsharp/infos.fs index 3a42fd6c1a8..5a171a6b023 100755 --- a/src/fsharp/infos.fs +++ b/src/fsharp/infos.fs @@ -85,7 +85,7 @@ let GetSuperTypeOfType g amap m typ = Some g.system_Array_typ elif isRefTy g typ && not (isObjTy g typ) then Some g.obj_ty - elif isTupleStructTy g typ then + elif isStructTupleTy g typ then Some g.obj_ty elif isRecdTy g typ || isUnionTy g typ then Some g.obj_ty @@ -732,7 +732,7 @@ type ILMethInfo = let md = x.RawMetadata not md.IsConstructor && not md.IsClassInitializer && - (md.Access = ILMemberAccess.Family) + (md.Access = ILMemberAccess.Family || md.Access = ILMemberAccess.FamilyOrAssembly) /// Indicates if the IL method is marked virtual. member x.IsVirtual = x.RawMetadata.IsVirtual diff --git a/src/fsharp/layout.fs b/src/fsharp/layout.fs index f20e600f2ac..187211fb77c 100644 --- a/src/fsharp/layout.fs +++ b/src/fsharp/layout.fs @@ -122,11 +122,11 @@ let pushBreak saving (Breaks(next,outer,stack)) = Array.append stack (Array.create chunkN 0) (* expand if full *) else stack - stack.[next] <- saving; + stack.[next] <- saving Breaks(next+1,outer,stack) let popBreak (Breaks(next,outer,stack)) = - if next=0 then raise (Failure "popBreak: underflow"); + if next=0 then raise (Failure "popBreak: underflow") let topBroke = stack.[next-1] < 0 let outer = if outer=next then outer-1 else outer (* if all broken, unwind *) let next = next - 1 @@ -138,7 +138,7 @@ let forceBreak (Breaks(next,outer,stack)) = None else let saving = stack.[outer] - stack.[outer] <- -stack.[outer]; + stack.[outer] <- -stack.[outer] let outer = outer+1 Some (Breaks(next,outer,stack),saving) @@ -154,7 +154,7 @@ let squashTo maxWidth layout = // offset - width of last line of block // NOTE: offset <= pos -- depending on tabbing of last block let rec fit breaks (pos,layout) = - (*printf "\n\nCalling pos=%d layout=[%s]\n" pos (showL layout);*) + (*printf "\n\nCalling pos=%d layout=[%s]\n" pos (showL layout)*) let breaks,layout,pos,offset = match layout with | Attr (tag,attrs,l) -> @@ -202,7 +202,7 @@ let squashTo maxWidth layout = (* actually no saving so no break *) let breaks,r,pos,offsetr = fit breaks (pos,r) breaks,Node (jl,l,jm,r,jr,Breakable indent) ,pos,offsetl + mid + offsetr - (*printf "\nDone: pos=%d offset=%d" pos offset;*) + (*printf "\nDone: pos=%d offset=%d" pos offset*) breaks,layout,pos,offset let breaks = breaks0 () let pos = 0 diff --git a/src/fsharp/lex.fsl b/src/fsharp/lex.fsl index 89bf263e4ba..f93eeb1bfe5 100644 --- a/src/fsharp/lex.fsl +++ b/src/fsharp/lex.fsl @@ -37,7 +37,7 @@ let lexemeTrimLeft lexbuf n = lexemeTrimBoth lexbuf n 0 let fail args (lexbuf:UnicodeLexing.Lexbuf) msg dflt = let m = lexbuf.LexemeRange - args.errorLogger.ErrorR(Error(msg,m)); + args.errorLogger.ErrorR(Error(msg,m)) dflt //-------------------------- @@ -112,7 +112,7 @@ let lexemeTrimRightToInt32 args lexbuf n = let checkExprOp (lexbuf:UnicodeLexing.Lexbuf) = if String.contains (lexeme lexbuf) ':' then - deprecatedWithError (FSComp.SR.lexCharNotAllowedInOperatorNames(":")) lexbuf.LexemeRange; + deprecatedWithError (FSComp.SR.lexCharNotAllowedInOperatorNames(":")) lexbuf.LexemeRange if String.contains (lexeme lexbuf) '$' then deprecatedWithError (FSComp.SR.lexCharNotAllowedInOperatorNames("$")) lexbuf.LexemeRange @@ -125,12 +125,12 @@ let startString args (lexbuf: UnicodeLexing.Lexbuf) = let startp = lexbuf.StartPos let fin = (fun _m2 b s -> // Adjust the start-of-token mark back to the true start of the token - lexbuf.StartPos <- startp; + lexbuf.StartPos <- startp if b then if Lexhelp.stringBufferIsBytes buf then BYTEARRAY (Lexhelp.stringBufferAsBytes buf) else ( - fail args lexbuf (FSComp.SR.lexByteArrayCannotEncode()) (); + fail args lexbuf (FSComp.SR.lexByteArrayCannotEncode()) () BYTEARRAY (Lexhelp.stringBufferAsBytes buf) ) else @@ -464,7 +464,7 @@ rule token args skip = parse else WHITESPACE (LexCont.Token !args.ifdefStack) } | offwhite+ - { if args.lightSyntaxStatus.Status then errorR(Error(FSComp.SR.lexTabsNotAllowed(),lexbuf.LexemeRange)); + { if args.lightSyntaxStatus.Status then errorR(Error(FSComp.SR.lexTabsNotAllowed(),lexbuf.LexemeRange)) if not skip then (WHITESPACE (LexCont.Token !args.ifdefStack)) else token args skip lexbuf } | "////" op_char* @@ -601,14 +601,14 @@ rule token args skip = parse | "#light" anywhite* | ("#indent" | "#light") anywhite+ "\"on\"" { if args.lightSyntaxStatus.ExplicitlySet && args.lightSyntaxStatus.WarnOnMultipleTokens then - warning(Error((0,"#light should only occur as the first non-comment text in an F# source file"),lexbuf.LexemeRange)); + warning(Error((0,"#light should only occur as the first non-comment text in an F# source file"),lexbuf.LexemeRange)) // TODO unreachable error above, I think? - brianmcn - args.lightSyntaxStatus.Status <- true; + args.lightSyntaxStatus.Status <- true if not skip then (HASH_LIGHT (LexCont.Token !args.ifdefStack)) else token args skip lexbuf } | ("#indent" | "#light") anywhite+ "\"off\"" - { args.lightSyntaxStatus.Status <- false; - mlCompatWarning (FSComp.SR.lexIndentOffForML()) lexbuf.LexemeRange; + { args.lightSyntaxStatus.Status <- false + mlCompatWarning (FSComp.SR.lexIndentOffForML()) lexbuf.LexemeRange if not skip then (HASH_LIGHT (LexCont.Token !args.ifdefStack)) else token args skip lexbuf } | anywhite* "#if" anywhite+ anystring @@ -616,7 +616,7 @@ rule token args skip = parse let lookup id = List.contains id args.defines let lexed = lexeme lexbuf let isTrue = evalIfDefExpression lexbuf.StartPos args lookup lexed - args.ifdefStack := (IfDefIf,m) :: !(args.ifdefStack); + args.ifdefStack := (IfDefIf,m) :: !(args.ifdefStack) // Get the token; make sure it starts at zero position & return let cont, f = @@ -632,7 +632,7 @@ rule token args skip = parse | (IfDefElse,_) :: _rest -> LEX_FAILURE (FSComp.SR.lexHashEndifRequiredForElse()) | (IfDefIf,_) :: rest -> let m = lexbuf.LexemeRange - args.ifdefStack := (IfDefElse,m) :: rest; + args.ifdefStack := (IfDefElse,m) :: rest let tok = HASH_ELSE(m,lexed, LexCont.EndLine(LexerEndlineContinuation.Skip(!args.ifdefStack,0,m))) let tok = shouldStartLine args lexbuf m (FSComp.SR.lexHashElseMustBeFirst()) tok if not skip then tok else endline (LexerEndlineContinuation.Skip(!args.ifdefStack,0,m)) args skip lexbuf } @@ -643,7 +643,7 @@ rule token args skip = parse match !(args.ifdefStack) with | []-> LEX_FAILURE (FSComp.SR.lexHashEndingNoMatchingIf()) | _ :: rest -> - args.ifdefStack := rest; + args.ifdefStack := rest let tok = HASH_ENDIF(m,lexed,LexCont.EndLine(LexerEndlineContinuation.Token(!args.ifdefStack))) let tok = shouldStartLine args lexbuf m (FSComp.SR.lexHashEndifMustBeFirst()) tok if not skip then tok else endline (LexerEndlineContinuation.Token(!args.ifdefStack)) args skip lexbuf } @@ -684,7 +684,7 @@ and ifdefSkip n m args skip = parse | (IfDefElse,_) :: _rest -> LEX_FAILURE (FSComp.SR.lexHashEndifRequiredForElse()) | (IfDefIf,_) :: rest -> let m = lexbuf.LexemeRange - args.ifdefStack := (IfDefElse,m) :: rest; + args.ifdefStack := (IfDefElse,m) :: rest if not skip then (HASH_ELSE(m,lexed,LexCont.EndLine(LexerEndlineContinuation.Token(!args.ifdefStack)))) else endline (LexerEndlineContinuation.Token(!args.ifdefStack)) args skip lexbuf else if not skip then (INACTIVECODE(LexCont.EndLine(LexerEndlineContinuation.Skip(!args.ifdefStack,n,m)))) else endline (LexerEndlineContinuation.Skip(!args.ifdefStack,n,m)) args skip lexbuf } @@ -700,7 +700,7 @@ and ifdefSkip n m args skip = parse match !(args.ifdefStack) with | [] -> LEX_FAILURE (FSComp.SR.lexHashEndingNoMatchingIf()) | _ :: rest -> - args.ifdefStack := rest; + args.ifdefStack := rest if not skip then (HASH_ENDIF(m,lexed,LexCont.EndLine(LexerEndlineContinuation.Token(!args.ifdefStack)))) else endline (LexerEndlineContinuation.Token(!args.ifdefStack)) args skip lexbuf else let tok = INACTIVECODE(LexCont.EndLine(LexerEndlineContinuation.Skip(!args.ifdefStack,n-1,m))) @@ -723,7 +723,7 @@ and ifdefSkip n m args skip = parse // or end of file and then calls the lexing function specified by 'cont' - either token or ifdefSkip and endline cont args skip = parse | newline - { newline lexbuf; + { newline lexbuf match cont with | LexerEndlineContinuation.Token(ifdefStack) -> if not skip then (WHITESPACE(LexCont.Token ifdefStack)) else token args skip lexbuf | LexerEndlineContinuation.Skip(ifdefStack, n, m) -> if not skip then (INACTIVECODE (LexCont.IfDefSkip(ifdefStack,n,m))) else ifdefSkip n m args skip lexbuf @@ -741,28 +741,28 @@ and endline cont args skip = parse and string sargs skip = parse | '\\' newline anywhite* { let (_buf,_fin,m,args) = sargs - newline lexbuf; + newline lexbuf if not skip then (STRING_TEXT (LexCont.String(!args.ifdefStack,m))) else string sargs skip lexbuf } | escape_char { let (buf,_fin,m,args) = sargs - addByteChar buf (escape (lexeme lexbuf).[1]); + addByteChar buf (escape (lexeme lexbuf).[1]) if not skip then (STRING_TEXT (LexCont.String(!args.ifdefStack,m))) else string sargs skip lexbuf } | trigraph { let (buf,_fin,m,args) = sargs let s = lexeme lexbuf - addByteChar buf (trigraph s.[1] s.[2] s.[3]); + addByteChar buf (trigraph s.[1] s.[2] s.[3]) if not skip then (STRING_TEXT (LexCont.String(!args.ifdefStack,m))) else string sargs skip lexbuf } | hexGraphShort { let (buf,_fin,m,args) = sargs - addUnicodeChar buf (int (hexGraphShort (lexemeTrimLeft lexbuf 2))); + addUnicodeChar buf (int (hexGraphShort (lexemeTrimLeft lexbuf 2))) if not skip then (STRING_TEXT (LexCont.String(!args.ifdefStack,m))) else string sargs skip lexbuf } | unicodeGraphShort { let (buf,_fin,m,args) = sargs - addUnicodeChar buf (int (unicodeGraphShort (lexemeTrimLeft lexbuf 2))); + addUnicodeChar buf (int (unicodeGraphShort (lexemeTrimLeft lexbuf 2))) if not skip then (STRING_TEXT (LexCont.String(!args.ifdefStack,m))) else string sargs skip lexbuf } | unicodeGraphLong @@ -792,24 +792,24 @@ and string sargs skip = parse | newline { let (buf,_fin,m,args) = sargs - newline lexbuf; - addUnicodeString buf (lexeme lexbuf); + newline lexbuf + addUnicodeString buf (lexeme lexbuf) if not skip then (STRING_TEXT (LexCont.String(!args.ifdefStack,m))) else string sargs skip lexbuf } | ident { let (buf,_fin,m,args) = sargs - addUnicodeString buf (lexeme lexbuf); + addUnicodeString buf (lexeme lexbuf) if not skip then (STRING_TEXT (LexCont.String(!args.ifdefStack,m))) else string sargs skip lexbuf } | integer | xinteger { let (buf,_fin,m,args) = sargs - addUnicodeString buf (lexeme lexbuf); + addUnicodeString buf (lexeme lexbuf) if not skip then (STRING_TEXT (LexCont.String(!args.ifdefStack,m))) else string sargs skip lexbuf } | anywhite + { let (buf,_fin,m,args) = sargs - addUnicodeString buf (lexeme lexbuf); + addUnicodeString buf (lexeme lexbuf) if not skip then (STRING_TEXT (LexCont.String(!args.ifdefStack,m))) else string sargs skip lexbuf } | eof @@ -818,13 +818,13 @@ and string sargs skip = parse | surrogateChar surrogateChar // surrogate code points always come in pairs | _ { let (buf,_fin,m,args) = sargs - addUnicodeString buf (lexeme lexbuf); + addUnicodeString buf (lexeme lexbuf) if not skip then (STRING_TEXT (LexCont.String(!args.ifdefStack,m))) else string sargs skip lexbuf } and verbatimString sargs skip = parse | '"' '"' { let (buf,_fin,m,args) = sargs - addByteChar buf '\"'; + addByteChar buf '\"' if not skip then (STRING_TEXT (LexCont.VerbatimString(!args.ifdefStack,m))) else verbatimString sargs skip lexbuf } | '"' @@ -839,24 +839,24 @@ and verbatimString sargs skip = parse | newline { let (buf,_fin,m,args) = sargs - newline lexbuf; - addUnicodeString buf (lexeme lexbuf); + newline lexbuf + addUnicodeString buf (lexeme lexbuf) if not skip then (STRING_TEXT (LexCont.VerbatimString(!args.ifdefStack,m))) else verbatimString sargs skip lexbuf } | ident { let (buf,_fin,m,args) = sargs - addUnicodeString buf (lexeme lexbuf); + addUnicodeString buf (lexeme lexbuf) if not skip then (STRING_TEXT (LexCont.VerbatimString(!args.ifdefStack,m))) else verbatimString sargs skip lexbuf } | integer | xinteger { let (buf,_fin,m,args) = sargs - addUnicodeString buf (lexeme lexbuf); + addUnicodeString buf (lexeme lexbuf) if not skip then (STRING_TEXT (LexCont.VerbatimString(!args.ifdefStack,m))) else verbatimString sargs skip lexbuf } | anywhite + { let (buf,_fin,m,args) = sargs - addUnicodeString buf (lexeme lexbuf); + addUnicodeString buf (lexeme lexbuf) if not skip then (STRING_TEXT (LexCont.VerbatimString(!args.ifdefStack,m))) else verbatimString sargs skip lexbuf } | eof @@ -865,7 +865,7 @@ and verbatimString sargs skip = parse | surrogateChar surrogateChar // surrogate code points always come in pairs | _ { let (buf,_fin,m,args) = sargs - addUnicodeString buf (lexeme lexbuf); + addUnicodeString buf (lexeme lexbuf) if not skip then (STRING_TEXT (LexCont.VerbatimString(!args.ifdefStack,m))) else verbatimString sargs skip lexbuf } and tripleQuoteString sargs skip = parse @@ -876,25 +876,25 @@ and tripleQuoteString sargs skip = parse | newline { let (buf,_fin,m,args) = sargs - newline lexbuf; - addUnicodeString buf (lexeme lexbuf); + newline lexbuf + addUnicodeString buf (lexeme lexbuf) if not skip then (STRING_TEXT (LexCont.TripleQuoteString(!args.ifdefStack,m))) else tripleQuoteString sargs skip lexbuf } // The rest is to break into pieces to allow double-click-on-word and other such things | ident { let (buf,_fin,m,args) = sargs - addUnicodeString buf (lexeme lexbuf); + addUnicodeString buf (lexeme lexbuf) if not skip then (STRING_TEXT (LexCont.TripleQuoteString(!args.ifdefStack,m))) else tripleQuoteString sargs skip lexbuf } | integer | xinteger { let (buf,_fin,m,args) = sargs - addUnicodeString buf (lexeme lexbuf); + addUnicodeString buf (lexeme lexbuf) if not skip then (STRING_TEXT (LexCont.TripleQuoteString(!args.ifdefStack,m))) else tripleQuoteString sargs skip lexbuf } | anywhite + { let (buf,_fin,m,args) = sargs - addUnicodeString buf (lexeme lexbuf); + addUnicodeString buf (lexeme lexbuf) if not skip then (STRING_TEXT (LexCont.TripleQuoteString(!args.ifdefStack,m))) else tripleQuoteString sargs skip lexbuf } | eof @@ -903,15 +903,15 @@ and tripleQuoteString sargs skip = parse | surrogateChar surrogateChar // surrogate code points always come in pairs | _ { let (buf,_fin,m,args) = sargs - addUnicodeString buf (lexeme lexbuf); + addUnicodeString buf (lexeme lexbuf) if not skip then (STRING_TEXT (LexCont.TripleQuoteString(!args.ifdefStack,m))) else tripleQuoteString sargs skip lexbuf } // Parsing single-line comment - we need to split it into words for Visual Studio IDE and singleLineComment cargs skip = parse | newline { let buff,_n,_m,args = cargs - trySaveXmlDoc lexbuf buff; - newline lexbuf; + trySaveXmlDoc lexbuf buff + newline lexbuf // Saves the documentation (if we're collecting any) into a buffer-local variable. if not skip then (LINE_COMMENT (LexCont.Token !args.ifdefStack)) else token args skip lexbuf } @@ -924,7 +924,7 @@ and singleLineComment cargs skip = parse | anywhite+ { let buff,n,m,args = cargs // Append the current token to the XML documentation if we're collecting it - tryAppendXmlDoc buff (lexeme lexbuf); + tryAppendXmlDoc buff (lexeme lexbuf) if not skip then (LINE_COMMENT (LexCont.SingleLineComment(!args.ifdefStack,n,m))) else singleLineComment (buff,n,m,args) skip lexbuf } | surrogateChar surrogateChar @@ -959,7 +959,7 @@ and comment cargs skip = parse | newline { let n,m,args = cargs - newline lexbuf; + newline lexbuf if not skip then (COMMENT (LexCont.Comment(!args.ifdefStack,n,m))) else comment cargs skip lexbuf } | "*)" { @@ -983,7 +983,7 @@ and comment cargs skip = parse and stringInComment n m args skip = parse // Follow string lexing, skipping tokens until it finishes | '\\' newline anywhite* - { newline lexbuf; + { newline lexbuf if not skip then (COMMENT (LexCont.StringInComment(!args.ifdefStack,n,m))) else stringInComment n m args skip lexbuf } | escape_char @@ -1002,7 +1002,7 @@ and stringInComment n m args skip = parse { if not skip then (COMMENT (LexCont.Comment(!args.ifdefStack,n,m))) else comment (n,m,args) skip lexbuf } | newline - { newline lexbuf; + { newline lexbuf if not skip then (COMMENT (LexCont.StringInComment(!args.ifdefStack,n,m))) else stringInComment n m args skip lexbuf } | eof @@ -1027,7 +1027,7 @@ and verbatimStringInComment n m args skip = parse { if not skip then (COMMENT (LexCont.VerbatimStringInComment(!args.ifdefStack,n,m))) else verbatimStringInComment n m args skip lexbuf } | newline - { newline lexbuf; + { newline lexbuf if not skip then (COMMENT (LexCont.VerbatimStringInComment(!args.ifdefStack,n,m))) else verbatimStringInComment n m args skip lexbuf } | eof @@ -1049,7 +1049,7 @@ and tripleQuoteStringInComment n m args skip = parse { if not skip then (COMMENT (LexCont.TripleQuoteStringInComment(!args.ifdefStack,n,m))) else tripleQuoteStringInComment n m args skip lexbuf } | newline - { newline lexbuf; + { newline lexbuf if not skip then (COMMENT (LexCont.TripleQuoteStringInComment(!args.ifdefStack,n,m))) else tripleQuoteStringInComment n m args skip lexbuf } | eof diff --git a/src/fsharp/lexhelp.fs b/src/fsharp/lexhelp.fs index fcdef625597..66ecf03c468 100644 --- a/src/fsharp/lexhelp.fs +++ b/src/fsharp/lexhelp.fs @@ -50,10 +50,10 @@ type LexResourceManager() = /// Lexer parameters type lexargs = - { defines: string list; - ifdefStack: LexerIfdefStack; - resourceManager: LexResourceManager; - lightSyntaxStatus : LightSyntaxStatus; + { defines: string list + ifdefStack: LexerIfdefStack + resourceManager: LexResourceManager + lightSyntaxStatus : LightSyntaxStatus errorLogger: ErrorLogger } /// possible results of lexing a long unicode escape sequence in a string literal, e.g. "\UDEADBEEF" @@ -63,16 +63,16 @@ type LongUnicodeLexResult = | Invalid let mkLexargs (_filename,defines,lightSyntaxStatus,resourceManager,ifdefStack,errorLogger) = - { defines = defines; - ifdefStack= ifdefStack; - lightSyntaxStatus=lightSyntaxStatus; - resourceManager=resourceManager; + { defines = defines + ifdefStack= ifdefStack + lightSyntaxStatus=lightSyntaxStatus + resourceManager=resourceManager errorLogger=errorLogger } /// Register the lexbuf and call the given function let reusingLexbufForParsing lexbuf f = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parse) - LexbufLocalXmlDocStore.ClearXmlDoc lexbuf; + LexbufLocalXmlDocStore.ClearXmlDoc lexbuf try f () with e -> @@ -83,7 +83,7 @@ let resetLexbufPos filename (lexbuf: UnicodeLexing.Lexbuf) = /// Reset the lexbuf, configure the initial position with the given filename and call the given function let usingLexbufForParsing (lexbuf:UnicodeLexing.Lexbuf,filename) f = - resetLexbufPos filename lexbuf; + resetLexbufPos filename lexbuf reusingLexbufForParsing lexbuf (fun () -> f lexbuf) //------------------------------------------------------------------------ @@ -97,14 +97,14 @@ let callStringFinisher fin (buf: ByteBuffer) endm b = fin endm b (buf.Close()) let addUnicodeString (buf: ByteBuffer) (x:string) = buf.EmitBytes (Encoding.Unicode.GetBytes x) let addIntChar (buf: ByteBuffer) c = - buf.EmitIntAsByte (c % 256); + buf.EmitIntAsByte (c % 256) buf.EmitIntAsByte (c / 256) let addUnicodeChar buf c = addIntChar buf (int c) let addByteChar buf (c:char) = addIntChar buf (int32 c % 256) let stringBufferAsString (buf: byte[]) = - if buf.Length % 2 <> 0 then failwith "Expected even number of bytes"; + if buf.Length % 2 <> 0 then failwith "Expected even number of bytes" let chars : char[] = Array.zeroCreate (buf.Length/2) for i = 0 to (buf.Length/2) - 1 do let hi = buf.[i*2+1] @@ -148,15 +148,15 @@ let hexdigit d = else failwith "hexdigit" let unicodeGraphShort (s:string) = - if s.Length <> 4 then failwith "unicodegraph"; + if s.Length <> 4 then failwith "unicodegraph" uint16 (hexdigit s.[0] * 4096 + hexdigit s.[1] * 256 + hexdigit s.[2] * 16 + hexdigit s.[3]) let hexGraphShort (s:string) = - if s.Length <> 2 then failwith "hexgraph"; + if s.Length <> 2 then failwith "hexgraph" uint16 (hexdigit s.[0] * 16 + hexdigit s.[1]) let unicodeGraphLong (s:string) = - if s.Length <> 8 then failwith "unicodeGraphLong"; + if s.Length <> 8 then failwith "unicodeGraphLong" let high = hexdigit s.[0] * 4096 + hexdigit s.[1] * 256 + hexdigit s.[2] * 16 + hexdigit s.[3] in let low = hexdigit s.[4] * 4096 + hexdigit s.[5] * 256 + hexdigit s.[6] * 16 + hexdigit s.[7] in // not a surrogate pair @@ -196,101 +196,96 @@ module Keywords = | FSHARP (* keyword, but an identifier under --ml-compatibility mode *) let private keywordList = - [ FSHARP, "abstract", ABSTRACT; - ALWAYS, "and" ,AND; - ALWAYS, "as" ,AS; - ALWAYS, "assert" ,ASSERT; - ALWAYS, "asr" ,INFIX_STAR_STAR_OP "asr"; - ALWAYS, "base" ,BASE; - ALWAYS, "begin" ,BEGIN; - ALWAYS, "class" ,CLASS; - FSHARP, "const" ,CONST; - FSHARP, "default" ,DEFAULT; - FSHARP, "delegate" ,DELEGATE; - ALWAYS, "do" ,DO; - ALWAYS, "done" ,DONE; - FSHARP, "downcast" ,DOWNCAST; - ALWAYS, "downto" ,DOWNTO; - FSHARP, "elif" ,ELIF; - ALWAYS, "else" ,ELSE; - ALWAYS, "end" ,END; - ALWAYS, "exception" ,EXCEPTION; - FSHARP, "extern" ,EXTERN; - ALWAYS, "false" ,FALSE; - ALWAYS, "finally" ,FINALLY; - FSHARP, "fixed" ,FIXED; - ALWAYS, "for" ,FOR; - ALWAYS, "fun" ,FUN; - ALWAYS, "function" ,FUNCTION; - FSHARP, "global" ,GLOBAL; - ALWAYS, "if" ,IF; - ALWAYS, "in" ,IN; - ALWAYS, "inherit" ,INHERIT; - FSHARP, "inline" ,INLINE; - FSHARP, "interface" ,INTERFACE; - FSHARP, "internal" ,INTERNAL; - ALWAYS, "land" ,INFIX_STAR_DIV_MOD_OP "land"; - ALWAYS, "lazy" ,LAZY; - ALWAYS, "let" ,LET(false); - ALWAYS, "lor" ,INFIX_STAR_DIV_MOD_OP "lor"; - ALWAYS, "lsl" ,INFIX_STAR_STAR_OP "lsl"; - ALWAYS, "lsr" ,INFIX_STAR_STAR_OP "lsr"; - ALWAYS, "lxor" ,INFIX_STAR_DIV_MOD_OP "lxor"; - ALWAYS, "match" ,MATCH; - FSHARP, "member" ,MEMBER; - ALWAYS, "mod" ,INFIX_STAR_DIV_MOD_OP "mod"; - ALWAYS, "module" ,MODULE; - ALWAYS, "mutable" ,MUTABLE; - FSHARP, "namespace" ,NAMESPACE; - ALWAYS, "new" ,NEW; - FSHARP, "null" ,NULL; - ALWAYS, "of" ,OF; - ALWAYS, "open" ,OPEN; - ALWAYS, "or" ,OR; - FSHARP, "override" ,OVERRIDE; - ALWAYS, "private" ,PRIVATE; - FSHARP, "public" ,PUBLIC; - ALWAYS, "rec" ,REC; - FSHARP, "return" ,YIELD(false); - ALWAYS, "sig" ,SIG; - FSHARP, "static" ,STATIC; - ALWAYS, "struct" ,STRUCT; - ALWAYS, "then" ,THEN; - ALWAYS, "to" ,TO; - ALWAYS, "true" ,TRUE; - ALWAYS, "try" ,TRY; - ALWAYS, "type" ,TYPE; - FSHARP, "upcast" ,UPCAST; - FSHARP, "use" ,LET(true); - ALWAYS, "val" ,VAL; - FSHARP, "void" ,VOID; - ALWAYS, "when" ,WHEN; - ALWAYS, "while" ,WHILE; - ALWAYS, "with" ,WITH; - FSHARP, "yield" ,YIELD(true); - ALWAYS, "_" ,UNDERSCORE; - (*------- for prototyping and explaining offside rule *) - FSHARP, "__token_OBLOCKSEP" ,OBLOCKSEP; - FSHARP, "__token_OWITH" ,OWITH; - FSHARP, "__token_ODECLEND" ,ODECLEND; - FSHARP, "__token_OTHEN" ,OTHEN; - FSHARP, "__token_OELSE" ,OELSE; - FSHARP, "__token_OEND" ,OEND; - FSHARP, "__token_ODO" ,ODO; - FSHARP, "__token_OLET" ,OLET(true); - FSHARP, "__token_constraint",CONSTRAINT; + [ FSHARP, "abstract", ABSTRACT + ALWAYS, "and" ,AND + ALWAYS, "as" ,AS + ALWAYS, "assert" ,ASSERT + ALWAYS, "asr" ,INFIX_STAR_STAR_OP "asr" + ALWAYS, "base" ,BASE + ALWAYS, "begin" ,BEGIN + ALWAYS, "class" ,CLASS + FSHARP, "const" ,CONST + FSHARP, "default" ,DEFAULT + FSHARP, "delegate" ,DELEGATE + ALWAYS, "do" ,DO + ALWAYS, "done" ,DONE + FSHARP, "downcast" ,DOWNCAST + ALWAYS, "downto" ,DOWNTO + FSHARP, "elif" ,ELIF + ALWAYS, "else" ,ELSE + ALWAYS, "end" ,END + ALWAYS, "exception" ,EXCEPTION + FSHARP, "extern" ,EXTERN + ALWAYS, "false" ,FALSE + ALWAYS, "finally" ,FINALLY + FSHARP, "fixed" ,FIXED + ALWAYS, "for" ,FOR + ALWAYS, "fun" ,FUN + ALWAYS, "function" ,FUNCTION + FSHARP, "global" ,GLOBAL + ALWAYS, "if" ,IF + ALWAYS, "in" ,IN + ALWAYS, "inherit" ,INHERIT + FSHARP, "inline" ,INLINE + FSHARP, "interface" ,INTERFACE + FSHARP, "internal" ,INTERNAL + ALWAYS, "land" ,INFIX_STAR_DIV_MOD_OP "land" + ALWAYS, "lazy" ,LAZY + ALWAYS, "let" ,LET(false) + ALWAYS, "lor" ,INFIX_STAR_DIV_MOD_OP "lor" + ALWAYS, "lsl" ,INFIX_STAR_STAR_OP "lsl" + ALWAYS, "lsr" ,INFIX_STAR_STAR_OP "lsr" + ALWAYS, "lxor" ,INFIX_STAR_DIV_MOD_OP "lxor" + ALWAYS, "match" ,MATCH + FSHARP, "member" ,MEMBER + ALWAYS, "mod" ,INFIX_STAR_DIV_MOD_OP "mod" + ALWAYS, "module" ,MODULE + ALWAYS, "mutable" ,MUTABLE + FSHARP, "namespace" ,NAMESPACE + ALWAYS, "new" ,NEW + FSHARP, "null" ,NULL + ALWAYS, "of" ,OF + ALWAYS, "open" ,OPEN + ALWAYS, "or" ,OR + FSHARP, "override" ,OVERRIDE + ALWAYS, "private" ,PRIVATE + FSHARP, "public" ,PUBLIC + ALWAYS, "rec" ,REC + FSHARP, "return" ,YIELD(false) + ALWAYS, "sig" ,SIG + FSHARP, "static" ,STATIC + ALWAYS, "struct" ,STRUCT + ALWAYS, "then" ,THEN + ALWAYS, "to" ,TO + ALWAYS, "true" ,TRUE + ALWAYS, "try" ,TRY + ALWAYS, "type" ,TYPE + FSHARP, "upcast" ,UPCAST + FSHARP, "use" ,LET(true) + ALWAYS, "val" ,VAL + FSHARP, "void" ,VOID + ALWAYS, "when" ,WHEN + ALWAYS, "while" ,WHILE + ALWAYS, "with" ,WITH + FSHARP, "yield" ,YIELD(true) + ALWAYS, "_" ,UNDERSCORE + (*------- for prototyping and explaining offside rule *) + FSHARP, "__token_OBLOCKSEP" ,OBLOCKSEP + FSHARP, "__token_OWITH" ,OWITH + FSHARP, "__token_ODECLEND" ,ODECLEND + FSHARP, "__token_OTHEN" ,OTHEN + FSHARP, "__token_OELSE" ,OELSE + FSHARP, "__token_OEND" ,OEND + FSHARP, "__token_ODO" ,ODO + FSHARP, "__token_OLET" ,OLET(true) + FSHARP, "__token_constraint",CONSTRAINT ] (*------- reserved keywords which are ml-compatibility ids *) @ List.map (fun s -> (FSHARP,s,RESERVED)) - [ "break"; - "checked"; "component"; "constraint"; "continue"; - "fori"; - "include"; - "mixin"; + [ "break"; "checked"; "component"; "constraint"; "continue"; + "fori"; "include"; "mixin"; "parallel"; "params"; "process"; "protected"; "pure"; - "sealed"; - "trait"; "tailcall"; - "virtual"; ] + "sealed"; "trait"; "tailcall"; "virtual"; ] let private unreserveWords = keywordList |> List.choose (function (mode,keyword,_) -> if mode = FSHARP then Some keyword else None) @@ -312,7 +307,7 @@ module Keywords = let IdentifierToken args (lexbuf:UnicodeLexing.Lexbuf) (s:string) = if IsCompilerGeneratedName s then - warning(Error(FSComp.SR.lexhlpIdentifiersContainingAtSymbolReserved(), lexbuf.LexemeRange)); + warning(Error(FSComp.SR.lexhlpIdentifiersContainingAtSymbolReserved(), lexbuf.LexemeRange)) args.resourceManager.InternIdentifierToken s let KeywordOrIdentifierToken args (lexbuf:UnicodeLexing.Lexbuf) s = @@ -320,7 +315,7 @@ module Keywords = | true,v -> match v with | RESERVED -> - warning(ReservedKeyword(FSComp.SR.lexhlpIdentifierReserved(s), lexbuf.LexemeRange)); + warning(ReservedKeyword(FSComp.SR.lexhlpIdentifierReserved(s), lexbuf.LexemeRange)) IdentifierToken args lexbuf s | _ -> v | _ -> diff --git a/src/fsharp/lib.fs b/src/fsharp/lib.fs index 3ed305323e0..1a1e64acd23 100755 --- a/src/fsharp/lib.fs +++ b/src/fsharp/lib.fs @@ -308,18 +308,18 @@ let equalOn f x y = (f x) = (f y) let bufs f = let buf = System.Text.StringBuilder 100 - f buf; + f buf buf.ToString() let buff (os: TextWriter) f x = let buf = System.Text.StringBuilder 100 - f buf x; + f buf x os.Write(buf.ToString()) // Converts "\n" into System.Environment.NewLine before writing to os. See lib.fs:buff let writeViaBufferWithEnvironmentNewLines (os: TextWriter) f x = let buf = System.Text.StringBuilder 100 - f buf x; + f buf x let text = buf.ToString() let text = text.Replace("\n",System.Environment.NewLine) os.Write text @@ -373,14 +373,14 @@ let nullableSlotFull x = x // Caches, mainly for free variables //--------------------------------------------------------------------------- -type cache<'T> = { mutable cacheVal: 'T NonNullSlot; } +type cache<'T> = { mutable cacheVal: 'T NonNullSlot } let newCache() = { cacheVal = nullableSlotEmpty() } let inline cached cache resf = match box cache.cacheVal with | null -> let res = resf() - cache.cacheVal <- nullableSlotFull res; + cache.cacheVal <- nullableSlotFull res res | _ -> cache.cacheVal @@ -390,7 +390,7 @@ let inline cacheOptRef cache f = | Some v -> v | None -> let res = f() - cache := Some res; + cache := Some res res @@ -417,11 +417,11 @@ let delayInsertedToWorkaroundKnownNgenBug s f = (* Some random code to prevent inlining of this function *) let res = ref 10 for i = 0 to 2 do - res := !res + String.length s; - done; - if verbose then printf "------------------------executing NGEN bug delay '%s', calling 'f' --------------\n" s; + res := !res + String.length s + done + if verbose then printf "------------------------executing NGEN bug delay '%s', calling 'f' --------------\n" s let res = f() - if verbose then printf "------------------------exiting NGEN bug delay '%s' --------------\n" s; + if verbose then printf "------------------------exiting NGEN bug delay '%s' --------------\n" s res @@ -473,7 +473,7 @@ module internal AsyncUtil = if result.IsSome then [] else - result <- Some res; + result <- Some res // Invoke continuations in FIFO order // Continuations that Async.FromContinuations provide do QUWI/SynchContext.Post, // so the order is not overly relevant but still. diff --git a/src/fsharp/pars.fsy b/src/fsharp/pars.fsy index 27aab7b2575..c055a6e6614 100755 --- a/src/fsharp/pars.fsy +++ b/src/fsharp/pars.fsy @@ -112,16 +112,16 @@ let mkClassMemberLocalBindings(isStatic,initialRangeOpt,attrs,vis,BindingSetPreA | None -> bindingSetRange | Some m -> unionRanges m bindingSetRange if nonNil ignoredFreeAttrs then warning(Error(FSComp.SR.parsAttributesIgnored(),wholeRange)); - if isUse then errorR(Error(FSComp.SR.parsUseBindingsIllegalInImplicitClassConstructors(),wholeRange)); + if isUse then errorR(Error(FSComp.SR.parsUseBindingsIllegalInImplicitClassConstructors(),wholeRange)) SynMemberDefn.LetBindings (decls,isStatic,isRec,wholeRange) let mkLocalBindings (mWhole,BindingSetPreAttrs(_,isRec,isUse,declsPreAttrs,_),body) = let ignoredFreeAttrs,decls = declsPreAttrs [] None - if nonNil ignoredFreeAttrs then warning(Error(FSComp.SR.parsAttributesIgnored(),mWhole)); + if nonNil ignoredFreeAttrs then warning(Error(FSComp.SR.parsAttributesIgnored(),mWhole)) SynExpr.LetOrUse (isRec,isUse,decls,body,mWhole) let mkDefnBindings (mWhole,BindingSetPreAttrs(_,isRec,isUse,declsPreAttrs,_bindingSetRange),attrs,vis,attrsm) = - if isUse then warning(Error(FSComp.SR.parsUseBindingsIllegalInModules(),mWhole)); + if isUse then warning(Error(FSComp.SR.parsUseBindingsIllegalInModules(),mWhole)) let freeAttrs,decls = declsPreAttrs attrs vis let letDecls = [ SynModuleDecl.Let (isRec,decls,mWhole) ] let attrDecls = if nonNil freeAttrs then [ SynModuleDecl.Attributes (freeAttrs,attrsm) ] else [] @@ -134,7 +134,7 @@ let idOfPat m p = | _ -> raiseParseErrorAt m (FSComp.SR.parsIntegerForLoopRequiresSimpleIdentifier()) let checkForMultipleAugmentations m a1 a2 = - if nonNil a1 && nonNil a2 then raiseParseErrorAt m (FSComp.SR.parsOnlyOneWithAugmentationAllowed()); + if nonNil a1 && nonNil a2 then raiseParseErrorAt m (FSComp.SR.parsOnlyOneWithAugmentationAllowed()) a1 @ a2 let grabXmlDoc(parseState:IParseState,elemIdx) = @@ -491,7 +491,7 @@ interaction: { IDefns ($1,lhs parseState) } | SEMICOLON - { warning(Error(FSComp.SR.parsUnexpectedSemicolon(),rhs parseState 1)); + { warning(Error(FSComp.SR.parsUnexpectedSemicolon(),rhs parseState 1)) IDefns ([],lhs parseState) } | OBLOCKSEP @@ -547,7 +547,7 @@ interactiveDefns: /* An expression as part of one interaction in F# Interactive */ interactiveExpr: | opt_attributes opt_declVisibility declExpr - { if isSome $2 then errorR(Error(FSComp.SR.parsUnexpectedVisibilityDeclaration(),rhs parseState 3)); + { if isSome $2 then errorR(Error(FSComp.SR.parsUnexpectedVisibilityDeclaration(),rhs parseState 3)) let attrDecls = if nonNil $1 then [ SynModuleDecl.Attributes ($1, rangeOfNonNilAttrs $1) ] else [] in attrDecls @ [ mkSynDoDecl($3)] } @@ -644,7 +644,7 @@ fileNamespaceSpecs: decls |> List.collect (function | (SynModuleSigDecl.HashDirective (hd,_)) -> [hd] | d -> - reportParseErrorAt d.Range (FSComp.SR.parsOnlyHashDirectivesAllowed()); + reportParseErrorAt d.Range (FSComp.SR.parsOnlyHashDirectivesAllowed()) []) ParsedSigFile(decls, $2) } @@ -664,12 +664,12 @@ fileNamespaceSpec: /* The single module declaration that can make up a signature file */ fileModuleSpec: | opt_attributes opt_declVisibility moduleIntro moduleSpfnsPossiblyEmptyBlock - { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)); + { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) let m2 = rhs parseState 3 let m = (rhs2 parseState 3 4) let isRec,path2,xml,vis = $3 (fun (isRec2,path,_) -> - if nonNil path then errorR(Error(FSComp.SR.parsNamespaceOrModuleNotBoth(),m2)); + if nonNil path then errorR(Error(FSComp.SR.parsNamespaceOrModuleNotBoth(),m2)) let lid = path@path2 ParsedSigFileFragment.NamedModule(SynModuleOrNamespaceSig(lid, (isRec || isRec2), true, $4, xml,$1,vis,m))) } @@ -690,7 +690,7 @@ moduleSpfnsPossiblyEmptyBlock: | OBLOCKBEGIN moduleSpfnsPossiblyEmpty recover { // The lex filter ensures we can only get a mismatch in OBLOCKBEGIN/OBLOCKEND tokens if there was some other kind of error, hence we don't need to report this error - // reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnClosedBlockInHashLight()); + // reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnClosedBlockInHashLight()) $2 } @@ -728,24 +728,24 @@ moduleSpfn: { $1 } | opt_attributes opt_declVisibility moduleIntro colonOrEquals namedModuleAbbrevBlock - { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)); + { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) let isRec, path, xml, vis = $3 - if isRec then raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsInvalidUseOfRec()); - if List.length path <> 1 then raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsModuleAbbreviationMustBeSimpleName()); - if List.length $1 <> 0 then raiseParseErrorAt (rhs parseState 1) (FSComp.SR.parsIgnoreAttributesOnModuleAbbreviation()); - if isSome(vis) then raiseParseErrorAt (rhs parseState 1) (FSComp.SR.parsIgnoreVisibilityOnModuleAbbreviationAlwaysPrivate()); + if isRec then raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsInvalidUseOfRec()) + if List.length path <> 1 then raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsModuleAbbreviationMustBeSimpleName()) + if List.length $1 <> 0 then raiseParseErrorAt (rhs parseState 1) (FSComp.SR.parsIgnoreAttributesOnModuleAbbreviation()) + if isSome(vis) then raiseParseErrorAt (rhs parseState 1) (FSComp.SR.parsIgnoreVisibilityOnModuleAbbreviationAlwaysPrivate()) SynModuleSigDecl.ModuleAbbrev(List.head path,$5,rhs2 parseState 3 5) } | opt_attributes opt_declVisibility moduleIntro colonOrEquals moduleSpecBlock { let isRec, path, xml, vis = $3 - if List.length path <> 1 then raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsModuleDefnMustBeSimpleName()); - if isRec then raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsInvalidUseOfRec()); + if List.length path <> 1 then raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsModuleDefnMustBeSimpleName()) + if isRec then raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsInvalidUseOfRec()) let info = ComponentInfo($1,[],[],path,xml,false,vis,rhs parseState 3) - if isSome($2) then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)); + if isSome($2) then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) SynModuleSigDecl.NestedModule(info, isRec, $5, rhs2 parseState 3 5) } | opt_attributes opt_declVisibility tyconSpfns - { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)); + { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) let (TypeDefnSig(ComponentInfo(cas,a,cs,b,c,d,d2,d3),e,f,g)),rest = match $3 with | [] -> raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedEmptyModuleDefn()) @@ -754,7 +754,7 @@ moduleSpfn: SynModuleSigDecl.Types (tc::rest,rhs parseState 3) } | opt_attributes opt_declVisibility exconSpfn - { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)); + { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) let (SynExceptionSig(SynExceptionDefnRepr(cas,a,b,c,d,d2),e,f)) = $3 let ec = (SynExceptionSig(SynExceptionDefnRepr($1@cas,a,b,c,d,d2),e,f)) SynModuleSigDecl.Exception(ec, rhs parseState 3) } @@ -764,9 +764,9 @@ moduleSpfn: valSpfn: | opt_attributes opt_declVisibility VAL opt_attributes opt_inline opt_mutable opt_access nameop opt_explicitValTyparDecls COLON topTypeWithTypeConstraints optLiteralValueSpfn - { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)); + { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) let attr1,attr2,isInline,isMutable,vis2,id,doc,explicitValTyparDecls,(ty,arity),konst = ($1),($4),($5),($6),($7),($8),grabXmlDoc(parseState,3),($9),($11),($12) - if nonNil attr2 then errorR(Deprecated(FSComp.SR.parsAttributesMustComeBeforeVal(),rhs parseState 4)); + if nonNil attr2 then errorR(Deprecated(FSComp.SR.parsAttributesMustComeBeforeVal(),rhs parseState 4)) let m = rhs2 parseState 3 11 let valSpfn = ValSpfn((attr1@attr2),id,explicitValTyparDecls,ty,arity,isInline,isMutable,doc, vis2,konst,m) SynModuleSigDecl.Val(valSpfn,m) @@ -856,7 +856,7 @@ tyconSpfnRhs: let needsCheck,(kind,decls) = $1 (fun nameRange nameInfo augmentation -> if needsCheck && isNil decls then - reportParseErrorAt nameRange (FSComp.SR.parsEmptyTypeDefinition()); + reportParseErrorAt nameRange (FSComp.SR.parsEmptyTypeDefinition()) TypeDefnSig(nameInfo,SynTypeDefnSigRepr.ObjectModel (kind,decls,m),augmentation,m)) } | DELEGATE OF topType @@ -864,7 +864,7 @@ tyconSpfnRhs: let ty,arity = $3 let invoke = SynMemberSig.Member(ValSpfn([],mkSynId m "Invoke",inferredTyparDecls,ty,arity,false,false,PreXmlDoc.Empty,None,None,m),AbstractMemberFlags MemberKind.Member,m) (fun nameRange nameInfo augmentation -> - if nonNil augmentation then raiseParseErrorAt m (FSComp.SR.parsAugmentationsIllegalOnDelegateType()); + if nonNil augmentation then raiseParseErrorAt m (FSComp.SR.parsAugmentationsIllegalOnDelegateType()) TypeDefnSig(nameInfo,SynTypeDefnSigRepr.ObjectModel (TyconDelegate (ty,arity),[invoke],m),[],m)) } @@ -878,7 +878,7 @@ tyconClassSpfn: { false,($1,$2) } | classOrInterfaceOrStruct classSpfnBlock recover - { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedClassInterfaceOrStruct()); + { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedClassInterfaceOrStruct()) false,($1,$2) } | classOrInterfaceOrStruct error END @@ -892,7 +892,7 @@ classSpfnBlockKindUnspecified: { true, $2 } | OBLOCKBEGIN classSpfnMembers recover - { if not $3 then reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedEndOfFileTypeSignature()); + { if not $3 then reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedEndOfFileTypeSignature()) false, $2 } /* NOTE: these rules enable the non-#light syntax to omit the kind of a type. */ @@ -909,7 +909,7 @@ classSpfnBlock: { $2 } | OBLOCKBEGIN classSpfnMembers recover - { if not $3 then reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedEndOfFileTypeSignature()); + { if not $3 then reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedEndOfFileTypeSignature()) $2 } | classSpfnMembers { $1 } @@ -932,7 +932,7 @@ classSpfnMembersAtLeastOne: /* A object member in a signature */ classMemberSpfn: | opt_attributes opt_declVisibility memberSpecFlags opt_inline opt_access nameop opt_explicitValTyparDecls COLON topTypeWithTypeConstraints classMemberSpfnGetSet optLiteralValueSpfn - { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)); + { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) let isInline,doc,vis2,id,explicitValTyparDecls,(ty,arity),optLiteralValue = $4,grabXmlDoc(parseState,3),$5,$6,$7,$9,$11 let getSetRangeOpt, getSet = $10 let getSetAdjuster arity = match arity,getSet with SynValInfo([],_),MemberKind.Member -> MemberKind.PropertyGet | _ -> getSet @@ -946,24 +946,24 @@ classMemberSpfn: SynMemberSig.Member(valSpfn, flags (getSetAdjuster arity),wholeRange) } | opt_attributes opt_declVisibility interfaceMember appType - { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)); + { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) SynMemberSig.Interface ($4,unionRanges (rhs parseState 3) ($4).Range) } | opt_attributes opt_declVisibility INHERIT appType - { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)); + { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) SynMemberSig.Inherit ($4,unionRanges (rhs parseState 3) ($4).Range) } | opt_attributes opt_declVisibility VAL fieldDecl - { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)); + { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) let fld = $4 $1 false SynMemberSig.ValField(fld,rhs2 parseState 3 4) } | opt_attributes opt_declVisibility STATIC VAL fieldDecl - { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)); + { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) SynMemberSig.ValField($5 $1 true,rhs2 parseState 3 5) } | opt_attributes opt_declVisibility STATIC typeKeyword tyconSpfn - { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)); + { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) SynMemberSig.NestedType($5,rhs2 parseState 3 5) } | opt_attributes opt_declVisibility NEW COLON topTypeWithTypeConstraints @@ -986,7 +986,7 @@ classMemberSpfnGetSet: { Some (rhs2 parseState 1 2), $2 } | OWITH classMemberSpfnGetSetElements error - { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedWith()); + { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedWith()) Some (rhs2 parseState 1 2), $2 } @@ -1002,7 +1002,7 @@ classMemberSpfnGetSetElements: { let (id:Ident) = $1 if not ((id.idText = "get" && $3.idText = "set") || (id.idText = "set" && $3.idText = "get")) then - raiseParseErrorAt (rhs2 parseState 1 3) (FSComp.SR.parsGetOrSetRequired()); + raiseParseErrorAt (rhs2 parseState 1 3) (FSComp.SR.parsGetOrSetRequired()) MemberKind.PropertyGetSet } memberSpecFlags: @@ -1062,7 +1062,7 @@ fileNamespaceImpls: decls |> List.collect (function | (SynModuleDecl.HashDirective (hd,_)) -> [hd] | d -> - reportParseErrorAt d.Range (FSComp.SR.parsOnlyHashDirectivesAllowed()); + reportParseErrorAt d.Range (FSComp.SR.parsOnlyHashDirectivesAllowed()) []) ParsedImplFile(decls, $2) } @@ -1085,12 +1085,12 @@ fileNamespaceImpl: /* A single module definition in an implementation file */ fileModuleImpl: | opt_attributes opt_declVisibility moduleIntro moduleDefnsOrExprPossiblyEmptyOrBlock - { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)); + { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) let m2 = rhs parseState 3 let m = (m2, $4) ||> unionRangeWithListBy (fun modu -> modu.Range) let isRec2,path2,xml,vis = $3 (fun (isRec, path, _) -> - if nonNil path then errorR(Error(FSComp.SR.parsNamespaceOrModuleNotBoth(),m2)); + if nonNil path then errorR(Error(FSComp.SR.parsNamespaceOrModuleNotBoth(),m2)) let lid = path@path2 ParsedImplFileFragment.NamedModule(SynModuleOrNamespace(lid, (isRec || isRec2), true, $4, xml,$1,vis,m))) } @@ -1109,7 +1109,7 @@ moduleDefnsOrExprPossiblyEmptyOrBlock: | OBLOCKBEGIN moduleDefnsOrExprPossiblyEmpty recover { // The lex filter ensures we can only get a mismatch in OBLOCKBEGIN/OBLOCKEND tokens if there was some other kind of error, hence we don't need to report this error - // reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnClosedBlockInHashLight()); + // reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnClosedBlockInHashLight()) $2 } | OBLOCKBEGIN error oblockend @@ -1132,17 +1132,17 @@ moduleDefnsOrExprPossiblyEmpty: /* A naked expression is only allowed at the start of a module/file, or straight after a topSeparators */ moduleDefnsOrExpr: | opt_attributes opt_declVisibility declExpr topSeparators moduleDefnsOrExpr - { if isSome $2 then errorR(Error(FSComp.SR.parsUnexpectedVisibilityDeclaration(),rhs parseState 3)); + { if isSome $2 then errorR(Error(FSComp.SR.parsUnexpectedVisibilityDeclaration(),rhs parseState 3)) let attrDecls = if nonNil $1 then [ SynModuleDecl.Attributes ($1, rangeOfNonNilAttrs $1) ] else [] attrDecls @ mkSynDoDecl ($3) :: $5 } | opt_attributes opt_declVisibility declExpr topSeparators - { if isSome $2 then errorR(Error(FSComp.SR.parsUnexpectedVisibilityDeclaration(),rhs parseState 3)); + { if isSome $2 then errorR(Error(FSComp.SR.parsUnexpectedVisibilityDeclaration(),rhs parseState 3)) let attrDecls = if nonNil $1 then [ SynModuleDecl.Attributes ($1, rangeOfNonNilAttrs $1) ] else [] attrDecls @ [ mkSynDoDecl($3) ] } | opt_attributes opt_declVisibility declExpr - { if isSome $2 then errorR(Error(FSComp.SR.parsUnexpectedVisibilityDeclaration(),rhs parseState 3)); + { if isSome $2 then errorR(Error(FSComp.SR.parsUnexpectedVisibilityDeclaration(),rhs parseState 3)) let attrDecls = if nonNil $1 then [ SynModuleDecl.Attributes ($1, rangeOfNonNilAttrs $1) ] else [] attrDecls @ [ mkSynDoDecl($3) ] } @@ -1186,27 +1186,27 @@ moduleDefn: /* 'let' definitions in non-#light*/ | opt_attributes opt_declVisibility defnBindings %prec decl_let - { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)); - parseState.ResetSynArgNameGenerator(); + { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) + parseState.ResetSynArgNameGenerator() let (BindingSetPreAttrs(_,_,_,_,mWhole)) = $3 mkDefnBindings (mWhole,$3,$1,$2,mWhole) } /* 'let' or 'do' definitions in #light */ | opt_attributes opt_declVisibility hardwhiteLetBindings %prec decl_let { let hwlb,m = $3 - if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)); - parseState.ResetSynArgNameGenerator(); + if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) + parseState.ResetSynArgNameGenerator() mkDefnBindings (m,hwlb,$1,$2,m) } /* 'do' definitions in non-#light*/ | opt_attributes opt_declVisibility doBinding %prec decl_let - { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)); + { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) let mWhole = rhs parseState 3 mkDefnBindings (mWhole,$3,$1,$2,mWhole) } /* 'type' definitions */ | opt_attributes opt_declVisibility typeKeyword tyconDefn tyconDefnList - { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)); + { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) let (TypeDefn(ComponentInfo(cas ,a,cs,b,c,d,d2,d3),e,f,g)) = $4 let tc = (TypeDefn(ComponentInfo($1@cas,a,cs,b,c,d,d2,d3),e,f,g)) let types = tc :: $5 @@ -1214,7 +1214,7 @@ moduleDefn: /* 'exception' definitions */ | opt_attributes opt_declVisibility exconDefn - { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)); + { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) let (SynExceptionDefn(SynExceptionDefnRepr(cas,a,b,c,d,d2),e,f)) = $3 let f = (f, $1) ||> unionRangeWithListBy (fun a -> a.Range) let ec = (SynExceptionDefn(SynExceptionDefnRepr($1@cas,a,b,c,d,d2),e,f)) @@ -1222,18 +1222,18 @@ moduleDefn: /* 'module' definitions */ | opt_attributes opt_declVisibility moduleIntro EQUALS namedModuleDefnBlock - { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)); + { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) let attribs, (isRec, path, xml, vis) = $1,$3 match $5 with | Choice1Of2 eqn -> - if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)); - if isRec then raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsInvalidUseOfRec()); - if List.length path <> 1 then raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsModuleAbbreviationMustBeSimpleName()); - if List.length $1 <> 0 then raiseParseErrorAt (rhs parseState 1) (FSComp.SR.parsIgnoreAttributesOnModuleAbbreviation()); - if isSome vis then raiseParseErrorAt (rhs parseState 1) (FSComp.SR.parsIgnoreAttributesOnModuleAbbreviationAlwaysPrivate()); + if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) + if isRec then raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsInvalidUseOfRec()) + if List.length path <> 1 then raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsModuleAbbreviationMustBeSimpleName()) + if List.length $1 <> 0 then raiseParseErrorAt (rhs parseState 1) (FSComp.SR.parsIgnoreAttributesOnModuleAbbreviation()) + if isSome vis then raiseParseErrorAt (rhs parseState 1) (FSComp.SR.parsIgnoreAttributesOnModuleAbbreviationAlwaysPrivate()) [ SynModuleDecl.ModuleAbbrev(List.head path,eqn,(rhs parseState 3, eqn) ||> unionRangeWithListBy (fun id -> id.idRange) ) ] | Choice2Of2 def -> - if List.length path <> 1 then raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsModuleAbbreviationMustBeSimpleName()); + if List.length path <> 1 then raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsModuleAbbreviationMustBeSimpleName()) let info = ComponentInfo(attribs,[],[],path,xml,false,vis,rhs parseState 3) [ SynModuleDecl.NestedModule(info, isRec, def, false,(rhs2 parseState 3 4, def) ||> unionRangeWithListBy (fun d -> d.Range) ) ] } @@ -1295,7 +1295,7 @@ namedModuleDefnBlock: | OBLOCKBEGIN moduleDefnsOrExpr recover { // The lex filter ensures we can only get a mismatch in OBLOCKBEGIN/OBLOCKEND tokens if there was some other kind of error, hence we don't need to report this error - // reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnClosedBlockInHashLight()); + // reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnClosedBlockInHashLight()) Choice2Of2 $2 } | OBLOCKBEGIN error oblockend @@ -1314,7 +1314,7 @@ wrappedNamedModuleDefn: { $2 } | structOrBegin moduleDefnsOrExprPossiblyEmpty recover - { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedBeginOrStruct()); + { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedBeginOrStruct()) $2 } | structOrBegin error END @@ -1352,11 +1352,11 @@ attributeList: { [] } | LBRACK_LESS attributeListElements opt_seps ends_coming_soon_or_recover - { if not $4 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedLBrackLess()); + { if not $4 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedLBrackLess()) $2 } | LBRACK_LESS ends_coming_soon_or_recover - { if not $2 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedLBrackLess()); + { if not $2 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedLBrackLess()) [] } @@ -1399,7 +1399,7 @@ attributeTarget: /* return */ | YIELD COLON - { if $1 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsSyntaxError()); + { if $1 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsSyntaxError()) Some(ident("return",(rhs parseState 1))) } /* Flags on a member */ @@ -1495,7 +1495,7 @@ tyconDefnRhs: | Some m -> m (fun nameRange augmentation -> if needsCheck && isNil decls then - reportParseErrorAt nameRange (FSComp.SR.parsEmptyTypeDefinition()); + reportParseErrorAt nameRange (FSComp.SR.parsEmptyTypeDefinition()) SynTypeDefnRepr.ObjectModel (kind,decls,m),augmentation) } /* A delegate type definition */ @@ -1505,7 +1505,7 @@ tyconDefnRhs: (fun nameRange augmentation -> let valSpfn = ValSpfn([],mkSynId m "Invoke",inferredTyparDecls,ty,arity,false,false,PreXmlDoc.Empty,None,None,m) let invoke = SynMemberDefn.AbstractSlot(valSpfn,AbstractMemberFlags MemberKind.Member,m) - if nonNil augmentation then raiseParseErrorAt m (FSComp.SR.parsAugmentationsIllegalOnDelegateType()); + if nonNil augmentation then raiseParseErrorAt m (FSComp.SR.parsAugmentationsIllegalOnDelegateType()) SynTypeDefnRepr.ObjectModel (TyconDelegate (ty,arity),[invoke],m),[]) } @@ -1532,7 +1532,7 @@ tyconClassDefn: /* The right-hand-side of a object type definition where the class/interface/struct kind has not been specified */ classDefnBlockKindUnspecified: | OBLOCKBEGIN classDefnMembers recover - { if not $3 then reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedEndOfFileTypeDefinition()); + { if not $3 then reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedEndOfFileTypeDefinition()) let mopt = match $2 with | _::_ -> Some( (rhs parseState 1, $2) ||> unionRangeWithListBy (fun (d:SynMemberDefn) -> d.Range) ) @@ -1550,7 +1550,7 @@ classDefnBlockKindUnspecified: /* The contents of an object type definition or type augmentation */ classDefnBlock: | OBLOCKBEGIN classDefnMembers recover - { if not $3 then reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedEndOfFileTypeDefinition()); + { if not $3 then reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedEndOfFileTypeDefinition()) $2 } | OBLOCKBEGIN classDefnMembers oblockend @@ -1588,7 +1588,7 @@ classDefnMemberGetSet: { $2 } | OWITH classDefnMemberGetSetElements error - { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedWith()); + { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedWith()) $2 } /* The "get,set" part of a member definition */ @@ -1674,7 +1674,7 @@ memberCore: begin match optPropertyType with | Some _ -> errorR(Error(FSComp.SR.parsTypeAnnotationsOnGetSet(),mBindLhs)) | None -> () - end; + end let optReturnType = match (memberKind, optReturnType) with @@ -1754,7 +1754,7 @@ memberCore: | None,None -> None | Some lidVisInner,None | None,Some lidVisInner -> Some lidVisInner | Some _, Some _ -> - errorR(Error(FSComp.SR.parsMultipleAccessibilitiesForGetSet(),mBindLhs)); + errorR(Error(FSComp.SR.parsMultipleAccessibilitiesForGetSet(),mBindLhs)) lidVisInner // Replace the "get" or the "set" with the right name @@ -1798,21 +1798,21 @@ abstractMemberFlags: /* A member definition */ classDefnMember: | opt_attributes opt_declVisibility classDefnBindings - { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)); + { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) [mkClassMemberLocalBindings(false,None,$1,$2,$3)] } | opt_attributes opt_declVisibility STATIC classDefnBindings - { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)); + { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) [mkClassMemberLocalBindings(true,Some (rhs parseState 3),$1,$2,$4)] } | opt_attributes opt_declVisibility memberFlags memberCore opt_ODECLEND - { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)); + { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) let _,flags = $3 $4 $2 flags $1 } | opt_attributes opt_declVisibility interfaceMember appType opt_interfaceImplDefn - { if nonNil $1 then errorR(Error(FSComp.SR.parsAttributesAreNotPermittedOnInterfaceImplementations(),rhs parseState 1)); - if isSome $2 then errorR(Error(FSComp.SR.parsInterfacesHaveSameVisibilityAsEnclosingType(),rhs parseState 3)); + { if nonNil $1 then errorR(Error(FSComp.SR.parsAttributesAreNotPermittedOnInterfaceImplementations(),rhs parseState 1)) + if isSome $2 then errorR(Error(FSComp.SR.parsInterfacesHaveSameVisibilityAsEnclosingType(),rhs parseState 3)) let mWhole = match $5 with | None -> rhs2 parseState 3 4 @@ -1829,21 +1829,21 @@ classDefnMember: match getSetRangeOpt with | None -> unionRanges m ty.Range | Some m2 -> unionRanges m m2 - if isSome $2 then errorR(Error(FSComp.SR.parsAccessibilityModsIllegalForAbstract(),wholeRange)); + if isSome $2 then errorR(Error(FSComp.SR.parsAccessibilityModsIllegalForAbstract(),wholeRange)) let valSpfn = ValSpfn($1,id,explicitValTyparDecls,ty,arity, isInline,false,doc, None,None,wholeRange) [ SynMemberDefn.AbstractSlot(valSpfn,AbstractMemberFlags (getSetAdjuster arity), wholeRange) ] } | opt_attributes opt_declVisibility inheritsDefn - { if nonNil $1 then errorR(Error(FSComp.SR.parsAttributesIllegalOnInherit(),rhs parseState 1)); - if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityIllegalOnInherit(),rhs parseState 1)); + { if nonNil $1 then errorR(Error(FSComp.SR.parsAttributesIllegalOnInherit(),rhs parseState 1)) + if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityIllegalOnInherit(),rhs parseState 1)) [ $3 ] } | opt_attributes opt_declVisibility valDefnDecl opt_ODECLEND - { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)); + { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) $3 None $1 false } | opt_attributes opt_declVisibility STATIC valDefnDecl opt_ODECLEND - { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)); + { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) $4 (Some (rhs parseState 3)) $1 true } | opt_attributes opt_declVisibility memberFlags autoPropsDefnDecl opt_ODECLEND @@ -1858,11 +1858,11 @@ classDefnMember: let vis = $2 let declPat = SynPat.LongIdent (LongIdentWithDots([mkSynId (rhs parseState 3) "new"],[]),None,Some noInferredTypars, SynConstructorArgs.Pats [$4],vis,rhs parseState 3) // Check that 'SynPatForConstructorDecl' matches this correctly - assert (match declPat with SynPatForConstructorDecl _ -> true | _ -> false); + assert (match declPat with SynPatForConstructorDecl _ -> true | _ -> false) [ SynMemberDefn.Member(Binding (None,NormalBinding,false,false,$1,grabXmlDoc(parseState,3),valSynData, declPat,None,expr,m,NoSequencePointAtInvisibleBinding),m) ] } | opt_attributes opt_declVisibility STATIC typeKeyword tyconDefn - { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)); + { if isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) [ SynMemberDefn.NestedType($5,None,rhs2 parseState 3 5) ] } @@ -1958,11 +1958,11 @@ optBaseSpec: baseSpec: | AS ident { if ($2).idText <> "base" then - errorR(Error(FSComp.SR.parsInheritDeclarationsCannotHaveAsBindings(),rhs2 parseState 1 2)); + errorR(Error(FSComp.SR.parsInheritDeclarationsCannotHaveAsBindings(),rhs2 parseState 1 2)) ident("base",rhs parseState 2) } | AS BASE - { errorR(Error(FSComp.SR.parsInheritDeclarationsCannotHaveAsBindings(),rhs2 parseState 1 2)); + { errorR(Error(FSComp.SR.parsInheritDeclarationsCannotHaveAsBindings(),rhs2 parseState 1 2)) ident("base",rhs parseState 2) } @@ -1972,7 +1972,7 @@ objectImplementationBlock: { $2 } | OBLOCKBEGIN objectImplementationMembers recover - { if not $3 then reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedEndOfFileObjectMembers()); + { if not $3 then reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedEndOfFileObjectMembers()) $2 } | objectImplementationMembers @@ -2018,13 +2018,13 @@ tyconDefnOrSpfnSimpleRepr: /* A type abbreviation */ | opt_attributes opt_declVisibility typ - { if nonNil $1 then errorR(Error(FSComp.SR.parsAttributesIllegalHere(),rhs parseState 1)); - if isSome $2 then errorR(Error(FSComp.SR.parsTypeAbbreviationsCannotHaveVisibilityDeclarations(),rhs parseState 2)); + { if nonNil $1 then errorR(Error(FSComp.SR.parsAttributesIllegalHere(),rhs parseState 1)) + if isSome $2 then errorR(Error(FSComp.SR.parsTypeAbbreviationsCannotHaveVisibilityDeclarations(),rhs parseState 2)) SynTypeDefnSimpleRepr.TypeAbbrev (ParserDetail.Ok, $3, unionRanges (rhs parseState 1) $3.Range) } /* A union type definition */ | opt_attributes opt_declVisibility unionTypeRepr - { if nonNil $1 then errorR(Error(FSComp.SR.parsAttributesIllegalHere(),rhs parseState 1)); + { if nonNil $1 then errorR(Error(FSComp.SR.parsAttributesIllegalHere(),rhs parseState 1)) let rangesOf3 = $3 |> List.map (function |Choice1Of2(ec)->ec.Range | Choice2Of2(uc)->uc.Range) let mWhole = (rhs2 parseState 1 2, rangesOf3) ||> List.fold unionRanges if $3 |> List.exists (function Choice1Of2 _ -> true | _ -> false) then ( @@ -2042,14 +2042,14 @@ tyconDefnOrSpfnSimpleRepr: /* A record type definition */ | opt_attributes opt_declVisibility braceFieldDeclList - { if nonNil $1 then errorR(Error(FSComp.SR.parsAttributesIllegalHere(),rhs parseState 1)); + { if nonNil $1 then errorR(Error(FSComp.SR.parsAttributesIllegalHere(),rhs parseState 1)) SynTypeDefnSimpleRepr.Record ($2,$3,lhs parseState) } /* An inline-assembly type definition, for FSharp.Core library only */ | opt_attributes opt_declVisibility LPAREN inlineAssemblyTyconRepr rparen - { if nonNil $1 then errorR(Error(FSComp.SR.parsAttributesIllegalHere(),rhs parseState 1)); - libraryOnlyError (lhs parseState); - if isSome $2 then errorR(Error(FSComp.SR.parsInlineAssemblyCannotHaveVisibilityDeclarations(),rhs parseState 2)); + { if nonNil $1 then errorR(Error(FSComp.SR.parsAttributesIllegalHere(),rhs parseState 1)) + libraryOnlyError (lhs parseState) + if isSome $2 then errorR(Error(FSComp.SR.parsInlineAssemblyCannotHaveVisibilityDeclarations(),rhs parseState 2)) $4 } @@ -2059,7 +2059,7 @@ braceFieldDeclList: { $2 } | LBRACE recdFieldDeclList recover - { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedBrace()); + { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedBrace()) $2 } | LBRACE error rbrace @@ -2067,7 +2067,7 @@ braceFieldDeclList: inlineAssemblyTyconRepr: | HASH stringOrKeywordString HASH - { libraryOnlyError (lhs parseState); + { libraryOnlyError (lhs parseState) let lhsm = lhs parseState SynTypeDefnSimpleRepr.LibraryOnlyILAssembly (ParseAssemblyCodeType $2 (rhs parseState 2),lhsm) } @@ -2107,7 +2107,7 @@ typarDecl : /* See the F# specification "Lexical analysis of type applications and type parameter definitions" */ postfixTyparDecls: | opt_HIGH_PRECEDENCE_TYAPP LESS typarDeclList opt_typeConstraints GREATER - { if not $2 then warning(Error(FSComp.SR.parsNonAdjacentTypars(),rhs2 parseState 2 5)); + { if not $2 then warning(Error(FSComp.SR.parsNonAdjacentTypars(),rhs2 parseState 2 5)) List.rev $3, $4 } /* Any tokens in this grammar must be added to the lex filter rule 'peekAdjacentTypars' */ @@ -2122,7 +2122,7 @@ explicitValTyparDeclsCore: explicitValTyparDecls: | opt_HIGH_PRECEDENCE_TYAPP LESS explicitValTyparDeclsCore opt_typeConstraints GREATER - { if not $2 then warning(Error(FSComp.SR.parsNonAdjacentTypars(),rhs2 parseState 2 5)); + { if not $2 then warning(Error(FSComp.SR.parsNonAdjacentTypars(),rhs2 parseState 2 5)) let tps,flex = $3 SynValTyparDecls(tps,flex,$4) } @@ -2165,14 +2165,15 @@ typeConstraint: { WhereTyparIsValueType($1,lhs parseState) } | typar COLON IDENT STRUCT - { if $3 <> "not" then reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedIdentifier($3)); + { if $3 <> "not" then reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedIdentifier($3)) WhereTyparIsReferenceType($1,lhs parseState) } | typar COLON NULL { WhereTyparSupportsNull($1,lhs parseState) } | typar COLON LPAREN classMemberSpfn rparen - { WhereTyparSupportsMember([ $1 ],$4,lhs parseState) } + { let tp = $1 + WhereTyparSupportsMember([ SynType.Var(tp, tp.Range) ],$4,lhs parseState) } | LPAREN typarAlts rparen COLON LPAREN classMemberSpfn rparen { WhereTyparSupportsMember(List.rev($2),$6,lhs parseState) } @@ -2193,8 +2194,8 @@ typeConstraint: | nm -> raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedIdentifier(nm)) } typarAlts: - | typarAlts OR typar { $3::$1 } - | typar { [$1] } + | typarAlts OR appType { $3::$1 } + | appType { [$1] } /* The core of a union type definition */ unionTypeRepr: @@ -2219,26 +2220,26 @@ attrUnionCaseDecls: /* The core of a union case definition */ attrUnionCaseDecl: | opt_attributes opt_access unionCaseName opt_OBLOCKSEP - { if isSome $2 then errorR(Error(FSComp.SR.parsUnionCasesCannotHaveVisibilityDeclarations(),rhs parseState 2)); + { if isSome $2 then errorR(Error(FSComp.SR.parsUnionCasesCannotHaveVisibilityDeclarations(),rhs parseState 2)) let mDecl = rhs parseState 3 (fun xmlDoc -> Choice2Of2 (UnionCase ( $1, $3,UnionCaseFields [],xmlDoc,None,mDecl))) } | opt_attributes opt_access unionCaseName OF unionCaseRepr opt_OBLOCKSEP - { if isSome $2 then errorR(Error(FSComp.SR.parsUnionCasesCannotHaveVisibilityDeclarations(),rhs parseState 2)); + { if isSome $2 then errorR(Error(FSComp.SR.parsUnionCasesCannotHaveVisibilityDeclarations(),rhs parseState 2)) let mDecl = rhs2 parseState 3 5 (fun xmlDoc -> Choice2Of2 (UnionCase ( $1, $3,UnionCaseFields $5,xmlDoc,None,mDecl))) } | opt_attributes opt_access unionCaseName COLON topType opt_OBLOCKSEP - { if isSome $2 then errorR(Error(FSComp.SR.parsUnionCasesCannotHaveVisibilityDeclarations(),rhs parseState 2)); - libraryOnlyWarning(lhs parseState); + { if isSome $2 then errorR(Error(FSComp.SR.parsUnionCasesCannotHaveVisibilityDeclarations(),rhs parseState 2)) + libraryOnlyWarning(lhs parseState) let mDecl = rhs2 parseState 3 5 (fun xmlDoc -> Choice2Of2 (UnionCase ( $1, $3,UnionCaseFullType $5,xmlDoc,None,mDecl))) } | opt_attributes opt_access unionCaseName EQUALS constant opt_OBLOCKSEP - { if isSome $2 then errorR(Error(FSComp.SR.parsEnumFieldsCannotHaveVisibilityDeclarations(),rhs parseState 2)); + { if isSome $2 then errorR(Error(FSComp.SR.parsEnumFieldsCannotHaveVisibilityDeclarations(),rhs parseState 2)) let mDecl = rhs2 parseState 3 5 (fun xmlDoc -> Choice1Of2 (EnumCase ( $1, $3,$5,xmlDoc,mDecl))) } @@ -2281,7 +2282,7 @@ unionCaseReprElement: unionCaseRepr: | braceFieldDeclList - { errorR(Deprecated(FSComp.SR.parsConsiderUsingSeparateRecordType(),lhs parseState)); + { errorR(Deprecated(FSComp.SR.parsConsiderUsingSeparateRecordType(),lhs parseState)) $1 } | unionCaseReprElements @@ -2300,7 +2301,7 @@ recdFieldDecl: | opt_attributes fieldDecl { let fld = $2 $1 false let (Field(a,b,c,d,e,f,vis,g)) = fld - if isSome vis then errorR(Error(FSComp.SR.parsRecordFieldsCannotHaveVisibilityDeclarations(),rhs parseState 2)); + if isSome vis then errorR(Error(FSComp.SR.parsRecordFieldsCannotHaveVisibilityDeclarations(),rhs parseState 2)) Field(a,b,c,d,e,f,None,g) } /* Part of a field or val declaration in a record type or object type */ @@ -2364,7 +2365,7 @@ defnBindings: // apply the builder let binds = localBindingsBuilder attrs vis mLetKwd if not isRec && List.length binds > 1 then - reportParseErrorAt mLetKwd (FSComp.SR.parsLetAndForNonRecBindings()); + reportParseErrorAt mLetKwd (FSComp.SR.parsLetAndForNonRecBindings()) [],binds), bindingSetRange) } @@ -2389,7 +2390,7 @@ hardwhiteLetBindings: { let mLetKwd = rhs parseState 1 let isUse = $1 let isRec = $2 - $4 (if isUse then "use" else "let") mLetKwd; // report unterminated error + $4 (if isUse then "use" else "let") mLetKwd // report unterminated error let localBindingsLastRangeOpt, localBindingsBuilder = $3 @@ -2404,7 +2405,7 @@ hardwhiteLetBindings: (fun attrs vis -> let binds = localBindingsBuilder attrs vis mLetKwd if not isRec && List.length binds > 1 then - reportParseErrorAt mLetKwd (FSComp.SR.parsLetAndForNonRecBindings()); + reportParseErrorAt mLetKwd (FSComp.SR.parsLetAndForNonRecBindings()) [],binds), bindingSetRange), (unionRanges mLetKwd bindingSetRange) } @@ -2608,7 +2609,7 @@ typedExprWithStaticOptimizationsBlock: { $2 } | OBLOCKBEGIN typedExprWithStaticOptimizations recover - { if not $3 then reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedEndOfFile()); + { if not $3 then reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedEndOfFile()) let a,b = $2 (exprFromParseError a, b) } @@ -2634,16 +2635,16 @@ staticOptimizationCondition: | typar STRUCT { WhenTyparIsStruct($1,lhs parseState) } rawConstant: - | INT8 { if snd $1 then errorR(Error(FSComp.SR.lexOutsideEightBitSigned(), lhs parseState)); + | INT8 { if snd $1 then errorR(Error(FSComp.SR.lexOutsideEightBitSigned(), lhs parseState)) SynConst.SByte (fst $1) } | UINT8 { SynConst.Byte $1 } - | INT16 { if snd $1 then errorR(Error(FSComp.SR.lexOutsideSixteenBitSigned(), lhs parseState)); + | INT16 { if snd $1 then errorR(Error(FSComp.SR.lexOutsideSixteenBitSigned(), lhs parseState)) SynConst.Int16 (fst $1) } | UINT16 { SynConst.UInt16 $1 } - | INT32 { if snd $1 then errorR(Error(FSComp.SR.lexOutsideThirtyTwoBitSigned(), lhs parseState)); + | INT32 { if snd $1 then errorR(Error(FSComp.SR.lexOutsideThirtyTwoBitSigned(), lhs parseState)) SynConst.Int32 (fst $1) } | UINT32 { SynConst.UInt32 $1 } - | INT64 { if snd $1 then errorR(Error(FSComp.SR.lexOutsideSixtyFourBitSigned(), lhs parseState)); + | INT64 { if snd $1 then errorR(Error(FSComp.SR.lexOutsideSixtyFourBitSigned(), lhs parseState)) SynConst.Int64 (fst $1) } | UINT64 { SynConst.UInt64 $1 } | NATIVEINT { SynConst.IntPtr $1 } @@ -2658,25 +2659,25 @@ rawConstant: rationalConstant: | INT32 INFIX_STAR_DIV_MOD_OP INT32 - { if $2 <> "/" then reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnexpectedOperatorForUnitOfMeasure()); - if fst $3 = 0 then reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsIllegalDenominatorForMeasureExponent()); - if (snd $1) || (snd $3) then errorR(Error(FSComp.SR.lexOutsideThirtyTwoBitSigned(), lhs parseState)); + { if $2 <> "/" then reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnexpectedOperatorForUnitOfMeasure()) + if fst $3 = 0 then reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsIllegalDenominatorForMeasureExponent()) + if (snd $1) || (snd $3) then errorR(Error(FSComp.SR.lexOutsideThirtyTwoBitSigned(), lhs parseState)) SynRationalConst.Rational(fst $1, fst $3, lhs parseState) } | MINUS INT32 INFIX_STAR_DIV_MOD_OP INT32 - { if $3 <> "/" then reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedOperatorForUnitOfMeasure()); - if fst $4 = 0 then reportParseErrorAt (rhs parseState 4) (FSComp.SR.parsIllegalDenominatorForMeasureExponent()); - if (snd $2) || (snd $4) then errorR(Error(FSComp.SR.lexOutsideThirtyTwoBitSigned(), lhs parseState)); + { if $3 <> "/" then reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedOperatorForUnitOfMeasure()) + if fst $4 = 0 then reportParseErrorAt (rhs parseState 4) (FSComp.SR.parsIllegalDenominatorForMeasureExponent()) + if (snd $2) || (snd $4) then errorR(Error(FSComp.SR.lexOutsideThirtyTwoBitSigned(), lhs parseState)) SynRationalConst.Negate(SynRationalConst.Rational(fst $2, fst $4, lhs parseState)) } - | INT32 { if snd $1 then errorR(Error(FSComp.SR.lexOutsideThirtyTwoBitSigned(), lhs parseState)); + | INT32 { if snd $1 then errorR(Error(FSComp.SR.lexOutsideThirtyTwoBitSigned(), lhs parseState)) SynRationalConst.Integer(fst $1) } - | MINUS INT32 { if snd $2 then errorR(Error(FSComp.SR.lexOutsideThirtyTwoBitSigned(), lhs parseState)); + | MINUS INT32 { if snd $2 then errorR(Error(FSComp.SR.lexOutsideThirtyTwoBitSigned(), lhs parseState)) SynRationalConst.Negate(SynRationalConst.Integer(fst $2)) } atomicUnsignedRationalConstant: - | INT32 { if snd $1 then errorR(Error(FSComp.SR.lexOutsideThirtyTwoBitSigned(), lhs parseState)); + | INT32 { if snd $1 then errorR(Error(FSComp.SR.lexOutsideThirtyTwoBitSigned(), lhs parseState)) SynRationalConst.Integer(fst $1) } | LPAREN rationalConstant rparen @@ -2722,12 +2723,12 @@ simplePatterns: | LPAREN rparen { [] } | LPAREN simplePatternCommaList recover - { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedParen()); + { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedParen()) [] } | LPAREN error rparen { (* silent recovery *) [] } | LPAREN recover - { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedParen()); + { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedParen()) [] } @@ -2786,10 +2787,10 @@ atomicPatterns: | atomicPattern atomicPatterns %prec pat_args { $1 :: $2 } | atomicPattern HIGH_PRECEDENCE_BRACK_APP atomicPatterns - { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsSuccessivePatternsShouldBeSpacedOrTupled()); + { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsSuccessivePatternsShouldBeSpacedOrTupled()) $1 :: $3 } | atomicPattern HIGH_PRECEDENCE_PAREN_APP atomicPatterns - { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsSuccessivePatternsShouldBeSpacedOrTupled()); + { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsSuccessivePatternsShouldBeSpacedOrTupled()) $1 :: $3 } | atomicPattern { [$1] } @@ -2825,12 +2826,22 @@ atomicPattern: { let m = (lhs parseState) SynPat.Paren($2 m,m) } | LPAREN parenPatternBody recover - { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedParen()); + { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedParen()) patFromParseError ($2 (rhs2 parseState 1 2)) } | LPAREN error rparen { (* silent recovery *) SynPat.Wild (lhs parseState) } | LPAREN recover - { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedParen()); + { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedParen()) + SynPat.Wild (lhs parseState)} + | STRUCT LPAREN tupleParenPatternElements rparen + { SynPat.StructTuple(List.rev $3,lhs parseState) } + | STRUCT LPAREN tupleParenPatternElements recover + { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnmatchedParen()); + SynPat.StructTuple(List.rev $3,lhs parseState) } + | STRUCT LPAREN error rparen + { (* silent recovery *) SynPat.Wild (lhs parseState) } + | STRUCT LPAREN recover + { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnmatchedParen()); SynPat.Wild (lhs parseState)} @@ -2922,7 +2933,7 @@ typedSeqExprBlock: | OBLOCKBEGIN typedSeqExpr oblockend { $2 } | OBLOCKBEGIN typedSeqExpr recover - { if not $3 then reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedEndOfFileExpression()); + { if not $3 then reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedEndOfFileExpression()) exprFromParseError $2 } | typedSeqExpr { $1 } @@ -3020,7 +3031,7 @@ declExpr: SynExpr.Match(spBind, $2,clauses,false,unionRanges mMatch mLast) } | MATCH typedSeqExpr recover %prec expr_match - { if not $3 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedEndOfFileMatch()); + { if not $3 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedEndOfFileMatch()) // Produce approximate expression during error recovery exprFromParseError $2 } @@ -3037,7 +3048,7 @@ declExpr: | TRY typedSeqExprBlockR recover %prec expr_try { // Produce approximate expression during error recovery // Include any expressions to make sure they gets type checked in case that generates useful results for intellisense - if not $3 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedEndOfFileTry()); + if not $3 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedEndOfFileTry()) exprFromParseError $2 } | TRY typedSeqExprBlockR FINALLY typedSeqExprBlock %prec expr_try @@ -3052,7 +3063,7 @@ declExpr: $3 $2 mIf } | IF declExpr recover %prec expr_if - { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsIncompleteIf()); + { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsIncompleteIf()) // Produce an approximate expression during error recovery. // Include expressions to make sure they get type checked in case that generates useful results for intellisense. // Generate a throwAway for the expression so it isn't forced to have a type 'bool' @@ -3093,7 +3104,7 @@ declExpr: SynExpr.While(spWhile,$2,$4,mWhileAll) } | WHILE declExpr doToken typedSeqExprBlock recover - { if not $5 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedEndOfFileWhile()); + { if not $5 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedEndOfFileWhile()) let mWhileHeader = unionRanges (rhs parseState 1) $2.Range let spWhile = SequencePointAtWhileLoop mWhileHeader let mWhileAll = unionRanges (rhs parseState 1) $4.Range @@ -3116,7 +3127,7 @@ declExpr: exprFromParseError (SynExpr.While(spWhile,$2,arbExpr("whileBody2",mWhileBodyArb),mWhileAll)) } | WHILE recover - { if not $2 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedEndOfFileWhile()); + { if not $2 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedEndOfFileWhile()) arbExpr("whileLoop1",rhs parseState 1) } | WHILE error doneDeclEnd @@ -3174,7 +3185,7 @@ declExpr: SynExpr.For(spBind,a,b,c,d,$4,mForLoopAll) } | FOR forLoopRange doToken typedSeqExprBlock recover - { if not $5 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedEndOfFileFor()); + { if not $5 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedEndOfFileFor()) // Still produce an expression let mForLoopHeader = rhs2 parseState 1 3 let spBind = SequencePointAtForLoop mForLoopHeader @@ -3201,7 +3212,7 @@ declExpr: exprFromParseError (SynExpr.For(spBind,a,b,c,d,arbExpr("declExpr11",mForLoopBodyArb),mForLoopAll)) } | FOR forLoopRange recover - { if not $3 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedEndOfFileFor()); + { if not $3 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedEndOfFileFor()) let mForLoopHeader = rhs2 parseState 1 2 let spBind = SequencePointAtForLoop mForLoopHeader let (a,b,c,d) = $2 @@ -3242,7 +3253,7 @@ declExpr: SynExpr.ForEach(spBind,SeqExprOnly false,true,$2,arbExpr("forLoopCollection",mForLoopHeader),arbExpr("forLoopBody3",mForLoopBodyArb),mForLoopAll) } | FOR parenPattern recover - { if not $3 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedEndOfFileFor()); + { if not $3 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedEndOfFileFor()) let mForLoopHeader = rhs2 parseState 1 2 let spBind = SequencePointAtForLoop mForLoopHeader let mForLoopBodyArb = (rhs parseState 2).EndRange @@ -3262,7 +3273,7 @@ declExpr: SynExpr.LetOrUseBang(spBind,($1 = "use"),true,$2,$4,$7,m) } | OBINDER headBindingPattern EQUALS typedSeqExprBlock hardwhiteDefnBindingsTerminator opt_OBLOCKSEP typedSeqExprBlock %prec expr_let - { $5 (if $1 = "use" then "use!" else "let!") (rhs parseState 1); // report unterminated error + { $5 (if $1 = "use" then "use!" else "let!") (rhs parseState 1) // report unterminated error let spBind = SequencePointAtBinding(unionRanges (rhs parseState 1) $4.Range) let m = unionRanges (rhs parseState 1) $7.Range SynExpr.LetOrUseBang(spBind,($1 = "use"),true,$2,$4,$7,m) } @@ -3289,7 +3300,7 @@ declExpr: { SynExpr.Fixed($2, (unionRanges (rhs parseState 1) $2.Range)) } | RARROW typedSeqExprBlockR - { errorR(Error(FSComp.SR.parsArrowUseIsLimited(),lhs parseState)); + { errorR(Error(FSComp.SR.parsArrowUseIsLimited(),lhs parseState)) SynExpr.YieldOrReturn((true,true),$2, (unionRanges (rhs parseState 1) $2.Range)) } /* END MONADIC SYNTAX ONLY */ @@ -3314,7 +3325,7 @@ declExpr: | declExpr INFIX_COMPARE_OP declExpr { mkSynInfix (rhs parseState 2) $1 $2 $3 } | declExpr DOLLAR declExpr { mkSynInfix (rhs parseState 2) $1 "$" $3 } | declExpr LESS declExpr { mkSynInfix (rhs parseState 2) $1 "<" $3 } - | declExpr LESS recover { if not $3 then reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("<")); + | declExpr LESS recover { if not $3 then reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("<")) exprFromParseError (mkSynInfix (rhs parseState 2) $1 "<" (arbExpr("declExprInfix",(rhs parseState 3).StartRange))) } | declExpr GREATER declExpr { mkSynInfix (rhs parseState 2) $1 ">" $3 } | declExpr INFIX_AT_HAT_OP declExpr { mkSynInfix (rhs parseState 2) $1 $2 $3 } @@ -3326,45 +3337,45 @@ declExpr: | declExpr INFIX_STAR_DIV_MOD_OP declExpr { mkSynInfix (rhs parseState 2) $1 $2 $3 } | declExpr INFIX_STAR_STAR_OP declExpr { mkSynInfix (rhs parseState 2) $1 $2 $3 } - | declExpr JOIN_IN OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("in")); + | declExpr JOIN_IN OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("in")) exprFromParseError(mkSynInfix (rhs parseState 2) $1 "@in" (arbExpr("declExprInfix",(rhs parseState 3).StartRange))) } - | declExpr BAR_BAR OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("||")); + | declExpr BAR_BAR OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("||")) exprFromParseError(mkSynInfix (rhs parseState 2) $1 "||" (arbExpr("declExprInfix",(rhs parseState 3).StartRange))) } - | declExpr INFIX_BAR_OP OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression($2)); + | declExpr INFIX_BAR_OP OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression($2)) exprFromParseError(mkSynInfix (rhs parseState 2) $1 $2 (arbExpr("declExprInfix",(rhs parseState 3).StartRange))) } - | declExpr OR OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("or")); + | declExpr OR OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("or")) exprFromParseError(mkSynInfix (rhs parseState 2) $1 "or" (arbExpr("declExprInfix",(rhs parseState 3).StartRange))) } - | declExpr AMP OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("&")); + | declExpr AMP OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("&")) exprFromParseError(mkSynInfix (rhs parseState 2) $1 "&" (arbExpr("declExprInfix",(rhs parseState 3).StartRange))) } - | declExpr AMP_AMP OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("&&")); + | declExpr AMP_AMP OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("&&")) exprFromParseError(mkSynInfix (rhs parseState 2) $1 "&&" (arbExpr("declExprInfix",(rhs parseState 3).StartRange))) } - | declExpr INFIX_AMP_OP OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression($2)); + | declExpr INFIX_AMP_OP OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression($2)) exprFromParseError(mkSynInfix (rhs parseState 2) $1 $2 (arbExpr("declExprInfix",(rhs parseState 3).StartRange))) } - | declExpr EQUALS OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("=")); + | declExpr EQUALS OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("=")) exprFromParseError(mkSynInfix (rhs parseState 2) $1 "=" (arbExpr("declExprInfix",(rhs parseState 3).StartRange))) } - | declExpr INFIX_COMPARE_OP OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression($2)); + | declExpr INFIX_COMPARE_OP OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression($2)) exprFromParseError(mkSynInfix (rhs parseState 2) $1 $2 (arbExpr("declExprInfix",(rhs parseState 3).StartRange))) } - | declExpr DOLLAR OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("$")); + | declExpr DOLLAR OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("$")) exprFromParseError(mkSynInfix (rhs parseState 2) $1 "$" (arbExpr("declExprInfix",(rhs parseState 3).StartRange))) } - | declExpr LESS OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("<")); + | declExpr LESS OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("<")) exprFromParseError(mkSynInfix (rhs parseState 2) $1 "<" (arbExpr("declExprInfix",(rhs parseState 3).StartRange))) } - | declExpr GREATER OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression(">")); + | declExpr GREATER OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression(">")) exprFromParseError(mkSynInfix (rhs parseState 2) $1 ">" (arbExpr("declExprInfix",(rhs parseState 3).StartRange))) } - | declExpr INFIX_AT_HAT_OP OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression($2)); + | declExpr INFIX_AT_HAT_OP OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression($2)) exprFromParseError(mkSynInfix (rhs parseState 2) $1 $2 (arbExpr("declExprInfix",(rhs parseState 3).StartRange))) } - | declExpr PERCENT_OP OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression($2)); + | declExpr PERCENT_OP OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression($2)) exprFromParseError(mkSynInfix (rhs parseState 2) $1 $2 (arbExpr("declExprInfix",(rhs parseState 3).StartRange))) } - | declExpr COLON_COLON OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("::")); + | declExpr COLON_COLON OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("::")) SynExpr.App (ExprAtomicFlag.NonAtomic, true, mkSynIdGet (rhs parseState 2) opNameCons,SynExpr.Tuple ([$1;(arbExpr("declExprInfix",(rhs parseState 3).StartRange))],[rhs parseState 2],unionRanges $1.Range (rhs parseState 3).StartRange),unionRanges $1.Range (rhs parseState 3).StartRange) } - | declExpr PLUS_MINUS_OP OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression($2)); + | declExpr PLUS_MINUS_OP OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression($2)) exprFromParseError(mkSynInfix (rhs parseState 2) $1 $2 (arbExpr("declExprInfix",(rhs parseState 3).StartRange))) } - | declExpr MINUS OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("-")); + | declExpr MINUS OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("-")) exprFromParseError(mkSynInfix (rhs parseState 2) $1 "-" (arbExpr("declExprInfix",(rhs parseState 3).StartRange))) } - | declExpr STAR OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("*")); + | declExpr STAR OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("*")) exprFromParseError(mkSynInfix (rhs parseState 2) $1 "*" (arbExpr("declExprInfix",(rhs parseState 3).StartRange))) } - | declExpr INFIX_STAR_DIV_MOD_OP OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression($2)); + | declExpr INFIX_STAR_DIV_MOD_OP OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression($2)) exprFromParseError(mkSynInfix (rhs parseState 2) $1 $2 (arbExpr("declExprInfix",(rhs parseState 3).StartRange))) } - | declExpr INFIX_STAR_STAR_OP OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression($2)); + | declExpr INFIX_STAR_STAR_OP OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression($2)) exprFromParseError(mkSynInfix (rhs parseState 2) $1 $2 (arbExpr("declExprInfix",(rhs parseState 3).StartRange))) } | minusExpr %prec expr_prefix_plus_minus { $1 } @@ -3383,7 +3394,7 @@ withClauses: | OWITH withPatternClauses OEND { rhs parseState 1, $2 } | OWITH withPatternClauses recover - { if not $3 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedEndOfFileWith()); + { if not $3 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedEndOfFileWith()) rhs parseState 1, $2 } withPatternClauses: @@ -3456,7 +3467,7 @@ ifExprThen: | OTHEN OBLOCKBEGIN typedSeqExpr oblockend %prec prec_then_if { $3,rhs parseState 1 } | OTHEN OBLOCKBEGIN typedSeqExpr recover %prec prec_then_if - { if not $4 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedEndOfFileThen()); + { if not $4 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedEndOfFileThen()) exprFromParseError $3,rhs parseState 1 } ifExprElifs: @@ -3467,7 +3478,7 @@ ifExprElifs: | OELSE OBLOCKBEGIN typedSeqExpr oblockend { Some $3 } | OELSE OBLOCKBEGIN typedSeqExpr recover - { if not $4 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedEndOfFileElse()); + { if not $4 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedEndOfFileElse()) Some (exprFromParseError $3) } | ELIF declExpr ifExprCases { let mElif = rhs parseState 1 @@ -3494,10 +3505,10 @@ minusExpr: | MINUS minusExpr %prec expr_prefix_plus_minus { mkSynPrefix (rhs parseState 1) (unionRanges (rhs parseState 1) $2.Range) "~-" $2 } | PLUS_MINUS_OP minusExpr - { if not (IsValidPrefixOperatorUse $1) then reportParseErrorAt $2.Range (FSComp.SR.parsInvalidPrefixOperator()); + { if not (IsValidPrefixOperatorUse $1) then reportParseErrorAt $2.Range (FSComp.SR.parsInvalidPrefixOperator()) mkSynPrefix (rhs parseState 1) (unionRanges (rhs parseState 1) $2.Range) ("~"^($1)) $2 } | ADJACENT_PREFIX_OP minusExpr - { if not (IsValidPrefixOperatorUse $1) then reportParseErrorAt $2.Range (FSComp.SR.parsInvalidPrefixOperator()); + { if not (IsValidPrefixOperatorUse $1) then reportParseErrorAt $2.Range (FSComp.SR.parsInvalidPrefixOperator()) if $1 = "&" then SynExpr.AddressOf(true,$2,rhs parseState 1,unionRanges (rhs parseState 1) $2.Range) elif $1 = "&&" then @@ -3505,7 +3516,7 @@ minusExpr: else mkSynPrefix (rhs parseState 1) (unionRanges (rhs parseState 1) $2.Range) ("~"^($1)) $2 } | PERCENT_OP minusExpr - { if not (IsValidPrefixOperatorUse $1) then reportParseErrorAt $2.Range (FSComp.SR.parsInvalidPrefixOperator()); + { if not (IsValidPrefixOperatorUse $1) then reportParseErrorAt $2.Range (FSComp.SR.parsInvalidPrefixOperator()) mkSynPrefix (rhs parseState 1) (unionRanges (rhs parseState 1) $2.Range) ("~"^($1)) $2 } | AMP minusExpr { SynExpr.AddressOf(true,$2,rhs parseState 1,unionRanges (rhs parseState 1) $2.Range) } @@ -3534,12 +3545,12 @@ appExpr: argExpr: | ADJACENT_PREFIX_OP atomicExpr { let arg2,hpa2 = $2 - if not (IsValidPrefixOperatorUse $1) then reportParseErrorAt arg2.Range (FSComp.SR.parsInvalidPrefixOperator()); - if hpa2 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsSuccessiveArgsShouldBeSpacedOrTupled()); + if not (IsValidPrefixOperatorUse $1) then reportParseErrorAt arg2.Range (FSComp.SR.parsInvalidPrefixOperator()) + if hpa2 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsSuccessiveArgsShouldBeSpacedOrTupled()) mkSynPrefix (rhs parseState 1) (unionRanges (rhs parseState 1) arg2.Range) ("~"^($1)) arg2 } | atomicExpr { let arg,hpa = $1 - if hpa then reportParseErrorAt arg.Range (FSComp.SR.parsSuccessiveArgsShouldBeSpacedOrTupled()); + if hpa then reportParseErrorAt arg.Range (FSComp.SR.parsSuccessiveArgsShouldBeSpacedOrTupled()) arg } @@ -3562,7 +3573,7 @@ atomicExpr: | PREFIX_OP atomicExpr { let arg2,hpa2 = $2 - if not (IsValidPrefixOperatorUse $1) then reportParseErrorAt arg2.Range (FSComp.SR.parsInvalidPrefixOperator()); + if not (IsValidPrefixOperatorUse $1) then reportParseErrorAt arg2.Range (FSComp.SR.parsInvalidPrefixOperator()) mkSynPrefix (rhs parseState 1) (unionRanges (rhs parseState 1) arg2.Range) $1 arg2,hpa2 } | atomicExpr DOT atomicExprQualification @@ -3583,15 +3594,20 @@ atomicExpr: | LBRACK listExprElements RBRACK { $2 (lhs parseState) false,false } | LBRACK listExprElements recover - { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedBracket()); + { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedBracket()) exprFromParseError ($2 (rhs2 parseState 1 2) false), false } | LBRACK error RBRACK { // silent recovery SynExpr.ArrayOrList(false,[ ], lhs parseState),false } | LBRACK recover - { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedBracket()); + { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedBracket()) // silent recovery exprFromParseError (SynExpr.ArrayOrList(false,[ ], rhs parseState 1)),false } + | STRUCT LPAREN tupleExpr rparen + { let exprs,commas = $3 in SynExpr.StructTuple(List.rev exprs, List.rev commas, (commas.Head, exprs) ||> unionRangeWithListBy (fun e -> e.Range) ), false } + | STRUCT LPAREN tupleExpr recover + { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnmatchedBracket()); + let exprs,commas = $3 in SynExpr.StructTuple(List.rev exprs, List.rev commas, (commas.Head, exprs) ||> unionRangeWithListBy (fun e -> e.Range) ), false } | atomicExprAfterType { $1,false } @@ -3601,37 +3617,37 @@ atomicExprQualification: (fun e lhsm dotm -> mkSynDot dotm lhsm e $1) } | /* empty */ { (fun e lhsm dotm -> - reportParseErrorAt dotm (FSComp.SR.parsMissingQualificationAfterDot()); + reportParseErrorAt dotm (FSComp.SR.parsMissingQualificationAfterDot()) let fixedLhsm = mkRange lhsm.FileName lhsm.Start dotm.End // previous lhsm is wrong after 'recover' mkSynDotMissing dotm fixedLhsm e) } | recover { (fun e lhsm dotm -> - reportParseErrorAt dotm (FSComp.SR.parsMissingQualificationAfterDot()); + reportParseErrorAt dotm (FSComp.SR.parsMissingQualificationAfterDot()) let fixedLhsm = mkRange lhsm.FileName lhsm.Start dotm.End // previous lhsm is wrong after 'recover' // Include 'e' in the returned expression but throw it away SynExpr.DiscardAfterMissingQualificationAfterDot(e,fixedLhsm)) } | LPAREN COLON_COLON rparen DOT INT32 { (fun e lhsm dotm -> - libraryOnlyError(lhs parseState); + libraryOnlyError(lhs parseState) SynExpr.LibraryOnlyUnionCaseFieldGet (e,mkSynCaseName lhsm opNameCons,(fst $5),lhsm)) } | LPAREN typedSeqExpr rparen { (fun e lhsm dotm -> - mlCompatWarning (FSComp.SR.parsParenFormIsForML()) (lhs parseState); + mlCompatWarning (FSComp.SR.parsParenFormIsForML()) (lhs parseState) mkSynDotParenGet lhsm dotm e $2) } | LBRACK typedSeqExpr RBRACK { (fun e lhsm dotm -> mkSynDotBrackGet lhsm dotm e $2) } | LBRACK typedSeqExpr recover - { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedBracket()); + { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedBracket()) (fun e lhsm dotm -> exprFromParseError (mkSynDotBrackGet lhsm dotm e $2)) } | LBRACK optRangeSeqExpr RBRACK { (fun e lhsm dotm -> mkSynDotBrackSeqSliceGet lhsm dotm e $2) } | LBRACK optRangeSeqExpr recover - { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedBracket()); + { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedBracket()) (fun e lhsm dotm -> exprFromParseError (mkSynDotBrackSeqSliceGet lhsm dotm e $2)) } | LBRACK error RBRACK @@ -3715,14 +3731,14 @@ arrayExpr: { $2 (lhs parseState) true } | LBRACK_BAR listExprElements recover - { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedBracketBar()); + { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedBracketBar()) exprFromParseError ($2 (rhs2 parseState 1 2) true) } | LBRACK_BAR error BAR_RBRACK { (* silent recovery *) SynExpr.ArrayOrList(true,[ ], lhs parseState) } | LBRACK_BAR recover - { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedBracketBar()); + { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedBracketBar()) (* silent recovery *) exprFromParseError (SynExpr.ArrayOrList(true,[ ], rhs parseState 1)) } @@ -3764,7 +3780,7 @@ parenExpr: arbExpr("parenExpr2obecs", lhsm) } | LPAREN recover %prec prec_atomexpr_lparen_error - { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedParen()); + { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedParen()) arbExpr("parenExpr2",(lhs parseState)) } // This is really what we should be doing, but it fails because param info expects the range of the expression @@ -3801,7 +3817,7 @@ braceExpr: { let m,r = $2 in r (rhs2 parseState 1 3) } | LBRACE braceExprBody recover - { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedBrace()) ; + { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedBrace()) let m,r = $2 // Note, we can't use 'exprFromParseError' because the extra syntax node interferes with some syntax-directed transformations for computation expressions r (unionRanges (rhs parseState 1) m) } @@ -3811,7 +3827,7 @@ braceExpr: arbExpr("braceExpr",rhs2 parseState 1 3) } | LBRACE recover - { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedBrace()) ; + { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedBrace()) // Note, we can't use 'exprFromParseError' because the extra syntax node interferes with some syntax-directed transformations for computation expressions SynExpr.Record(None,None,[],rhs parseState 1) } @@ -3855,7 +3871,7 @@ rangeSequenceExpr: { (unionRanges $1.Range $5.Range),(fun _isArray wholem -> mkSynTrifix wholem ".. .." $1 $3 $5) } | declExpr DOT_DOT recover - { if not $3 then reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedEndOfFileExpression()); + { if not $3 then reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedEndOfFileExpression()) let opm = (rhs parseState 2) let e = arbExpr("rangeSeqError1", (rhs parseState 3).StartRange) (unionRanges $1.Range e.Range),(fun _isArray wholem -> @@ -3892,7 +3908,7 @@ forLoopRange: inlineAssemblyExpr: | HASH stringOrKeywordString opt_inlineAssemblyTypeArg opt_curriedArgExprs opt_inlineAssemblyReturnTypes HASH - { libraryOnlyWarning (lhs parseState); + { libraryOnlyWarning (lhs parseState) let s,sm = $2,rhs parseState 2 (fun m -> SynExpr.LibraryOnlyILAssembly (ParseAssemblyCodeInstructions s sm,$3,List.rev $4,$5,m)) } @@ -4415,6 +4431,25 @@ atomType: { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedParen()) $2 } + | STRUCT LPAREN appType STAR tupleOrQuotTypeElements rparen + { SynType.StructTuple((false,$3) :: $5,lhs parseState) } + + | STRUCT LPAREN appType STAR tupleOrQuotTypeElements recover + { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnmatchedParen()) + SynType.StructTuple((false,$3) :: $5,lhs parseState) } + + | STRUCT LPAREN appType STAR recover + { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnmatchedParen()) + SynType.Anon (lhs parseState) } + + | STRUCT LPAREN appType recover + { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnmatchedParen()) + SynType.Anon (lhs parseState) } + + | STRUCT LPAREN recover + { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnmatchedParen()) + SynType.Anon (lhs parseState) } + | rawConstant { SynType.StaticConstant($1, rhs parseState 1) } diff --git a/src/fsharp/tast.fs b/src/fsharp/tast.fs index 02c2afdd2ff..27cecaa4e43 100755 --- a/src/fsharp/tast.fs +++ b/src/fsharp/tast.fs @@ -284,70 +284,70 @@ type TyparRigidity = type TyparFlags(flags:int32) = new (kind:TyparKind, rigidity:TyparRigidity, isFromError:bool, isCompGen:bool, staticReq:TyparStaticReq, dynamicReq:TyparDynamicReq, equalityDependsOn: bool, comparisonDependsOn: bool) = - TyparFlags((if isFromError then 0b000000000010 else 0) ||| - (if isCompGen then 0b000000000100 else 0) ||| + TyparFlags((if isFromError then 0b0000000000010 else 0) ||| + (if isCompGen then 0b0000000000100 else 0) ||| (match staticReq with - | NoStaticReq -> 0b000000000000 - | HeadTypeStaticReq -> 0b000000001000) ||| + | NoStaticReq -> 0b0000000000000 + | HeadTypeStaticReq -> 0b0000000001000) ||| (match rigidity with - | TyparRigidity.Rigid -> 0b000000000000 - | TyparRigidity.WillBeRigid -> 0b000000100000 - | TyparRigidity.WarnIfNotRigid -> 0b000001000000 - | TyparRigidity.Flexible -> 0b000001100000 - | TyparRigidity.Anon -> 0b000010000000) ||| + | TyparRigidity.Rigid -> 0b0000000000000 + | TyparRigidity.WillBeRigid -> 0b0000000100000 + | TyparRigidity.WarnIfNotRigid -> 0b0000001000000 + | TyparRigidity.Flexible -> 0b0000001100000 + | TyparRigidity.Anon -> 0b0000010000000) ||| (match kind with - | TyparKind.Type -> 0b000000000000 - | TyparKind.Measure -> 0b000100000000) ||| + | TyparKind.Type -> 0b0000000000000 + | TyparKind.Measure -> 0b0000100000000) ||| (if comparisonDependsOn then - 0b001000000000 else 0) ||| + 0b0001000000000 else 0) ||| (match dynamicReq with - | TyparDynamicReq.No -> 0b000000000000 - | TyparDynamicReq.Yes -> 0b010000000000) ||| + | TyparDynamicReq.No -> 0b0000000000000 + | TyparDynamicReq.Yes -> 0b0010000000000) ||| (if equalityDependsOn then - 0b100000000000 else 0)) + 0b0100000000000 else 0)) /// Indicates if the type inference variable was generated after an error when type checking expressions or patterns - member x.IsFromError = (flags &&& 0b000000000010) <> 0x0 + member x.IsFromError = (flags &&& 0b0000000000010) <> 0x0 /// Indicates if the type variable is compiler generated, i.e. is an implicit type inference variable - member x.IsCompilerGenerated = (flags &&& 0b000000000100) <> 0x0 + member x.IsCompilerGenerated = (flags &&& 0b0000000000100) <> 0x0 /// Indicates if the type variable has a static "head type" requirement, i.e. ^a variables used in FSharp.Core and member constraints. member x.StaticReq = - match (flags &&& 0b000000001000) with - | 0b000000000000 -> NoStaticReq - | 0b000000001000 -> HeadTypeStaticReq + match (flags &&& 0b0000000001000) with + | 0b0000000000000 -> NoStaticReq + | 0b0000000001000 -> HeadTypeStaticReq | _ -> failwith "unreachable" /// Indicates if the type variable can be solved or given new constraints. The status of a type variable /// generally always evolves towards being either rigid or solved. member x.Rigidity = - match (flags &&& 0b000011100000) with - | 0b000000000000 -> TyparRigidity.Rigid - | 0b000000100000 -> TyparRigidity.WillBeRigid - | 0b000001000000 -> TyparRigidity.WarnIfNotRigid - | 0b000001100000 -> TyparRigidity.Flexible - | 0b000010000000 -> TyparRigidity.Anon + match (flags &&& 0b0000011100000) with + | 0b0000000000000 -> TyparRigidity.Rigid + | 0b0000000100000 -> TyparRigidity.WillBeRigid + | 0b0000001000000 -> TyparRigidity.WarnIfNotRigid + | 0b0000001100000 -> TyparRigidity.Flexible + | 0b0000010000000 -> TyparRigidity.Anon | _ -> failwith "unreachable" /// Indicates whether a type variable can be instantiated by types or units-of-measure. member x.Kind = - match (flags &&& 0b000100000000) with - | 0b000000000000 -> TyparKind.Type - | 0b000100000000 -> TyparKind.Measure + match (flags &&& 0b1000100000000) with + | 0b0000000000000 -> TyparKind.Type + | 0b0000100000000 -> TyparKind.Measure | _ -> failwith "unreachable" /// Indicates that whether or not a generic type definition satisfies the comparison constraint is dependent on whether this type variable satisfies the comparison constraint. member x.ComparisonConditionalOn = - (flags &&& 0b001000000000) <> 0x0 + (flags &&& 0b0001000000000) <> 0x0 /// Indicates if a type parameter is needed at runtime and may not be eliminated member x.DynamicReq = - match (flags &&& 0b010000000000) with - | 0b000000000000 -> TyparDynamicReq.No - | 0b010000000000 -> TyparDynamicReq.Yes + match (flags &&& 0b0010000000000) with + | 0b0000000000000 -> TyparDynamicReq.No + | 0b0010000000000 -> TyparDynamicReq.Yes | _ -> failwith "unreachable" /// Indicates that whether or not a generic type definition satisfies the equality constraint is dependent on whether this type variable satisfies the equality constraint. member x.EqualityConditionalOn = - (flags &&& 0b100000000000) <> 0x0 + (flags &&& 0b0100000000000) <> 0x0 /// Get the flags as included in the F# binary metadata. We pickle this as int64 to allow for future expansion @@ -952,7 +952,7 @@ type Entity = let ilTypeOpt = match x.TyparsNoRange with | [] -> Some (mkILTy boxity (mkILTySpec (ilTypeRef,[]))) - | _ -> None + | _ -> None CompiledTypeRepr.ILAsmNamed (ilTypeRef, boxity, ilTypeOpt)) /// Gets the data indicating the compiled representation of a named type or module in terms of Abstract IL data structures. @@ -3287,7 +3287,7 @@ and /// TType_tuple(elementTypes). /// /// Indicates the type is a tuple type. elementTypes must be of length 2 or greater. - | TType_tuple of TTypes + | TType_tuple of TupInfo * TTypes /// TType_fun(domainType,rangeType). /// @@ -3305,13 +3305,17 @@ and | TType_var of Typar /// Indicates the type is a unit-of-measure expression being used as an argument to a type or member - | TType_measure of MeasureExpr + | TType_measure of Measure override x.ToString() = match x with | TType_forall (_tps,ty) -> "forall _. " + ty.ToString() | TType_app (tcref, tinst) -> tcref.DisplayName + (match tinst with [] -> "" | tys -> "<" + String.concat "," (List.map string tys) + ">") - | TType_tuple tinst -> "(" + String.concat "," (List.map string tinst) + ")" + | TType_tuple (tupInfo, tinst) -> + (match tupInfo with + | TupInfo.Const false -> "" + | TupInfo.Const true -> "struct ") + + String.concat "," (List.map string tinst) + ")" | TType_fun (d,r) -> "(" + string d + " -> " + string r + ")" | TType_ucase (uc,tinst) -> "union case type " + uc.CaseName + (match tinst with [] -> "" | tys -> "<" + String.concat "," (List.map string tys) + ">") | TType_var tp -> tp.DisplayName @@ -3320,24 +3324,29 @@ and and TypeInst = TType list and TTypes = TType list -and MeasureExpr = +and [] TupInfo = + /// Some constant, e.g. true or false for tupInfo + | Const of bool + +and [] Measure = /// A variable unit-of-measure - | MeasureVar of Typar + | Var of Typar /// A constant, leaf unit-of-measure such as 'kg' or 'm' - | MeasureCon of TyconRef + | Con of TyconRef /// A product of two units of measure - | MeasureProd of MeasureExpr*MeasureExpr + | Prod of Measure*Measure /// An inverse of a units of measure expression - | MeasureInv of MeasureExpr + | Inv of Measure /// The unit of measure '1', e.g. float = float<1> - | MeasureOne + | One /// Raising a measure to a rational power - | MeasureRationalPower of MeasureExpr * Rational + | RationalPower of Measure * Rational + and [] @@ -3806,7 +3815,7 @@ and /// An operation representing the creation of an exception value using an F# exception declaration | ExnConstr of TyconRef /// An operation representing the creation of a tuple value - | Tuple + | Tuple of TupInfo /// An operation representing the creation of an array value | Array /// Constant byte arrays (used for parser tables and other embedded data) @@ -3850,7 +3859,7 @@ and /// An operation representing a field-set on an F# exception value. | ExnFieldSet of TyconRef * int /// An operation representing a field-get from an F# tuple value. - | TupleFieldGet of int + | TupleFieldGet of TupInfo * int /// IL assembly code - type list are the types pushed on the stack | ILAsm of ILInstr list * TTypes /// Generate a ldflda on an 'a ref. @@ -4018,7 +4027,7 @@ and TypedImplFile = TImplFile of QualifiedNameOfFile * ScopedPragma list * Modul /// Represents a complete typechecked assembly, made up of multiple implementation files. /// -and TypedAssembly = TAssembly of TypedImplFile list +and TypedAssemblyAfterOptimization = TypedAssemblyAfterOptimization of (TypedImplFile * (* optimizeDuringCodeGen: *) (Expr -> Expr)) list //--------------------------------------------------------------------------- // Freevars. Computed and cached by later phases (never computed type checking). Cached in terms. Not pickled. @@ -4139,6 +4148,12 @@ let typesOfVals (v:Val list) = v |> List.map (fun v -> v.Type) let nameOfVal (v:Val) = v.LogicalName let arityOfVal (v:Val) = (match v.ValReprInfo with None -> ValReprInfo.emptyValData | Some arities -> arities) +let tupInfoRef = TupInfo.Const false +let tupInfoStruct = TupInfo.Const true +let structnessDefault = false +let mkRawRefTupleTy tys = TType_tuple (tupInfoRef, tys) +let mkRawStructTupleTy tys = TType_tuple (tupInfoStruct, tys) + //--------------------------------------------------------------------------- // Aggregate operations to help transform the components that // make up the entire compilation unit @@ -4248,7 +4263,7 @@ let ccuOfTyconRef eref = let mkTyparTy (tp:Typar) = match tp.Kind with | TyparKind.Type -> tp.AsType - | TyparKind.Measure -> TType_measure (MeasureVar tp) + | TyparKind.Measure -> TType_measure (Measure.Var tp) let copyTypar (tp: Typar) = let x = tp.Data in Typar.New { x with typar_stamp=newStamp() } let copyTypars tps = List.map copyTypar tps @@ -4263,7 +4278,7 @@ let tryShortcutSolvedUnitPar canShortcut (r:Typar) = | Some (TType_measure unt) -> if canShortcut then match unt with - | MeasureVar r2 -> + | Measure.Var r2 -> match r2.Solution with | None -> () | Some _ as soln -> @@ -4275,7 +4290,7 @@ let tryShortcutSolvedUnitPar canShortcut (r:Typar) = let rec stripUnitEqnsAux canShortcut unt = match unt with - | MeasureVar r when r.IsSolved -> stripUnitEqnsAux canShortcut (tryShortcutSolvedUnitPar canShortcut r) + | Measure.Var r when r.IsSolved -> stripUnitEqnsAux canShortcut (tryShortcutSolvedUnitPar canShortcut r) | _ -> unt let rec stripTyparEqnsAux canShortcut ty = @@ -4712,23 +4727,27 @@ let NewClonedTycon orig = NewModifiedTycon (fun d -> d) orig /// duplicate modules etc. let CombineCcuContentFragments m l = - let CombineMaps f m1 m2 = - Map.foldBack (fun k v acc -> Map.add k (if Map.containsKey k m2 then f [v;Map.find k m2] else f [v]) acc) m1 - (Map.foldBack (fun k v acc -> if Map.containsKey k m1 then acc else Map.add k (f [v]) acc) m2 Map.empty) - /// Combine module types when multiple namespace fragments contribute to the /// same namespace, making new module specs as we go. let rec CombineModuleOrNamespaceTypes path m (mty1:ModuleOrNamespaceType) (mty2:ModuleOrNamespaceType) = match mty1.ModuleOrNamespaceKind,mty2.ModuleOrNamespaceKind with | Namespace,Namespace -> let kind = mty1.ModuleOrNamespaceKind + let tab1 = mty1.AllEntitiesByLogicalMangledName + let tab2 = mty2.AllEntitiesByLogicalMangledName let entities = - (mty1.AllEntitiesByLogicalMangledName,mty2.AllEntitiesByLogicalMangledName) - ||> CombineMaps (CombineEntityList path) + [ for e1 in mty1.AllEntities do + match tab2.TryFind e1.LogicalName with + | Some e2 -> yield CombineEntites path e1 e2 + | None -> yield e1 + for e2 in mty2.AllEntities do + match tab1.TryFind e2.LogicalName with + | Some _ -> () + | None -> yield e2 ] let vals = QueueList.append mty1.AllValsAndMembers mty2.AllValsAndMembers - ModuleOrNamespaceType(kind, vals, QueueList.ofList (NameMap.range entities)) + ModuleOrNamespaceType(kind, vals, QueueList.ofList entities) | Namespace, _ | _,Namespace -> error(Error(FSComp.SR.tastNamespaceAndModuleWithSameNameInAssembly(textOfPath path),m)) @@ -4736,11 +4755,6 @@ let CombineCcuContentFragments m l = | _-> error(Error(FSComp.SR.tastTwoModulesWithSameNameInAssembly(textOfPath path),m)) - and CombineEntityList path l = - match l with - | h :: t -> List.fold (CombineEntites path) h t - | _ -> failwith "CombineEntityList" - and CombineEntites path (entity1:Entity) (entity2:Entity) = match entity1.IsModuleOrNamespace, entity2.IsModuleOrNamespace with diff --git a/src/fsharp/vs/IncrementalBuild.fs b/src/fsharp/vs/IncrementalBuild.fs index 31137588084..0db1e3f6e5b 100755 --- a/src/fsharp/vs/IncrementalBuild.fs +++ b/src/fsharp/vs/IncrementalBuild.fs @@ -12,6 +12,7 @@ open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Compiler.AbstractIL open Microsoft.FSharp.Compiler.AbstractIL.IL +open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics open Microsoft.FSharp.Compiler.AbstractIL.Internal open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library open Microsoft.FSharp.Compiler.CompileOps @@ -1063,8 +1064,6 @@ module IncrementalBuilderEventTesting = module Tc = Microsoft.FSharp.Compiler.TypeChecker -open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics -open Internal.Utilities.Debug /// Accumulated results of type checking. [] diff --git a/src/fsharp/vs/IncrementalBuild.fsi b/src/fsharp/vs/IncrementalBuild.fsi index f78637d67bb..58f82cc3655 100755 --- a/src/fsharp/vs/IncrementalBuild.fsi +++ b/src/fsharp/vs/IncrementalBuild.fsi @@ -11,6 +11,7 @@ open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.CompileOps open Microsoft.FSharp.Compiler.NameResolution +open Microsoft.FSharp.Compiler.Tast [] @@ -76,15 +77,27 @@ type internal CompilationErrorLogger = /// Represents the state in the incremental graph assocaited with checking a file type internal PartialCheckResults = - { TcState : TcState + { /// This field is None if a major unrecoverd error occured when preparing the initial state + TcState : TcState TcImports: TcImports TcGlobals: TcGlobals TcConfig: TcConfig - TcEnvAtEnd : TypeChecker.TcEnv + + /// This field is None if a major unrecoverd error occured when preparing the initial state + TcEnvAtEnd : TypeChecker.TcEnv + + /// Represents the collected errors from type checking Errors : (PhasedError * FSharpErrorSeverity) list + + /// Represents the collected name resolutions from type checking TcResolutions: TcResolutions list + + /// Represents the collected uses of symbols from type checking TcSymbolUses: TcSymbolUses list + + /// Represents the collected attributes to apply to the module of assuembly generates TopAttribs: TypeChecker.TopAttribs option + TimeStamp: DateTime } /// Manages an incremental build graph for the build of an F# project @@ -159,11 +172,11 @@ type internal IncrementalBuilder = // TODO: make this an Eventually (which can be scheduled) or an Async (which can be cancelled) member GetCheckResultsAfterLastFileInProject : unit -> PartialCheckResults - /// Get the final typecheck result. If 'generateTypedImplFiles' was set on Create then the TypedAssembly will contain implementations. + /// Get the final typecheck result. If 'generateTypedImplFiles' was set on Create then the TypedAssemblyAfterOptimization will contain implementations. /// This may be a long-running operation. /// // TODO: make this an Eventually (which can be scheduled) or an Async (which can be cancelled) - member GetCheckResultsAndImplementationsForProject : unit -> PartialCheckResults * IL.ILAssemblyRef * IRawFSharpAssemblyData option * Tast.TypedAssembly option + member GetCheckResultsAndImplementationsForProject : unit -> PartialCheckResults * IL.ILAssemblyRef * IRawFSharpAssemblyData option * TypedImplFile list option /// Get the logical time stamp that is associated with the output of the project if it were gully built immediately member GetLogicalTimeStampForProject: unit -> DateTime diff --git a/src/fsharp/vs/ServiceDeclarations.fs b/src/fsharp/vs/ServiceDeclarations.fs index 354a2577ce2..a6482c6d31c 100644 --- a/src/fsharp/vs/ServiceDeclarations.fs +++ b/src/fsharp/vs/ServiceDeclarations.fs @@ -763,7 +763,7 @@ module internal ItemDescriptionsImpl = | Item.Property(_,pinfos) -> let pinfo = pinfos.Head let rty = pinfo.GetPropertyType(amap,m) - let rty = if pinfo.IsIndexer then mkTupledTy g (pinfo.GetParamTypes(amap, m)) --> rty else rty + let rty = if pinfo.IsIndexer then mkRefTupledTy g (pinfo.GetParamTypes(amap, m)) --> rty else rty let _, rty, _ = PrettyTypes.PrettifyTypes1 g rty let text = bufs (fun os -> @@ -1159,7 +1159,7 @@ module internal ItemDescriptionsImpl = if isAppTy denv.g typ then let tcref = tcrefOfAppTy denv.g typ tcref.TypeReprInfo |> reprToGlyph - elif isTupleTy denv.g typ then iIconGroupStruct + elif isAnyTupleTy denv.g typ then iIconGroupStruct elif isFunction denv.g typ then iIconGroupDelegate elif isTyparTy denv.g typ then iIconGroupStruct else iIconGroupTypedef diff --git a/src/fsharp/vs/ServiceLexing.fs b/src/fsharp/vs/ServiceLexing.fs index 85f5f531085..73e501726b7 100755 --- a/src/fsharp/vs/ServiceLexing.fs +++ b/src/fsharp/vs/ServiceLexing.fs @@ -18,7 +18,6 @@ open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Lexhelp open Microsoft.FSharp.Compiler.Lib -open Internal.Utilities.Debug type Position = int * int type Range = Position * Position @@ -649,9 +648,7 @@ type FSharpLineTokenizer(lexbuf: UnicodeLexing.Lexbuf, | EOF lexcont -> // End of text! No more tokens. None,lexcont,0 - | LEX_FAILURE s -> - // REVIEW: report this error - Trace.PrintLine("Lexing", fun _ -> sprintf "LEX_FAILURE:%s\n" s) + | LEX_FAILURE _ -> None, LexerStateEncoding.revertToDefaultLexCont, 0 | _ -> // Get the information about the token diff --git a/src/fsharp/vs/ServiceParamInfoLocations.fs b/src/fsharp/vs/ServiceParamInfoLocations.fs index df0ca0bc404..7f29854c4bc 100755 --- a/src/fsharp/vs/ServiceParamInfoLocations.fs +++ b/src/fsharp/vs/ServiceParamInfoLocations.fs @@ -2,7 +2,6 @@ namespace Microsoft.FSharp.Compiler.SourceCodeServices -open Internal.Utilities.Debug open Microsoft.FSharp.Compiler.Range open Microsoft.FSharp.Compiler.Ast @@ -104,7 +103,6 @@ module internal NoteworthyParamInfoLocationsImpl = if AstTraversal.rangeContainsPosEdgesExclusive parenRange pos then let commasAndCloseParen = ((synExprList,commaRanges@[parenRange]) ||> List.map2 (fun e c -> c.End, getNamedParamName e)) let r = Found (parenRange.Start, commasAndCloseParen, rpRangeOpt.IsSome) - Trace.PrintLine("LanguageServiceParamInfo", fun () -> sprintf "Found paren tuple ranges %+A from %+A" r expr) r, None else NotFound, None @@ -124,7 +122,6 @@ module internal NoteworthyParamInfoLocationsImpl = | SynExpr.ArbitraryAfterError(_debugStr, range) -> // single argument when e.g. after open paren you hit EOF if AstTraversal.rangeContainsPosEdgesExclusive range pos then let r = Found (range.Start, [range.End, null], false) - Trace.PrintLine("LanguageServiceParamInfo", fun () -> sprintf "Found ArbitraryAfterError range %+A from %+A" r expr) r, None else NotFound, None @@ -132,7 +129,6 @@ module internal NoteworthyParamInfoLocationsImpl = | SynExpr.Const(SynConst.Unit, unitRange) -> if AstTraversal.rangeContainsPosEdgesExclusive unitRange pos then let r = Found (unitRange.Start, [unitRange.End, null], true) - Trace.PrintLine("LanguageServiceParamInfo", fun () -> sprintf "Found unit range %+A from %+A" r expr) r, None else NotFound, None @@ -203,7 +199,6 @@ module internal NoteworthyParamInfoLocationsImpl = if isInfix then // This seems to be an infix operator, since the start of the argument is a position earlier than the end of the long-id being applied to it. // For now, we don't support infix operators. - Trace.PrintLine("LanguageServiceParamInfo", fun () -> sprintf "Found apparent infix operator, ignoring dug-out ident from %+A" expr) None else Some (FSharpNoteworthyParamInfoLocations(lid, lidRange, parenLoc, args |> List.map fst, isThereACloseParen, args |> List.map snd)) @@ -212,7 +207,7 @@ module internal NoteworthyParamInfoLocationsImpl = | _ -> traverseSynExpr synExpr2 // ID and error recovery of these - | SynExpr.TypeApp(synExpr, openm, tyArgs, commas, closemOpt, _, wholem) as seta -> + | SynExpr.TypeApp(synExpr, openm, tyArgs, commas, closemOpt, _, wholem) -> match traverseSynExpr synExpr with | Some _ as r -> r | None -> @@ -220,7 +215,6 @@ module internal NoteworthyParamInfoLocationsImpl = if AstTraversal.rangeContainsPosEdgesExclusive typeArgsm pos && tyArgs |> List.forall isStaticArg then let commasAndCloseParen = [ for c in commas -> c.End ] @ [ wholem.End ] let r = FSharpNoteworthyParamInfoLocations(["dummy"], synExpr.Range, openm.Start, commasAndCloseParen, closemOpt.IsSome, tyArgs |> List.map digOutIdentFromStaticArg) - Trace.PrintLine("LanguageServiceParamInfo", fun () -> sprintf "Found SynExpr.TypeApp with ranges %+A from %+A" r seta) Some r else None diff --git a/src/fsharp/vs/ServiceParseTreeWalk.fs b/src/fsharp/vs/ServiceParseTreeWalk.fs index 2f93adbb52e..84c374f318e 100755 --- a/src/fsharp/vs/ServiceParseTreeWalk.fs +++ b/src/fsharp/vs/ServiceParseTreeWalk.fs @@ -164,7 +164,8 @@ module internal AstTraversal = |> pick expr | SynExpr.Const(_synConst, _range) -> None | SynExpr.Typed(synExpr, _synType, _range) -> traverseSynExpr synExpr - | SynExpr.Tuple(synExprList, _, _range) -> synExprList |> List.map (fun x -> dive x x.Range traverseSynExpr) |> pick expr + | SynExpr.Tuple(synExprList, _, _range) + | SynExpr.StructTuple(synExprList, _, _range) -> synExprList |> List.map (fun x -> dive x x.Range traverseSynExpr) |> pick expr | SynExpr.ArrayOrList(_, synExprList, _range) -> synExprList |> List.map (fun x -> dive x x.Range traverseSynExpr) |> pick expr | SynExpr.Record(inheritOpt,copyOpt,fields, _range) -> [ diff --git a/src/fsharp/vs/ServiceUntypedParse.fs b/src/fsharp/vs/ServiceUntypedParse.fs index b8e58a15abe..52f280ab9c2 100755 --- a/src/fsharp/vs/ServiceUntypedParse.fs +++ b/src/fsharp/vs/ServiceUntypedParse.fs @@ -19,8 +19,6 @@ open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.CompileOps open Microsoft.FSharp.Compiler.Lib -open Internal.Utilities.Debug - /// Methods for dealing with F# sources files. module internal SourceFile = /// Source file extensions @@ -98,7 +96,6 @@ type FSharpParseFileResults(errors : FSharpErrorInfo[], input : Ast.ParsedInput ErrorScope.Protect Range.range0 (fun () -> - use t = Trace.Call("CompilerServices", "GetNavigationItems", fun _ -> "") match input with | Some(ParsedInput.ImplFile(ParsedImplFileInput(_modname,_isScript,_qualName,_pragmas,_hashDirectives,modules,_isLastCompiland))) -> NavigationImpl.getNavigationFromImplFile modules @@ -199,7 +196,8 @@ type FSharpParseFileResults(errors : FSharpErrorInfo[], input : Ast.ParsedInput yield! walkExpr false e2 | SynExpr.ArrayOrList (_,es,_) - | SynExpr.Tuple (es,_,_) -> + | SynExpr.Tuple (es,_,_) + | SynExpr.StructTuple (es,_,_) -> yield! walkExprs es | SynExpr.Record (_,copyExprOpt,fs,_) -> @@ -364,12 +362,10 @@ type FSharpParseFileResults(errors : FSharpErrorInfo[], input : Ast.ParsedInput // Get items for the navigation drop down bar member scope.GetNavigationItems() = - use t = Trace.Call("SyncOp","GetNavigationItems", fun _->"") // This does not need to be run on the background thread scope.GetNavigationItemsImpl() member scope.ValidateBreakpointLocation(pos) = - use t = Trace.Call("SyncOp","ValidateBreakpointLocation", fun _->"") // This does not need to be run on the background thread scope.ValidateBreakpointLocationImpl(pos) @@ -608,7 +604,7 @@ module UntypedParseImpl = | _ -> defaultTraverse(expr) } AstTraversal.Traverse(pos, parseTree, walker) - type TS = AstTraversal.TraverseStep + type internal TS = AstTraversal.TraverseStep /// Try to determine completion context for the given pair (row, columns) let TryGetCompletionContext (pos, untypedParseOpt: FSharpParseFileResults option) : CompletionContext option = diff --git a/src/fsharp/vs/Symbols.fs b/src/fsharp/vs/Symbols.fs index 28eb96a5693..2c911afaf8e 100644 --- a/src/fsharp/vs/Symbols.fs +++ b/src/fsharp/vs/Symbols.fs @@ -1189,7 +1189,7 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = | M m -> let rty = m.GetFSharpReturnTy(cenv.amap,range0,m.FormalMethodInst) let argtysl = m.GetParamTypes(cenv.amap,range0,m.FormalMethodInst) - mkIteratedFunTy (List.map (mkTupledTy cenv.g) argtysl) rty + mkIteratedFunTy (List.map (mkRefTupledTy cenv.g) argtysl) rty | V v -> v.TauType FSharpType(cenv, ty) @@ -1559,8 +1559,8 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = let argtysl, _typ = stripFunTy cenv.g tau [ for typ in argtysl do let allArguments = - if isTupleTy cenv.g typ - then tryDestTupleTy cenv.g typ + if isRefTupleTy cenv.g typ + then tryDestRefTupleTy cenv.g typ else [typ] yield allArguments @@ -1732,10 +1732,10 @@ and FSharpType(cenv, typ:TType) = ErrorLogger.protectAssemblyExploration true <| fun () -> match stripTyparEqns typ with | TType_app (tcref,_) -> FSharpEntity(cenv, tcref).IsUnresolved - | TType_measure (MeasureCon tcref) -> FSharpEntity(cenv, tcref).IsUnresolved - | TType_measure (MeasureProd _) -> FSharpEntity(cenv, cenv.g.measureproduct_tcr).IsUnresolved - | TType_measure MeasureOne -> FSharpEntity(cenv, cenv.g.measureone_tcr).IsUnresolved - | TType_measure (MeasureInv _) -> FSharpEntity(cenv, cenv.g.measureinverse_tcr).IsUnresolved + | TType_measure (Measure.Con tcref) -> FSharpEntity(cenv, tcref).IsUnresolved + | TType_measure (Measure.Prod _) -> FSharpEntity(cenv, cenv.g.measureproduct_tcr).IsUnresolved + | TType_measure Measure.One -> FSharpEntity(cenv, cenv.g.measureone_tcr).IsUnresolved + | TType_measure (Measure.Inv _) -> FSharpEntity(cenv, cenv.g.measureinverse_tcr).IsUnresolved | _ -> false let isResolved() = not (isUnresolved()) @@ -1748,7 +1748,7 @@ and FSharpType(cenv, typ:TType) = isResolved() && protect <| fun () -> match stripTyparEqns typ with - | TType_app _ | TType_measure (MeasureCon _ | MeasureProd _ | MeasureInv _ | MeasureOne _) -> true + | TType_app _ | TType_measure (Measure.Con _ | Measure.Prod _ | Measure.Inv _ | Measure.One _) -> true | _ -> false member __.IsTupleType = @@ -1758,6 +1758,13 @@ and FSharpType(cenv, typ:TType) = | TType_tuple _ -> true | _ -> false + member __.IsStructTupleType = + isResolved() && + protect <| fun () -> + match stripTyparEqns typ with + | TType_tuple (tupInfo,_) -> evalTupInfoIsStruct tupInfo + | _ -> false + member x.IsNamedType = x.HasTypeDefinition member x.NamedEntity = x.TypeDefinition @@ -1765,22 +1772,22 @@ and FSharpType(cenv, typ:TType) = protect <| fun () -> match stripTyparEqns typ with | TType_app (tcref,_) -> FSharpEntity(cenv, tcref) - | TType_measure (MeasureCon tcref) -> FSharpEntity(cenv, tcref) - | TType_measure (MeasureProd _) -> FSharpEntity(cenv, cenv.g.measureproduct_tcr) - | TType_measure MeasureOne -> FSharpEntity(cenv, cenv.g.measureone_tcr) - | TType_measure (MeasureInv _) -> FSharpEntity(cenv, cenv.g.measureinverse_tcr) + | TType_measure (Measure.Con tcref) -> FSharpEntity(cenv, tcref) + | TType_measure (Measure.Prod _) -> FSharpEntity(cenv, cenv.g.measureproduct_tcr) + | TType_measure Measure.One -> FSharpEntity(cenv, cenv.g.measureone_tcr) + | TType_measure (Measure.Inv _) -> FSharpEntity(cenv, cenv.g.measureinverse_tcr) | _ -> invalidOp "not a named type" member __.GenericArguments = protect <| fun () -> match stripTyparEqns typ with | TType_app (_,tyargs) - | TType_tuple (tyargs) -> (tyargs |> List.map (fun ty -> FSharpType(cenv, ty)) |> makeReadOnlyCollection) + | TType_tuple (_,tyargs) -> (tyargs |> List.map (fun ty -> FSharpType(cenv, ty)) |> makeReadOnlyCollection) | TType_fun(d,r) -> [| FSharpType(cenv, d); FSharpType(cenv, r) |] |> makeReadOnlyCollection - | TType_measure (MeasureCon _) -> [| |] |> makeReadOnlyCollection - | TType_measure (MeasureProd (t1,t2)) -> [| FSharpType(cenv, TType_measure t1); FSharpType(cenv, TType_measure t2) |] |> makeReadOnlyCollection - | TType_measure MeasureOne -> [| |] |> makeReadOnlyCollection - | TType_measure (MeasureInv t1) -> [| FSharpType(cenv, TType_measure t1) |] |> makeReadOnlyCollection + | TType_measure (Measure.Con _) -> [| |] |> makeReadOnlyCollection + | TType_measure (Measure.Prod (t1,t2)) -> [| FSharpType(cenv, TType_measure t1); FSharpType(cenv, TType_measure t2) |] |> makeReadOnlyCollection + | TType_measure Measure.One -> [| |] |> makeReadOnlyCollection + | TType_measure (Measure.Inv t1) -> [| FSharpType(cenv, TType_measure t1) |] |> makeReadOnlyCollection | _ -> invalidOp "not a named type" (* @@ -1809,14 +1816,14 @@ and FSharpType(cenv, typ:TType) = protect <| fun () -> match stripTyparEqns typ with | TType_var _ -> true - | TType_measure (MeasureVar _) -> true + | TType_measure (Measure.Var _) -> true | _ -> false member __.GenericParameter = protect <| fun () -> match stripTyparEqns typ with | TType_var tp - | TType_measure (MeasureVar tp) -> + | TType_measure (Measure.Var tp) -> FSharpGenericParameter (cenv, tp) | _ -> invalidOp "not a generic parameter type" diff --git a/src/fsharp/vs/Symbols.fsi b/src/fsharp/vs/Symbols.fsi index 86b13d3df24..080ed9fd827 100644 --- a/src/fsharp/vs/Symbols.fsi +++ b/src/fsharp/vs/Symbols.fsi @@ -842,9 +842,12 @@ and [] internal FSharpType = /// Get the generic arguments for a tuple type, a function type or a type constructed using a named entity member GenericArguments : IList - /// Indicates if the type is a tuple type. The GenericArguments property returns the elements of the tuple type. + /// Indicates if the type is a tuple type (reference or struct). The GenericArguments property returns the elements of the tuple type. member IsTupleType : bool + /// Indicates if the type is a struct tuple type. The GenericArguments property returns the elements of the tuple type. + member IsStructTupleType : bool + /// Indicates if the type is a function type. The GenericArguments property returns the domain and range of the function type. member IsFunctionType : bool diff --git a/src/fsharp/vs/service.fs b/src/fsharp/vs/service.fs index 38840822820..d9d6df9d45c 100755 --- a/src/fsharp/vs/service.fs +++ b/src/fsharp/vs/service.fs @@ -39,13 +39,11 @@ open Microsoft.FSharp.Compiler.Infos open Microsoft.FSharp.Compiler.InfoReader open Microsoft.FSharp.Compiler.NameResolution open Microsoft.FSharp.Compiler.TypeChecker +open Microsoft.FSharp.Compiler.SourceCodeServices.ItemDescriptionsImpl -open Internal.Utilities.Collections -open Internal.Utilities.Debug open Internal.Utilities -open Internal.Utilities.StructuredFormat +open Internal.Utilities.Collections -open Microsoft.FSharp.Compiler.SourceCodeServices.ItemDescriptionsImpl [] module EnvMisc = @@ -227,7 +225,7 @@ module internal Params = let _, tau = vref.TypeScheme if isFunTy denv.g tau then let arg,rtau = destFunTy denv.g tau - let args = tryDestTupleTy denv.g arg + let args = tryDestRefTupleTy denv.g arg ParamsOfTypes g denv args rtau else [] match vref.ValReprInfo with @@ -571,7 +569,6 @@ type TypeCheckInfo |> FilterItemsForCtors filterCtors if nonNil items then - Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "GetPreciseItemsFromNameResolution: Results in %d items!\n" items.Length) if hasTextChangedSinceLastTypecheck(textSnapshotInfo, m) then NameResResult.TypecheckStaleAndTextChanged // typecheck is stale, wait for second-chance IntelliSense to bring up right result else @@ -579,7 +576,6 @@ type TypeCheckInfo else NameResResult.Empty let GetCapturedNameResolutions endOfNamesPos resolveOverloads = - Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "GetPreciseItemsFromNameResolution: endOfNamesPos = %s\n" (stringOfPos endOfNamesPos)) let quals = match resolveOverloads with @@ -596,7 +592,6 @@ type TypeCheckInfo let GetPreciseItemsFromNameResolution(line, colAtEndOfNames, membersByResidue, filterCtors, resolveOverloads, hasTextChangedSinceLastTypecheck) = let endOfNamesPos = mkPos line colAtEndOfNames - Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "GetPreciseItemsFromNameResolution: endOfNamesPos = %s\n" (stringOfPos endOfNamesPos)) // Logic below expects the list to be in reverse order of resolution let items = GetCapturedNameResolutions endOfNamesPos resolveOverloads |> ResizeArray.toList |> List.rev @@ -902,14 +897,13 @@ type TypeCheckInfo | NameResResult.TypecheckStaleAndTextChanged -> None // second-chance intellisense will try again | NameResResult.Cancel(denv,m) -> Some([], denv, m) | NameResResult.Members(FilterRelevantItems exactMatchResidueOpt items) -> - Trace.PrintLine("CompilerServices", fun _ -> sprintf "GetDeclItemsForNamesAtPosition: lookup based on name resolution results successful, #items = %d, exists ctor = %b\n" (p13 items).Length (items |> p13 |> List.exists (function Item.CtorGroup _ -> true | _ -> false))) + // lookup based on name resolution results successful Some items | _ -> match origLongIdentOpt with | None -> None | Some _ -> - Trace.PrintLine("CompilerServices", fun _ -> sprintf "GetDeclItemsForNamesAtPosition: plid = %+A, residue = %+A, colAtEndOfNamesAndResidue = %+A\n" plid exactMatchResidueOpt colAtEndOfNamesAndResidue) // Try to use the type of the expression on the left to help generate a completion list let qualItems, thereIsADotInvolved = @@ -939,7 +933,7 @@ type TypeCheckInfo // and then return to the qualItems. This is because the expression typings are a little inaccurate, primarily because // it appears we're getting some typings recorded for non-atomic expressions like "f x" when (match plid with [] -> true | _ -> false) -> - Trace.PrintLine("CompilerServices", fun _ -> sprintf "GetDeclItemsForNamesAtPosition: lookup based on expression typings successful\n") + // lookup based on expression typings successful Some items | GetPreciseCompletionListFromExprTypingsResult.NoneBecauseThereWereTypeErrors, _ -> // There was an error, e.g. we have "." and there is an error determining the type of @@ -961,13 +955,13 @@ type TypeCheckInfo // First, use unfiltered name resolution items, if they're not empty | NameResResult.Members(items, denv, m), _, _ when nonNil items -> - Trace.PrintLine("CompilerServices", fun _ -> sprintf "GetDeclItemsForNamesAtPosition: lookup based on name resolution results successful, #items = %d, exists ctor = %b\n" (items).Length (items |> List.exists (function Item.CtorGroup _ -> true | _ -> false))) + // lookup based on name resolution results successful Some(items, denv, m) // If we have nonempty items from environment that were resolved from a type, then use them... // (that's better than the next case - here we'd return 'int' as a type) | _, FilterRelevantItems exactMatchResidueOpt (items, denv, m), _ when nonNil items -> - Trace.PrintLine("CompilerServices", fun _ -> sprintf "GetDeclItemsForNamesAtPosition: lookup based on name and environment successful\n") + // lookup based on name and environment successful Some(items, denv, m) // Try again with the qualItems @@ -1799,7 +1793,7 @@ type FSharpProjectContext(thisCcu: CcuThunk, assemblies: FSharpAssembly list, ad [] // 'details' is an option because the creation of the tcGlobals etc. for the project may have failed. -type FSharpCheckProjectResults(_keepAssemblyContents, errors: FSharpErrorInfo[], details:(TcGlobals*TcImports*CcuThunk*ModuleOrNamespaceType*TcSymbolUses list*TopAttribs option*CompileOps.IRawFSharpAssemblyData option * ILAssemblyRef * AccessorDomain * TypedAssembly option) option, reactorOps: IReactorOperations) = +type FSharpCheckProjectResults(_keepAssemblyContents, errors: FSharpErrorInfo[], details:(TcGlobals*TcImports*CcuThunk*ModuleOrNamespaceType*TcSymbolUses list*TopAttribs option*CompileOps.IRawFSharpAssemblyData option * ILAssemblyRef * AccessorDomain * TypedImplFile list option) option, reactorOps: IReactorOperations) = let getDetails() = match details with @@ -1820,7 +1814,7 @@ type FSharpCheckProjectResults(_keepAssemblyContents, errors: FSharpErrorInfo[], // let mimpls = // match tcAssemblyExpr with // | None -> [] - // | Some (TAssembly mimpls) -> mimpls + // | Some mimpls -> mimpls // FSharpAssemblyContents(tcGlobals, thisCcu, tcImports, mimpls) // Not, this does not have to be a SyncOp, it can be called from any thread @@ -2469,7 +2463,7 @@ type BackgroundCompiler(projectCacheSize, keepAssemblyContents, keepAllBackgroun let useFsiAuxLib = defaultArg useFsiAuxLib true // Do we use a "FSharp.Core, 4.3.0.0" reference by default? let otherFlags = defaultArg otherFlags [| |] - let useMonoResolution = + let useSimpleResolution = #if ENABLE_MONO_SUPPORT runningOnMono || otherFlags |> Array.exists (fun x -> x = "--simpleresolution") #else @@ -2480,7 +2474,7 @@ type BackgroundCompiler(projectCacheSize, keepAssemblyContents, keepAllBackgroun let collect _name = () let fsiCompilerOptions = CompileOptions.GetCoreFsiCompilerOptions tcConfigB CompileOptions.ParseCompilerOptions (collect, fsiCompilerOptions, Array.toList otherFlags) - let fas = LoadClosure.ComputeClosureOfSourceText(filename, source, CodeContext.Editing, useMonoResolution, useFsiAuxLib, new Lexhelp.LexResourceManager(), applyCompilerOptions) + let fas = LoadClosure.ComputeClosureOfSourceText(filename, source, CodeContext.Editing, useSimpleResolution, useFsiAuxLib, new Lexhelp.LexResourceManager(), applyCompilerOptions) let otherFlags = [| yield "--noframework"; yield "--warn:3"; yield! otherFlags diff --git a/src/ilx/EraseClosures.fs b/src/ilx/EraseClosures.fs index e49ac9ab343..eee997a8a00 100644 --- a/src/ilx/EraseClosures.fs +++ b/src/ilx/EraseClosures.fs @@ -116,10 +116,10 @@ let isSupportedDirectCall apps = // -------------------------------------------------------------------- let mkFuncTypeRef n = - if n = 1 then mkILTyRef (IlxSettings.ilxFsharpCoreLibScopeRef (),IlxSettings.ilxNamespace () ^ ".FSharpFunc`2") + if n = 1 then mkILTyRef (IlxSettings.ilxFsharpCoreLibScopeRef (),IlxSettings.ilxNamespace () + ".FSharpFunc`2") else mkILNestedTyRef (IlxSettings.ilxFsharpCoreLibScopeRef (), - [IlxSettings.ilxNamespace () ^ ".OptimizedClosures"], - "FSharpFunc`"^ string (n + 1)) + [IlxSettings.ilxNamespace () + ".OptimizedClosures"], + "FSharpFunc`"+ string (n + 1)) type cenv = { ilg:ILGlobals; tref_Func: ILTypeRef[]; @@ -128,7 +128,7 @@ type cenv = let newIlxPubCloEnv(ilg) = { ilg=ilg; tref_Func= Array.init 10 (fun i -> mkFuncTypeRef(i+1)); - mkILTyFuncTy=ILType.Boxed (mkILNonGenericTySpec (mkILTyRef (IlxSettings.ilxFsharpCoreLibScopeRef (), IlxSettings.ilxNamespace () ^ ".FSharpTypeFunc"))) } + mkILTyFuncTy=ILType.Boxed (mkILNonGenericTySpec (mkILTyRef (IlxSettings.ilxFsharpCoreLibScopeRef (), IlxSettings.ilxNamespace () + ".FSharpTypeFunc"))) } let mkILTyFuncTy cenv = cenv.mkILTyFuncTy @@ -354,7 +354,6 @@ let rec convIlxClosureDef cenv encl (td: ILTypeDef) clo = let nowTy = mkILFormalBoxedTy nowTypeRef td.GenericParams let nowCloRef = IlxClosureRef(nowTypeRef,clo.cloStructure,nowFields) let nowCloSpec = mkILFormalCloRef td.GenericParams nowCloRef - let tagClo = clo.cloSource let tagApp = (Lazy.force clo.cloCode).SourceMarker let tyargsl,tmargsl,laterStruct = stripSupportedAbstraction clo.cloStructure @@ -416,10 +415,10 @@ let rec convIlxClosureDef cenv encl (td: ILTypeDef) clo = if (match laterStruct with Lambdas_return _ -> false | _ -> true) then let nowStruct = List.foldBack (fun x y -> Lambdas_forall(x,y)) tyargsl (Lambdas_return nowReturnTy) - let laterTypeName = td.Name^"T" + let laterTypeName = td.Name+"T" let laterTypeRef = mkILNestedTyRef (ILScopeRef.Local,encl,laterTypeName) let laterGenericParams = td.GenericParams @ addedGenParams - let selfFreeVar = mkILFreeVar(CompilerGeneratedName ("self"^string nowFields.Length),true,nowCloSpec.ILType) + let selfFreeVar = mkILFreeVar(CompilerGeneratedName ("self"+string nowFields.Length),true,nowCloSpec.ILType) let laterFields = Array.append nowFields [| selfFreeVar |] let laterCloRef = IlxClosureRef(laterTypeRef,laterStruct,laterFields) let laterCloSpec = mkILFormalCloRef laterGenericParams laterCloRef @@ -434,8 +433,6 @@ let rec convIlxClosureDef cenv encl (td: ILTypeDef) clo = cloFreeVars=laterFields; cloCode=notlazy laterCode} - let laterTypeDefs = laterTypeDefs |> List.map (addMethodGeneratedAttrsToTypeDef cenv.ilg) - // This is the code which will get called when then "now" // arguments get applied. Convert it with the information // that it is the code for a closure... @@ -456,6 +453,9 @@ let rec convIlxClosureDef cenv encl (td: ILTypeDef) clo = let nowTypeDefs = convIlxClosureDef cenv encl td {clo with cloStructure=nowStruct; cloCode=notlazy nowCode} + + let nowTypeDefs = nowTypeDefs |> List.map (addMethodGeneratedAttrsToTypeDef cenv.ilg) + nowTypeDefs @ laterTypeDefs else // CASE 1b. Build a type application. @@ -470,11 +470,12 @@ let rec convIlxClosureDef cenv encl (td: ILTypeDef) clo = MethodBody.IL (convILMethodBody (Some nowCloSpec,boxReturnTy) (Lazy.force clo.cloCode))) let ctorMethodDef = mkILStorageCtor - (tagClo, + (None, [ mkLdarg0; mkNormalCall (mkILCtorMethSpecForTy (cenv.mkILTyFuncTy, [])) ], nowTy, mkILCloFldSpecs cenv nowFields, ILMemberAccess.Assembly) + |> addMethodGeneratedAttrs cenv.ilg let cloTypeDef = { Name = td.Name; @@ -509,7 +510,7 @@ let rec convIlxClosureDef cenv encl (td: ILTypeDef) clo = // CASE 2a - Too Many Term Arguments or Remaining Type arguments - Split the Closure Class in Two if (match laterStruct with Lambdas_return _ -> false | _ -> true) then let nowStruct = List.foldBack (fun l r -> Lambdas_lambda(l,r)) nowParams (Lambdas_return nowReturnTy) - let laterTypeName = td.Name^"D" + let laterTypeName = td.Name+"D" let laterTypeRef = mkILNestedTyRef (ILScopeRef.Local,encl,laterTypeName) let laterGenericParams = td.GenericParams // Number each argument left-to-right, adding one to account for the "this" pointer @@ -534,10 +535,13 @@ let rec convIlxClosureDef cenv encl (td: ILTypeDef) clo = [ I_newobj (laterCloSpec.Constructor, None) ] end, tagApp) + let nowTypeDefs = convIlxClosureDef cenv encl td {clo with cloStructure=nowStruct; cloCode=notlazy nowCode} + let laterCode = rewriteCodeToAccessArgsFromEnv laterCloSpec argToFreeVarMap + let laterTypeDefs = convIlxClosureDef cenv encl {td with GenericParams=laterGenericParams; @@ -546,8 +550,10 @@ let rec convIlxClosureDef cenv encl (td: ILTypeDef) clo = {clo with cloStructure=laterStruct; cloFreeVars=laterFields; cloCode=notlazy laterCode} + // add 'compiler generated' to all the methods in the 'now' classes - let laterTypeDefs = laterTypeDefs |> List.map (addMethodGeneratedAttrsToTypeDef cenv.ilg) + let nowTypeDefs = nowTypeDefs |> List.map (addMethodGeneratedAttrsToTypeDef cenv.ilg) + nowTypeDefs @ laterTypeDefs else @@ -555,6 +561,7 @@ let rec convIlxClosureDef cenv encl (td: ILTypeDef) clo = // CASE 2b2. Build a term application as a virtual method. let nowEnvParentClass = typ_Func cenv (typesOfILParamsList nowParams) nowReturnTy + let cloTypeDef = let nowApplyMethDef = mkILNonGenericVirtualMethod @@ -562,13 +569,16 @@ let rec convIlxClosureDef cenv encl (td: ILTypeDef) clo = nowParams, mkILReturn nowReturnTy, MethodBody.IL (convILMethodBody (Some nowCloSpec,None) (Lazy.force clo.cloCode))) + let ctorMethodDef = mkILStorageCtor - (tagClo, + (None, [ mkLdarg0; mkNormalCall (mkILCtorMethSpecForTy (nowEnvParentClass,[])) ], nowTy, mkILCloFldSpecs cenv nowFields, ILMemberAccess.Assembly) + |> addMethodGeneratedAttrs cenv.ilg + { Name = td.Name; GenericParams= td.GenericParams; Access = td.Access; @@ -592,12 +602,15 @@ let rec convIlxClosureDef cenv encl (td: ILTypeDef) clo = HasSecurity=false; SecurityDecls=emptyILSecurityDecls; tdKind = ILTypeDefKind.Class; } + [cloTypeDef] - | [],[ ],Lambdas_return _ -> + + | [],[],Lambdas_return _ -> + // No code is being declared: just bake a (mutable) environment let cloCode' = match td.Extends with - | None -> (mkILNonGenericEmptyCtor tagClo cenv.ilg.typ_Object).MethodBody + | None -> (mkILNonGenericEmptyCtor None cenv.ilg.typ_Object).MethodBody | Some _ -> convILMethodBody (Some nowCloSpec,None) (Lazy.force clo.cloCode) let ctorMethodDef = @@ -615,7 +628,7 @@ let rec convIlxClosureDef cenv encl (td: ILTypeDef) clo = mkNormalStfld (mkILFieldSpecInTy (nowTy,nm,ty)); ]) flds)) cloCode'.Code, - tagClo)) + None)) let cloTypeDef = { td with @@ -626,9 +639,11 @@ let rec convIlxClosureDef cenv encl (td: ILTypeDef) clo = Methods= mkILMethods (ctorMethodDef :: List.map (convMethodDef (Some nowCloSpec)) td.Methods.AsList); Fields= mkILFields (mkILCloFldDefs cenv nowFields @ td.Fields.AsList); tdKind = ILTypeDefKind.Class; } + [cloTypeDef] + | a,b,_ -> - failwith ("Unexpected unsupported abstraction sequence, #tyabs = "^string a.Length ^ ", #tmabs = "^string b.Length) + failwith ("Unexpected unsupported abstraction sequence, #tyabs = "+string a.Length + ", #tmabs = "+string b.Length) newTypeDefs diff --git a/src/ilx/EraseUnions.fs b/src/ilx/EraseUnions.fs index 6edcb4c663b..47bc8183206 100644 --- a/src/ilx/EraseUnions.fs +++ b/src/ilx/EraseUnions.fs @@ -397,24 +397,26 @@ let genWith g : ILCode = Locals = [] } -let mkBrIsNotData ilg (avoidHelpers, cuspec,cidx,tg) = +let mkBrIsData ilg sense (avoidHelpers, cuspec,cidx,tg) = + let neg = (if sense then BI_brfalse else BI_brtrue) + let pos = (if sense then BI_brtrue else BI_brfalse) let alt = altOfUnionSpec cuspec cidx let altTy = tyForAlt cuspec alt let altName = alt.Name if cuspecRepr.RepresentAlternativeAsNull (cuspec,alt) then - [ I_brcmp (BI_brtrue,tg) ] + [ I_brcmp (neg,tg) ] elif cuspecRepr.RepresentSingleNonNullaryAlternativeAsInstancesOfRootClassAndAnyOtherAlternativesAsNull (cuspec,alt) then // in this case we can use a null test - [ I_brcmp (BI_brfalse,tg) ] + [ I_brcmp (pos,tg) ] else match cuspecRepr.DiscriminationTechnique cuspec with | SingleCase -> [ ] - | RuntimeTypes -> mkRuntimeTypeDiscriminateThen ilg avoidHelpers cuspec alt altName altTy (I_brcmp (BI_brfalse,tg)) - | IntegerTag -> mkTagDiscriminateThen ilg cuspec cidx (I_brcmp (BI_brfalse,tg)) + | RuntimeTypes -> mkRuntimeTypeDiscriminateThen ilg avoidHelpers cuspec alt altName altTy (I_brcmp (pos,tg)) + | IntegerTag -> mkTagDiscriminateThen ilg cuspec cidx (I_brcmp (pos,tg)) | TailOrNull -> match cidx with - | TagNil -> mkGetTailOrNull avoidHelpers cuspec @ [I_brcmp (BI_brtrue,tg)] - | TagCons -> mkGetTailOrNull avoidHelpers cuspec @ [ I_brcmp (BI_brfalse,tg)] + | TagNil -> mkGetTailOrNull avoidHelpers cuspec @ [I_brcmp (neg,tg)] + | TagCons -> mkGetTailOrNull avoidHelpers cuspec @ [ I_brcmp (pos,tg)] | _ -> failwith "unexpected" diff --git a/src/ilx/EraseUnions.fsi b/src/ilx/EraseUnions.fsi index 47311b27700..5fb357d476f 100644 --- a/src/ilx/EraseUnions.fsi +++ b/src/ilx/EraseUnions.fsi @@ -25,7 +25,7 @@ val mkLdDataAddr : bool * IlxUnionSpec * int * int -> ILInstr list val mkStData : IlxUnionSpec * int * int -> ILInstr list /// Make the instruction sequence for a "brisnotdata" operation -val mkBrIsNotData : ILGlobals -> avoidHelpers:bool * IlxUnionSpec * int * ILCodeLabel -> ILInstr list +val mkBrIsData : ILGlobals -> sense: bool -> avoidHelpers:bool * IlxUnionSpec * int * ILCodeLabel -> ILInstr list /// Make the type definition for a union type val mkClassUnionDef : ILGlobals -> ILTypeRef -> ILTypeDef -> IlxUnionInfo -> ILTypeDef diff --git a/src/update.cmd b/src/update.cmd index e59662cbf34..f489fd5ca61 100644 --- a/src/update.cmd +++ b/src/update.cmd @@ -1,11 +1,9 @@ +@if "%_echo%"=="" echo off @rem =========================================================================================================== @rem Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, @rem Version 2.0. See License.txt in the project root for license information. @rem =========================================================================================================== -@echo off -setlocal - if /i "%1" == "debug" goto :ok if /i "%1" == "release" goto :ok if /i "%1" == "signonly" goto :ok @@ -20,20 +18,26 @@ exit /b 1 set BINDIR=%~dp0..\%1\net40\bin -if /i "%PROCESSOR_ARCHITECTURE%"=="x86" set X86_PROGRAMFILES=%ProgramFiles% -if /I "%PROCESSOR_ARCHITECTURE%"=="AMD64" set X86_PROGRAMFILES=%ProgramFiles(x86)% +if exist "%WindowsSDK_ExecutablePath_x64%" set WINSDKNETFXTOOLS_X64=%WindowsSDK_ExecutablePath_x64% +if exist "%WindowsSDK_ExecutablePath_x86%" set WINSDKNETFXTOOLS_X86=%WindowsSDK_ExecutablePath_x86% + +if not "%WindowsSDK_ExecutablePath_x86%" == "" goto :havesdk set REGEXE32BIT=reg.exe if not "%OSARCH%"=="x86" set REGEXE32BIT=%WINDIR%\syswow64\reg.exe - FOR /F "tokens=2* delims= " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\NETFXSDK\4.6\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS=%%B -if "%WINSDKNETFXTOOLS%"=="" FOR /F "tokens=2* delims= " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\Windows\v8.1A\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS=%%B -if "%WINSDKNETFXTOOLS%"=="" FOR /F "tokens=2* delims= " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS=%%B -if "%WINSDKNETFXTOOLS%"=="" FOR /F "tokens=2* delims= " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS=%%B -if "%WINSDKNETFXTOOLS%"=="" FOR /F "tokens=2* delims= " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS=%%B + FOR /F "tokens=2* delims= " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\NETFXSDK\4.6\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS_x86=%%B +if "%WINSDKNETFXTOOLS_x86%"=="" FOR /F "tokens=2* delims= " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\Windows\v8.1A\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS_x86=%%B +if "%WINSDKNETFXTOOLS_x86%"=="" FOR /F "tokens=2* delims= " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS_x86=%%B +if "%WINSDKNETFXTOOLS_x86%"=="" FOR /F "tokens=2* delims= " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS_x86=%%B +if "%WINSDKNETFXTOOLS_x86%"=="" FOR /F "tokens=2* delims= " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS_x86=%%B + +set WINSDKNETFXTOOLS_x64=%WINSDKNETFXTOOLS_x86%x64\ + +:havesdk +set SN32="%WINSDKNETFXTOOLS_x86%sn.exe" +set SN64="%WINSDKNETFXTOOLS_x64%sn.exe" -set SN32="%WINSDKNETFXTOOLS%sn.exe" -set SN64="%WINSDKNETFXTOOLS%x64\sn.exe" set NGEN32=%windir%\Microsoft.NET\Framework\v4.0.30319\ngen.exe set NGEN64=%windir%\Microsoft.NET\Framework64\v4.0.30319\ngen.exe @@ -69,8 +73,8 @@ if /i "%PROCESSOR_ARCHITECTURE%"=="AMD64" ( %SN64% -Vr fsc,b03f5f7f11d50a3a %SN64% -Vr fsi,b03f5f7f11d50a3a - %SN64% -Vr FsiAnyCPU,b03f5f7f11d50a3a - + %SN64% -Vr FsiAnyCPU,b03f5f7f11d50a3a + %SN64% -Vr FSharp.Compiler,b03f5f7f11d50a3a %SN64% -Vr FSharp.Compiler.Server.Shared,b03f5f7f11d50a3a %SN64% -Vr FSharp.Editor,b03f5f7f11d50a3a diff --git a/src/utils/CompilerLocationUtils.fs b/src/utils/CompilerLocationUtils.fs index f607293cfb5..85efb2e5735 100644 --- a/src/utils/CompilerLocationUtils.fs +++ b/src/utils/CompilerLocationUtils.fs @@ -12,15 +12,7 @@ open System.Runtime.InteropServices module internal FSharpEnvironment = /// The F# version reported in the banner -#if OPEN_BUILD - let DotNetBuildString = "(private)" -#else - /// The .NET runtime version that F# was built against (e.g. "v4.0.21104") - let DotNetRuntime = sprintf "v%s.%s.%s" Microsoft.BuildSettings.Version.Major Microsoft.BuildSettings.Version.Minor Microsoft.BuildSettings.Version.ProductBuild - - /// The .NET build string that F# was built against (e.g. "4.0.21104.0") - let DotNetBuildString = Microsoft.BuildSettings.Version.OfFile -#endif + let FSharpBannerVersion = "4.1" let versionOf<'t> = #if FX_RESHAPED_REFLECTION diff --git a/src/utils/EditDistance.fs b/src/utils/EditDistance.fs index b1271f1b76e..1aba0c8e5a2 100644 --- a/src/utils/EditDistance.fs +++ b/src/utils/EditDistance.fs @@ -3,18 +3,19 @@ /// Functions to compute the edit distance between two strings module internal Internal.Utilities.EditDistance -/// Computes the DamerauLevenstein distance +/// Computes the restricted Damerau-Levenstein edit distance, +/// also known as the "optimal string alignment" distance. /// - read more at https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance /// - Implementation taken from http://www.navision-blog.de/2008/11/01/damerau-levenshtein-distance-in-fsharp-part-ii/ let private calcDamerauLevenshtein (a:string, b:string) = let m = b.Length + 1 - let mutable lastLine = Array.init m (fun i -> i) - let mutable lastLastLine = Array.create m 0 - let mutable actLine = Array.create m 0 - - for i in [1..a.Length] do + let mutable lastLine = Array.init m id + let mutable lastLastLine = Array.zeroCreate m + let mutable actLine = Array.zeroCreate m + + for i in 1 .. a.Length do actLine.[0] <- i - for j in [1..b.Length] do + for j in 1 .. b.Length do let cost = if a.[i-1] = b.[j-1] then 0 else 1 let deletion = lastLine.[j] + 1 let insertion = actLine.[j-1] + 1 diff --git a/src/utils/HashMultiMap.fs b/src/utils/HashMultiMap.fs index 3c19849a4d8..90197b1d20d 100644 --- a/src/utils/HashMultiMap.fs +++ b/src/utils/HashMultiMap.fs @@ -10,15 +10,15 @@ open Microsoft.FSharp.Collections // one entry. So use two hash tables: one for the main entries and one for the overflow. [] type internal HashMultiMap<'Key,'Value>(n: int, hasheq: IEqualityComparer<'Key>) = - let firstEntries = new Dictionary<_,_>(n,hasheq); - let rest = new Dictionary<_,_>(3,hasheq); + let firstEntries = Dictionary<_,_>(n,hasheq) + let rest = Dictionary<_,_>(3,hasheq) - new (hasheq : IEqualityComparer<'Key>) = new HashMultiMap<'Key,'Value>(11, hasheq) + new (hasheq : IEqualityComparer<'Key>) = HashMultiMap<'Key,'Value>(11, hasheq) new (seq : seq<'Key * 'Value>, hasheq : IEqualityComparer<'Key>) as x = new HashMultiMap<'Key,'Value>(11, hasheq) then seq |> Seq.iter (fun (k,v) -> x.Add(k,v)) - member x.GetRest(k) = + member x.GetRest(k) = let mutable res = [] let ok = rest.TryGetValue(k,&res) if ok then res else [] @@ -37,9 +37,10 @@ type internal HashMultiMap<'Key,'Value>(n: int, hasheq: IEqualityComparer<'Key>) member x.FirstEntries = firstEntries member x.Rest = rest member x.Copy() = - let res = new HashMultiMap<'Key,'Value>(firstEntries.Count,firstEntries.Comparer) + let res = HashMultiMap<'Key,'Value>(firstEntries.Count,firstEntries.Comparer) for kvp in firstEntries do res.FirstEntries.Add(kvp.Key,kvp.Value) + for kvp in rest do res.Rest.Add(kvp.Key,kvp.Value) res @@ -48,7 +49,7 @@ type internal HashMultiMap<'Key,'Value>(n: int, hasheq: IEqualityComparer<'Key>) with get(y : 'Key) = let mutable res = Unchecked.defaultof<'Value> let ok = firstEntries.TryGetValue(y,&res) - if ok then res else raise (new System.Collections.Generic.KeyNotFoundException("The item was not found in collection")) + if ok then res else raise (KeyNotFoundException("The item was not found in collection")) and set (y:'Key) (z:'Value) = x.Replace(y,z) @@ -61,7 +62,7 @@ type internal HashMultiMap<'Key,'Value>(n: int, hasheq: IEqualityComparer<'Key>) let mutable res = acc for kvp in firstEntries do res <- f kvp.Key kvp.Value res - match x.GetRest(kvp.Key) with + match x.GetRest(kvp.Key) with | [] -> () | rest -> for z in rest do @@ -71,7 +72,7 @@ type internal HashMultiMap<'Key,'Value>(n: int, hasheq: IEqualityComparer<'Key>) member x.Iterate(f) = for kvp in firstEntries do f kvp.Key kvp.Value - match x.GetRest(kvp.Key) with + match x.GetRest(kvp.Key) with | [] -> () | rest -> for z in rest do @@ -105,7 +106,7 @@ type internal HashMultiMap<'Key,'Value>(n: int, hasheq: IEqualityComparer<'Key>) member x.Replace(y,z) = firstEntries.[y] <- z - member x.TryFind(y) = + member x.TryFind(y) = let mutable res = Unchecked.defaultof<'Value> let ok = firstEntries.TryGetValue(y,&res) if ok then Some(res) else None @@ -114,7 +115,7 @@ type internal HashMultiMap<'Key,'Value>(n: int, hasheq: IEqualityComparer<'Key>) interface IEnumerable> with member s.GetEnumerator() = - let elems = new System.Collections.Generic.List<_>(firstEntries.Count + rest.Count) + let elems = List<_>(firstEntries.Count + rest.Count) for kvp in firstEntries do elems.Add(kvp) for z in s.GetRest(kvp.Key) do diff --git a/src/utils/TaggedCollections.fs b/src/utils/TaggedCollections.fs index dc966ab3478..60a2e0bab9b 100644 --- a/src/utils/TaggedCollections.fs +++ b/src/utils/TaggedCollections.fs @@ -1173,6 +1173,5 @@ namespace Internal.Utilities.Collections.Tagged override this.GetHashCode() = this.ComputeHashCode() - type Map<'Key,'T> = Map<'Key, 'T, IComparer<'Key>> - type Set<'T> = Set<'T, IComparer<'T>> - + type internal Map<'Key,'T> = Map<'Key, 'T, IComparer<'Key>> + type internal Set<'T> = Set<'T, IComparer<'T>> diff --git a/src/utils/filename.fs b/src/utils/filename.fs index 19d489542bc..ad494a0fd75 100644 --- a/src/utils/filename.fs +++ b/src/utils/filename.fs @@ -7,19 +7,32 @@ open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library exception IllegalFileNameChar of string * char -let illegalPathChars = Path.GetInvalidPathChars() - -let checkPathForIllegalChars (path:string) = - for c in path do - if illegalPathChars |> Array.exists(fun c1->c1=c) then - raise(IllegalFileNameChar(path,c)) +/// The set of characters which may not be used in a path. +/// This is saved here because Path.GetInvalidPathChars() allocates and returns +/// a new array each time it's called (by necessity, for security reasons). +/// This is only used within `checkPathForIllegalChars`, and is only read from. +let illegalPathChars = + let chars = Path.GetInvalidPathChars () + chars + +let checkPathForIllegalChars (path:string) = + let len = path.Length + for i = 0 to len - 1 do + let c = path.[i] + + // Determine if this character is disallowed within a path by + // attempting to find it in the array of illegal path characters. + for badChar in illegalPathChars do + if c = badChar then + raise(IllegalFileNameChar(path, c)) // Case sensitive (original behaviour preserved). let checkSuffix (x:string) (y:string) = x.EndsWith(y,System.StringComparison.Ordinal) let hasExtension (s:string) = checkPathForIllegalChars s - (s.Length >= 1 && s.[s.Length - 1] = '.' && s <> ".." && s <> ".") + let sLen = s.Length + (sLen >= 1 && s.[sLen - 1] = '.' && s <> ".." && s <> ".") || Path.HasExtension(s) let chopExtension (s:string) = @@ -39,8 +52,11 @@ let directoryName (s:string) = let fileNameOfPath s = checkPathForIllegalChars s - Path.GetFileName(s) + Path.GetFileName(s) let fileNameWithoutExtension s = checkPathForIllegalChars s - Path.GetFileNameWithoutExtension(s) + Path.GetFileNameWithoutExtension(s) + +let trimQuotes (s:string) = + s.Trim( [|' '; '\"'|] ) diff --git a/src/utils/filename.fsi b/src/utils/filename.fsi index 14a40e915fa..361f8943ca8 100644 --- a/src/utils/filename.fsi +++ b/src/utils/filename.fsi @@ -25,4 +25,5 @@ val fileNameOfPath: string -> string /// Get the filename without extension of the given path. val fileNameWithoutExtension: string -> string - +/// Trim the quotes and spaces from either end of a string +val trimQuotes: string -> string diff --git a/src/utils/prim-lexing.fs b/src/utils/prim-lexing.fs index 19098f4f2ed..eb5e932846f 100644 --- a/src/utils/prim-lexing.fs +++ b/src/utils/prim-lexing.fs @@ -74,28 +74,27 @@ namespace Internal.Utilities.Text.Lexing and [] internal LexBuffer<'Char>(filler: LexBufferFiller<'Char>) = let context = new Dictionary(1) - let mutable buffer=[||]; + let mutable buffer = [||] /// number of valid characters beyond bufferScanStart. - let mutable bufferMaxScanLength=0; + let mutable bufferMaxScanLength = 0 /// count into the buffer when scanning. - let mutable bufferScanStart=0; + let mutable bufferScanStart = 0 /// number of characters scanned so far. - let mutable bufferScanLength=0; + let mutable bufferScanLength = 0 /// length of the scan at the last accepting state. - let mutable lexemeLength=0; + let mutable lexemeLength = 0 /// action related to the last accepting state. - let mutable bufferAcceptAction=0; - let mutable eof = false; - let mutable startPos = Position.Empty ; + let mutable bufferAcceptAction = 0 + let mutable eof = false + let mutable startPos = Position.Empty let mutable endPos = Position.Empty - // Throw away all the input besides the lexeme - + // Throw away all the input besides the lexeme let discardInput () = let keep = Array.sub buffer bufferScanStart bufferScanLength let nkeep = keep.Length - Array.blit keep 0 buffer 0 nkeep; - bufferScanStart <- 0; + Array.blit keep 0 buffer 0 nkeep + bufferScanStart <- 0 bufferMaxScanLength <- nkeep @@ -142,7 +141,7 @@ namespace Internal.Utilities.Text.Lexing member lexbuf.EnsureBufferSize n = if lexbuf.BufferScanPos + n >= buffer.Length then let repl = Array.zeroCreate (lexbuf.BufferScanPos + n) - Array.blit buffer bufferScanStart repl bufferScanStart bufferScanLength; + Array.blit buffer bufferScanStart repl bufferScanStart bufferScanLength buffer <- repl @@ -151,8 +150,8 @@ namespace Internal.Utilities.Text.Lexing let extension= Array.zeroCreate 4096 let filler (lexBuffer: LexBuffer<'Char>) = let n = f (extension,0,extension.Length) - lexBuffer.EnsureBufferSize n; - Array.blit extension 0 lexBuffer.Buffer lexBuffer.BufferScanPos n; + lexBuffer.EnsureBufferSize n + Array.blit extension 0 lexBuffer.Buffer lexBuffer.BufferScanPos n lexBuffer.BufferMaxScanLength <- lexBuffer.BufferScanLength + n new LexBuffer<'Char>(filler) diff --git a/src/utils/prim-parsing.fs b/src/utils/prim-parsing.fs index ba71bd5d937..3db27bb5031 100644 --- a/src/utils/prim-parsing.fs +++ b/src/utils/prim-parsing.fs @@ -83,8 +83,8 @@ type Stack<'a>(n) = let oldSize = contents.Length if newSize > oldSize then let old = contents - contents <- Array.zeroCreate (max newSize (oldSize * 2)); - Array.blit old 0 contents 0 count; + contents <- Array.zeroCreate (max newSize (oldSize * 2)) + Array.blit old 0 contents 0 count member buf.Count = count member buf.Pop() = count <- count - 1 diff --git a/src/utils/reshapedmsbuild.fs b/src/utils/reshapedmsbuild.fs index 13fdd0366bd..ae8c8c86846 100644 --- a/src/utils/reshapedmsbuild.fs +++ b/src/utils/reshapedmsbuild.fs @@ -83,7 +83,9 @@ module internal MsBuildAdapters = | Version45 = 5 | Version451 = 6 | Version46 = 7 - | VersionLatest = 7 //TargetDotNetFrameworkVersion.Version46 + | Version461 = 8 + | Version452 = 9 + | VersionLatest = 8 //TargetDotNetFrameworkVersion.Version461 /// /// Used to specify the targeted bitness of the .NET Framework for some methods of ToolLocationHelper @@ -110,7 +112,9 @@ module internal ToolLocationHelper = let dotNetFrameworkVersion40 = Version(4, 0) let dotNetFrameworkVersion45 = Version(4, 5) let dotNetFrameworkVersion451 = Version(4, 5, 1) + let dotNetFrameworkVersion452 = Version(4, 5, 2) let dotNetFrameworkVersion46 = Version(4, 6) + let dotNetFrameworkVersion461 = Version(4, 6, 1) // visual studio versions. let visualStudioVersion100 = new Version(10, 0); @@ -199,7 +203,9 @@ module internal ToolLocationHelper = | TargetDotNetFrameworkVersion.Version40 -> dotNetFrameworkVersion40 | TargetDotNetFrameworkVersion.Version45 -> dotNetFrameworkVersion45 | TargetDotNetFrameworkVersion.Version451 -> dotNetFrameworkVersion451 + | TargetDotNetFrameworkVersion.Version452 -> dotNetFrameworkVersion452 | TargetDotNetFrameworkVersion.Version46 -> dotNetFrameworkVersion46 + | TargetDotNetFrameworkVersion.Version461 -> dotNetFrameworkVersion461 | _ -> raise (getArgumentException version) let complusInstallRoot = Environment.GetEnvironmentVariable("COMPLUS_INSTALLROOT") @@ -735,8 +741,10 @@ module internal ToolLocationHelper = CreateDotNetFrameworkSpecForV4 dotNetFrameworkVersion40 visualStudioVersion100 // v4.0 CreateDotNetFrameworkSpecForV4 dotNetFrameworkVersion45 visualStudioVersion110 // v4.5 CreateDotNetFrameworkSpecForV4 dotNetFrameworkVersion451 visualStudioVersion120 // v4.5.1 + CreateDotNetFrameworkSpecForV4 dotNetFrameworkVersion452 visualStudioVersion150 // v4.5.2 CreateDotNetFrameworkSpecForV4 dotNetFrameworkVersion46 visualStudioVersion140 // v4.6 CreateDotNetFrameworkSpecForV4 dotNetFrameworkVersion46 visualStudioVersion150 // v4.6 + CreateDotNetFrameworkSpecForV4 dotNetFrameworkVersion461 visualStudioVersion150 // v4.6.1 |] array.ToDictionary(fun spec -> spec.Version) diff --git a/src/utils/reshapedreflection.fs b/src/utils/reshapedreflection.fs index af1bfb3cf2f..fe32990c35e 100644 --- a/src/utils/reshapedreflection.fs +++ b/src/utils/reshapedreflection.fs @@ -24,6 +24,9 @@ module internal XmlAdapters = module internal ReflectionAdapters = open System open System.Reflection +#if FX_RESHAPED_REFLECTION_CORECLR + open System.Runtime.Loader +#endif open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators open Microsoft.FSharp.Collections open PrimReflectionAdapters @@ -313,7 +316,13 @@ module internal ReflectionAdapters = member this.GetSetMethod() = this.SetMethod #if FX_RESHAPED_REFLECTION_CORECLR - let globalLoadContext = System.Runtime.Loader.AssemblyLoadContext.Default + type CustomAssemblyResolver() = + inherit AssemblyLoadContext() + override this.Load (assemblyName:AssemblyName):Assembly = + this.LoadFromAssemblyName(assemblyName) + + let globalLoadContext = new CustomAssemblyResolver() + #endif type System.Reflection.Assembly with member this.GetTypes() = @@ -330,10 +339,10 @@ module internal ReflectionAdapters = #if FX_RESHAPED_REFLECTION_CORECLR static member LoadFrom(filename:string) = - globalLoadContext.LoadFromAssemblyName(System.Runtime.Loader.AssemblyLoadContext.GetAssemblyName(filename)) + globalLoadContext.LoadFromAssemblyPath(filename) static member UnsafeLoadFrom(filename:string) = - globalLoadContext.LoadFromAssemblyName(System.Runtime.Loader.AssemblyLoadContext.GetAssemblyName(filename)) + globalLoadContext.LoadFromAssemblyPath(filename) type System.Reflection.AssemblyName with static member GetAssemblyName(path) = diff --git a/src/utils/sformat.fs b/src/utils/sformat.fs index 23c4e97dc25..ee87a337fec 100644 --- a/src/utils/sformat.fs +++ b/src/utils/sformat.fs @@ -296,45 +296,6 @@ namespace Microsoft.FSharp.Text.StructuredFormat (let cases = FSharpType.GetUnionCases typ cases.Length > 0 && equivHeadTypes (typedefof>) cases.[0].DeclaringType) - module Type = - - let recdDescOfProps props = - props |> Array.toList |> List.map (fun (p:PropertyInfo) -> p.Name, p.PropertyType) - - let getTypeInfoOfType (bindingFlags:BindingFlags) (typ:Type) = -#if FX_RESHAPED_REFLECTION - let showNonPublic = isNonPublicFlag bindingFlags -#endif - if FSharpType.IsTuple(typ) then TypeInfo.TupleType (FSharpType.GetTupleElements(typ) |> Array.toList) - elif FSharpType.IsFunction(typ) then let ty1,ty2 = FSharpType.GetFunctionElements typ in TypeInfo.FunctionType( ty1,ty2) -#if FX_RESHAPED_REFLECTION - elif FSharpType.IsUnion(typ, showNonPublic) then - let cases = FSharpType.GetUnionCases(typ, showNonPublic) -#else - elif FSharpType.IsUnion(typ,bindingFlags) then - let cases = FSharpType.GetUnionCases(typ,bindingFlags) -#endif - match cases with - | [| |] -> TypeInfo.ObjectType(typ) - | _ -> - TypeInfo.SumType(cases |> Array.toList |> List.map (fun case -> - let flds = case.GetFields() - case.Name,recdDescOfProps(flds))) -#if FX_RESHAPED_REFLECTION - elif FSharpType.IsRecord(typ, showNonPublic) then - let flds = FSharpType.GetRecordFields(typ, showNonPublic) -#else - elif FSharpType.IsRecord(typ,bindingFlags) then - let flds = FSharpType.GetRecordFields(typ,bindingFlags) -#endif - TypeInfo.RecordType(recdDescOfProps(flds)) - else - TypeInfo.ObjectType(typ) - - let IsOptionType (typ:Type) = isOptionTy typ - let IsListType (typ:Type) = isListType typ - let IsUnitType (typ:Type) = isUnitType typ - [] type ValueInfo = | TupleValue of obj list @@ -1006,7 +967,7 @@ namespace Microsoft.FSharp.Text.StructuredFormat makeRecordL (List.map itemL items) | ConstructorValue (constr,recd) when // x is List. Note: "null" is never a valid list value. - x<>null && Type.IsListType (x.GetType()) -> + x<>null && isListType (x.GetType()) -> match constr with | "Cons" -> let (x,xs) = unpackCons recd diff --git a/tests/.gitignore b/tests/.gitignore index eca5ba1118f..fed220c1c2c 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -1,4 +1,5 @@ FSharp_* FSharpQA_* CoreUnit_* -TestResults \ No newline at end of file +TestResults +*.il \ No newline at end of file diff --git a/tests/BuildTestTools.cmd b/tests/BuildTestTools.cmd index 839be2c6275..deb4062d969 100644 --- a/tests/BuildTestTools.cmd +++ b/tests/BuildTestTools.cmd @@ -13,6 +13,7 @@ exit /b 1 :: Check prerequisites if not '%VisualStudioVersion%' == '' goto vsversionset + if exist "%ProgramFiles(x86)%\Microsoft Visual Studio 15.0\common7\ide\devenv.exe" set VisualStudioVersion=15.0 if exist "%ProgramFiles%\Microsoft Visual Studio 15.0\common7\ide\devenv.exe" set VisualStudioVersion=15.0 if exist "%VS150COMNTOOLS%" set VisualStudioVersion=15.0 @@ -26,12 +27,23 @@ if exist "%ProgramFiles%\Microsoft Visual Studio 12.0\common7\ide\devenv.exe" se if exist "%VS120COMNTOOLS%" set VisualStudioVersion=12.0 :vsversionset -if '%VisualStudioVersion%' == '' echo Error: Could not find an installation of Visual Studio && goto :eof - +if '%VisualStudioVersion%' == '' echo Error: Could not find an installation of Visual Studio && goto :failure -if exist "%ProgramFiles(x86)%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" set _msbuildexe="%ProgramFiles(x86)%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" -if exist "%ProgramFiles%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" set _msbuildexe="%ProgramFiles%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" -if not exist %_msbuildexe% echo Error: Could not find MSBuild.exe. && goto :eof +if exist "%VS150COMNTOOLS%..\..\MSBuild\15.0\Bin\MSBuild.exe" ( + set _msbuildexe="%VS150COMNTOOLS%..\..\MSBuild\15.0\Bin\MSBuild.exe" + goto :havemsbuild +) +if exist "%ProgramFiles(x86)%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" ( + set _msbuildexe="%ProgramFiles(x86)%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" + goto :havemsbuild +) +if exist "%ProgramFiles%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" ( + set _msbuildexe="%ProgramFiles%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" + goto :havemsbuild +) +echo Error: Could not find MSBuild.exe. && goto :failure +goto :eof +:havemsbuild if not exist "%~dp0fsharpqa\testenv\bin" mkdir "%~dp0fsharpqa\testenv\bin" || goto :error %_msbuildexe% %~dp0fsharpqa\testenv\src\ILComparer\ILComparer.fsproj /p:Configuration=%1 /t:Build || goto :error diff --git a/tests/fsharp/Commands.fs b/tests/fsharp/Commands.fs index 0b39e7af2d8..dd3e03e2b16 100644 --- a/tests/fsharp/Commands.fs +++ b/tests/fsharp/Commands.fs @@ -130,7 +130,7 @@ let convertToShortPath path = match Process.exec cmdArgs (Path.GetTempPath()) Map.empty "cmd.exe" args with | ErrorLevel _ -> path - | Ok -> match !result with None -> path | Some p -> p + | CmdResult.Success -> match !result with None -> path | Some p -> p let where envVars cmd = log "where %s" cmd diff --git a/tests/fsharp/core/apporder/test.fsx b/tests/fsharp/core/apporder/test.fsx index d1876072321..c946bf563d6 100644 --- a/tests/fsharp/core/apporder/test.fsx +++ b/tests/fsharp/core/apporder/test.fsx @@ -13,9 +13,11 @@ let test s b = if b then () else report_failure(s) let out r (s:string) = r := !r @ [s] -let check s v1 v2 = - if v1 = v2 then printfn "%s: OK" s - else report_failure (sprintf "%s: FAILED, expected %A, got %A" s v2 v1) +let check s actual expected = + if actual = expected then printfn "%s: OK" s + else report_failure (sprintf "%s: FAILED, expected %A, got %A" s expected actual) + +let check2 s expected actual = check s actual expected module CheckMutationOfArgumentValuesInOtherArguments = let test1232() = @@ -841,6 +843,7 @@ module AppOneRecGeneric = test1mod() test2mod() + module DuplicateTestsWithCondensedArgs = module CheckMutationOfArgumentValuesInOtherArguments = diff --git a/tests/fsharp/core/byrefs/test.fsx b/tests/fsharp/core/byrefs/test.fsx new file mode 100644 index 00000000000..839259e6f14 --- /dev/null +++ b/tests/fsharp/core/byrefs/test.fsx @@ -0,0 +1,303 @@ +// #Conformance #Constants #Recursion #LetBindings #MemberDefinitions #Mutable +#if Portable +module Core_apporder +#endif + +#light +let failures = ref false +let report_failure (s) = + stderr.WriteLine ("NO: " + s); failures := true +let test s b = if b then () else report_failure(s) + +(* TEST SUITE FOR Int32 *) + +let out r (s:string) = r := !r @ [s] + +let check s actual expected = + if actual = expected then printfn "%s: OK" s + else report_failure (sprintf "%s: FAILED, expected %A, got %A" s expected actual) + +let check2 s expected actual = check s actual expected + +module ByrefReturnTests = + + module TestImmediateReturn = + let mutable x = 1 + + let f () = &x + + let test() = + let addr = f () + addr <- addr + 1 + check2 "cepojcwem1" 2 x + + test() + + module TestMatchReturn = + let mutable x = 1 + let mutable y = 1 + + let f inp = match inp with 3 -> &x | _ -> &y + + let test() = + let addr = f 3 + addr <- addr + 1 + check2 "cepojcwem2" 2 x + check2 "cepojcwem3" 1 y + let addr = f 4 + addr <- addr + 1 + check2 "cepojcwem4" 2 x + check2 "cepojcwem5" 2 y + + test() + + module TestConditionalReturn = + let mutable x = 1 + let mutable y = 1 + + let f inp = if inp = 3 then &x else &y + + let test() = + let addr = f 3 + addr <- addr + 1 + check2 "cepojcwem6" 2 x + check2 "cepojcwem7" 1 y + let addr = f 4 + addr <- addr + 1 + check2 "cepojcwem8" 2 x + check2 "cepojcwem9" 2 y + + test() + + module TestTryCatchReturn = + let mutable x = 1 + let mutable y = 1 + + let f inp = try &x with _ -> &y + + let test() = + let addr = f 3 + addr <- addr + 1 + check2 "cepojcwem6b" 2 x + check2 "cepojcwem7b" 1 y + let addr = f 4 + addr <- addr + 1 + check2 "cepojcwem8b" 3 x + check2 "cepojcwem9b" 1 y + + test() + + module TestTryFinallyReturn = + let mutable x = 1 + let mutable y = 1 + + let f inp = try &x with _ -> &y + + let test() = + let addr = f 3 + addr <- addr + 1 + check2 "cepojcwem6b" 2 x + check2 "cepojcwem7b" 1 y + let addr = f 4 + addr <- addr + 1 + check2 "cepojcwem8b" 3 x + check2 "cepojcwem9b" 1 y + + test() + + module TestOneArgument = + + let f (x:byref) = &x + + let test() = + let mutable r1 = 1 + let addr = f &r1 + addr <- addr + 1 + check2 "cepojcwem10" 2 r1 + + test() + + module TestTwoArguments = + + let f (x:byref, y:byref) = &x + + let test() = + let mutable r1 = 1 + let mutable r2 = 0 + let addr = f (&r1, &r2) + addr <- addr + 1 + check2 "cepojcwem11" 2 r1 + + test() + + module TestRecordParam = + + type R = { mutable z : int } + let f (x:R) = &x.z + + let test() = + let r = { z = 1 } + let addr = f r + addr <- addr + 1 + check2 "cepojcwem12" 2 r.z + + test() + + module TestRecordParam2 = + + type R = { mutable z : int } + let f (x:byref) = &x.z + + let test() = + let mutable r = { z = 1 } + let addr = f &r + addr <- addr + 1 + check2 "cepojcwem13a" 2 r.z + + test() + + module TestClassParamMutableField = + + type C() = [] val mutable z : int + + let f (x:C) = &x.z + + let test() = + let c = C() + let addr = f c + addr <- addr + 1 + check2 "cepojcwem13b" 1 c.z + + test() + + module TestArrayParam = + + let f (x:int[]) = &x.[0] + + let test() = + let r = [| 1 |] + let addr = f r + addr <- addr + 1 + check2 "cepojcwem14" 2 r.[0] + + test() + + module TestStructParam = + + [] + type R = { mutable z : int } + + let f (x:byref) = &x.z + + let test() = + let mutable r = { z = 1 } + let addr = f &r + addr <- addr + 1 + check2 "cepojcwem15" 2 r.z + + test() + + module TestInterfaceMethod = + let mutable x = 1 + + type I = + abstract M : unit -> byref + + type C() = + interface I with + member this.M() = &x + + let ObjExpr() = + { new I with + member this.M() = &x } + + let f (i:I) = i.M() + + let test() = + let addr = f (C()) + addr <- addr + 1 + let addr = f (ObjExpr()) + addr <- addr + 1 + check2 "cepojcwem16" 3 x + + test() + + module TestInterfaceProperty = + let mutable x = 1 + + type I = + abstract P : byref + + type C() = + interface I with + member this.P = &x + + let ObjExpr() = + { new I with + member this.P = &x } + + let f (i:I) = i.P + + let test() = + let addr = f (C()) + addr <- addr + 1 + let addr = f (ObjExpr()) + addr <- addr + 1 + check2 "cepojcwem17" 3 x + + test() + + module TestDelegateMethod = + let mutable x = 1 + + type D = delegate of unit -> byref + + let d() = D(fun () -> &x) + + let f (d:D) = d.Invoke() + + let test() = + let addr = f (d()) + check2 "cepojcwem18a" 1 x + addr <- addr + 1 + check2 "cepojcwem18b" 2 x + + test() + + module TestBaseCall = + type Incrementor(z) = + abstract member Increment : int byref * int byref -> unit + default this.Increment(i : int byref,j : int byref) = + i <- i + z + + type Decrementor(z) = + inherit Incrementor(z) + override this.Increment(i, j) = + base.Increment(&i, &j) + + i <- i - z + + module TestDelegateMethod2 = + let mutable x = 1 + + type D = delegate of byref -> byref + + let d() = D(fun xb -> &xb) + + let f (d:D) = d.Invoke(&x) + + let test() = + let addr = f (d()) + check2 "cepojcwem18a2" 1 x + addr <- addr + 1 + check2 "cepojcwem18b3" 2 x + + test() + + +let aa = + if !failures then (stdout.WriteLine "Test Failed"; exit 1) + else (stdout.WriteLine "Test Passed"; + System.IO.File.WriteAllText("test.ok","ok"); + exit 0) + diff --git a/tests/fsharp/core/fileorder/libfile1.fs b/tests/fsharp/core/fileorder/libfile1.fs new file mode 100644 index 00000000000..bd36b93284d --- /dev/null +++ b/tests/fsharp/core/fileorder/libfile1.fs @@ -0,0 +1,15 @@ + +// Repro for https://github.com/Microsoft/visualfsharp/issues/1298 +namespace Ploeh.Weird.Repro + +type Foo = { + Value : string + Text : string } + +type Bar = { + Value : string + Number : int } + +type Baz = { + Value : int + Text : string } \ No newline at end of file diff --git a/tests/fsharp/core/fileorder/libfile2.fs b/tests/fsharp/core/fileorder/libfile2.fs new file mode 100644 index 00000000000..173bfdff757 --- /dev/null +++ b/tests/fsharp/core/fileorder/libfile2.fs @@ -0,0 +1,4 @@ +namespace Ploeh.Weird.Repro + + +// deliberately empty diff --git a/tests/fsharp/core/fileorder/test.fsx b/tests/fsharp/core/fileorder/test.fsx new file mode 100644 index 00000000000..483369aa07a --- /dev/null +++ b/tests/fsharp/core/fileorder/test.fsx @@ -0,0 +1,23 @@ +// #Conformance #Regression +#if Portable +module Core_fileorder +#endif + + +open Ploeh.Weird.Repro + +let failures = ref false +let report_failure s = + stderr.WriteLine ("NO: test "+s+" failed"); failures := true + + +let b = { + Value = 42 + Text = "Ploeh" } + +let aa = + if !failures then (stdout.WriteLine "Test Failed"; exit 1) + +do (stdout.WriteLine "Test Passed"; + System.IO.File.WriteAllText("test.ok","ok"); + exit 0) \ No newline at end of file diff --git a/tests/fsharp/core/fsfromfsviacs/lib.fs b/tests/fsharp/core/fsfromfsviacs/lib.fs index ceb7bc8fbae..aee878399a0 100644 --- a/tests/fsharp/core/fsfromfsviacs/lib.fs +++ b/tests/fsharp/core/fsfromfsviacs/lib.fs @@ -42,7 +42,15 @@ let tup3 = (2,3,4) let tup4 = (2,3,4,5) +type OptionalParameterTests = + static member MethodWithOptionalParams<'T>(?value1 : 'T, ?value2 : int) = (value1, value2) + static member FSharpMethodThatConsumesOptionalParams() = + let _ = OptionalParameterTests.MethodWithOptionalParams() + let _ = OptionalParameterTests.MethodWithOptionalParams(42) + let _ = OptionalParameterTests.MethodWithOptionalParams(value2 = 42) + let _ = OptionalParameterTests.MethodWithOptionalParams(42, ?value2 = None) + () module StructUnionsTests = @@ -111,6 +119,4 @@ module NestedStructUnionsTests = let testPattern3mut(u2:U2) = let mutable u2 = u2 match u2 with - | U2(U1(dt1,"a"),U1(dt2,"b")) -> (dt1 = dt2) - - + | U2(U1(dt1,"a"),U1(dt2,"b")) -> (dt1 = dt2) \ No newline at end of file diff --git a/tests/fsharp/core/fsfromfsviacs/lib2.cs b/tests/fsharp/core/fsfromfsviacs/lib2.cs index 969347a49f7..f46cbac1581 100644 --- a/tests/fsharp/core/fsfromfsviacs/lib2.cs +++ b/tests/fsharp/core/fsfromfsviacs/lib2.cs @@ -1,30 +1,33 @@ +using System; using Microsoft.FSharp; using Microsoft.FSharp.Core; using Microsoft.FSharp.Collections; +[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("a")] + public class Lib2 { public static Lib.recd1 r1 = new Lib.recd1(3); public static Lib.recd2 r2 = new Lib.recd2(3, "a"); public static Lib.rrecd2 rr2 = new Lib.rrecd2("a", 3); public static Lib.recd3 r3 = new Lib.recd3(4, "c", null); - + public static Lib.discr1_0 d10a = Lib.discr1_0.Discr1_0_A; public static Lib.discr1_1 d11a = Lib.discr1_1.NewDiscr1_1_A(3); public static Lib.discr1_2 d12a = Lib.discr1_2.NewDiscr1_2_A(3, 4); - + public static Lib.discr2_0_0 d200a = Lib.discr2_0_0.Discr2_0_0_A; public static Lib.discr2_1_0 d210a = Lib.discr2_1_0.NewDiscr2_1_0_A(3); public static Lib.discr2_0_1 d201a = Lib.discr2_0_1.Discr2_0_1_A; public static Lib.discr2_1_1 d211a = Lib.discr2_1_1.NewDiscr2_1_1_A(3); - + public static Lib.discr2_0_0 d200b = Lib.discr2_0_0.Discr2_0_0_B; public static Lib.discr2_1_0 d210b = Lib.discr2_1_0.Discr2_1_0_B; public static Lib.discr2_0_1 d201b = Lib.discr2_0_1.NewDiscr2_0_1_B(3); public static Lib.discr2_1_1 d211b = Lib.discr2_1_1.NewDiscr2_1_1_B(4); - public static FSharpList li1 = FSharpList.Cons(3,FSharpList.Empty); - public static FSharpList lr1 = FSharpList.Cons(r1,FSharpList.Empty); + public static FSharpList li1 = FSharpList.Cons(3, FSharpList.Empty); + public static FSharpList lr1 = FSharpList.Cons(r1, FSharpList.Empty); public static FSharpOption oi1 = FSharpOption.Some(3); public static FSharpOption or1 = FSharpOption.Some(r1); @@ -34,8 +37,44 @@ public class Lib2 public static Lib.StructUnionsTests.U0 u0 = Lib.StructUnionsTests.U0.U0; public static Lib.StructUnionsTests.U1 u1 = Lib.StructUnionsTests.U1.NewU1(3); - public static Lib.StructUnionsTests.U2 u2 = Lib.StructUnionsTests.U2.NewU2(3,4); + public static Lib.StructUnionsTests.U2 u2 = Lib.StructUnionsTests.U2.NewU2(3, 4); - static Lib2() { r3.recd3field3 = r3; } + static Lib2() { r3.recd3field3 = r3; } } + +namespace Newtonsoft.Json.Converters +{ + internal class SomeClass + { + public SomeClass() { } + public static void SomeMethod() { } + } + public class ContainerClass + { + public ContainerClass() { } + internal class SomeClass + { + public SomeClass() { } + public static void SomeMethod() { } + } + + } +} + +namespace FSharpOptionalTests +{ + public class ApiWrapper + { + public static Tuple, FSharpOption> MethodWithOptionalParams(T value1, int value2) + { + return Lib.OptionalParameterTests.MethodWithOptionalParams(value1 = value1, value2 = value2); + } + + public static int MethodThatImplicitlyConvertsFSharpOption(int x) + { + FSharpOption opt = x; + return opt.Value; + } + } +} \ No newline at end of file diff --git a/tests/fsharp/core/fsfromfsviacs/lib3.cs b/tests/fsharp/core/fsfromfsviacs/lib3.cs new file mode 100644 index 00000000000..b688b710bc2 --- /dev/null +++ b/tests/fsharp/core/fsfromfsviacs/lib3.cs @@ -0,0 +1,26 @@ +using Microsoft.FSharp; +using Microsoft.FSharp.Core; +using Microsoft.FSharp.Collections; + +namespace Newtonsoft.Json.Converters +{ + // This should be preferred over the same type in lib2.cs + public class SomeClass + { + public SomeClass() { } + public static void SomeMethod() { } + } + + public class ContainerClass + { + public ContainerClass() { } + + // This should be preferred over the same type in lib2.cs + public class SomeClass + { + public SomeClass() { } + public static void SomeMethod() { } + } + + } +} diff --git a/tests/fsharp/core/fsfromfsviacs/test.fsx b/tests/fsharp/core/fsfromfsviacs/test.fsx index 2c0f1652a0c..1d84e3d689b 100644 --- a/tests/fsharp/core/fsfromfsviacs/test.fsx +++ b/tests/fsharp/core/fsfromfsviacs/test.fsx @@ -92,6 +92,12 @@ module NestedStructPatternMatchingAcrossAssemblyBoundaries = let _ = test "structunion394b3f" (testPattern3mut(u2)) +let TestAccessibility() = + let x = new Newtonsoft.Json.Converters.SomeClass() + let x2 = new Newtonsoft.Json.Converters.ContainerClass.SomeClass() + Newtonsoft.Json.Converters.SomeClass.SomeMethod() + Newtonsoft.Json.Converters.ContainerClass.SomeClass.SomeMethod() + (* public Lib.discr1_0 d10a = Lib.discr1_0.MkDiscr1_0_A(); public Lib.discr1_1 d11a = Lib.discr1_1.MkDiscr1_1_A(3); diff --git a/tests/fsharp/core/internalsvisible/librarycs.cs b/tests/fsharp/core/internalsvisible/librarycs.cs index 8b2c3eaaac4..f985db4f4ca 100644 --- a/tests/fsharp/core/internalsvisible/librarycs.cs +++ b/tests/fsharp/core/internalsvisible/librarycs.cs @@ -15,5 +15,17 @@ internal class APrivateClass { private static int PrivateProperty { get { return 2; } } internal static int InternalProperty { get { return 2; } } - } + } + public class Class1 + { + public Class1() { } + protected static int ProtectedStatic; + internal static int InternalStatic; + protected internal static int ProtectedInternalStatic; + public static int PublicStatic; + protected int Protected; + internal int Internal; + protected internal int ProtectedInternal; + public int Public; + } } diff --git a/tests/fsharp/core/internalsvisible/main.fs b/tests/fsharp/core/internalsvisible/main.fs index fbe6256ad27..7c8119827b7 100644 --- a/tests/fsharp/core/internalsvisible/main.fs +++ b/tests/fsharp/core/internalsvisible/main.fs @@ -18,6 +18,24 @@ printf "APrivateClass.InternalProperty = %2d\n" LibraryCS.APrivateClass.Inter //printf "privateF 2 = %d\n" (Library.M.privateF 2) // inaccessable +module internal Repro1332 = + let c = LibraryCS.Class1() + //c.Protected |> ignore + c.Internal |> ignore + c.ProtectedInternal |> ignore + LibraryCS.Class1.InternalStatic |> ignore + LibraryCS.Class1.ProtectedInternalStatic |> ignore + +type internal Class2() = + inherit LibraryCS.Class1() + member c.M() = + c.Internal |> ignore + c.ProtectedInternal |> ignore + c.Protected |> ignore + LibraryCS.Class1.InternalStatic |> ignore + LibraryCS.Class1.ProtectedInternalStatic |> ignore + LibraryCS.Class1.ProtectedStatic |> ignore + (* Check that internalVisibleTo items can be used in internal items *) module internal Repro3737 = diff --git a/tests/fsharp/core/libtest/test.fsx b/tests/fsharp/core/libtest/test.fsx index 472e74ea318..a53ec68ab7e 100644 --- a/tests/fsharp/core/libtest/test.fsx +++ b/tests/fsharp/core/libtest/test.fsx @@ -5662,6 +5662,10 @@ module Regression_139182 = static member Prop4 = str.ToLower() // ok member x.Prop5 = s2.TheMethod() // ok +module LittleTestFor823 = + let x, y = 1, 2 + let v = Some ((x = y), (x = x)) + (*--------------------------------------------------------------------------- !* wrap up *--------------------------------------------------------------------------- *) diff --git a/tests/fsharp/core/longnames/test.fsx b/tests/fsharp/core/longnames/test.fsx index e4b1b879e6f..2035466fc8b 100644 --- a/tests/fsharp/core/longnames/test.fsx +++ b/tests/fsharp/core/longnames/test.fsx @@ -413,6 +413,214 @@ module TestsForUsingTypeNamesAsValuesWhenTheTypeHasAConstructor = begin end +module Ok1 = + + module A = + let create() = 1 + type Dummy = A | B + + + type A() = + member x.P = 1 + + test "lkneecec09iew1" (typeof.FullName.Contains("AModule") ) + + +module Ok2 = + + type A() = + member x.P = 1 + + + module A = + let create() = 1 + type Dummy = A | B + + test "lkneecec09iew2" (typeof.FullName.Contains("AModule") ) + + +module Ok3 = + + [] + module A = + let create() = 1 + type Dummy = A | B + + type A() = + member x.P = 1 + + test "lkneecec09iew3" (typeof.FullName.Contains("AModule") ) + + +module Ok4 = + + type A() = + member x.P = 1 + + [] + module A = + let create() = 1 + type Dummy = A | B + + test "lkneecec09iew4" (typeof.FullName.Contains("AModule") ) + + + +module rec Ok5 = + + module A = + let create() = 1 + type Dummy = A | B + + + type A() = + member x.P = 1 + + test "lkneecec09iew5" (typeof.FullName.Contains("AModule") ) + + +module rec Ok6 = + + type A() = + member x.P = 1 + + + module A = + let create() = 1 + type Dummy = A | B + + test "lkneecec09iew6" (typeof.FullName.Contains("AModule") ) + + +module rec Ok7 = + + [] + module A = + let create() = 1 + type Dummy = A | B + + type A() = + member x.P = 1 + + test "lkneecec09iew7" (typeof.FullName.Contains("AModule") ) + + +module rec Ok8 = + + type A() = + member x.P = 1 + + [] + module A = + let create() = 1 + type Dummy = A | B + + test "lkneecec09iew8" (typeof.FullName.Contains("AModule") ) + + +module Ok9 = + + type A() = + member x.P = 1 + + type A<'T>() = + member x.P = 1 + + module A = + let create() = 1 + type Dummy = A | B + + + test "lkneecec09iew9" (typeof.FullName.Contains("AModule") ) + + +module Ok9b = + + type A<'T>() = + member x.P = 1 + + module A = + let create() = 1 + type Dummy = A | B + + + test "lkneecec09iew9" (typeof.FullName.Contains("AModule") ) + +module rec Ok10 = + + type A() = + member x.P = 1 + + type A<'T>() = + member x.P = 1 + + module A = + let create() = 1 + type Dummy = A | B + + test "lkneecec09iew10" (typeof.FullName.Contains("AModule") ) + +module Ok11 = + + type A = int + + module A = + let create() = 1 + type Dummy = A | B + + test "lkneecec09iew11" (typeof.FullName.Contains("AModule") ) + +module Ok12 = + + type A = A + + module A = + let create() = 1 + type Dummy = A | B + + test "lkneecec09iew12" (typeof.FullName.Contains("AModule") ) + +module Ok13 = + + type A = A of string + + module A = + let create() = 1 + type Dummy = A | B + + test "lkneecec09iew13" (typeof.FullName.Contains("AModule") ) + + +module Ok14 = + + module X = + type A = A of string + + type X.A with + member x.P = 1 + + module A = // the type definition is an augmentation so doesn't get the suffix + let create() = 1 + type Dummy = A | B + + test "lkneecec09iew14" (not (typeof.FullName.Contains("AModule") )) + +module rec Ok15 = + + open X + + module X = + type A = A of string + + type A with + member x.P = 1 + + module A = // the type definition is an augmentation so doesn't get the suffix + let create() = 1 + type Dummy = A | B + + test "lkneecec09iew15" (not (typeof.FullName.Contains("AModule") )) + let aa = if !failures then (stdout.WriteLine "Test Failed"; exit 1) diff --git a/tests/fsharp/core/members/ops/test.fsx b/tests/fsharp/core/members/ops/test.fsx index 915efac9089..280ac3c9174 100644 --- a/tests/fsharp/core/members/ops/test.fsx +++ b/tests/fsharp/core/members/ops/test.fsx @@ -345,7 +345,13 @@ module MiscOperatorOverloadTests = res +// See https://github.com/Microsoft/visualfsharp/issues/1306 +module OperatorConstraintsWithExplicitRigidTypeParameters = + type M() = class end + let inline empty< ^R when ( ^R or M) : (static member ( $ ) : ^R * M -> ^R)> = + let m = M() + Unchecked.defaultof< ^R> $ m: ^R module EnumerationOperatorTests = let x1 : System.DateTimeKind = enum 3 @@ -375,6 +381,24 @@ module TraitCallsAndConstructors = let _ : Inherited = -aInherited +module CodeGenTraitCallWitnessesNotBeingInlined = + // From: http://stackoverflow.com/questions/28243963/how-to-write-a-variadic-function-in-f-emulating-a-similar-haskell-solution/28244413#28244413 + type T = T with + static member ($) (T, _:int ) = (+) + static member ($) (T, _:decimal) = (+) // required, if only the prev line is here, type inference will constrain too much + + [] + module TestT = + let inline sum (i:'a) (x:'a) :'r = (T $ Unchecked.defaultof<'r>) i x + + type T with + static member inline ($) (T, _:'t-> 'rest) = fun (a:'t) x -> sum (x + a) + + module TestT2 = + let x:int = sum 2 3 + let y:int = sum 2 3 4 // this line was throwing TypeInitializationException in Debug build + + let _ = if !failures then (stdout.WriteLine "Test Failed"; exit 1) else (stdout.WriteLine "Test Passed"; diff --git a/tests/fsharp/core/patterns/test.fsx b/tests/fsharp/core/patterns/test.fsx index 712b8e6b04a..c3a459a60b1 100644 --- a/tests/fsharp/core/patterns/test.fsx +++ b/tests/fsharp/core/patterns/test.fsx @@ -1091,6 +1091,137 @@ module TypecheckingBug_FSharp_1_0_6389 = member c.P6 : Nullary = c.M6 (Nullary : Nullary) (Nullary : Nullary) +module StructUnionMultiCase = + open System + open FSharp.Reflection + + [] + type X = + | Success of result: string + | Fail of Exn: DateTime + + check "ckwjhf24091" typeof.IsValueType true + + for uc in FSharpType.GetUnionCases(typeof) do + check "ckwjhf2409" [ for p in uc.GetFields() -> p.Name ] [ match uc.Name with "Success" -> yield "result" | "Fail" -> yield "Exn" ] + + check "ckwjhf24091" typeof>.IsValueType true + + for uc in FSharpType.GetUnionCases(typeof>) do + check "ckwjhf2409" [ for p in uc.GetFields() -> p.Name ] [ match uc.Name with "Ok" -> yield "ResultValue" | "Error" -> yield "ErrorValue" ] + +module StructUnionMultiCaseLibDefns = + + /// The type of optional values, represented as structs. + [] + [] + [] + type StructOption<'T> = + /// The representation of "No value" + | None : StructOption<'T> + + /// The representation of "Value of type 'T" + /// The input value. + /// An option representing the value. + | Some : Value:'T -> StructOption<'T> + + /// Helper types for active patterns with 2 choices. + //[] + [] + [] + [] + [] + type StructChoice<'T1,'T2> = + /// Choice 1 of 2 choices + | Choice1Of2 of Item1: 'T1 + /// Choice 2 of 2 choices + | Choice2Of2 of Item2: 'T2 + + /// Helper types for active patterns with 3 choices. + [] + [] + [] + [] + type StructChoice<'T1,'T2,'T3> = + /// Choice 1 of 3 choices + | Choice1Of3 of Item1: 'T1 + /// Choice 2 of 3 choices + | Choice2Of3 of Item2: 'T2 + /// Choice 3 of 3 choices + | Choice3Of3 of Item3: 'T3 + + /// Helper types for active patterns with 4 choices. + [] + [] + [] + [] + type StructChoice<'T1,'T2,'T3,'T4> = + /// Choice 1 of 4 choices + | Choice1Of4 of Item1: 'T1 + /// Choice 2 of 4 choices + | Choice2Of4 of Item2: 'T2 + /// Choice 3 of 4 choices + | Choice3Of4 of Item3: 'T3 + /// Choice 4 of 4 choices + | Choice4Of4 of Item4: 'T4 + + /// Helper types for active patterns with 5 choices. + [] + [] + [] + [] + type StructChoice<'T1,'T2,'T3,'T4,'T5> = + /// Choice 1 of 5 choices + | Choice1Of5 of Item1: 'T1 + /// Choice 2 of 5 choices + | Choice2Of5 of Item2: 'T2 + /// Choice 3 of 5 choices + | Choice3Of5 of Item3: 'T3 + /// Choice 4 of 5 choices + | Choice4Of5 of Item4: 'T4 + /// Choice 5 of 5 choices + | Choice5Of5 of Item5: 'T5 + + /// Helper types for active patterns with 6 choices. + [] + [] + [] + [] + type StructChoice<'T1,'T2,'T3,'T4,'T5,'T6> = + /// Choice 1 of 6 choices + | Choice1Of6 of Item1: 'T1 + /// Choice 2 of 6 choices + | Choice2Of6 of Item2: 'T2 + /// Choice 3 of 6 choices + | Choice3Of6 of Item3: 'T3 + /// Choice 4 of 6 choices + | Choice4Of6 of Item4: 'T4 + /// Choice 5 of 6 choices + | Choice5Of6 of Item5: 'T5 + /// Choice 6 of 6 choices + | Choice6Of6 of Item6: 'T6 + + /// Helper types for active patterns with 7 choices. + [] + [] + [] + [] + type StructChoice<'T1,'T2,'T3,'T4,'T5,'T6,'T7> = + /// Choice 1 of 7 choices + | Choice1Of7 of Item1: 'T1 + /// Choice 2 of 7 choices + | Choice2Of7 of Item2: 'T2 + /// Choice 3 of 7 choices + | Choice3Of7 of Item3: 'T3 + /// Choice 4 of 7 choices + | Choice4Of7 of Item4: 'T4 + /// Choice 5 of 7 choices + | Choice5Of7 of Item5: 'T5 + /// Choice 6 of 7 choices + | Choice6Of7 of Item6: 'T6 + /// Choice 7 of 7 choices + | Choice7Of7 of Item7: 'T7 + (* check for failure else sign off "ok" *) let aa = diff --git a/tests/fsharp/core/printing/z.output.test.1000.stderr.bsl b/tests/fsharp/core/printing/z.output.test.1000.stderr.bsl index a82edeff320..6a1beb24cab 100644 --- a/tests/fsharp/core/printing/z.output.test.1000.stderr.bsl +++ b/tests/fsharp/core/printing/z.output.test.1000.stderr.bsl @@ -237,17 +237,17 @@ stdin(772,17): error FS0438: Duplicate method. The method 'get_P' has the same n type public IBPublic = interface inherit IAPrivate abstract Q : int end ------------------^^^^^^^^ -stdin(779,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in +stdin(779,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in. type internal IBInternal = interface inherit IAPrivate abstract Q : int end ------------------^^^^^^^^^^ -stdin(784,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in +stdin(784,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in. type public IBPublic = interface inherit IAInternal abstract Q : int end ------------------^^^^^^^^ -stdin(793,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in +stdin(793,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in. override x.M(a:string) = 1 -------------------^ diff --git a/tests/fsharp/core/printing/z.output.test.200.stderr.bsl b/tests/fsharp/core/printing/z.output.test.200.stderr.bsl index a82edeff320..6a1beb24cab 100644 --- a/tests/fsharp/core/printing/z.output.test.200.stderr.bsl +++ b/tests/fsharp/core/printing/z.output.test.200.stderr.bsl @@ -237,17 +237,17 @@ stdin(772,17): error FS0438: Duplicate method. The method 'get_P' has the same n type public IBPublic = interface inherit IAPrivate abstract Q : int end ------------------^^^^^^^^ -stdin(779,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in +stdin(779,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in. type internal IBInternal = interface inherit IAPrivate abstract Q : int end ------------------^^^^^^^^^^ -stdin(784,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in +stdin(784,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in. type public IBPublic = interface inherit IAInternal abstract Q : int end ------------------^^^^^^^^ -stdin(793,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in +stdin(793,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in. override x.M(a:string) = 1 -------------------^ diff --git a/tests/fsharp/core/printing/z.output.test.default.stderr.bsl b/tests/fsharp/core/printing/z.output.test.default.stderr.bsl index a82edeff320..6a1beb24cab 100644 --- a/tests/fsharp/core/printing/z.output.test.default.stderr.bsl +++ b/tests/fsharp/core/printing/z.output.test.default.stderr.bsl @@ -237,17 +237,17 @@ stdin(772,17): error FS0438: Duplicate method. The method 'get_P' has the same n type public IBPublic = interface inherit IAPrivate abstract Q : int end ------------------^^^^^^^^ -stdin(779,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in +stdin(779,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in. type internal IBInternal = interface inherit IAPrivate abstract Q : int end ------------------^^^^^^^^^^ -stdin(784,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in +stdin(784,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in. type public IBPublic = interface inherit IAInternal abstract Q : int end ------------------^^^^^^^^ -stdin(793,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in +stdin(793,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in. override x.M(a:string) = 1 -------------------^ diff --git a/tests/fsharp/core/printing/z.output.test.off.stderr.bsl b/tests/fsharp/core/printing/z.output.test.off.stderr.bsl index a82edeff320..6a1beb24cab 100644 --- a/tests/fsharp/core/printing/z.output.test.off.stderr.bsl +++ b/tests/fsharp/core/printing/z.output.test.off.stderr.bsl @@ -237,17 +237,17 @@ stdin(772,17): error FS0438: Duplicate method. The method 'get_P' has the same n type public IBPublic = interface inherit IAPrivate abstract Q : int end ------------------^^^^^^^^ -stdin(779,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in +stdin(779,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in. type internal IBInternal = interface inherit IAPrivate abstract Q : int end ------------------^^^^^^^^^^ -stdin(784,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in +stdin(784,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in. type public IBPublic = interface inherit IAInternal abstract Q : int end ------------------^^^^^^^^ -stdin(793,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in +stdin(793,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in. override x.M(a:string) = 1 -------------------^ diff --git a/tests/fsharp/core/printing/z.output.test.quiet.stderr.bsl b/tests/fsharp/core/printing/z.output.test.quiet.stderr.bsl index a82edeff320..6a1beb24cab 100644 --- a/tests/fsharp/core/printing/z.output.test.quiet.stderr.bsl +++ b/tests/fsharp/core/printing/z.output.test.quiet.stderr.bsl @@ -237,17 +237,17 @@ stdin(772,17): error FS0438: Duplicate method. The method 'get_P' has the same n type public IBPublic = interface inherit IAPrivate abstract Q : int end ------------------^^^^^^^^ -stdin(779,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in +stdin(779,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in. type internal IBInternal = interface inherit IAPrivate abstract Q : int end ------------------^^^^^^^^^^ -stdin(784,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in +stdin(784,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in. type public IBPublic = interface inherit IAInternal abstract Q : int end ------------------^^^^^^^^ -stdin(793,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in +stdin(793,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in. override x.M(a:string) = 1 -------------------^ diff --git a/tests/fsharp/core/quotes/test.fsx b/tests/fsharp/core/quotes/test.fsx index 2ad7e1386a4..c17aa14d626 100644 --- a/tests/fsharp/core/quotes/test.fsx +++ b/tests/fsharp/core/quotes/test.fsx @@ -2718,6 +2718,15 @@ module ExtensionMembersWithSameName = runAll() #endif +module PartialApplicationLeadToInvalidCodeWhenOptimized = + let f () = + let x = 1 + let g (y:int) (z:int) = <@ x @> + let _ = g 3 // the closure generated by this code was invalid + () + + f () + module TestAssemblyAttributes = let attributes = System.Reflection.Assembly.GetExecutingAssembly().GetCustomAttributes(false) diff --git a/tests/fsharp/core/subtype/test.fsx b/tests/fsharp/core/subtype/test.fsx index f5f3e38eb97..1a56d8e862d 100644 --- a/tests/fsharp/core/subtype/test.fsx +++ b/tests/fsharp/core/subtype/test.fsx @@ -1725,6 +1725,53 @@ module GenericPropertyConstraintSolvedByRecord = let v = print_foo_memb { foo=1 } + +module SRTPFix = + + open System + + let inline konst x _ = x + + type CFunctor() = + static member inline fmap (f : ^a -> ^b, a : ^a list) = List.map f a + static member inline fmap (f : ^a -> ^b, a : ^a option) = + match a with + | None -> None + | Some x -> Some (f x) + + // default implementation of replace + static member inline replace< ^a, ^b, ^c, ^d, ^e when ^a :> CFunctor and (^a or ^d) : (static member fmap : (^b -> ^c) * ^d -> ^e) > (a, f) = + ((^a or ^d) : (static member fmap : (^b -> ^c) * ^d -> ^e) (konst a, f)) + + // call overridden replace if present + static member inline replace< ^a, ^b, ^c when ^b : (static member replace : ^a * ^b -> ^c)>(a : ^a, f : ^b) = + (^b : (static member replace : ^a * ^b -> ^c) (a, f)) + + let inline replace_instance< ^a, ^b, ^c, ^d when (^a or ^c) : (static member replace : ^b * ^c -> ^d)> (a : ^b, f : ^c) = + ((^a or ^c) : (static member replace : ^b * ^c -> ^d) (a, f)) + + let inline fmap_instance< ^a, ^b, ^c, ^d, ^e when (^a or ^d) : (static member fmap : (^b -> ^c) * ^d -> ^e)>(f : ^b -> ^c, a : ^d) = + ((^a or ^d) : (static member fmap : (^b -> ^c) * ^d -> ^e) (f, a)) + + let inline fmap (f : ^a -> ^b) (a : ^c) = + fmap_instance (f, a) + + let inline replace (a : ^a) (f : ^b) : ^a0 when (CFunctor or ^b) : (static member replace : ^a * ^b -> ^a0) = + replace_instance (a, f) + + (* + type test(arg : string) = class + member __.data = arg + static member inline fmap (f : char -> char, a : test) = String.map f a.data + static member inline replace (a : char, f : test) = test.fmap (konst a, f) + end + + let _ = + printfn "%A" <| fmap id [1;2;3]; + printfn "%A" <| replace 5 [1;2;3]; + printfn "%A" <| fmap ((+) 1) (Some 2); + printfn "%A" <| replace 'q' (test("HI")) + *) let aa = if not failures.IsEmpty then (printfn "Test Failed, failures = %A" failures; exit 1) diff --git a/tests/fsharp/core/tests_core.fs b/tests/fsharp/core/tests_core.fs index 68ec3baeb85..a17db675120 100644 --- a/tests/fsharp/core/tests_core.fs +++ b/tests/fsharp/core/tests_core.fs @@ -36,6 +36,30 @@ module Attributes = [] let attributes p = singleTestBuildAndRun p +module Byrefs = + [] + let byrefs p = check (attempt { + + let { Directory = dir; Config = cfg } = testContext () + let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None} p >> checkResult + let fsi = Printf.ksprintf (Commands.fsi exec cfg.FSI) + let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC) + let fileguard = (Commands.getfullpath dir) >> FileGuard.create + + use testOkFile = fileguard "test.ok" + + do! fsc "%s -o:test.exe -g" cfg.fsc_flags ["test.fsx"] + + do! exec ("."/"test.exe") "" + + do! testOkFile |> NUnitConf.checkGuardExists + + do! fsi "" ["test.fsx"] + + do! testOkFile |> NUnitConf.checkGuardExists + + }) + module Comprehensions = [] let comprehensions p = singleTestBuildAndRun p @@ -139,51 +163,54 @@ module Events = do! run cfg dir }) - -module ``FSI-Shadowcopy`` = - - [] - // "%FSI%" %fsi_flags% < test1.fsx - [] - // "%FSI%" %fsi_flags% --shadowcopyreferences- < test1.fsx - [] - let ``shadowcopy disabled`` (flags: string) = check (attempt { - let { Directory = dir; Config = cfg } = testContext () - - let ``exec <`` l p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = Some(RedirectInput(l)) } p >> checkResult - let ``fsi <`` = Printf.ksprintf (fun flags l -> Commands.fsi (``exec <`` l) cfg.FSI flags []) - let fileguard = (Commands.getfullpath dir) >> FileGuard.create - - // if exist test1.ok (del /f /q test1.ok) - use testOkFile = fileguard "test1.ok" - - do! ``fsi <`` "%s %s" cfg.fsi_flags flags "test1.fsx" - - // if NOT EXIST test1.ok goto SetError - do! testOkFile |> NUnitConf.checkGuardExists - }) - - [] - // "%FSI%" %fsi_flags% /shadowcopyreferences+ < test2.fsx - [] - // "%FSI%" %fsi_flags% --shadowcopyreferences < test2.fsx - [] - let ``shadowcopy enabled`` (flags: string) = check (attempt { - let { Directory = dir; Config = cfg } = testContext () - - let ``exec <`` l p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = Some(RedirectInput(l)) } p >> checkResult - let ``fsi <`` = Printf.ksprintf (fun flags l -> Commands.fsi (``exec <`` l) cfg.FSI flags []) - let fileguard = (Commands.getfullpath dir) >> FileGuard.create - - // if exist test2.ok (del /f /q test2.ok) - use testOkFile = fileguard "test2.ok" - - // "%FSI%" %fsi_flags% /shadowcopyreferences+ < test2.fsx - do! ``fsi <`` "%s %s" cfg.fsi_flags flags "test2.fsx" - - // if NOT EXIST test2.ok goto SetError - do! testOkFile |> NUnitConf.checkGuardExists - }) +// +// Shadowcopy does not work for public signed assemblies +// ===================================================== +// +//module ``FSI-Shadowcopy`` = +// +// [] +// // "%FSI%" %fsi_flags% < test1.fsx +// [] +// // "%FSI%" %fsi_flags% --shadowcopyreferences- < test1.fsx +// [] +// let ``shadowcopy disabled`` (flags: string) = check (attempt { +// let { Directory = dir; Config = cfg } = testContext () +// +// let ``exec <`` l p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = Some(RedirectInput(l)) } p >> checkResult +// let ``fsi <`` = Printf.ksprintf (fun flags l -> Commands.fsi (``exec <`` l) cfg.FSI flags []) +// let fileguard = (Commands.getfullpath dir) >> FileGuard.create +// +// // if exist test1.ok (del /f /q test1.ok) +// use testOkFile = fileguard "test1.ok" +// +// do! ``fsi <`` "%s %s" cfg.fsi_flags flags "test1.fsx" +// +// // if NOT EXIST test1.ok goto SetError +// do! testOkFile |> NUnitConf.checkGuardExists +// }) +// +// [] +// // "%FSI%" %fsi_flags% /shadowcopyreferences+ < test2.fsx +// [] +// // "%FSI%" %fsi_flags% --shadowcopyreferences < test2.fsx +// [] +// let ``shadowcopy enabled`` (flags: string) = check (attempt { +// let { Directory = dir; Config = cfg } = testContext () +// +// let ``exec <`` l p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = Some(RedirectInput(l)) } p >> checkResult +// let ``fsi <`` = Printf.ksprintf (fun flags l -> Commands.fsi (``exec <`` l) cfg.FSI flags []) +// let fileguard = (Commands.getfullpath dir) >> FileGuard.create +// +// // if exist test2.ok (del /f /q test2.ok) +// use testOkFile = fileguard "test2.ok" +// +// // "%FSI%" %fsi_flags% /shadowcopyreferences+ < test2.fsx +// do! ``fsi <`` "%s %s" cfg.fsi_flags flags "test2.fsx" +// +// // if NOT EXIST test2.ok goto SetError +// do! testOkFile |> NUnitConf.checkGuardExists +// }) @@ -316,19 +343,21 @@ module FsFromFsViaCs = let csc = Printf.ksprintf (Commands.csc exec cfg.CSC) let fsc_flags = cfg.fsc_flags - // "%FSC%" %fsc_flags% -a -o:lib.dll -g lib.fs do! fsc "%s -a -o:lib.dll -g" fsc_flags ["lib.fs"] - // "%PEVERIFY%" lib.dll do! peverify "lib.dll" - // %CSC% /nologo /target:library /r:"%FSCOREDLLPATH%" /r:lib.dll /out:lib2.dll lib2.cs do! csc """/nologo /target:library /r:"%s" /r:lib.dll /out:lib2.dll""" cfg.FSCOREDLLPATH ["lib2.cs"] - // "%FSC%" %fsc_flags% -r:lib.dll -r:lib2.dll -o:test.exe -g test.fsx - do! fsc "%s -r:lib.dll -r:lib2.dll -o:test.exe -g" fsc_flags ["test.fsx"] + do! csc """/nologo /target:library /r:"%s" /out:lib3.dll""" cfg.FSCOREDLLPATH ["lib3.cs"] + + do! fsc "%s -r:lib.dll -r:lib2.dll -r:lib3.dll -o:test.exe -g" fsc_flags ["test.fsx"] + + do! peverify "test.exe" + + // Same with library references the other way around + do! fsc "%s -r:lib.dll -r:lib3.dll -r:lib2.dll -o:test.exe -g" fsc_flags ["test.fsx"] - // "%PEVERIFY%" test.exe do! peverify "test.exe" } @@ -907,6 +936,43 @@ module InternalsVisible = }) +// Repro for https://github.com/Microsoft/visualfsharp/issues/1298 +module FileOrder = + + [] + let fileorder () = check (attempt { + let { Directory = dir; Config = cfg } = testContext () + + let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult + let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC) + let peverify = Commands.peverify exec cfg.PEVERIFY "/nologo" + let csc = Printf.ksprintf (Commands.csc exec cfg.CSC) + let fsc_flags = cfg.fsc_flags + + log "== Compiling F# Library and Code, when empty file libfile2.fs IS NOT included" + do! fsc "%s -a --optimize -o:lib.dll " fsc_flags ["libfile1.fs"] + + do! peverify "lib.dll" + + do! fsc "%s -r:lib.dll -o:test.exe" fsc_flags ["test.fsx"] + + do! peverify "test.exe" + + do! exec ("."/"test.exe") "" + + log "== Compiling F# Library and Code, when empty file libfile2.fs IS included" + do! fsc "%s -a --optimize -o:lib2.dll " fsc_flags ["libfile1.fs"; "libfile2.fs"] + + do! peverify "lib2.dll" + + do! fsc "%s -r:lib2.dll -o:test2.exe" fsc_flags ["test.fsx"] + + do! peverify "test2.exe" + + do! exec ("."/"test2.exe") "" + }) + + module Interop = let build cfg dir = attempt { diff --git a/tests/fsharp/single-test-build.fs b/tests/fsharp/single-test-build.fs index 82c047e9b5c..9c51e645a57 100644 --- a/tests/fsharp/single-test-build.fs +++ b/tests/fsharp/single-test-build.fs @@ -19,6 +19,10 @@ let singleTestBuild cfg testDir = let buildOkPath = testDir / "build.ok" do if fileExists "build.ok" then del "build.ok" + //remove FSharp.Core.dll from the target directory to ensure that compiler uses the correct fsharp.core.dll + do if fileExists "FSharp.Core.dll" then del "FSharp.Core.dll" + + //call %~d0%~p0..\config.bat ignore "param" diff --git a/tests/fsharp/typeProviders/negTests/neg2c.bsl b/tests/fsharp/typeProviders/negTests/neg2c.bsl index b671f71fa80..866b4c826c9 100644 --- a/tests/fsharp/typeProviders/negTests/neg2c.bsl +++ b/tests/fsharp/typeProviders/negTests/neg2c.bsl @@ -1,2 +1,2 @@ -neg2c.fsx(6,5,6,7): typecheck error FS0410: The type 'TheGeneratedType1' is less accessible than the value, member or type 'val f2 : unit -> TheGeneratedType1' it is used in +neg2c.fsx(6,5,6,7): typecheck error FS0410: The type 'TheGeneratedType1' is less accessible than the value, member or type 'val f2 : unit -> TheGeneratedType1' it is used in. diff --git a/tests/fsharp/typecheck/sigs/neg10.bsl b/tests/fsharp/typecheck/sigs/neg10.bsl index ca631ed99f7..ba47d7e2529 100644 --- a/tests/fsharp/typecheck/sigs/neg10.bsl +++ b/tests/fsharp/typecheck/sigs/neg10.bsl @@ -69,7 +69,17 @@ neg10.fs(174,9,175,20): typecheck error FS0951: Literal enumerations must have t neg10.fs(180,10,180,11): typecheck error FS0866: Interfaces cannot contain definitions of object constructors -neg10.fs(193,39,193,46): typecheck error FS0767: The member 'MyX' does not correspond to any abstract or virtual method available to override or implement +neg10.fs(193,39,193,46): typecheck error FS0767: The type Foo contains the member 'MyX' but it is not a virtual or abstract method that is available to override or implement. + +Maybe you want one of the following: + + Equals + + ToString + + Finalize + + GetHashCode neg10.fs(193,41,193,44): typecheck error FS0017: The member 'MyX : unit -> int' does not have the correct type to override any given virtual method diff --git a/tests/fsharp/typecheck/sigs/neg16.bsl b/tests/fsharp/typecheck/sigs/neg16.bsl index 77fd1b5ea23..f73c0cb6c15 100644 --- a/tests/fsharp/typecheck/sigs/neg16.bsl +++ b/tests/fsharp/typecheck/sigs/neg16.bsl @@ -1,5 +1,5 @@ -neg16.fs(7,13,7,16): typecheck error FS0644: Namespaces cannot contain extension members except in the same file and namespace where the type is defined. Consider using a module to hold declarations of extension members. +neg16.fs(7,13,7,16): typecheck error FS0644: Namespaces cannot contain extension members except in the same file and namespace declaration group where the type is defined. Consider using a module to hold declarations of extension members. neg16.fs(23,10,23,11): typecheck error FS0935: Types with the 'AllowNullLiteral' attribute may only inherit from or implement types which also allow the use of the null literal diff --git a/tests/fsharp/typecheck/sigs/neg23.bsl b/tests/fsharp/typecheck/sigs/neg23.bsl index 43ccae55657..c5909bd6868 100644 --- a/tests/fsharp/typecheck/sigs/neg23.bsl +++ b/tests/fsharp/typecheck/sigs/neg23.bsl @@ -19,7 +19,7 @@ neg23.fs(64,21,64,24): typecheck error FS0438: Duplicate method. The method 'Foo neg23.fs(62,21,62,24): typecheck error FS0438: Duplicate method. The method 'Foo' has the same name and signature as another method in this type once tuples, functions, units of measure and/or provided types are erased. -neg23.fs(76,9,76,11): typecheck error FS0410: The type 'IA' is less accessible than the value, member or type 'IB' it is used in +neg23.fs(76,9,76,11): typecheck error FS0410: The type 'IA' is less accessible than the value, member or type 'IB' it is used in. neg23.fs(83,18,83,20): typecheck error FS0439: The method 'X0' has curried arguments but has the same name as another method in this type. Methods with curried arguments cannot be overloaded. Consider using a method taking tupled arguments. diff --git a/tests/fsharp/typecheck/sigs/neg60.bsl b/tests/fsharp/typecheck/sigs/neg60.bsl index b52ab605303..9e05fc389f2 100644 --- a/tests/fsharp/typecheck/sigs/neg60.bsl +++ b/tests/fsharp/typecheck/sigs/neg60.bsl @@ -64,12 +64,8 @@ but here has type neg60.fs(71,36,71,40): typecheck error FS0043: The type 'System.Nullable' does not have 'null' as a proper value. To create a null value for a Nullable type use 'System.Nullable()'. -neg60.fs(77,20,77,22): typecheck error FS0001: The type 'System.Nullable' does not support the operator '?>='. Consider opening the module 'Microsoft.FSharp.Linq.NullableOperators'. - neg60.fs(77,16,77,19): typecheck error FS0043: The type 'System.Nullable' does not support the operator '?>='. Consider opening the module 'Microsoft.FSharp.Linq.NullableOperators'. -neg60.fs(78,20,78,22): typecheck error FS0001: None of the types 'System.Nullable, int' support the operator '?>='. Consider opening the module 'Microsoft.FSharp.Linq.NullableOperators'. - neg60.fs(78,16,78,19): typecheck error FS0043: None of the types 'System.Nullable, int' support the operator '?>='. Consider opening the module 'Microsoft.FSharp.Linq.NullableOperators'. neg60.fs(79,18,79,21): typecheck error FS0001: The type ''a * 'b' does not match the type 'int' @@ -82,4 +78,4 @@ neg60.fs(80,19,80,20): typecheck error FS0043: Expecting a type supporting the o neg60.fs(81,22,81,34): typecheck error FS0002: This function takes too many arguments, or is used in a context where a function is not expected -neg60.fs(87,14,87,15): typecheck error FS0001: The type 'System.Nullable' does not support the operator '?=?'. Consider opening the module 'Microsoft.FSharp.Linq.NullableOperators'. +neg60.fs(87,10,87,13): typecheck error FS0043: The type 'System.Nullable' does not support the operator '?=?'. Consider opening the module 'Microsoft.FSharp.Linq.NullableOperators'. diff --git a/tests/fsharp/typecheck/sigs/neg63.bsl b/tests/fsharp/typecheck/sigs/neg63.bsl index 278d1508139..63f7da210c5 100644 --- a/tests/fsharp/typecheck/sigs/neg63.bsl +++ b/tests/fsharp/typecheck/sigs/neg63.bsl @@ -7,6 +7,8 @@ neg63.fs(11,9,11,10): typecheck error FS3155: A quotation may not involve an ass neg63.fs(11,5,11,13): typecheck error FS0412: A type instantiation involves a byref type. This is not permitted by the rules of Common IL. -neg63.fs(10,5,11,13): typecheck error FS0426: A method return type would contain byrefs which is not permitted - neg63.fs(14,8,14,9): typecheck error FS3155: A quotation may not involve an assignment to or taking the address of a captured local variable + +neg63.fs(18,6,18,7): typecheck error FS3209: The address of the variable 'x' cannot be used at this point. A method or function may not return the address of this local value. + +neg63.fs(26,6,26,10): typecheck error FS3209: The address of the variable 'addr' cannot be used at this point. A method or function may not return the address of this local value. diff --git a/tests/fsharp/typecheck/sigs/neg63.fs b/tests/fsharp/typecheck/sigs/neg63.fs index 4486ab45435..bf8b25cac8e 100644 --- a/tests/fsharp/typecheck/sigs/neg63.fs +++ b/tests/fsharp/typecheck/sigs/neg63.fs @@ -13,3 +13,26 @@ let negTest2() = let posTest1(x:byref) = <@ x @> +let negTest3() = + let mutable x = 0 + &x + +let posTest4(addr:byref) = + &addr + +let negTest5() = + let mutable x = 0 + let addr = &x + &addr + +type Struct(initial:int) = + let mutable x = initial + member __.AddrX = &x + member __.IncrX() = x <- x + 1 + +let posTest6(iterator: byref) = + iterator.AddrX + +let negTest7() = + let mutable iterator = Struct(0) + iterator.AddrX diff --git a/tests/fsharp/typecheck/sigs/neg95.bsl b/tests/fsharp/typecheck/sigs/neg95.bsl index c0cbebc4438..378917767a9 100644 --- a/tests/fsharp/typecheck/sigs/neg95.bsl +++ b/tests/fsharp/typecheck/sigs/neg95.bsl @@ -15,4 +15,8 @@ neg95.fs(45,10,45,22): typecheck error FS0954: This type definition involves an neg95.fs(52,10,52,21): typecheck error FS0954: This type definition involves an immediate cyclic reference through a struct field or inheritance relation -neg95.fs(55,10,55,22): typecheck error FS3204: A union type which is a struct must have only one case. \ No newline at end of file +neg95.fs(55,10,55,22): typecheck error FS3204: If a union type has more than one case and is a struct, then all fields within the union type must be given unique names. + +neg95.fs(58,10,58,22): typecheck error FS3204: If a union type has more than one case and is a struct, then all fields within the union type must be given unique names. + +neg95.fs(61,10,61,22): typecheck error FS0954: This type definition involves an immediate cyclic reference through a struct field or inheritance relation diff --git a/tests/fsharp/typecheck/sigs/neg95.fs b/tests/fsharp/typecheck/sigs/neg95.fs index dc00e8d29b3..07f26f7ef35 100644 --- a/tests/fsharp/typecheck/sigs/neg95.fs +++ b/tests/fsharp/typecheck/sigs/neg95.fs @@ -53,3 +53,9 @@ namespace Neg95B [] type StructUnion2 = A of int | B of string + + [] + type StructUnion3 = A of X:int | B of X:string + + [] + type StructUnion4 = A of X:int | B of Y:StructUnion4 diff --git a/tests/fsharp/typecheck/sigs/neg96.bsl b/tests/fsharp/typecheck/sigs/neg96.bsl index 99319706645..96548ee509e 100644 --- a/tests/fsharp/typecheck/sigs/neg96.bsl +++ b/tests/fsharp/typecheck/sigs/neg96.bsl @@ -1,4 +1,6 @@ -neg95.fs(11,9,11,21): typecheck error FS0039: The value or constructor 'StructRecord' is not defined +neg96.fs(11,9,11,21): typecheck error FS0039: The value or constructor 'StructRecord' is not defined -neg96.fs(14,17,14,18): typecheck error FS3205: This feature is deprecated. A 'use' binding may not be marked 'mutable'. \ No newline at end of file +neg96.fs(18,10,18,11): typecheck error FS0039: The type 'X' is not defined + +neg96.fs(18,10,18,11): typecheck error FS0039: The type 'X' is not defined diff --git a/tests/fsharp/typecheck/sigs/neg96.fs b/tests/fsharp/typecheck/sigs/neg96.fs index d823086822a..c7e019f5f17 100644 --- a/tests/fsharp/typecheck/sigs/neg96.fs +++ b/tests/fsharp/typecheck/sigs/neg96.fs @@ -10,6 +10,19 @@ type StructRecord = let x = StructRecord () -let invalidUse() = - use mutable x = (null : System.IDisposable) + + + + + +type T = X<__SOURCE_DIRECTORY__> + + +open System.Collections.Generic + +let f (x: List<'T>) = + use mutable d = x.GetEnumerator() // no warning expected here! + while (d.MoveNext() ) do + () () + diff --git a/tests/fsharp/typecheck/sigs/neg97.bsl b/tests/fsharp/typecheck/sigs/neg97.bsl index 860f9fd6f37..8a09a2a2e16 100644 --- a/tests/fsharp/typecheck/sigs/neg97.bsl +++ b/tests/fsharp/typecheck/sigs/neg97.bsl @@ -1,10 +1,18 @@ neg97.fs(13,1,13,2): typecheck error FS0256: A value must be mutable in order to mutate the contents or take the address of a value type, e.g. 'let mutable x = ...' +neg97.fs(16,9,16,10): typecheck error FS0009: Uses of this construct may result in the generation of unverifiable .NET IL code. This warning can be disabled using '--nowarn:9' or '#nowarn "9"'. + neg97.fs(16,9,16,10): typecheck error FS3207: Invalid use of 'fixed'. 'fixed' may only be used in a declaration of the form 'use x = fixed expr' where the expression is an array, the address of a field, the address of an array element or a string' +neg97.fs(20,9,20,10): typecheck error FS0009: Uses of this construct may result in the generation of unverifiable .NET IL code. This warning can be disabled using '--nowarn:9' or '#nowarn "9"'. + neg97.fs(20,9,20,10): typecheck error FS3207: Invalid use of 'fixed'. 'fixed' may only be used in a declaration of the form 'use x = fixed expr' where the expression is an array, the address of a field, the address of an array element or a string' +neg97.fs(25,9,25,10): typecheck error FS0009: Uses of this construct may result in the generation of unverifiable .NET IL code. This warning can be disabled using '--nowarn:9' or '#nowarn "9"'. + neg97.fs(25,9,25,10): typecheck error FS3207: Invalid use of 'fixed'. 'fixed' may only be used in a declaration of the form 'use x = fixed expr' where the expression is an array, the address of a field, the address of an array element or a string' +neg97.fs(30,9,30,10): typecheck error FS0009: Uses of this construct may result in the generation of unverifiable .NET IL code. This warning can be disabled using '--nowarn:9' or '#nowarn "9"'. + neg97.fs(30,9,30,10): typecheck error FS3207: Invalid use of 'fixed'. 'fixed' may only be used in a declaration of the form 'use x = fixed expr' where the expression is an array, the address of a field, the address of an array element or a string' diff --git a/tests/fsharp/typecheck/sigs/neg_byref_10.bsl b/tests/fsharp/typecheck/sigs/neg_byref_10.bsl index 8caa4ac6924..21669ece01f 100644 --- a/tests/fsharp/typecheck/sigs/neg_byref_10.bsl +++ b/tests/fsharp/typecheck/sigs/neg_byref_10.bsl @@ -1,2 +1,4 @@ +neg_byref_10.fs(3,9,3,10): typecheck error FS0412: A type instantiation involves a byref type. This is not permitted by the rules of Common IL. + neg_byref_10.fs(2,6,2,8): typecheck error FS0437: A type would store a byref typed value. This is not permitted by Common IL. diff --git a/tests/fsharp/typecheck/sigs/neg_byref_11.bsl b/tests/fsharp/typecheck/sigs/neg_byref_11.bsl index 3e3bda7b96d..6c71b1f88a1 100644 --- a/tests/fsharp/typecheck/sigs/neg_byref_11.bsl +++ b/tests/fsharp/typecheck/sigs/neg_byref_11.bsl @@ -1,4 +1,6 @@ +neg_byref_11.fs(3,13,3,14): typecheck error FS0412: A type instantiation involves a byref type. This is not permitted by the rules of Common IL. + neg_byref_11.fs(3,6,3,8): typecheck error FS0437: A type would store a byref typed value. This is not permitted by Common IL. neg_byref_11.fs(3,13,3,14): typecheck error FS0412: A type instantiation involves a byref type. This is not permitted by the rules of Common IL. diff --git a/tests/fsharp/typecheck/sigs/neg_byref_12.bsl b/tests/fsharp/typecheck/sigs/neg_byref_12.bsl index 4bfeb87b81c..c3ecf36b111 100644 --- a/tests/fsharp/typecheck/sigs/neg_byref_12.bsl +++ b/tests/fsharp/typecheck/sigs/neg_byref_12.bsl @@ -1,4 +1,6 @@ +neg_byref_12.fs(3,21,3,31): typecheck error FS0412: A type instantiation involves a byref type. This is not permitted by the rules of Common IL. + neg_byref_12.fs(3,6,3,8): typecheck error FS0437: A type would store a byref typed value. This is not permitted by Common IL. neg_byref_12.fs(3,11,3,17): typecheck error FS0412: A type instantiation involves a byref type. This is not permitted by the rules of Common IL. diff --git a/tests/fsharp/typecheck/sigs/neg_byref_14.bsl b/tests/fsharp/typecheck/sigs/neg_byref_14.bsl index 7e867cb70fe..71ad2babfbc 100644 --- a/tests/fsharp/typecheck/sigs/neg_byref_14.bsl +++ b/tests/fsharp/typecheck/sigs/neg_byref_14.bsl @@ -1,4 +1,6 @@ +neg_byref_14.fs(3,29,3,39): typecheck error FS0412: A type instantiation involves a byref type. This is not permitted by the rules of Common IL. + neg_byref_14.fs(3,11,3,25): typecheck error FS0437: A type would store a byref typed value. This is not permitted by Common IL. neg_byref_14.fs(3,11,3,25): typecheck error FS0412: A type instantiation involves a byref type. This is not permitted by the rules of Common IL. diff --git a/tests/fsharp/typecheck/sigs/neg_byref_16.bsl b/tests/fsharp/typecheck/sigs/neg_byref_16.bsl index aa7e581f166..91e5f4fe782 100644 --- a/tests/fsharp/typecheck/sigs/neg_byref_16.bsl +++ b/tests/fsharp/typecheck/sigs/neg_byref_16.bsl @@ -1,4 +1,2 @@ neg_byref_16.fs(3,33,3,42): typecheck error FS0412: A type instantiation involves a byref type. This is not permitted by the rules of Common IL. - -neg_byref_16.fs(3,5,3,9): typecheck error FS0426: A method return type would contain byrefs which is not permitted diff --git a/tests/fsharp/typecheck/sigs/neg_byref_17.bsl b/tests/fsharp/typecheck/sigs/neg_byref_17.bsl index 570d6bcb8e8..3d857907b80 100644 --- a/tests/fsharp/typecheck/sigs/neg_byref_17.bsl +++ b/tests/fsharp/typecheck/sigs/neg_byref_17.bsl @@ -1,18 +1,6 @@ neg_byref_17.fs(2,5,2,8): typecheck error FS0431: A byref typed value would be stored here. Top-level let-bound byref values are not permitted. -neg_byref_17.fs(2,5,2,8): typecheck error FS0431: A byref typed value would be stored here. Top-level let-bound byref values are not permitted. - -neg_byref_17.fs(2,17,2,22): typecheck error FS0412: A type instantiation involves a byref type. This is not permitted by the rules of Common IL. - -neg_byref_17.fs(2,17,2,22): typecheck error FS0412: A type instantiation involves a byref type. This is not permitted by the rules of Common IL. - neg_byref_17.fs(2,17,2,22): typecheck error FS0412: A type instantiation involves a byref type. This is not permitted by the rules of Common IL. neg_byref_17.fs(3,17,3,22): typecheck error FS0412: A type instantiation involves a byref type. This is not permitted by the rules of Common IL. - -neg_byref_17.fs(3,17,3,22): typecheck error FS0412: A type instantiation involves a byref type. This is not permitted by the rules of Common IL. - -neg_byref_17.fs(3,17,3,22): typecheck error FS0412: A type instantiation involves a byref type. This is not permitted by the rules of Common IL. - -neg_byref_17.fs(3,17,3,39): typecheck error FS0426: A method return type would contain byrefs which is not permitted diff --git a/tests/fsharp/typecheck/sigs/neg_byref_21.bsl b/tests/fsharp/typecheck/sigs/neg_byref_21.bsl index 11ff3ded78e..1fd3cb59a83 100644 --- a/tests/fsharp/typecheck/sigs/neg_byref_21.bsl +++ b/tests/fsharp/typecheck/sigs/neg_byref_21.bsl @@ -1,2 +1,5 @@ -neg_byref_21.fs(4,5,4,7): typecheck error FS0425: The type of a first-class function cannot contain byrefs +neg_byref_21.fs(5,14,5,17): typecheck error FS0001: This expression was expected to have type + 'int' +but here has type + 'float' diff --git a/tests/fsharp/typecheck/sigs/neg_byref_21.fs b/tests/fsharp/typecheck/sigs/neg_byref_21.fs index e510b4f2635..d2693380bea 100644 --- a/tests/fsharp/typecheck/sigs/neg_byref_21.fs +++ b/tests/fsharp/typecheck/sigs/neg_byref_21.fs @@ -2,3 +2,4 @@ module Test let f (x : byref<'a>) = x = x;; let zz = f;; +let _ = (1 = 1.0) // deliberate error - the above passes now \ No newline at end of file diff --git a/tests/fsharp/typecheck/sigs/neg_byref_22.bsl b/tests/fsharp/typecheck/sigs/neg_byref_22.bsl index 21e4ac3cbdf..675eefac323 100644 --- a/tests/fsharp/typecheck/sigs/neg_byref_22.bsl +++ b/tests/fsharp/typecheck/sigs/neg_byref_22.bsl @@ -1,2 +1,5 @@ -neg_byref_22.fs(3,16,3,32): typecheck error FS0426: A method return type would contain byrefs which is not permitted +neg_byref_22.fs(5,16,5,17): typecheck error FS0001: This expression was expected to have type + 'float' +but here has type + 'int' diff --git a/tests/fsharp/typecheck/sigs/neg_byref_22.fs b/tests/fsharp/typecheck/sigs/neg_byref_22.fs index a09a3331b73..4b01f350bbd 100644 --- a/tests/fsharp/typecheck/sigs/neg_byref_22.fs +++ b/tests/fsharp/typecheck/sigs/neg_byref_22.fs @@ -2,3 +2,5 @@ module Test let rec f () = f () : int byref;; +let x = (1.0 = 1) + diff --git a/tests/fsharp/typecheck/sigs/neg_byref_3.bsl b/tests/fsharp/typecheck/sigs/neg_byref_3.bsl index 62fbe08916c..fb8ccdd71f9 100644 --- a/tests/fsharp/typecheck/sigs/neg_byref_3.bsl +++ b/tests/fsharp/typecheck/sigs/neg_byref_3.bsl @@ -4,5 +4,3 @@ neg_byref_3.fs(2,5,2,8): typecheck error FS0431: A byref typed value would be st neg_byref_3.fs(2,11,2,22): typecheck error FS0412: A type instantiation involves a byref type. This is not permitted by the rules of Common IL. neg_byref_3.fs(3,11,3,22): typecheck error FS0412: A type instantiation involves a byref type. This is not permitted by the rules of Common IL. - -neg_byref_3.fs(3,11,3,34): typecheck error FS0426: A method return type would contain byrefs which is not permitted diff --git a/tests/fsharp/typecheck/sigs/neg_byref_4.bsl b/tests/fsharp/typecheck/sigs/neg_byref_4.bsl index 0e6d48578c2..2fdf027ea71 100644 --- a/tests/fsharp/typecheck/sigs/neg_byref_4.bsl +++ b/tests/fsharp/typecheck/sigs/neg_byref_4.bsl @@ -1,8 +1,4 @@ neg_byref_4.fs(4,11,4,29): typecheck error FS0412: A type instantiation involves a byref type. This is not permitted by the rules of Common IL. -neg_byref_4.fs(4,11,4,29): typecheck error FS0426: A method return type would contain byrefs which is not permitted - neg_byref_4.fs(5,11,5,29): typecheck error FS0412: A type instantiation involves a byref type. This is not permitted by the rules of Common IL. - -neg_byref_4.fs(5,11,5,29): typecheck error FS0426: A method return type would contain byrefs which is not permitted diff --git a/tests/fsharp/typecheck/sigs/neg_byref_7.bsl b/tests/fsharp/typecheck/sigs/neg_byref_7.bsl index 11f25ecb6d4..8b085ebcf58 100644 --- a/tests/fsharp/typecheck/sigs/neg_byref_7.bsl +++ b/tests/fsharp/typecheck/sigs/neg_byref_7.bsl @@ -18,3 +18,5 @@ neg_byref_7.fs(2,47,2,53): typecheck error FS0412: A type instantiation involves neg_byref_7.fs(2,47,2,53): typecheck error FS0412: A type instantiation involves a byref type. This is not permitted by the rules of Common IL. neg_byref_7.fs(2,47,2,53): typecheck error FS0412: A type instantiation involves a byref type. This is not permitted by the rules of Common IL. + +neg_byref_7.fs(4,41,4,42): typecheck error FS3209: The address of the variable 'y' cannot be used at this point. A method or function may not return the address of this local value. diff --git a/tests/fsharp/typecheck/sigs/neg_byref_7.fs b/tests/fsharp/typecheck/sigs/neg_byref_7.fs index 870455dd58d..1aa7dd9cff6 100644 --- a/tests/fsharp/typecheck/sigs/neg_byref_7.fs +++ b/tests/fsharp/typecheck/sigs/neg_byref_7.fs @@ -1,2 +1,4 @@ module Test let xop3 (v:byref) = let pair = &v,&v in [pair].Length (* trap: tinst of TExpr_op, tuple - no opt away *) + +let f2 (x: byref) = let y = &x in &y diff --git a/tests/fsharp/typecheck/sigs/pos24.fs b/tests/fsharp/typecheck/sigs/pos24.fs new file mode 100644 index 00000000000..d54b7415207 --- /dev/null +++ b/tests/fsharp/typecheck/sigs/pos24.fs @@ -0,0 +1,1604 @@ + +module Pos24 + +[] +let main argv = + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + let fu = 0 + 1 |> ignore + + System.Console.ReadKey() |> ignore + 0 // return an integer exit code diff --git a/tests/fsharp/typecheck/tests_typecheck.fs b/tests/fsharp/typecheck/tests_typecheck.fs index a0558ceef18..962892d033b 100644 --- a/tests/fsharp/typecheck/tests_typecheck.fs +++ b/tests/fsharp/typecheck/tests_typecheck.fs @@ -55,39 +55,27 @@ module Sigs = let singleNegTest = SingleNegTest.singleNegTest cfg dir - // "%FSC%" %fsc_flags% --target:exe -o:pos23.exe pos23.fs + do! fsc "%s --target:exe -o:pos24.exe" fsc_flags ["pos24.fs"] + do! peverify "pos24.exe" + do! fsc "%s --target:exe -o:pos23.exe" fsc_flags ["pos23.fs"] - // "%PEVERIFY%" pos23.exe do! peverify "pos23.exe" - // pos23.exe do! exec ("."/"pos23.exe") "" - // "%FSC%" %fsc_flags% --target:exe -o:pos20.exe pos20.fs do! fsc "%s --target:exe -o:pos20.exe" fsc_flags ["pos20.fs"] - // "%PEVERIFY%" pos20.exe do! peverify "pos20.exe" - // pos20.exe do! exec ("."/"pos20.exe") "" - // "%FSC%" %fsc_flags% --target:exe -o:pos19.exe pos19.fs do! fsc "%s --target:exe -o:pos19.exe" fsc_flags ["pos19.fs"] - // "%PEVERIFY%" pos19.exe do! peverify "pos19.exe" - // pos19.exe do! exec ("."/"pos19.exe") "" - // "%FSC%" %fsc_flags% --target:exe -o:pos18.exe pos18.fs do! fsc "%s --target:exe -o:pos18.exe" fsc_flags ["pos18.fs"] - // "%PEVERIFY%" pos18.exe do! peverify "pos18.exe" - // pos18.exe do! exec ("."/"pos18.exe") "" - // "%FSC%" %fsc_flags% --target:exe -o:pos16.exe pos16.fs do! fsc "%s --target:exe -o:pos16.exe" fsc_flags ["pos16.fs"] - // "%PEVERIFY%" pos16.exe do! peverify "pos16.exe" - // pos16.exe do! exec ("."/"pos16.exe") "" // "%FSC%" %fsc_flags% --target:exe -o:pos17.exe pos17.fs @@ -136,7 +124,7 @@ module Sigs = // "%PEVERIFY%" pos09.dll do! peverify "pos09.dll" - do! attempt.For (["neg95"; "neg94"; "neg93"; "neg92"; "neg91"; + do! attempt.For (["neg97"; "neg96"; "neg95"; "neg94"; "neg93"; "neg92"; "neg91"; "neg90"; "neg89"; "neg88"; "neg87"; "neg86"; "neg85"; "neg84"; "neg83"; "neg82"; "neg81"; "neg80"; "neg79"; "neg78"; "neg77"; "neg76"; "neg75"; "neg74"; "neg73"; "neg72"; "neg71"; "neg70"; "neg69"; "neg68"; "neg67"; "neg66"; "neg65"; "neg64"; "neg61"; "neg63"; diff --git a/tests/fsharpqa/Source/.gitignore b/tests/fsharpqa/Source/.gitignore index d9a2cd109b0..3e60a21cfe9 100644 --- a/tests/fsharpqa/Source/.gitignore +++ b/tests/fsharpqa/Source/.gitignore @@ -3,3 +3,4 @@ *.exe *.dll *.pdb +*.il \ No newline at end of file diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest1.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest1.il.bsl deleted file mode 100644 index 6de36ae6b45..00000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest1.il.bsl +++ /dev/null @@ -1,163 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 3.5.30729.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v2.0.50727 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 2:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (A1 90 89 B1 C7 4D 08 09 ) // .....M.. - .ver 1:9:7:8 -} -.assembly AsyncExpressionSteppingTest1 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.AsyncExpressionSteppingTest1 -{ - // Offset: 0x00000000 Length: 0x000002AB -} -.mresource public FSharpOptimizationData.AsyncExpressionSteppingTest1 -{ - // Offset: 0x000002B0 Length: 0x000000B1 -} -.module AsyncExpressionSteppingTest1.dll -// MVID: {4ACEB5C2-6394-B5D4-A745-0383C2B5CE4A} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x0000000002730000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed AsyncExpressionSteppingTest1 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class abstract auto ansi sealed nested public AsyncExpressionSteppingTest1 - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto ansi serializable nested assembly beforefieldinit f1@5 - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> - { - .field public class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@ - .method assembly specialname rtspecialname - instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) cil managed - { - // Code size 14 (0xe) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest1/AsyncExpressionSteppingTest1/f1@5::builder@ - IL_000d: ret - } // end of method f1@5::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 - Invoke(class [FSharp.Core]Microsoft.FSharp.Core.Unit unitVar) cil managed - { - // Code size 63 (0x3f) - .maxstack 5 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 17,32 - IL_0000: nop - IL_0001: ldstr "hello" - IL_0006: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_000b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0010: pop - .line 6,6 : 17,46 - IL_0011: ldstr "stuck in the middle" - IL_0016: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_001b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0020: pop - .line 7,7 : 17,34 - IL_0021: ldstr "goodbye" - IL_0026: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_002b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0030: pop - IL_0031: ldarg.0 - IL_0032: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest1/AsyncExpressionSteppingTest1/f1@5::builder@ - IL_0037: tail. - IL_0039: call instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Zero() - IL_003e: ret - } // end of method f1@5::Invoke - - } // end of class f1@5 - - .method public static class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 - f1() cil managed - { - // Code size 22 (0x16) - .maxstack 4 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) - .line 5,5 : 9,14 - IL_0000: nop - IL_0001: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_DefaultAsyncBuilder() - IL_0006: stloc.0 - IL_0007: ldloc.0 - IL_0008: ldloc.0 - IL_0009: newobj instance void AsyncExpressionSteppingTest1/AsyncExpressionSteppingTest1/f1@5::.ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder) - IL_000e: tail. - IL_0010: call instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Delay(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0015: ret - } // end of method AsyncExpressionSteppingTest1::f1 - - } // end of class AsyncExpressionSteppingTest1 - -} // end of class AsyncExpressionSteppingTest1 - -.class private abstract auto ansi sealed ''.$AsyncExpressionSteppingTest1 - extends [mscorlib]System.Object -{ - .field static assembly int32 init@ - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method private specialname rtspecialname static - void .cctor() cil managed - { - // Code size 19 (0x13) - .maxstack 5 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 V_0, - [1] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 V_1) - .line 9,9 : 13,43 - IL_0000: nop - IL_0001: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 AsyncExpressionSteppingTest1/AsyncExpressionSteppingTest1::f1() - IL_0006: stloc.0 - IL_0007: ldloc.0 - IL_0008: stloc.1 - IL_0009: ldloc.1 - IL_000a: ldnull - IL_000b: ldnull - IL_000c: call !!0 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync::RunSynchronously(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1) - IL_0011: pop - IL_0012: ret - } // end of method $AsyncExpressionSteppingTest1::.cctor - -} // end of class ''.$AsyncExpressionSteppingTest1 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest1.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest1.il.netfx4.bsl index 6cd9bf34f2d..c8f7325f3c6 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest1.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest1.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16774 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly AsyncExpressionSteppingTest1 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.AsyncExpressionSteppingTest1 { - // Offset: 0x00000000 Length: 0x00000289 + // Offset: 0x00000000 Length: 0x00000264 } .mresource public FSharpOptimizationData.AsyncExpressionSteppingTest1 { - // Offset: 0x00000290 Length: 0x000000B1 + // Offset: 0x00000268 Length: 0x000000B1 } .module AsyncExpressionSteppingTest1.dll -// MVID: {4DABFC7F-6394-B5D4-A745-03837FFCAB4D} +// MVID: {5775B13E-6394-B5D4-A745-03833EB17557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000280000 +// Image base: 0x011E0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -62,6 +62,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -78,18 +80,18 @@ // Code size 63 (0x3f) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 6,6 : 17,32 + .line 6,6 : 17,32 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\AsyncExpressionStepping\\AsyncExpressionSteppingTest1.fs' IL_0000: nop IL_0001: ldstr "hello" IL_0006: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0010: pop - .line 7,7 : 17,46 + .line 7,7 : 17,46 IL_0011: ldstr "stuck in the middle" IL_0016: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_001b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0020: pop - .line 8,8 : 17,34 + .line 8,8 : 17,34 IL_0021: ldstr "goodbye" IL_0026: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_002b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) @@ -109,7 +111,7 @@ // Code size 22 (0x16) .maxstack 4 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) - .line 6,6 : 9,14 + .line 6,6 : 9,14 IL_0000: nop IL_0001: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_DefaultAsyncBuilder() IL_0006: stloc.0 @@ -139,7 +141,7 @@ .maxstack 5 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 V_0, [1] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 V_1) - .line 10,10 : 13,43 + .line 10,10 : 13,43 IL_0000: nop IL_0001: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 AsyncExpressionSteppingTest1/AsyncExpressionSteppingTest1::f1() IL_0006: stloc.0 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest2.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest2.il.bsl deleted file mode 100644 index 90d430aab8e..00000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest2.il.bsl +++ /dev/null @@ -1,255 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 3.5.30729.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v2.0.50727 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 2:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (A1 90 89 B1 C7 4D 08 09 ) // .....M.. - .ver 1:9:7:8 -} -.assembly AsyncExpressionSteppingTest2 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.AsyncExpressionSteppingTest2 -{ - // Offset: 0x00000000 Length: 0x000002AB -} -.mresource public FSharpOptimizationData.AsyncExpressionSteppingTest2 -{ - // Offset: 0x000002B0 Length: 0x000000B1 -} -.module AsyncExpressionSteppingTest2.dll -// MVID: {4ACEB5C8-6394-D499-A745-0383C8B5CE4A} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x0000000002730000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed AsyncExpressionSteppingTest2 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class abstract auto ansi sealed nested public AsyncExpressionSteppingTest2 - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto ansi serializable nested assembly beforefieldinit 'f2@5-1' - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 - { - .field public class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x - .method assembly specialname rtspecialname - instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x) cil managed - { - // Code size 14 (0xe) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 AsyncExpressionSteppingTest2/AsyncExpressionSteppingTest2/'f2@5-1'::x - IL_000d: ret - } // end of method 'f2@5-1'::.ctor - - .method public strict virtual instance bool - Invoke(class [FSharp.Core]Microsoft.FSharp.Core.Unit unitVar) cil managed - { - // Code size 16 (0x10) - .maxstack 6 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 23,29 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 AsyncExpressionSteppingTest2/AsyncExpressionSteppingTest2/'f2@5-1'::x - IL_0007: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_000c: ldc.i4.4 - IL_000d: clt - IL_000f: ret - } // end of method 'f2@5-1'::Invoke - - } // end of class 'f2@5-1' - - .class auto ansi serializable nested assembly beforefieldinit 'f2@6-2' - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> - { - .field public class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x - .field public class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@ - .method assembly specialname rtspecialname - instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x, - class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) cil managed - { - // Code size 21 (0x15) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 AsyncExpressionSteppingTest2/AsyncExpressionSteppingTest2/'f2@6-2'::x - IL_000d: ldarg.0 - IL_000e: ldarg.2 - IL_000f: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest2/AsyncExpressionSteppingTest2/'f2@6-2'::builder@ - IL_0014: ret - } // end of method 'f2@6-2'::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 - Invoke(class [FSharp.Core]Microsoft.FSharp.Core.Unit unitVar) cil managed - { - // Code size 43 (0x2b) - .maxstack 5 - .line 6,6 : 20,26 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 AsyncExpressionSteppingTest2/AsyncExpressionSteppingTest2/'f2@6-2'::x - IL_0007: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_000c: nop - .line 7,7 : 20,35 - IL_000d: ldstr "hello" - IL_0012: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0017: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_001c: pop - IL_001d: ldarg.0 - IL_001e: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest2/AsyncExpressionSteppingTest2/'f2@6-2'::builder@ - IL_0023: tail. - IL_0025: call instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Zero() - IL_002a: ret - } // end of method 'f2@6-2'::Invoke - - } // end of class 'f2@6-2' - - .class auto ansi serializable nested assembly beforefieldinit f2@5 - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> - { - .field public class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x - .field public class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@ - .method assembly specialname rtspecialname - instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x, - class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) cil managed - { - // Code size 21 (0x15) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 AsyncExpressionSteppingTest2/AsyncExpressionSteppingTest2/f2@5::x - IL_000d: ldarg.0 - IL_000e: ldarg.2 - IL_000f: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest2/AsyncExpressionSteppingTest2/f2@5::builder@ - IL_0014: ret - } // end of method f2@5::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 - Invoke(class [FSharp.Core]Microsoft.FSharp.Core.Unit unitVar) cil managed - { - // Code size 54 (0x36) - .maxstack 9 - .line 5,5 : 17,29 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest2/AsyncExpressionSteppingTest2/f2@5::builder@ - IL_0007: ldarg.0 - IL_0008: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 AsyncExpressionSteppingTest2/AsyncExpressionSteppingTest2/f2@5::x - IL_000d: newobj instance void AsyncExpressionSteppingTest2/AsyncExpressionSteppingTest2/'f2@5-1'::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0012: ldarg.0 - IL_0013: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest2/AsyncExpressionSteppingTest2/f2@5::builder@ - IL_0018: ldarg.0 - IL_0019: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 AsyncExpressionSteppingTest2/AsyncExpressionSteppingTest2/f2@5::x - IL_001e: ldarg.0 - IL_001f: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest2/AsyncExpressionSteppingTest2/f2@5::builder@ - IL_0024: newobj instance void AsyncExpressionSteppingTest2/AsyncExpressionSteppingTest2/'f2@6-2'::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, - class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder) - IL_0029: call instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Delay(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_002e: tail. - IL_0030: call instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::While(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, - class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1) - IL_0035: ret - } // end of method f2@5::Invoke - - } // end of class f2@5 - - .method public static class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 - f2() cil managed - { - // Code size 30 (0x1e) - .maxstack 5 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x, - [1] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) - .line 4,4 : 9,22 - IL_0000: nop - IL_0001: ldc.i4.0 - IL_0002: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_0007: stloc.0 - .line 5,5 : 9,14 - IL_0008: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_DefaultAsyncBuilder() - IL_000d: stloc.1 - IL_000e: ldloc.1 - IL_000f: ldloc.0 - IL_0010: ldloc.1 - IL_0011: newobj instance void AsyncExpressionSteppingTest2/AsyncExpressionSteppingTest2/f2@5::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, - class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder) - IL_0016: tail. - IL_0018: call instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Delay(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_001d: ret - } // end of method AsyncExpressionSteppingTest2::f2 - - } // end of class AsyncExpressionSteppingTest2 - -} // end of class AsyncExpressionSteppingTest2 - -.class private abstract auto ansi sealed ''.$AsyncExpressionSteppingTest2 - extends [mscorlib]System.Object -{ - .field static assembly int32 init@ - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method private specialname rtspecialname static - void .cctor() cil managed - { - // Code size 19 (0x13) - .maxstack 5 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 V_0, - [1] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 V_1) - .line 10,10 : 13,43 - IL_0000: nop - IL_0001: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 AsyncExpressionSteppingTest2/AsyncExpressionSteppingTest2::f2() - IL_0006: stloc.0 - IL_0007: ldloc.0 - IL_0008: stloc.1 - IL_0009: ldloc.1 - IL_000a: ldnull - IL_000b: ldnull - IL_000c: call !!0 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync::RunSynchronously(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1) - IL_0011: pop - IL_0012: ret - } // end of method $AsyncExpressionSteppingTest2::.cctor - -} // end of class ''.$AsyncExpressionSteppingTest2 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest2.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest2.il.netfx4.bsl index 5b729b85761..d9a435ed3b6 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest2.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest2.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16774 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly AsyncExpressionSteppingTest2 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.AsyncExpressionSteppingTest2 { - // Offset: 0x00000000 Length: 0x00000289 + // Offset: 0x00000000 Length: 0x00000264 } .mresource public FSharpOptimizationData.AsyncExpressionSteppingTest2 { - // Offset: 0x00000290 Length: 0x000000B1 + // Offset: 0x00000268 Length: 0x000000B1 } .module AsyncExpressionSteppingTest2.dll -// MVID: {4DABFC81-6394-D499-A745-038381FCAB4D} +// MVID: {5775B142-6394-D499-A745-038342B17557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000400000 +// Image base: 0x00CE0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -62,6 +62,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -78,7 +80,7 @@ // Code size 16 (0x10) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 6,6 : 23,29 + .line 6,6 : 23,29 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\AsyncExpressionStepping\\AsyncExpressionSteppingTest2.fs' IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 AsyncExpressionSteppingTest2/AsyncExpressionSteppingTest2/'f2@6-1'::x @@ -99,6 +101,8 @@ instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x, class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 21 (0x15) .maxstack 8 IL_0000: ldarg.0 @@ -117,13 +121,13 @@ { // Code size 43 (0x2b) .maxstack 8 - .line 7,7 : 20,26 + .line 7,7 : 20,26 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 AsyncExpressionSteppingTest2/AsyncExpressionSteppingTest2/'f2@7-2'::x IL_0007: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) IL_000c: nop - .line 8,8 : 20,35 + .line 8,8 : 20,35 IL_000d: ldstr "hello" IL_0012: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_0017: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) @@ -146,6 +150,8 @@ instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x, class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 21 (0x15) .maxstack 8 IL_0000: ldarg.0 @@ -164,7 +170,7 @@ { // Code size 54 (0x36) .maxstack 9 - .line 6,6 : 17,29 + .line 6,6 : 17,29 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest2/AsyncExpressionSteppingTest2/f2@6::builder@ @@ -195,12 +201,12 @@ .maxstack 5 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x, [1] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) - .line 5,5 : 9,22 + .line 5,5 : 9,22 IL_0000: nop IL_0001: ldc.i4.0 IL_0002: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) IL_0007: stloc.0 - .line 6,6 : 9,14 + .line 6,6 : 9,14 IL_0008: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_DefaultAsyncBuilder() IL_000d: stloc.1 IL_000e: ldloc.1 @@ -231,7 +237,7 @@ .maxstack 5 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 V_0, [1] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 V_1) - .line 11,11 : 13,43 + .line 11,11 : 13,43 IL_0000: nop IL_0001: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 AsyncExpressionSteppingTest2/AsyncExpressionSteppingTest2::f2() IL_0006: stloc.0 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest3.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest3.il.bsl deleted file mode 100644 index 3dc715c8d36..00000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest3.il.bsl +++ /dev/null @@ -1,176 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 3.5.30729.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v2.0.50727 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 2:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (A1 90 89 B1 C7 4D 08 09 ) // .....M.. - .ver 1:9:7:8 -} -.assembly AsyncExpressionSteppingTest3 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.AsyncExpressionSteppingTest3 -{ - // Offset: 0x00000000 Length: 0x000002B6 -} -.mresource public FSharpOptimizationData.AsyncExpressionSteppingTest3 -{ - // Offset: 0x000002C0 Length: 0x000000B1 -} -.module AsyncExpressionSteppingTest3.dll -// MVID: {4ACEB5CC-6394-F35E-A745-0383CCB5CE4A} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x0000000002730000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed AsyncExpressionSteppingTest3 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class abstract auto ansi sealed nested public AsyncExpressionSteppingTest3 - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto ansi serializable nested assembly beforefieldinit f3@4 - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> - { - .field public class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@ - .method assembly specialname rtspecialname - instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) cil managed - { - // Code size 14 (0xe) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest3/AsyncExpressionSteppingTest3/f3@4::builder@ - IL_000d: ret - } // end of method f3@4::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 - Invoke(class [FSharp.Core]Microsoft.FSharp.Core.Unit unitVar) cil managed - { - // Code size 58 (0x3a) - .maxstack 6 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x, - [1] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 y, - [2] int32 z) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 17,30 - IL_0000: nop - IL_0001: ldc.i4.0 - IL_0002: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_0007: stloc.0 - .line 5,5 : 17,23 - IL_0008: ldloc.0 - IL_0009: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_000e: nop - .line 6,6 : 17,30 - IL_000f: ldc.i4.0 - IL_0010: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_0015: stloc.1 - .line 7,7 : 17,23 - IL_0016: ldloc.1 - IL_0017: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_001c: nop - .line 8,8 : 17,32 - IL_001d: ldloc.0 - IL_001e: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0023: ldloc.1 - IL_0024: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0029: add - IL_002a: stloc.2 - .line 9,9 : 17,25 - IL_002b: ldarg.0 - IL_002c: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest3/AsyncExpressionSteppingTest3/f3@4::builder@ - IL_0031: ldloc.2 - IL_0032: tail. - IL_0034: call instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Return(!!0) - IL_0039: ret - } // end of method f3@4::Invoke - - } // end of class f3@4 - - .method public static class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 - f3() cil managed - { - // Code size 22 (0x16) - .maxstack 4 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) - .line 4,4 : 9,14 - IL_0000: nop - IL_0001: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_DefaultAsyncBuilder() - IL_0006: stloc.0 - IL_0007: ldloc.0 - IL_0008: ldloc.0 - IL_0009: newobj instance void AsyncExpressionSteppingTest3/AsyncExpressionSteppingTest3/f3@4::.ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder) - IL_000e: tail. - IL_0010: call instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Delay(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0015: ret - } // end of method AsyncExpressionSteppingTest3::f3 - - } // end of class AsyncExpressionSteppingTest3 - -} // end of class AsyncExpressionSteppingTest3 - -.class private abstract auto ansi sealed ''.$AsyncExpressionSteppingTest3 - extends [mscorlib]System.Object -{ - .field static assembly int32 init@ - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method private specialname rtspecialname static - void .cctor() cil managed - { - // Code size 19 (0x13) - .maxstack 5 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 V_0, - [1] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 V_1) - .line 11,11 : 13,43 - IL_0000: nop - IL_0001: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 AsyncExpressionSteppingTest3/AsyncExpressionSteppingTest3::f3() - IL_0006: stloc.0 - IL_0007: ldloc.0 - IL_0008: stloc.1 - IL_0009: ldloc.1 - IL_000a: ldnull - IL_000b: ldnull - IL_000c: call !!0 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync::RunSynchronously(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1) - IL_0011: pop - IL_0012: ret - } // end of method $AsyncExpressionSteppingTest3::.cctor - -} // end of class ''.$AsyncExpressionSteppingTest3 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest3.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest3.il.netfx4.bsl index 7c0e1fc3bf5..eeadc6fcb4c 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest3.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest3.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16774 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly AsyncExpressionSteppingTest3 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.AsyncExpressionSteppingTest3 { - // Offset: 0x00000000 Length: 0x00000294 + // Offset: 0x00000000 Length: 0x0000026F } .mresource public FSharpOptimizationData.AsyncExpressionSteppingTest3 { - // Offset: 0x00000298 Length: 0x000000B1 + // Offset: 0x00000278 Length: 0x000000B1 } .module AsyncExpressionSteppingTest3.dll -// MVID: {4DABFC83-6394-F35E-A745-038383FCAB4D} +// MVID: {5775B145-6394-F35E-A745-038345B17557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000790000 +// Image base: 0x00D30000 // =============== CLASS MEMBERS DECLARATION =================== @@ -62,6 +62,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -81,31 +83,31 @@ [1] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 y, [2] int32 z) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 17,30 + .line 5,5 : 17,30 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\AsyncExpressionStepping\\AsyncExpressionSteppingTest3.fs' IL_0000: nop IL_0001: ldc.i4.0 IL_0002: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) IL_0007: stloc.0 - .line 6,6 : 17,23 + .line 6,6 : 17,23 IL_0008: ldloc.0 IL_0009: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) IL_000e: nop - .line 7,7 : 17,30 + .line 7,7 : 17,30 IL_000f: ldc.i4.0 IL_0010: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) IL_0015: stloc.1 - .line 8,8 : 17,23 + .line 8,8 : 17,23 IL_0016: ldloc.1 IL_0017: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) IL_001c: nop - .line 9,9 : 17,32 + .line 9,9 : 17,32 IL_001d: ldloc.0 IL_001e: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) IL_0023: ldloc.1 IL_0024: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) IL_0029: add IL_002a: stloc.2 - .line 10,10 : 17,25 + .line 10,10 : 17,25 IL_002b: ldarg.0 IL_002c: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest3/AsyncExpressionSteppingTest3/f3@5::builder@ IL_0031: ldloc.2 @@ -122,7 +124,7 @@ // Code size 22 (0x16) .maxstack 4 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) - .line 5,5 : 9,14 + .line 5,5 : 9,14 IL_0000: nop IL_0001: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_DefaultAsyncBuilder() IL_0006: stloc.0 @@ -152,7 +154,7 @@ .maxstack 5 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 V_0, [1] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 V_1) - .line 12,12 : 13,43 + .line 12,12 : 13,43 IL_0000: nop IL_0001: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 AsyncExpressionSteppingTest3/AsyncExpressionSteppingTest3::f3() IL_0006: stloc.0 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest4.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest4.il.bsl deleted file mode 100644 index 40e2353af16..00000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest4.il.bsl +++ /dev/null @@ -1,260 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 3.5.30729.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v2.0.50727 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 2:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (A1 90 89 B1 C7 4D 08 09 ) // .....M.. - .ver 1:9:7:8 -} -.assembly AsyncExpressionSteppingTest4 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.AsyncExpressionSteppingTest4 -{ - // Offset: 0x00000000 Length: 0x000002B6 -} -.mresource public FSharpOptimizationData.AsyncExpressionSteppingTest4 -{ - // Offset: 0x000002C0 Length: 0x000000B1 -} -.module AsyncExpressionSteppingTest4.dll -// MVID: {4ACEB5CF-6394-6D4B-A745-0383CFB5CE4A} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x0000000002730000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed AsyncExpressionSteppingTest4 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class abstract auto ansi sealed nested public AsyncExpressionSteppingTest4 - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto ansi serializable nested assembly beforefieldinit 'f4@6-1' - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> - { - .field public class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@ - .field public class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x - .method assembly specialname rtspecialname - instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x) cil managed - { - // Code size 21 (0x15) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest4/AsyncExpressionSteppingTest4/'f4@6-1'::builder@ - IL_000d: ldarg.0 - IL_000e: ldarg.2 - IL_000f: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 AsyncExpressionSteppingTest4/AsyncExpressionSteppingTest4/'f4@6-1'::x - IL_0014: ret - } // end of method 'f4@6-1'::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 - Invoke(class [FSharp.Core]Microsoft.FSharp.Core.Unit unitVar) cil managed - { - // Code size 49 (0x31) - .maxstack 6 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 y, - [1] int32 z) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 6,6 : 21,34 - IL_0000: nop - IL_0001: ldc.i4.0 - IL_0002: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_0007: stloc.0 - .line 7,7 : 21,27 - IL_0008: ldloc.0 - IL_0009: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_000e: nop - .line 8,8 : 21,36 - IL_000f: ldarg.0 - IL_0010: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 AsyncExpressionSteppingTest4/AsyncExpressionSteppingTest4/'f4@6-1'::x - IL_0015: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_001a: ldloc.0 - IL_001b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0020: add - IL_0021: stloc.1 - .line 9,9 : 21,29 - IL_0022: ldarg.0 - IL_0023: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest4/AsyncExpressionSteppingTest4/'f4@6-1'::builder@ - IL_0028: ldloc.1 - IL_0029: tail. - IL_002b: call instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Return(!!0) - IL_0030: ret - } // end of method 'f4@6-1'::Invoke - - } // end of class 'f4@6-1' - - .class auto ansi serializable nested assembly beforefieldinit 'f4@11-2' - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 - { - .field public class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x - .method assembly specialname rtspecialname - instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x) cil managed - { - // Code size 14 (0xe) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 AsyncExpressionSteppingTest4/AsyncExpressionSteppingTest4/'f4@11-2'::x - IL_000d: ret - } // end of method 'f4@11-2'::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Core.Unit - Invoke(class [FSharp.Core]Microsoft.FSharp.Core.Unit unitVar) cil managed - { - // Code size 31 (0x1f) - .maxstack 5 - .line 11,11 : 20,26 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 AsyncExpressionSteppingTest4/AsyncExpressionSteppingTest4/'f4@11-2'::x - IL_0007: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_000c: nop - .line 12,12 : 20,34 - IL_000d: ldstr "done" - IL_0012: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0017: tail. - IL_0019: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_001e: ret - } // end of method 'f4@11-2'::Invoke - - } // end of class 'f4@11-2' - - .class auto ansi serializable nested assembly beforefieldinit f4@4 - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> - { - .field public class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@ - .method assembly specialname rtspecialname - instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) cil managed - { - // Code size 14 (0xe) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest4/AsyncExpressionSteppingTest4/f4@4::builder@ - IL_000d: ret - } // end of method f4@4::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 - Invoke(class [FSharp.Core]Microsoft.FSharp.Core.Unit unitVar) cil managed - { - // Code size 51 (0x33) - .maxstack 8 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x) - .line 4,4 : 17,30 - IL_0000: nop - IL_0001: ldc.i4.0 - IL_0002: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_0007: stloc.0 - .line 5,5 : 17,20 - IL_0008: ldarg.0 - IL_0009: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest4/AsyncExpressionSteppingTest4/f4@4::builder@ - IL_000e: ldarg.0 - IL_000f: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest4/AsyncExpressionSteppingTest4/f4@4::builder@ - IL_0014: ldarg.0 - IL_0015: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest4/AsyncExpressionSteppingTest4/f4@4::builder@ - IL_001a: ldloc.0 - IL_001b: newobj instance void AsyncExpressionSteppingTest4/AsyncExpressionSteppingTest4/'f4@6-1'::.ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0020: call instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Delay(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0025: ldloc.0 - IL_0026: newobj instance void AsyncExpressionSteppingTest4/AsyncExpressionSteppingTest4/'f4@11-2'::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_002b: tail. - IL_002d: call instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::TryFinally(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_0032: ret - } // end of method f4@4::Invoke - - } // end of class f4@4 - - .method public static class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 - f4() cil managed - { - // Code size 22 (0x16) - .maxstack 4 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) - .line 4,4 : 9,14 - IL_0000: nop - IL_0001: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_DefaultAsyncBuilder() - IL_0006: stloc.0 - IL_0007: ldloc.0 - IL_0008: ldloc.0 - IL_0009: newobj instance void AsyncExpressionSteppingTest4/AsyncExpressionSteppingTest4/f4@4::.ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder) - IL_000e: tail. - IL_0010: call instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Delay(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0015: ret - } // end of method AsyncExpressionSteppingTest4::f4 - - } // end of class AsyncExpressionSteppingTest4 - -} // end of class AsyncExpressionSteppingTest4 - -.class private abstract auto ansi sealed ''.$AsyncExpressionSteppingTest4 - extends [mscorlib]System.Object -{ - .field static assembly int32 init@ - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method private specialname rtspecialname static - void .cctor() cil managed - { - // Code size 19 (0x13) - .maxstack 5 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 V_0, - [1] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 V_1) - .line 14,14 : 13,43 - IL_0000: nop - IL_0001: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 AsyncExpressionSteppingTest4/AsyncExpressionSteppingTest4::f4() - IL_0006: stloc.0 - IL_0007: ldloc.0 - IL_0008: stloc.1 - IL_0009: ldloc.1 - IL_000a: ldnull - IL_000b: ldnull - IL_000c: call !!0 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync::RunSynchronously(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1) - IL_0011: pop - IL_0012: ret - } // end of method $AsyncExpressionSteppingTest4::.cctor - -} // end of class ''.$AsyncExpressionSteppingTest4 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest4.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest4.il.netfx4.bsl index 3c014c03936..b004f5ab5b9 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest4.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest4.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16774 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly AsyncExpressionSteppingTest4 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.AsyncExpressionSteppingTest4 { - // Offset: 0x00000000 Length: 0x00000294 + // Offset: 0x00000000 Length: 0x0000026F } .mresource public FSharpOptimizationData.AsyncExpressionSteppingTest4 { - // Offset: 0x00000298 Length: 0x000000B1 + // Offset: 0x00000278 Length: 0x000000B1 } .module AsyncExpressionSteppingTest4.dll -// MVID: {4DABFC85-6394-6D4B-A745-038385FCAB4D} +// MVID: {5775B147-6394-6D4B-A745-038347B17557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00000000006D0000 +// Image base: 0x00B60000 // =============== CLASS MEMBERS DECLARATION =================== @@ -64,6 +64,8 @@ instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@, class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 21 (0x15) .maxstack 8 IL_0000: ldarg.0 @@ -85,16 +87,16 @@ .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 y, [1] int32 z) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 7,7 : 21,34 + .line 7,7 : 21,34 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\AsyncExpressionStepping\\AsyncExpressionSteppingTest4.fs' IL_0000: nop IL_0001: ldc.i4.0 IL_0002: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) IL_0007: stloc.0 - .line 8,8 : 21,27 + .line 8,8 : 21,27 IL_0008: ldloc.0 IL_0009: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) IL_000e: nop - .line 9,9 : 21,36 + .line 9,9 : 21,36 IL_000f: ldarg.0 IL_0010: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 AsyncExpressionSteppingTest4/AsyncExpressionSteppingTest4/'f4@7-1'::x IL_0015: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) @@ -102,7 +104,7 @@ IL_001b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) IL_0020: add IL_0021: stloc.1 - .line 10,10 : 21,29 + .line 10,10 : 21,29 IL_0022: ldarg.0 IL_0023: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest4/AsyncExpressionSteppingTest4/'f4@7-1'::builder@ IL_0028: ldloc.1 @@ -120,6 +122,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -135,13 +139,13 @@ { // Code size 31 (0x1f) .maxstack 8 - .line 12,12 : 20,26 + .line 12,12 : 20,26 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 AsyncExpressionSteppingTest4/AsyncExpressionSteppingTest4/'f4@12-2'::x IL_0007: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) IL_000c: nop - .line 13,13 : 20,34 + .line 13,13 : 20,34 IL_000d: ldstr "done" IL_0012: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_0017: tail. @@ -158,6 +162,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -174,12 +180,12 @@ // Code size 51 (0x33) .maxstack 8 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x) - .line 5,5 : 17,30 + .line 5,5 : 17,30 IL_0000: nop IL_0001: ldc.i4.0 IL_0002: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) IL_0007: stloc.0 - .line 6,6 : 17,20 + .line 6,6 : 17,20 IL_0008: ldarg.0 IL_0009: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest4/AsyncExpressionSteppingTest4/f4@5::builder@ IL_000e: ldarg.0 @@ -206,7 +212,7 @@ // Code size 22 (0x16) .maxstack 4 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) - .line 5,5 : 9,14 + .line 5,5 : 9,14 IL_0000: nop IL_0001: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_DefaultAsyncBuilder() IL_0006: stloc.0 @@ -236,7 +242,7 @@ .maxstack 5 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 V_0, [1] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 V_1) - .line 15,15 : 13,43 + .line 15,15 : 13,43 IL_0000: nop IL_0001: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 AsyncExpressionSteppingTest4/AsyncExpressionSteppingTest4::f4() IL_0006: stloc.0 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest5.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest5.il.bsl deleted file mode 100644 index 3d00c0e8b33..00000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest5.il.bsl +++ /dev/null @@ -1,328 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 3.5.30729.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v2.0.50727 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 2:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (A1 90 89 B1 C7 4D 08 09 ) // .....M.. - .ver 1:9:7:8 -} -.assembly AsyncExpressionSteppingTest5 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.AsyncExpressionSteppingTest5 -{ - // Offset: 0x00000000 Length: 0x000002F7 -} -.mresource public FSharpOptimizationData.AsyncExpressionSteppingTest5 -{ - // Offset: 0x00000300 Length: 0x000000BE -} -.module AsyncExpressionSteppingTest5.dll -// MVID: {4ACEB5D3-6394-30E8-A745-0383D3B5CE4A} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x0000000002730000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed AsyncExpressionSteppingTest5 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class abstract auto ansi sealed nested public AsyncExpressionSteppingTest5 - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto ansi serializable nested assembly beforefieldinit 'f7@5-1' - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> - { - .field public class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@ - .method assembly specialname rtspecialname - instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) cil managed - { - // Code size 14 (0xe) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest5/AsyncExpressionSteppingTest5/'f7@5-1'::builder@ - IL_000d: ret - } // end of method 'f7@5-1'::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 - Invoke(int32 _arg1) cil managed - { - // Code size 49 (0x31) - .maxstack 5 - .locals init ([0] int32 x) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 17,31 - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: stloc.0 - .line 6,6 : 20,35 - IL_0003: ldstr "hello" - IL_0008: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_000d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0012: pop - .line 7,7 : 20,37 - IL_0013: ldstr "hello 2" - IL_0018: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_001d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0022: pop - IL_0023: ldarg.0 - IL_0024: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest5/AsyncExpressionSteppingTest5/'f7@5-1'::builder@ - IL_0029: tail. - IL_002b: call instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Zero() - IL_0030: ret - } // end of method 'f7@5-1'::Invoke - - } // end of class 'f7@5-1' - - .class auto ansi serializable nested assembly beforefieldinit 'f7@8-3' - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> - { - .field public class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@ - .method assembly specialname rtspecialname - instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) cil managed - { - // Code size 14 (0xe) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest5/AsyncExpressionSteppingTest5/'f7@8-3'::builder@ - IL_000d: ret - } // end of method 'f7@8-3'::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 - Invoke(int32 _arg2) cil managed - { - // Code size 49 (0x31) - .maxstack 5 - .locals init ([0] int32 x) - .line 8,8 : 17,31 - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: stloc.0 - .line 9,9 : 20,37 - IL_0003: ldstr "goodbye" - IL_0008: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_000d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0012: pop - .line 10,10 : 20,39 - IL_0013: ldstr "goodbye 2" - IL_0018: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_001d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0022: pop - IL_0023: ldarg.0 - IL_0024: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest5/AsyncExpressionSteppingTest5/'f7@8-3'::builder@ - IL_0029: tail. - IL_002b: call instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Zero() - IL_0030: ret - } // end of method 'f7@8-3'::Invoke - - } // end of class 'f7@8-3' - - .class auto ansi serializable nested assembly beforefieldinit 'f7@8-2' - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> - { - .field public class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@ - .method assembly specialname rtspecialname - instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) cil managed - { - // Code size 14 (0xe) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest5/AsyncExpressionSteppingTest5/'f7@8-2'::builder@ - IL_000d: ret - } // end of method 'f7@8-2'::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 - Invoke(class [FSharp.Core]Microsoft.FSharp.Core.Unit unitVar) cil managed - { - // Code size 36 (0x24) - .maxstack 7 - .line 8,8 : 17,31 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest5/AsyncExpressionSteppingTest5/'f7@8-2'::builder@ - IL_0007: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 AsyncExpressionSteppingTest5/AsyncExpressionSteppingTest5::get_es() - IL_000c: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 - IL_0011: ldarg.0 - IL_0012: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest5/AsyncExpressionSteppingTest5/'f7@8-2'::builder@ - IL_0017: newobj instance void AsyncExpressionSteppingTest5/AsyncExpressionSteppingTest5/'f7@8-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder) - IL_001c: tail. - IL_001e: call instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::For(class [mscorlib]System.Collections.Generic.IEnumerable`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0023: ret - } // end of method 'f7@8-2'::Invoke - - } // end of class 'f7@8-2' - - .class auto ansi serializable nested assembly beforefieldinit f7@5 - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> - { - .field public class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@ - .method assembly specialname rtspecialname - instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) cil managed - { - // Code size 14 (0xe) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest5/AsyncExpressionSteppingTest5/f7@5::builder@ - IL_000d: ret - } // end of method f7@5::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 - Invoke(class [FSharp.Core]Microsoft.FSharp.Core.Unit unitVar) cil managed - { - // Code size 69 (0x45) - .maxstack 8 - .line 5,5 : 17,31 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest5/AsyncExpressionSteppingTest5/f7@5::builder@ - IL_0007: ldarg.0 - IL_0008: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest5/AsyncExpressionSteppingTest5/f7@5::builder@ - IL_000d: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 AsyncExpressionSteppingTest5/AsyncExpressionSteppingTest5::get_es() - IL_0012: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 - IL_0017: ldarg.0 - IL_0018: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest5/AsyncExpressionSteppingTest5/f7@5::builder@ - IL_001d: newobj instance void AsyncExpressionSteppingTest5/AsyncExpressionSteppingTest5/'f7@5-1'::.ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder) - IL_0022: call instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::For(class [mscorlib]System.Collections.Generic.IEnumerable`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0027: ldarg.0 - IL_0028: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest5/AsyncExpressionSteppingTest5/f7@5::builder@ - IL_002d: ldarg.0 - IL_002e: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest5/AsyncExpressionSteppingTest5/f7@5::builder@ - IL_0033: newobj instance void AsyncExpressionSteppingTest5/AsyncExpressionSteppingTest5/'f7@8-2'::.ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder) - IL_0038: call instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Delay(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_003d: tail. - IL_003f: call instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Combine(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, - class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1) - IL_0044: ret - } // end of method f7@5::Invoke - - } // end of class f7@5 - - .method public specialname static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 - get_es() cil managed - { - // Code size 6 (0x6) - .maxstack 4 - IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$AsyncExpressionSteppingTest5::es@3 - IL_0005: ret - } // end of method AsyncExpressionSteppingTest5::get_es - - .method public static class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 - f7() cil managed - { - // Code size 22 (0x16) - .maxstack 4 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) - .line 5,5 : 9,14 - IL_0000: nop - IL_0001: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_DefaultAsyncBuilder() - IL_0006: stloc.0 - IL_0007: ldloc.0 - IL_0008: ldloc.0 - IL_0009: newobj instance void AsyncExpressionSteppingTest5/AsyncExpressionSteppingTest5/f7@5::.ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder) - IL_000e: tail. - IL_0010: call instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Delay(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0015: ret - } // end of method AsyncExpressionSteppingTest5::f7 - - .property class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 - es() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) - .get class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 AsyncExpressionSteppingTest5/AsyncExpressionSteppingTest5::get_es() - } // end of property AsyncExpressionSteppingTest5::es - } // end of class AsyncExpressionSteppingTest5 - -} // end of class AsyncExpressionSteppingTest5 - -.class private abstract auto ansi sealed ''.$AsyncExpressionSteppingTest5 - extends [mscorlib]System.Object -{ - .field static assembly initonly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 es@3 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .field static assembly int32 init@ - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method private specialname rtspecialname static - void .cctor() cil managed - { - // Code size 49 (0x31) - .maxstack 6 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 es, - [1] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 V_1, - [2] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 V_2) - .line 3,3 : 5,21 - IL_0000: nop - IL_0001: ldc.i4.3 - IL_0002: ldc.i4.4 - IL_0003: ldc.i4.5 - IL_0004: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty() - IL_0009: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, - class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1) - IL_000e: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, - class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1) - IL_0013: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, - class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1) - IL_0018: dup - IL_0019: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$AsyncExpressionSteppingTest5::es@3 - IL_001e: stloc.0 - .line 12,12 : 13,43 - IL_001f: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 AsyncExpressionSteppingTest5/AsyncExpressionSteppingTest5::f7() - IL_0024: stloc.1 - IL_0025: ldloc.1 - IL_0026: stloc.2 - IL_0027: ldloc.2 - IL_0028: ldnull - IL_0029: ldnull - IL_002a: call !!0 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync::RunSynchronously(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1) - IL_002f: pop - IL_0030: ret - } // end of method $AsyncExpressionSteppingTest5::.cctor - -} // end of class ''.$AsyncExpressionSteppingTest5 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest5.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest5.il.netfx4.bsl index 831a2f0c2f8..32976c70fb4 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest5.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest5.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17376 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly AsyncExpressionSteppingTest5 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.AsyncExpressionSteppingTest5 { - // Offset: 0x00000000 Length: 0x000002D5 + // Offset: 0x00000000 Length: 0x000002B0 } .mresource public FSharpOptimizationData.AsyncExpressionSteppingTest5 { - // Offset: 0x000002E0 Length: 0x000000BE + // Offset: 0x000002B8 Length: 0x000000BE } .module AsyncExpressionSteppingTest5.dll -// MVID: {4F31D596-6394-30E8-A745-038396D5314F} +// MVID: {5775B149-6394-30E8-A745-038349B17557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000640000 +// Image base: 0x00D30000 // =============== CLASS MEMBERS DECLARATION =================== @@ -62,6 +62,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -79,16 +81,16 @@ .maxstack 5 .locals init ([0] int32 x) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 6,6 : 17,31 + .line 6,6 : 17,31 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\AsyncExpressionStepping\\AsyncExpressionSteppingTest5.fs' IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 7,7 : 20,35 + .line 7,7 : 20,35 IL_0003: ldstr "hello" IL_0008: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0012: pop - .line 8,8 : 20,37 + .line 8,8 : 20,37 IL_0013: ldstr "hello 2" IL_0018: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_001d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) @@ -109,6 +111,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -125,16 +129,16 @@ // Code size 49 (0x31) .maxstack 5 .locals init ([0] int32 x) - .line 9,9 : 17,31 + .line 9,9 : 17,31 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 10,10 : 20,37 + .line 10,10 : 20,37 IL_0003: ldstr "goodbye" IL_0008: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0012: pop - .line 11,11 : 20,39 + .line 11,11 : 20,39 IL_0013: ldstr "goodbye 2" IL_0018: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_001d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) @@ -155,6 +159,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -170,7 +176,7 @@ { // Code size 36 (0x24) .maxstack 8 - .line 9,9 : 17,31 + .line 9,9 : 17,31 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest5/AsyncExpressionSteppingTest5/'f7@9-2'::builder@ @@ -194,6 +200,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -209,7 +217,7 @@ { // Code size 69 (0x45) .maxstack 8 - .line 6,6 : 17,31 + .line 6,6 : 17,31 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest5/AsyncExpressionSteppingTest5/f7@6::builder@ @@ -251,7 +259,7 @@ // Code size 22 (0x16) .maxstack 4 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) - .line 6,6 : 9,14 + .line 6,6 : 9,14 IL_0000: nop IL_0001: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_DefaultAsyncBuilder() IL_0006: stloc.0 @@ -290,7 +298,7 @@ .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 es, [1] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 V_1, [2] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 V_2) - .line 4,4 : 5,21 + .line 4,4 : 5,21 IL_0000: nop IL_0001: ldc.i4.3 IL_0002: ldc.i4.4 @@ -305,7 +313,7 @@ IL_0018: dup IL_0019: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$AsyncExpressionSteppingTest5::es@4 IL_001e: stloc.0 - .line 13,13 : 13,43 + .line 13,13 : 13,43 IL_001f: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 AsyncExpressionSteppingTest5/AsyncExpressionSteppingTest5::f7() IL_0024: stloc.1 IL_0025: ldloc.1 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest6.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest6.il.bsl deleted file mode 100644 index 17827409a17..00000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest6.il.bsl +++ /dev/null @@ -1,446 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16657 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly AsyncExpressionSteppingTest6 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.AsyncExpressionSteppingTest6 -{ - // Offset: 0x00000000 Length: 0x0000027D -} -.mresource public FSharpOptimizationData.AsyncExpressionSteppingTest6 -{ - // Offset: 0x00000288 Length: 0x000000BE -} -.module AsyncExpressionSteppingTest6.dll -// MVID: {4D0EDE86-6394-4FAD-A745-038386DE0E4D} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x00520000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed AsyncExpressionSteppingTest6 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class abstract auto ansi sealed nested public AsyncExpressionSteppingTest6 - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto ansi serializable nested assembly beforefieldinit f2@5 - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> - { - .field public class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@ - .method assembly specialname rtspecialname - instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) cil managed - { - // Code size 14 (0xe) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/f2@5::builder@ - IL_000d: ret - } // end of method f2@5::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 - Invoke(class [FSharp.Core]Microsoft.FSharp.Core.Unit unitVar) cil managed - { - // Code size 58 (0x3a) - .maxstack 6 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x, - [1] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 y, - [2] int32 z) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 17,30 - IL_0000: nop - IL_0001: ldc.i4.0 - IL_0002: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_0007: stloc.0 - .line 6,6 : 17,23 - IL_0008: ldloc.0 - IL_0009: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_000e: nop - .line 7,7 : 17,30 - IL_000f: ldc.i4.0 - IL_0010: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_0015: stloc.1 - .line 8,8 : 17,23 - IL_0016: ldloc.1 - IL_0017: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_001c: nop - .line 9,9 : 17,32 - IL_001d: ldloc.0 - IL_001e: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0023: ldloc.1 - IL_0024: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0029: add - IL_002a: stloc.2 - .line 10,10 : 17,25 - IL_002b: ldarg.0 - IL_002c: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/f2@5::builder@ - IL_0031: ldloc.2 - IL_0032: tail. - IL_0034: callvirt instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Return(!!0) - IL_0039: ret - } // end of method f2@5::Invoke - - } // end of class f2@5 - - .class auto ansi serializable nested assembly beforefieldinit 'f3@19-4' - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> - { - .field public class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@ - .field public int32 x1 - .field public class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 y - .method assembly specialname rtspecialname - instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@, - int32 x1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 y) cil managed - { - // Code size 28 (0x1c) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@19-4'::builder@ - IL_000d: ldarg.0 - IL_000e: ldarg.2 - IL_000f: stfld int32 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@19-4'::x1 - IL_0014: ldarg.0 - IL_0015: ldarg.3 - IL_0016: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@19-4'::y - IL_001b: ret - } // end of method 'f3@19-4'::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 - Invoke(int32 _arg) cil managed - { - // Code size 39 (0x27) - .maxstack 6 - .locals init ([0] int32 x4, - [1] int32 z) - .line 18,18 : 17,31 - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: stloc.0 - .line 19,19 : 17,37 - IL_0003: ldarg.0 - IL_0004: ldfld int32 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@19-4'::x1 - IL_0009: ldarg.0 - IL_000a: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@19-4'::y - IL_000f: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0014: add - IL_0015: ldloc.0 - IL_0016: add - IL_0017: stloc.1 - .line 20,20 : 17,25 - IL_0018: ldarg.0 - IL_0019: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@19-4'::builder@ - IL_001e: ldloc.1 - IL_001f: tail. - IL_0021: callvirt instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Return(!!0) - IL_0026: ret - } // end of method 'f3@19-4'::Invoke - - } // end of class 'f3@19-4' - - .class auto ansi serializable nested assembly beforefieldinit 'f3@16-3' - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> - { - .field public class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@ - .field public int32 x1 - .method assembly specialname rtspecialname - instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@, - int32 x1) cil managed - { - // Code size 21 (0x15) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@16-3'::builder@ - IL_000d: ldarg.0 - IL_000e: ldarg.2 - IL_000f: stfld int32 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@16-3'::x1 - IL_0014: ret - } // end of method 'f3@16-3'::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 - Invoke(int32 _arg) cil managed - { - // Code size 54 (0x36) - .maxstack 9 - .locals init ([0] int32 x3, - [1] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 y) - .line 15,15 : 17,31 - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: stloc.0 - .line 16,16 : 17,30 - IL_0003: ldc.i4.0 - IL_0004: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_0009: stloc.1 - .line 17,17 : 17,23 - IL_000a: ldloc.1 - IL_000b: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0010: nop - .line 18,18 : 17,31 - IL_0011: ldarg.0 - IL_0012: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@16-3'::builder@ - IL_0017: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6::f2() - IL_001c: ldarg.0 - IL_001d: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@16-3'::builder@ - IL_0022: ldarg.0 - IL_0023: ldfld int32 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@16-3'::x1 - IL_0028: ldloc.1 - IL_0029: newobj instance void AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@19-4'::.ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder, - int32, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_002e: tail. - IL_0030: callvirt instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Bind(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0035: ret - } // end of method 'f3@16-3'::Invoke - - } // end of class 'f3@16-3' - - .class auto ansi serializable nested assembly beforefieldinit 'f3@15-2' - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> - { - .field public class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@ - .field public int32 x1 - .method assembly specialname rtspecialname - instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@, - int32 x1) cil managed - { - // Code size 21 (0x15) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@15-2'::builder@ - IL_000d: ldarg.0 - IL_000e: ldarg.2 - IL_000f: stfld int32 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@15-2'::x1 - IL_0014: ret - } // end of method 'f3@15-2'::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 - Invoke(int32 _arg) cil managed - { - // Code size 39 (0x27) - .maxstack 8 - .locals init ([0] int32 x2) - .line 14,14 : 17,31 - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: stloc.0 - .line 15,15 : 17,31 - IL_0003: ldarg.0 - IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@15-2'::builder@ - IL_0009: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6::f2() - IL_000e: ldarg.0 - IL_000f: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@15-2'::builder@ - IL_0014: ldarg.0 - IL_0015: ldfld int32 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@15-2'::x1 - IL_001a: newobj instance void AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@16-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder, - int32) - IL_001f: tail. - IL_0021: callvirt instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Bind(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0026: ret - } // end of method 'f3@15-2'::Invoke - - } // end of class 'f3@15-2' - - .class auto ansi serializable nested assembly beforefieldinit 'f3@14-1' - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> - { - .field public class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@ - .method assembly specialname rtspecialname - instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) cil managed - { - // Code size 14 (0xe) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@14-1'::builder@ - IL_000d: ret - } // end of method 'f3@14-1'::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 - Invoke(int32 _arg) cil managed - { - // Code size 34 (0x22) - .maxstack 8 - .locals init ([0] int32 x1) - .line 13,13 : 17,31 - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: stloc.0 - .line 14,14 : 17,31 - IL_0003: ldarg.0 - IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@14-1'::builder@ - IL_0009: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6::f2() - IL_000e: ldarg.0 - IL_000f: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@14-1'::builder@ - IL_0014: ldloc.0 - IL_0015: newobj instance void AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@15-2'::.ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder, - int32) - IL_001a: tail. - IL_001c: callvirt instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Bind(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0021: ret - } // end of method 'f3@14-1'::Invoke - - } // end of class 'f3@14-1' - - .class auto ansi serializable nested assembly beforefieldinit f3@13 - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> - { - .field public class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@ - .method assembly specialname rtspecialname - instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) cil managed - { - // Code size 14 (0xe) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/f3@13::builder@ - IL_000d: ret - } // end of method f3@13::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 - Invoke(class [FSharp.Core]Microsoft.FSharp.Core.Unit unitVar) cil managed - { - // Code size 31 (0x1f) - .maxstack 7 - .line 13,13 : 17,31 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/f3@13::builder@ - IL_0007: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6::f2() - IL_000c: ldarg.0 - IL_000d: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/f3@13::builder@ - IL_0012: newobj instance void AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@14-1'::.ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder) - IL_0017: tail. - IL_0019: callvirt instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Bind(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_001e: ret - } // end of method f3@13::Invoke - - } // end of class f3@13 - - .method public static class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 - f2() cil managed - { - // Code size 22 (0x16) - .maxstack 4 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) - .line 5,5 : 9,14 - IL_0000: nop - IL_0001: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_DefaultAsyncBuilder() - IL_0006: stloc.0 - IL_0007: ldloc.0 - IL_0008: ldloc.0 - IL_0009: newobj instance void AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/f2@5::.ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder) - IL_000e: tail. - IL_0010: callvirt instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Delay(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0015: ret - } // end of method AsyncExpressionSteppingTest6::f2 - - .method public static class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 - f3() cil managed - { - // Code size 22 (0x16) - .maxstack 4 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) - .line 13,13 : 9,14 - IL_0000: nop - IL_0001: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_DefaultAsyncBuilder() - IL_0006: stloc.0 - IL_0007: ldloc.0 - IL_0008: ldloc.0 - IL_0009: newobj instance void AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/f3@13::.ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder) - IL_000e: tail. - IL_0010: callvirt instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Delay(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0015: ret - } // end of method AsyncExpressionSteppingTest6::f3 - - } // end of class AsyncExpressionSteppingTest6 - -} // end of class AsyncExpressionSteppingTest6 - -.class private abstract auto ansi sealed ''.$AsyncExpressionSteppingTest6 - extends [mscorlib]System.Object -{ - .field static assembly int32 init@ - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method private specialname rtspecialname static - void .cctor() cil managed - { - // Code size 19 (0x13) - .maxstack 5 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 V_0, - [1] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 V_1) - .line 22,22 : 13,43 - IL_0000: nop - IL_0001: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6::f3() - IL_0006: stloc.0 - IL_0007: ldloc.0 - IL_0008: stloc.1 - IL_0009: ldloc.1 - IL_000a: ldnull - IL_000b: ldnull - IL_000c: call !!0 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync::RunSynchronously(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1) - IL_0011: pop - IL_0012: ret - } // end of method $AsyncExpressionSteppingTest6::.cctor - -} // end of class ''.$AsyncExpressionSteppingTest6 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest6.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest6.il.netfx4.bsl index 273354170c0..1f2a2f7f238 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest6.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/AsyncExpressionSteppingTest6.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17376 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly AsyncExpressionSteppingTest6 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.AsyncExpressionSteppingTest6 { - // Offset: 0x00000000 Length: 0x000002C0 + // Offset: 0x00000000 Length: 0x0000029B } .mresource public FSharpOptimizationData.AsyncExpressionSteppingTest6 { - // Offset: 0x000002C8 Length: 0x000000BE + // Offset: 0x000002A0 Length: 0x000000BE } .module AsyncExpressionSteppingTest6.dll -// MVID: {4F31D59A-6394-4FAD-A745-03839AD5314F} +// MVID: {5775B14B-6394-4FAD-A745-03834BB17557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000190000 +// Image base: 0x01070000 // =============== CLASS MEMBERS DECLARATION =================== @@ -55,22 +55,24 @@ extends [mscorlib]System.Object { .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto ansi serializable nested assembly beforefieldinit f2@5 + .class auto ansi serializable nested assembly beforefieldinit 'f2@5-3' extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> { .field public class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::.ctor() IL_0006: ldarg.0 IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/f2@5::builder@ + IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f2@5-3'::builder@ IL_000d: ret - } // end of method f2@5::.ctor + } // end of method 'f2@5-3'::.ctor .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 Invoke(class [FSharp.Core]Microsoft.FSharp.Core.Unit unitVar) cil managed @@ -81,42 +83,42 @@ [1] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 y, [2] int32 z) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 17,30 + .line 5,5 : 17,30 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\AsyncExpressionStepping\\AsyncExpressionSteppingTest6.fs' IL_0000: nop IL_0001: ldc.i4.0 IL_0002: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) IL_0007: stloc.0 - .line 6,6 : 17,23 + .line 6,6 : 17,23 IL_0008: ldloc.0 IL_0009: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) IL_000e: nop - .line 7,7 : 17,30 + .line 7,7 : 17,30 IL_000f: ldc.i4.0 IL_0010: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) IL_0015: stloc.1 - .line 8,8 : 17,23 + .line 8,8 : 17,23 IL_0016: ldloc.1 IL_0017: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) IL_001c: nop - .line 9,9 : 17,32 + .line 9,9 : 17,32 IL_001d: ldloc.0 IL_001e: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) IL_0023: ldloc.1 IL_0024: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) IL_0029: add IL_002a: stloc.2 - .line 10,10 : 17,25 + .line 10,10 : 17,25 IL_002b: ldarg.0 - IL_002c: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/f2@5::builder@ + IL_002c: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f2@5-3'::builder@ IL_0031: ldloc.2 IL_0032: tail. IL_0034: callvirt instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Return(!!0) IL_0039: ret - } // end of method f2@5::Invoke + } // end of method 'f2@5-3'::Invoke - } // end of class f2@5 + } // end of class 'f2@5-3' - .class auto ansi serializable nested assembly beforefieldinit 'f3@19-4' + .class auto ansi serializable nested assembly beforefieldinit 'f3@19-5' extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> { .field public class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@ @@ -127,21 +129,23 @@ int32 x1, class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 y) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 28 (0x1c) .maxstack 8 IL_0000: ldarg.0 IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::.ctor() IL_0006: ldarg.0 IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@19-4'::builder@ + IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@19-5'::builder@ IL_000d: ldarg.0 IL_000e: ldarg.2 - IL_000f: stfld int32 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@19-4'::x1 + IL_000f: stfld int32 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@19-5'::x1 IL_0014: ldarg.0 IL_0015: ldarg.3 - IL_0016: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@19-4'::y + IL_0016: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@19-5'::y IL_001b: ret - } // end of method 'f3@19-4'::.ctor + } // end of method 'f3@19-5'::.ctor .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 Invoke(int32 _arg4) cil managed @@ -150,32 +154,32 @@ .maxstack 6 .locals init ([0] int32 x4, [1] int32 z) - .line 18,18 : 17,31 + .line 18,18 : 17,31 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 19,19 : 17,37 + .line 19,19 : 17,37 IL_0003: ldarg.0 - IL_0004: ldfld int32 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@19-4'::x1 + IL_0004: ldfld int32 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@19-5'::x1 IL_0009: ldarg.0 - IL_000a: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@19-4'::y + IL_000a: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@19-5'::y IL_000f: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) IL_0014: add IL_0015: ldloc.0 IL_0016: add IL_0017: stloc.1 - .line 20,20 : 17,25 + .line 20,20 : 17,25 IL_0018: ldarg.0 - IL_0019: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@19-4'::builder@ + IL_0019: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@19-5'::builder@ IL_001e: ldloc.1 IL_001f: tail. IL_0021: callvirt instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Return(!!0) IL_0026: ret - } // end of method 'f3@19-4'::Invoke + } // end of method 'f3@19-5'::Invoke - } // end of class 'f3@19-4' + } // end of class 'f3@19-5' - .class auto ansi serializable nested assembly beforefieldinit 'f3@16-3' + .class auto ansi serializable nested assembly beforefieldinit 'f3@16-4' extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> { .field public class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@ @@ -184,18 +188,20 @@ instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@, int32 x1) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 21 (0x15) .maxstack 8 IL_0000: ldarg.0 IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::.ctor() IL_0006: ldarg.0 IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@16-3'::builder@ + IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@16-4'::builder@ IL_000d: ldarg.0 IL_000e: ldarg.2 - IL_000f: stfld int32 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@16-3'::x1 + IL_000f: stfld int32 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@16-4'::x1 IL_0014: ret - } // end of method 'f3@16-3'::.ctor + } // end of method 'f3@16-4'::.ctor .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 Invoke(int32 _arg3) cil managed @@ -204,39 +210,39 @@ .maxstack 9 .locals init ([0] int32 x3, [1] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 y) - .line 15,15 : 17,31 + .line 15,15 : 17,31 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 16,16 : 17,30 + .line 16,16 : 17,30 IL_0003: ldc.i4.0 IL_0004: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) IL_0009: stloc.1 - .line 17,17 : 17,23 + .line 17,17 : 17,23 IL_000a: ldloc.1 IL_000b: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) IL_0010: nop - .line 18,18 : 17,31 + .line 18,18 : 17,31 IL_0011: ldarg.0 - IL_0012: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@16-3'::builder@ + IL_0012: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@16-4'::builder@ IL_0017: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6::f2() IL_001c: ldarg.0 - IL_001d: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@16-3'::builder@ + IL_001d: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@16-4'::builder@ IL_0022: ldarg.0 - IL_0023: ldfld int32 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@16-3'::x1 + IL_0023: ldfld int32 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@16-4'::x1 IL_0028: ldloc.1 - IL_0029: newobj instance void AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@19-4'::.ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder, + IL_0029: newobj instance void AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@19-5'::.ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder, int32, class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) IL_002e: tail. IL_0030: callvirt instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Bind(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) IL_0035: ret - } // end of method 'f3@16-3'::Invoke + } // end of method 'f3@16-4'::Invoke - } // end of class 'f3@16-3' + } // end of class 'f3@16-4' - .class auto ansi serializable nested assembly beforefieldinit 'f3@15-2' + .class auto ansi serializable nested assembly beforefieldinit 'f3@15-3' extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> { .field public class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@ @@ -245,18 +251,20 @@ instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@, int32 x1) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 21 (0x15) .maxstack 8 IL_0000: ldarg.0 IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::.ctor() IL_0006: ldarg.0 IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@15-2'::builder@ + IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@15-3'::builder@ IL_000d: ldarg.0 IL_000e: ldarg.2 - IL_000f: stfld int32 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@15-2'::x1 + IL_000f: stfld int32 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@15-3'::x1 IL_0014: ret - } // end of method 'f3@15-2'::.ctor + } // end of method 'f3@15-3'::.ctor .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 Invoke(int32 _arg2) cil managed @@ -264,44 +272,46 @@ // Code size 39 (0x27) .maxstack 8 .locals init ([0] int32 x2) - .line 14,14 : 17,31 + .line 14,14 : 17,31 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 15,15 : 17,31 + .line 15,15 : 17,31 IL_0003: ldarg.0 - IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@15-2'::builder@ + IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@15-3'::builder@ IL_0009: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6::f2() IL_000e: ldarg.0 - IL_000f: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@15-2'::builder@ + IL_000f: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@15-3'::builder@ IL_0014: ldarg.0 - IL_0015: ldfld int32 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@15-2'::x1 - IL_001a: newobj instance void AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@16-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder, + IL_0015: ldfld int32 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@15-3'::x1 + IL_001a: newobj instance void AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@16-4'::.ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder, int32) IL_001f: tail. IL_0021: callvirt instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Bind(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) IL_0026: ret - } // end of method 'f3@15-2'::Invoke + } // end of method 'f3@15-3'::Invoke - } // end of class 'f3@15-2' + } // end of class 'f3@15-3' - .class auto ansi serializable nested assembly beforefieldinit 'f3@14-1' + .class auto ansi serializable nested assembly beforefieldinit 'f3@14-2' extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> { .field public class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::.ctor() IL_0006: ldarg.0 IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@14-1'::builder@ + IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@14-2'::builder@ IL_000d: ret - } // end of method 'f3@14-1'::.ctor + } // end of method 'f3@14-2'::.ctor .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 Invoke(int32 _arg1) cil managed @@ -309,64 +319,66 @@ // Code size 34 (0x22) .maxstack 8 .locals init ([0] int32 x1) - .line 13,13 : 17,31 + .line 13,13 : 17,31 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 14,14 : 17,31 + .line 14,14 : 17,31 IL_0003: ldarg.0 - IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@14-1'::builder@ + IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@14-2'::builder@ IL_0009: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6::f2() IL_000e: ldarg.0 - IL_000f: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@14-1'::builder@ + IL_000f: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@14-2'::builder@ IL_0014: ldloc.0 - IL_0015: newobj instance void AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@15-2'::.ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder, + IL_0015: newobj instance void AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@15-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder, int32) IL_001a: tail. IL_001c: callvirt instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Bind(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) IL_0021: ret - } // end of method 'f3@14-1'::Invoke + } // end of method 'f3@14-2'::Invoke - } // end of class 'f3@14-1' + } // end of class 'f3@14-2' - .class auto ansi serializable nested assembly beforefieldinit f3@13 + .class auto ansi serializable nested assembly beforefieldinit 'f3@13-1' extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> { .field public class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::.ctor() IL_0006: ldarg.0 IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/f3@13::builder@ + IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@13-1'::builder@ IL_000d: ret - } // end of method f3@13::.ctor + } // end of method 'f3@13-1'::.ctor .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 Invoke(class [FSharp.Core]Microsoft.FSharp.Core.Unit unitVar) cil managed { // Code size 31 (0x1f) .maxstack 8 - .line 13,13 : 17,31 + .line 13,13 : 17,31 IL_0000: nop IL_0001: ldarg.0 - IL_0002: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/f3@13::builder@ + IL_0002: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@13-1'::builder@ IL_0007: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6::f2() IL_000c: ldarg.0 - IL_000d: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/f3@13::builder@ - IL_0012: newobj instance void AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@14-1'::.ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder) + IL_000d: ldfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@13-1'::builder@ + IL_0012: newobj instance void AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@14-2'::.ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder) IL_0017: tail. IL_0019: callvirt instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Bind(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) IL_001e: ret - } // end of method f3@13::Invoke + } // end of method 'f3@13-1'::Invoke - } // end of class f3@13 + } // end of class 'f3@13-1' .method public static class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 f2() cil managed @@ -374,13 +386,13 @@ // Code size 22 (0x16) .maxstack 4 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) - .line 5,5 : 9,14 + .line 5,5 : 9,14 IL_0000: nop IL_0001: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_DefaultAsyncBuilder() IL_0006: stloc.0 IL_0007: ldloc.0 IL_0008: ldloc.0 - IL_0009: newobj instance void AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/f2@5::.ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder) + IL_0009: newobj instance void AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f2@5-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder) IL_000e: tail. IL_0010: callvirt instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Delay(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) IL_0015: ret @@ -392,13 +404,13 @@ // Code size 22 (0x16) .maxstack 4 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder builder@) - .line 13,13 : 9,14 + .line 13,13 : 9,14 IL_0000: nop IL_0001: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_DefaultAsyncBuilder() IL_0006: stloc.0 IL_0007: ldloc.0 IL_0008: ldloc.0 - IL_0009: newobj instance void AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/f3@13::.ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder) + IL_0009: newobj instance void AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6/'f3@13-1'::.ctor(class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder) IL_000e: tail. IL_0010: callvirt instance class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder::Delay(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) IL_0015: ret @@ -422,7 +434,7 @@ .maxstack 5 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 V_0, [1] class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 V_1) - .line 22,22 : 13,43 + .line 22,22 : 13,43 IL_0000: nop IL_0001: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1 AsyncExpressionSteppingTest6/AsyncExpressionSteppingTest6::f3() IL_0006: stloc.0 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/CompareIL.cmd b/tests/fsharpqa/Source/CodeGen/EmittedIL/CompareIL.cmd index cd3c5a253ed..8ec2087c487 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/CompareIL.cmd +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/CompareIL.cmd @@ -5,7 +5,21 @@ REM == %3 --> directory if not '%3' == '' ( set dll=%3\%~nx1) if '%3' == '' ( set dll=%~nx1) -"%ildasm%" /TEXT /LINENUM /NOBAR %dll% >%~n1.il +REM +rem compute the location of ildasm +rem +if exist "%WindowsSDK_ExecutablePath_x86%" set WINSDKNETFXTOOLS_X86=%WindowsSDK_ExecutablePath_x86% +if not "%WindowsSDK_ExecutablePath_x86%" == "" goto :havesdk +set REGEXE32BIT=reg.exe + FOR /F "tokens=2* delims= " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\NETFXSDK\4.6\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS_x86=%%B +if "%WINSDKNETFXTOOLS_x86%"=="" FOR /F "tokens=2* delims= " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\Windows\v8.1A\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS_x86=%%B +if "%WINSDKNETFXTOOLS_x86%"=="" FOR /F "tokens=2* delims= " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS_x86=%%B +if "%WINSDKNETFXTOOLS_x86%"=="" FOR /F "tokens=2* delims= " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS_x86=%%B +if "%WINSDKNETFXTOOLS_x86%"=="" FOR /F "tokens=2* delims= " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS_x86=%%B +:havesdk + +@echo "%WINSDKNETFXTOOLS_X86%ildasm.exe" /TEXT /LINENUM /NOBAR %dll% >%~n1.il +"%WINSDKNETFXTOOLS_X86%ildasm.exe" /TEXT /LINENUM /NOBAR %dll% >%~n1.il IF NOT ERRORLEVEL 0 exit 1 IF /I "%2"=="NetFx40" goto :NetFx4 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr01.il.bsl index e69be51d742..cc4592fb0f7 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16774 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly extern ComputationExprLibrary { @@ -26,27 +26,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.ComputationExpr01 { - // Offset: 0x00000000 Length: 0x00000237 + // Offset: 0x00000000 Length: 0x00000212 } .mresource public FSharpOptimizationData.ComputationExpr01 { - // Offset: 0x00000240 Length: 0x0000007D + // Offset: 0x00000218 Length: 0x0000007D } .module ComputationExpr01.exe -// MVID: {4DAC061A-3703-E566-A745-03831A06AC4D} +// MVID: {5775B6BC-3703-E566-A745-0383BCB67557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000700000 +// Image base: 0x011A0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -62,6 +62,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [ComputationExprLibrary]Library.EventuallyBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -78,7 +80,7 @@ // Code size 16 (0x10) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 8,8 : 9,17 + .line 8,8 : 9,17 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\ComputationExpressions\\ComputationExpr01.fs' IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld class [ComputationExprLibrary]Library.EventuallyBuilder ComputationExpr01/res1@8::builder@ @@ -123,7 +125,7 @@ .maxstack 4 .locals init ([0] class [ComputationExprLibrary]Library.Eventually`1 res1, [1] class [ComputationExprLibrary]Library.EventuallyBuilder builder@) - .line 10,10 : 1,25 + .line 10,10 : 1,25 IL_0000: call class [ComputationExprLibrary]Library.EventuallyBuilder [ComputationExprLibrary]Library.TheEventuallyBuilder::get_eventually() IL_0005: stloc.1 IL_0006: ldloc.1 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr02.il.bsl index 426332eea85..ac023895752 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr02.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr02.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16774 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly extern ComputationExprLibrary { @@ -26,27 +26,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.ComputationExpr02 { - // Offset: 0x00000000 Length: 0x00000237 + // Offset: 0x00000000 Length: 0x00000212 } .mresource public FSharpOptimizationData.ComputationExpr02 { - // Offset: 0x00000240 Length: 0x0000007D + // Offset: 0x00000218 Length: 0x0000007D } .module ComputationExpr02.exe -// MVID: {4DAC061D-3624-E566-A745-03831D06AC4D} +// MVID: {5775B6C1-3624-E566-A745-0383C1B67557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00000000001F0000 +// Image base: 0x00D40000 // =============== CLASS MEMBERS DECLARATION =================== @@ -62,6 +62,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [ComputationExprLibrary]Library.EventuallyBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -79,19 +81,19 @@ .maxstack 7 .locals init ([0] int32 x) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 8,8 : 9,50 + .line 8,8 : 9,50 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\ComputationExpressions\\ComputationExpr02.fs' IL_0000: nop IL_0001: nop - .line 8,8 : 18,33 + .line 8,8 : 18,33 IL_0002: ldstr "hello" IL_0007: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000c: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0011: pop - .line 8,8 : 35,49 + .line 8,8 : 35,49 IL_0012: ldstr "hello" IL_0017: callvirt instance int32 [mscorlib]System.String::get_Length() IL_001c: stloc.0 - .line 9,9 : 9,21 + .line 9,9 : 9,21 IL_001d: ldarg.0 IL_001e: ldfld class [ComputationExprLibrary]Library.EventuallyBuilder ComputationExpr02/res2@8::builder@ IL_0023: ldloc.0 @@ -137,7 +139,7 @@ .maxstack 4 .locals init ([0] class [ComputationExprLibrary]Library.Eventually`1 res2, [1] class [ComputationExprLibrary]Library.EventuallyBuilder builder@) - .line 10,10 : 1,25 + .line 10,10 : 1,25 IL_0000: call class [ComputationExprLibrary]Library.EventuallyBuilder [ComputationExprLibrary]Library.TheEventuallyBuilder::get_eventually() IL_0005: stloc.1 IL_0006: ldloc.1 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr03.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr03.il.bsl index f392af60992..9e53438109e 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr03.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr03.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17376 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly extern ComputationExprLibrary { @@ -26,27 +26,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.ComputationExpr03 { - // Offset: 0x00000000 Length: 0x00000261 + // Offset: 0x00000000 Length: 0x0000023C } .mresource public FSharpOptimizationData.ComputationExpr03 { - // Offset: 0x00000268 Length: 0x0000008C + // Offset: 0x00000240 Length: 0x0000008C } .module ComputationExpr03.exe -// MVID: {4F31D660-3649-E566-A745-038360D6314F} +// MVID: {5775B6C5-3649-E566-A745-0383C5B67557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000390000 +// Image base: 0x01330000 // =============== CLASS MEMBERS DECLARATION =================== @@ -55,22 +55,24 @@ extends [mscorlib]System.Object { .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto ansi serializable nested assembly beforefieldinit res2@8 + .class auto ansi serializable nested assembly beforefieldinit 'res2@8-1' extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> { .field public class [ComputationExprLibrary]Library.EventuallyBuilder builder@ .method assembly specialname rtspecialname instance void .ctor(class [ComputationExprLibrary]Library.EventuallyBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::.ctor() IL_0006: ldarg.0 IL_0007: ldarg.1 - IL_0008: stfld class [ComputationExprLibrary]Library.EventuallyBuilder ComputationExpr03/res2@8::builder@ + IL_0008: stfld class [ComputationExprLibrary]Library.EventuallyBuilder ComputationExpr03/'res2@8-1'::builder@ IL_000d: ret - } // end of method res2@8::.ctor + } // end of method 'res2@8-1'::.ctor .method public strict virtual instance class [ComputationExprLibrary]Library.Eventually`1 Invoke(class [FSharp.Core]Microsoft.FSharp.Core.Unit unitVar) cil managed @@ -79,30 +81,30 @@ .maxstack 7 .locals init ([0] int32 x) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 8,8 : 9,50 + .line 8,8 : 9,50 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\ComputationExpressions\\ComputationExpr03.fs' IL_0000: nop IL_0001: nop - .line 8,8 : 18,33 + .line 8,8 : 18,33 IL_0002: ldstr "hello" IL_0007: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000c: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0011: pop - .line 8,8 : 35,49 + .line 8,8 : 35,49 IL_0012: ldstr "hello" IL_0017: callvirt instance int32 [mscorlib]System.String::get_Length() IL_001c: stloc.0 - .line 9,9 : 9,21 + .line 9,9 : 9,21 IL_001d: ldarg.0 - IL_001e: ldfld class [ComputationExprLibrary]Library.EventuallyBuilder ComputationExpr03/res2@8::builder@ + IL_001e: ldfld class [ComputationExprLibrary]Library.EventuallyBuilder ComputationExpr03/'res2@8-1'::builder@ IL_0023: ldloc.0 IL_0024: ldloc.0 IL_0025: add IL_0026: tail. IL_0028: callvirt instance class [ComputationExprLibrary]Library.Eventually`1 [ComputationExprLibrary]Library.EventuallyBuilder::Return(!!0) IL_002d: ret - } // end of method res2@8::Invoke + } // end of method 'res2@8-1'::Invoke - } // end of class res2@8 + } // end of class 'res2@8-1' .class auto ansi serializable nested assembly beforefieldinit 'res3@17-2' extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> @@ -111,6 +113,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [ComputationExprLibrary]Library.EventuallyBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -127,19 +131,19 @@ // Code size 44 (0x2c) .maxstack 6 .locals init ([0] int32 x) - .line 17,17 : 17,58 + .line 17,17 : 17,58 IL_0000: nop IL_0001: nop - .line 17,17 : 26,41 + .line 17,17 : 26,41 IL_0002: ldstr "hello" IL_0007: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000c: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0011: pop - .line 17,17 : 43,57 + .line 17,17 : 43,57 IL_0012: ldstr "hello" IL_0017: callvirt instance int32 [mscorlib]System.String::get_Length() IL_001c: stloc.0 - .line 18,18 : 17,25 + .line 18,18 : 17,25 IL_001d: ldarg.0 IL_001e: ldfld class [ComputationExprLibrary]Library.EventuallyBuilder ComputationExpr03/'res3@17-2'::builder@ IL_0023: ldc.i4.1 @@ -157,6 +161,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [ComputationExprLibrary]Library.EventuallyBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -173,11 +179,11 @@ // Code size 18 (0x12) .maxstack 6 .locals init ([0] int32 x) - .line 15,19 : 9,14 + .line 15,19 : 9,14 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 20,20 : 9,17 + .line 20,20 : 9,17 IL_0003: ldarg.0 IL_0004: ldfld class [ComputationExprLibrary]Library.EventuallyBuilder ComputationExpr03/'res3@20-3'::builder@ IL_0009: ldc.i4.1 @@ -195,6 +201,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [ComputationExprLibrary]Library.EventuallyBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -212,11 +220,11 @@ .maxstack 7 .locals init ([0] int32 x, [1] class [ComputationExprLibrary]Library.EventuallyBuilder builder@) - .line 14,14 : 9,23 + .line 14,14 : 9,23 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 15,19 : 9,14 + .line 15,19 : 9,14 IL_0003: ldarg.0 IL_0004: ldfld class [ComputationExprLibrary]Library.EventuallyBuilder ComputationExpr03/'res3@15-1'::builder@ IL_0009: call class [ComputationExprLibrary]Library.EventuallyBuilder [ComputationExprLibrary]Library.TheEventuallyBuilder::get_eventually() @@ -243,6 +251,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [ComputationExprLibrary]Library.EventuallyBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -258,7 +268,7 @@ { // Code size 31 (0x1f) .maxstack 8 - .line 14,14 : 9,23 + .line 14,14 : 9,23 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld class [ComputationExprLibrary]Library.EventuallyBuilder ComputationExpr03/res3@14::builder@ @@ -279,7 +289,7 @@ { // Code size 6 (0x6) .maxstack 8 - IL_0000: ldsfld class [ComputationExprLibrary]Library.Eventually`1 ''.$ComputationExpr03::res2@6 + IL_0000: ldsfld class [ComputationExprLibrary]Library.Eventually`1 ''.$ComputationExpr03::'res2@6-2' IL_0005: ret } // end of method ComputationExpr03::get_res2 @@ -309,7 +319,7 @@ .class private abstract auto ansi sealed ''.$ComputationExpr03 extends [mscorlib]System.Object { - .field static assembly class [ComputationExprLibrary]Library.Eventually`1 res2@6 + .field static assembly class [ComputationExprLibrary]Library.Eventually`1 'res2@6-2' .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) .field static assembly class [ComputationExprLibrary]Library.Eventually`1 res3@12 .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) @@ -326,15 +336,15 @@ [1] class [ComputationExprLibrary]Library.Eventually`1 res3, [2] class [ComputationExprLibrary]Library.EventuallyBuilder builder@, [3] class [ComputationExprLibrary]Library.EventuallyBuilder V_3) - .line 10,10 : 1,25 + .line 10,10 : 1,25 IL_0000: call class [ComputationExprLibrary]Library.EventuallyBuilder [ComputationExprLibrary]Library.TheEventuallyBuilder::get_eventually() IL_0005: stloc.2 IL_0006: ldloc.2 IL_0007: ldloc.2 - IL_0008: newobj instance void ComputationExpr03/res2@8::.ctor(class [ComputationExprLibrary]Library.EventuallyBuilder) + IL_0008: newobj instance void ComputationExpr03/'res2@8-1'::.ctor(class [ComputationExprLibrary]Library.EventuallyBuilder) IL_000d: callvirt instance class [ComputationExprLibrary]Library.Eventually`1 [ComputationExprLibrary]Library.EventuallyBuilder::Delay(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) IL_0012: dup - IL_0013: stsfld class [ComputationExprLibrary]Library.Eventually`1 ''.$ComputationExpr03::res2@6 + IL_0013: stsfld class [ComputationExprLibrary]Library.Eventually`1 ''.$ComputationExpr03::'res2@6-2' IL_0018: stloc.0 IL_0019: nop IL_001a: call class [ComputationExprLibrary]Library.Eventually`1 ComputationExpr03::get_res2() @@ -349,7 +359,7 @@ IL_0037: dup IL_0038: stsfld class [ComputationExprLibrary]Library.Eventually`1 ''.$ComputationExpr03::res3@12 IL_003d: stloc.1 - .line 22,22 : 1,26 + .line 22,22 : 1,26 IL_003e: call class [ComputationExprLibrary]Library.Eventually`1 ComputationExpr03::get_res3() IL_0043: call !!0 [ComputationExprLibrary]Library.EventuallyModule::force(class [ComputationExprLibrary]Library.Eventually`1) IL_0048: pop diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr04.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr04.il.bsl index 7d8589eaea6..97d5962c08c 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr04.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr04.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17376 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly extern ComputationExprLibrary { @@ -26,27 +26,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.ComputationExpr04 { - // Offset: 0x00000000 Length: 0x00000237 + // Offset: 0x00000000 Length: 0x00000212 } .mresource public FSharpOptimizationData.ComputationExpr04 { - // Offset: 0x00000240 Length: 0x0000007D + // Offset: 0x00000218 Length: 0x0000007D } .module ComputationExpr04.exe -// MVID: {4F31D663-366A-E566-A745-038363D6314F} +// MVID: {5775B6C9-366A-E566-A745-0383C9B67557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000580000 +// Image base: 0x00B80000 // =============== CLASS MEMBERS DECLARATION =================== @@ -62,6 +62,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [ComputationExprLibrary]Library.EventuallyBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -79,23 +81,23 @@ .maxstack 6 .locals init ([0] int32 x) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 7,7 : 13,54 + .line 7,7 : 13,54 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\ComputationExpressions\\ComputationExpr04.fs' IL_0000: nop IL_0001: nop - .line 7,7 : 22,37 + .line 7,7 : 22,37 IL_0002: ldstr "hello" IL_0007: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000c: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0011: pop - .line 7,7 : 39,53 + .line 7,7 : 39,53 IL_0012: ldstr "hello" IL_0017: callvirt instance int32 [mscorlib]System.String::get_Length() IL_001c: stloc.0 - .line 8,8 : 13,28 + .line 8,8 : 13,28 IL_001d: ldstr "fail" IL_0022: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::FailWith(string) IL_0027: pop - .line 9,9 : 13,21 + .line 9,9 : 13,21 IL_0028: ldarg.0 IL_0029: ldfld class [ComputationExprLibrary]Library.EventuallyBuilder ComputationExpr04/'res4@7-1'::builder@ IL_002e: ldloc.0 @@ -113,6 +115,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [ComputationExprLibrary]Library.EventuallyBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -130,22 +134,22 @@ .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] int32 x) - .line 6,12 : 9,21 + .line 6,12 : 9,21 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 11,11 : 13,54 + .line 11,11 : 13,54 IL_0003: nop - .line 11,11 : 22,37 + .line 11,11 : 22,37 IL_0004: ldstr "hello" IL_0009: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000e: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0013: pop - .line 11,11 : 39,53 + .line 11,11 : 39,53 IL_0014: ldstr "hello" IL_0019: callvirt instance int32 [mscorlib]System.String::get_Length() IL_001e: stloc.1 - .line 12,12 : 13,21 + .line 12,12 : 13,21 IL_001f: ldarg.0 IL_0020: ldfld class [ComputationExprLibrary]Library.EventuallyBuilder ComputationExpr04/'res4@6-2'::builder@ IL_0025: ldloc.1 @@ -163,6 +167,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [ComputationExprLibrary]Library.EventuallyBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -178,7 +184,7 @@ { // Code size 48 (0x30) .maxstack 8 - .line 6,6 : 9,12 + .line 6,6 : 9,12 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld class [ComputationExprLibrary]Library.EventuallyBuilder ComputationExpr04/res4@6::builder@ @@ -232,7 +238,7 @@ .maxstack 4 .locals init ([0] class [ComputationExprLibrary]Library.Eventually`1 res4, [1] class [ComputationExprLibrary]Library.EventuallyBuilder builder@) - .line 14,14 : 1,25 + .line 14,14 : 1,25 IL_0000: call class [ComputationExprLibrary]Library.EventuallyBuilder [ComputationExprLibrary]Library.TheEventuallyBuilder::get_eventually() IL_0005: stloc.1 IL_0006: ldloc.1 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr05.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr05.il.bsl index b400c92a899..fca4545e7e8 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr05.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr05.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17376 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly extern ComputationExprLibrary { @@ -26,27 +26,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.ComputationExpr05 { - // Offset: 0x00000000 Length: 0x00000237 + // Offset: 0x00000000 Length: 0x00000212 } .mresource public FSharpOptimizationData.ComputationExpr05 { - // Offset: 0x00000240 Length: 0x0000007D + // Offset: 0x00000218 Length: 0x0000007D } .module ComputationExpr05.exe -// MVID: {4F31D666-3687-E566-A745-038366D6314F} +// MVID: {5775B6CC-3687-E566-A745-0383CCB67557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000280000 +// Image base: 0x011D0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -80,7 +80,7 @@ // Code size 2 (0x2) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 9,9 : 68,70 + .line 9,9 : 68,70 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\ComputationExpressions\\ComputationExpr05.fs' IL_0000: nop IL_0001: ret } // end of method 'res5@9-1'::'System-IDisposable-Dispose' @@ -94,6 +94,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [ComputationExprLibrary]Library.EventuallyBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -111,22 +113,22 @@ .maxstack 6 .locals init ([0] class [mscorlib]System.IDisposable x, [1] int32 V_1) - .line 10,11 : 9,17 + .line 10,10 : 9,50 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 10,10 : 9,50 + .line 10,10 : 9,50 IL_0003: nop - .line 10,10 : 18,33 + .line 10,10 : 18,33 IL_0004: ldstr "hello" IL_0009: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000e: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0013: pop - .line 10,10 : 35,49 + .line 10,10 : 35,49 IL_0014: ldstr "hello" IL_0019: callvirt instance int32 [mscorlib]System.String::get_Length() IL_001e: stloc.1 - .line 11,11 : 9,17 + .line 11,11 : 9,17 IL_001f: ldarg.0 IL_0020: ldfld class [ComputationExprLibrary]Library.EventuallyBuilder ComputationExpr05/'res5@10-2'::builder@ IL_0025: ldc.i4.1 @@ -144,6 +146,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [ComputationExprLibrary]Library.EventuallyBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -160,19 +164,19 @@ // Code size 59 (0x3b) .maxstack 7 .locals init ([0] int32 x) - .line 8,8 : 9,50 + .line 8,8 : 9,50 IL_0000: nop IL_0001: nop - .line 8,8 : 18,33 + .line 8,8 : 18,33 IL_0002: ldstr "hello" IL_0007: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000c: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0011: pop - .line 8,8 : 35,49 + .line 8,8 : 35,49 IL_0012: ldstr "hello" IL_0017: callvirt instance int32 [mscorlib]System.String::get_Length() IL_001c: stloc.0 - .line 9,9 : 17,72 + .line 9,9 : 17,72 IL_001d: ldarg.0 IL_001e: ldfld class [ComputationExprLibrary]Library.EventuallyBuilder ComputationExpr05/res5@8::builder@ IL_0023: newobj instance void ComputationExpr05/'res5@9-1'::.ctor() @@ -220,7 +224,7 @@ .maxstack 4 .locals init ([0] class [ComputationExprLibrary]Library.Eventually`1 res5, [1] class [ComputationExprLibrary]Library.EventuallyBuilder builder@) - .line 13,13 : 1,25 + .line 13,13 : 1,25 IL_0000: call class [ComputationExprLibrary]Library.EventuallyBuilder [ComputationExprLibrary]Library.TheEventuallyBuilder::get_eventually() IL_0005: stloc.1 IL_0006: ldloc.1 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr06.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr06.il.bsl index 481ceceaaae..b6fb8d689d6 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr06.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr06.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16774 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly extern ComputationExprLibrary { @@ -26,27 +26,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.ComputationExpr06 { - // Offset: 0x00000000 Length: 0x00000237 + // Offset: 0x00000000 Length: 0x00000212 } .mresource public FSharpOptimizationData.ComputationExpr06 { - // Offset: 0x00000240 Length: 0x0000007D + // Offset: 0x00000218 Length: 0x0000007D } .module ComputationExpr06.exe -// MVID: {4DAC0626-35A8-E566-A745-03832606AC4D} +// MVID: {5775B6CF-35A8-E566-A745-0383CFB67557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000260000 +// Image base: 0x00CD0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -62,6 +62,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -78,7 +80,7 @@ // Code size 16 (0x10) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 9,9 : 15,21 + .line 9,9 : 15,21 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\ComputationExpressions\\ComputationExpr06.fs' IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ComputationExpr06/'res6@9-1'::x @@ -99,6 +101,8 @@ instance void .ctor(class [ComputationExprLibrary]Library.EventuallyBuilder builder@, class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 21 (0x15) .maxstack 8 IL_0000: ldarg.0 @@ -117,33 +121,33 @@ { // Code size 107 (0x6b) .maxstack 5 - .line 10,10 : 13,28 + .line 10,10 : 13,28 IL_0000: nop IL_0001: ldstr "hello" IL_0006: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0010: pop - .line 11,11 : 13,28 + .line 11,11 : 13,28 IL_0011: ldstr "hello" IL_0016: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_001b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0020: pop - .line 12,12 : 13,28 + .line 12,12 : 13,28 IL_0021: ldstr "hello" IL_0026: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_002b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0030: pop - .line 13,13 : 13,28 + .line 13,13 : 13,28 IL_0031: ldstr "hello" IL_0036: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_003b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0040: pop - .line 14,14 : 13,28 + .line 14,14 : 13,28 IL_0041: ldstr "hello" IL_0046: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_004b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0050: pop - .line 15,15 : 13,19 + .line 15,15 : 13,19 IL_0051: ldarg.0 IL_0052: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ComputationExpr06/'res6@10-2'::x IL_0057: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Decrement(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) @@ -164,6 +168,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [ComputationExprLibrary]Library.EventuallyBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -179,7 +185,7 @@ { // Code size 16 (0x10) .maxstack 8 - .line 16,16 : 9,17 + .line 16,16 : 9,17 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld class [ComputationExprLibrary]Library.EventuallyBuilder ComputationExpr06/'res6@16-3'::builder@ @@ -198,6 +204,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [ComputationExprLibrary]Library.EventuallyBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -214,12 +222,12 @@ // Code size 84 (0x54) .maxstack 10 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x) - .line 8,8 : 9,22 + .line 8,8 : 9,22 IL_0000: nop IL_0001: ldc.i4.1 IL_0002: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) IL_0007: stloc.0 - .line 9,9 : 9,21 + .line 9,9 : 9,21 IL_0008: ldarg.0 IL_0009: ldfld class [ComputationExprLibrary]Library.EventuallyBuilder ComputationExpr06/res6@8::builder@ IL_000e: ldarg.0 @@ -283,7 +291,7 @@ .maxstack 4 .locals init ([0] class [ComputationExprLibrary]Library.Eventually`1 res6, [1] class [ComputationExprLibrary]Library.EventuallyBuilder builder@) - .line 18,18 : 1,25 + .line 18,18 : 1,25 IL_0000: call class [ComputationExprLibrary]Library.EventuallyBuilder [ComputationExprLibrary]Library.TheEventuallyBuilder::get_eventually() IL_0005: stloc.1 IL_0006: ldloc.1 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr07.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr07.il.bsl index 53a84a93819..c8045998df0 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr07.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExpr07.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17376 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly extern ComputationExprLibrary { @@ -26,27 +26,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.ComputationExpr07 { - // Offset: 0x00000000 Length: 0x00000237 + // Offset: 0x00000000 Length: 0x00000212 } .mresource public FSharpOptimizationData.ComputationExpr07 { - // Offset: 0x00000240 Length: 0x0000007D + // Offset: 0x00000218 Length: 0x0000007D } .module ComputationExpr07.exe -// MVID: {4F31D668-35BD-E566-A745-038368D6314F} +// MVID: {5775B6D2-35BD-E566-A745-0383D2B67557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000370000 +// Image base: 0x00B60000 // =============== CLASS MEMBERS DECLARATION =================== @@ -64,6 +64,8 @@ instance void .ctor(class [ComputationExprLibrary]Library.EventuallyBuilder builder@, class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 21 (0x15) .maxstack 8 IL_0000: ldarg.0 @@ -84,11 +86,11 @@ .maxstack 7 .locals init ([0] int32 v) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 9,9 : 9,29 + .line 9,9 : 9,29 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\ComputationExpressions\\ComputationExpr07.fs' IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 10,10 : 13,24 + .line 10,10 : 13,24 IL_0003: ldarg.0 IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ComputationExpr07/'res7@9-1'::x IL_0009: ldarg.0 @@ -117,6 +119,8 @@ instance void .ctor(class [ComputationExprLibrary]Library.EventuallyBuilder builder@, class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 21 (0x15) .maxstack 8 IL_0000: ldarg.0 @@ -135,7 +139,7 @@ { // Code size 26 (0x1a) .maxstack 8 - .line 11,11 : 9,18 + .line 11,11 : 9,18 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld class [ComputationExprLibrary]Library.EventuallyBuilder ComputationExpr07/'res7@11-2'::builder@ @@ -156,6 +160,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [ComputationExprLibrary]Library.EventuallyBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -172,12 +178,12 @@ // Code size 91 (0x5b) .maxstack 9 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x) - .line 8,8 : 9,22 + .line 8,8 : 9,22 IL_0000: nop IL_0001: ldc.i4.1 IL_0002: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) IL_0007: stloc.0 - .line 9,9 : 9,29 + .line 9,9 : 9,29 IL_0008: ldarg.0 IL_0009: ldfld class [ComputationExprLibrary]Library.EventuallyBuilder ComputationExpr07/res7@8::builder@ IL_000e: ldarg.0 @@ -247,7 +253,7 @@ .maxstack 4 .locals init ([0] class [ComputationExprLibrary]Library.Eventually`1 res7, [1] class [ComputationExprLibrary]Library.EventuallyBuilder builder@) - .line 13,13 : 1,25 + .line 13,13 : 1,25 IL_0000: call class [ComputationExprLibrary]Library.EventuallyBuilder [ComputationExprLibrary]Library.TheEventuallyBuilder::get_eventually() IL_0005: stloc.1 IL_0006: ldloc.1 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_ArrayOfArray_FSInterface.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_ArrayOfArray_FSInterface.il.bsl deleted file mode 100644 index 49bde82e568..00000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_ArrayOfArray_FSInterface.il.bsl +++ /dev/null @@ -1,120 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly DoNotBoxStruct_ArrayOfArray_FSInterface -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.DoNotBoxStruct_ArrayOfArray_FSInterface -{ - // Offset: 0x00000000 Length: 0x00000287 -} -.mresource public FSharpOptimizationData.DoNotBoxStruct_ArrayOfArray_FSInterface -{ - // Offset: 0x00000290 Length: 0x000000A6 -} -.module DoNotBoxStruct_ArrayOfArray_FSInterface.exe -// MVID: {4BEB2804-8A45-C8A0-A745-03830428EB4B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x00320000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed DoNotBoxStruct_ArrayOfArray_FSInterface - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto ansi serializable nested assembly beforefieldinit F@5 - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 - { - .method assembly specialname rtspecialname - instance void .ctor() cil managed - { - // Code size 7 (0x7) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::.ctor() - IL_0006: ret - } // end of method F@5::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Core.Unit - Invoke(int32 x) cil managed - { - // Code size 3 (0x3) - .maxstack 5 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 71,73 - IL_0000: nop - IL_0001: ldnull - IL_0002: ret - } // end of method F@5::Invoke - - } // end of class F@5 - - .method public static void F<(class [FSharp.Core]Microsoft.FSharp.Control.IEvent`2,int32>) T>(!!T[][] x) cil managed - { - // Code size 37 (0x25) - .maxstack 4 - .line 5,5 : 48,74 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldc.i4.0 - IL_0003: ldelem !!T[] - IL_0008: ldc.i4.0 - IL_0009: ldelem !!T - IL_000e: box !!T - IL_0013: unbox.any class [mscorlib]System.IObservable`1 - IL_0018: newobj instance void DoNotBoxStruct_ArrayOfArray_FSInterface/F@5::.ctor() - IL_001d: tail. - IL_001f: call void [FSharp.Core]Microsoft.FSharp.Control.CommonExtensions::AddToObservable(class [mscorlib]System.IObservable`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_0024: ret - } // end of method DoNotBoxStruct_ArrayOfArray_FSInterface::F - -} // end of class DoNotBoxStruct_ArrayOfArray_FSInterface - -.class private abstract auto ansi sealed ''.$DoNotBoxStruct_ArrayOfArray_FSInterface - extends [mscorlib]System.Object -{ - .method public static void main@() cil managed - { - .entrypoint - // Code size 2 (0x2) - .maxstack 2 - IL_0000: nop - IL_0001: ret - } // end of method $DoNotBoxStruct_ArrayOfArray_FSInterface::main@ - -} // end of class ''.$DoNotBoxStruct_ArrayOfArray_FSInterface - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_ArrayOfArray_FSInterface.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_ArrayOfArray_FSInterface.il.netfx4.bsl index d4c304f8bb0..bf35749992b 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_ArrayOfArray_FSInterface.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_ArrayOfArray_FSInterface.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16774 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly DoNotBoxStruct_ArrayOfArray_FSInterface { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.DoNotBoxStruct_ArrayOfArray_FSInterface { - // Offset: 0x00000000 Length: 0x00000297 + // Offset: 0x00000000 Length: 0x00000272 } .mresource public FSharpOptimizationData.DoNotBoxStruct_ArrayOfArray_FSInterface { - // Offset: 0x000002A0 Length: 0x000000A6 + // Offset: 0x00000278 Length: 0x000000A6 } .module DoNotBoxStruct_ArrayOfArray_FSInterface.exe -// MVID: {4DAC078F-8A45-C8A0-A745-03838F07AC4D} +// MVID: {5775B6ED-8A45-C8A0-A745-0383EDB67557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000260000 +// Image base: 0x00650000 // =============== CLASS MEMBERS DECLARATION =================== @@ -51,18 +51,20 @@ extends [mscorlib]System.Object { .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto ansi serializable nested assembly beforefieldinit F@5 + .class auto ansi serializable nested assembly beforefieldinit 'F@5-4' extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 { .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::.ctor() IL_0006: ret - } // end of method F@5::.ctor + } // end of method 'F@5-4'::.ctor .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Core.Unit Invoke(int32 x) cil managed @@ -70,19 +72,19 @@ // Code size 3 (0x3) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 71,73 + .line 5,5 : 71,73 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\DoNotBoxStruct\\DoNotBoxStruct_ArrayOfArray_FSInterface.fs' IL_0000: nop IL_0001: ldnull IL_0002: ret - } // end of method F@5::Invoke + } // end of method 'F@5-4'::Invoke - } // end of class F@5 + } // end of class 'F@5-4' .method public static void F<(class [FSharp.Core]Microsoft.FSharp.Control.IEvent`2,int32>) T>(!!T[][] x) cil managed { // Code size 37 (0x25) .maxstack 8 - .line 5,5 : 48,74 + .line 5,5 : 48,74 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldc.i4.0 @@ -91,7 +93,7 @@ IL_0009: ldelem !!T IL_000e: box !!T IL_0013: unbox.any class [mscorlib]System.IObservable`1 - IL_0018: newobj instance void DoNotBoxStruct_ArrayOfArray_FSInterface/F@5::.ctor() + IL_0018: newobj instance void DoNotBoxStruct_ArrayOfArray_FSInterface/'F@5-4'::.ctor() IL_001d: tail. IL_001f: call void [FSharp.Core]Microsoft.FSharp.Control.CommonExtensions::AddToObservable(class [mscorlib]System.IObservable`1, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_Array_FSInterface.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_Array_FSInterface.il.bsl deleted file mode 100644 index 162c3aeeed3..00000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_Array_FSInterface.il.bsl +++ /dev/null @@ -1,118 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly DoNotBoxStruct_Array_FSInterface -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.DoNotBoxStruct_Array_FSInterface -{ - // Offset: 0x00000000 Length: 0x0000026E -} -.mresource public FSharpOptimizationData.DoNotBoxStruct_Array_FSInterface -{ - // Offset: 0x00000278 Length: 0x00000098 -} -.module DoNotBoxStruct_Array_FSInterface.exe -// MVID: {4BEB280B-1737-9DA5-A745-03830B28EB4B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x01EC0000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed DoNotBoxStruct_Array_FSInterface - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto ansi serializable nested assembly beforefieldinit F@5 - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 - { - .method assembly specialname rtspecialname - instance void .ctor() cil managed - { - // Code size 7 (0x7) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::.ctor() - IL_0006: ret - } // end of method F@5::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Core.Unit - Invoke(int32 x) cil managed - { - // Code size 3 (0x3) - .maxstack 5 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 65,67 - IL_0000: nop - IL_0001: ldnull - IL_0002: ret - } // end of method F@5::Invoke - - } // end of class F@5 - - .method public static void F<(class [FSharp.Core]Microsoft.FSharp.Control.IEvent`2,int32>) T>(!!T[] x) cil managed - { - // Code size 31 (0x1f) - .maxstack 4 - .line 5,5 : 46,68 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldc.i4.0 - IL_0003: ldelem !!T - IL_0008: box !!T - IL_000d: unbox.any class [mscorlib]System.IObservable`1 - IL_0012: newobj instance void DoNotBoxStruct_Array_FSInterface/F@5::.ctor() - IL_0017: tail. - IL_0019: call void [FSharp.Core]Microsoft.FSharp.Control.CommonExtensions::AddToObservable(class [mscorlib]System.IObservable`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_001e: ret - } // end of method DoNotBoxStruct_Array_FSInterface::F - -} // end of class DoNotBoxStruct_Array_FSInterface - -.class private abstract auto ansi sealed ''.$DoNotBoxStruct_Array_FSInterface - extends [mscorlib]System.Object -{ - .method public static void main@() cil managed - { - .entrypoint - // Code size 2 (0x2) - .maxstack 2 - IL_0000: nop - IL_0001: ret - } // end of method $DoNotBoxStruct_Array_FSInterface::main@ - -} // end of class ''.$DoNotBoxStruct_Array_FSInterface - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_Array_FSInterface.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_Array_FSInterface.il.netfx4.bsl index 9fc1849dc1c..64f30bfc1fb 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_Array_FSInterface.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_Array_FSInterface.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16774 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly DoNotBoxStruct_Array_FSInterface { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.DoNotBoxStruct_Array_FSInterface { - // Offset: 0x00000000 Length: 0x0000027E + // Offset: 0x00000000 Length: 0x00000259 } .mresource public FSharpOptimizationData.DoNotBoxStruct_Array_FSInterface { - // Offset: 0x00000288 Length: 0x00000098 + // Offset: 0x00000260 Length: 0x00000098 } .module DoNotBoxStruct_Array_FSInterface.exe -// MVID: {4DAC0793-1737-9DA5-A745-03839307AC4D} +// MVID: {5775B6F4-1737-9DA5-A745-0383F4B67557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000870000 +// Image base: 0x00780000 // =============== CLASS MEMBERS DECLARATION =================== @@ -51,18 +51,20 @@ extends [mscorlib]System.Object { .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto ansi serializable nested assembly beforefieldinit F@5 + .class auto ansi serializable nested assembly beforefieldinit 'F@5-5' extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 { .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::.ctor() IL_0006: ret - } // end of method F@5::.ctor + } // end of method 'F@5-5'::.ctor .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Core.Unit Invoke(int32 x) cil managed @@ -70,26 +72,26 @@ // Code size 3 (0x3) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 65,67 + .line 5,5 : 65,67 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\DoNotBoxStruct\\DoNotBoxStruct_Array_FSInterface.fs' IL_0000: nop IL_0001: ldnull IL_0002: ret - } // end of method F@5::Invoke + } // end of method 'F@5-5'::Invoke - } // end of class F@5 + } // end of class 'F@5-5' .method public static void F<(class [FSharp.Core]Microsoft.FSharp.Control.IEvent`2,int32>) T>(!!T[] x) cil managed { // Code size 31 (0x1f) .maxstack 8 - .line 5,5 : 46,68 + .line 5,5 : 46,68 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldc.i4.0 IL_0003: ldelem !!T IL_0008: box !!T IL_000d: unbox.any class [mscorlib]System.IObservable`1 - IL_0012: newobj instance void DoNotBoxStruct_Array_FSInterface/F@5::.ctor() + IL_0012: newobj instance void DoNotBoxStruct_Array_FSInterface/'F@5-5'::.ctor() IL_0017: tail. IL_0019: call void [FSharp.Core]Microsoft.FSharp.Control.CommonExtensions::AddToObservable(class [mscorlib]System.IObservable`1, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_MDArray_FSInterface.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_MDArray_FSInterface.il.bsl deleted file mode 100644 index 1f0e996fe9e..00000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_MDArray_FSInterface.il.bsl +++ /dev/null @@ -1,120 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly DoNotBoxStruct_MDArray_FSInterface -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.DoNotBoxStruct_MDArray_FSInterface -{ - // Offset: 0x00000000 Length: 0x00000275 -} -.mresource public FSharpOptimizationData.DoNotBoxStruct_MDArray_FSInterface -{ - // Offset: 0x00000280 Length: 0x0000009C -} -.module DoNotBoxStruct_MDArray_FSInterface.exe -// MVID: {4BEB2815-8279-DA45-A745-03831528EB4B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x001A0000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed DoNotBoxStruct_MDArray_FSInterface - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto ansi serializable nested assembly beforefieldinit F@5 - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 - { - .method assembly specialname rtspecialname - instance void .ctor() cil managed - { - // Code size 7 (0x7) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::.ctor() - IL_0006: ret - } // end of method F@5::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Core.Unit - Invoke(int32 x) cil managed - { - // Code size 3 (0x3) - .maxstack 5 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 68,70 - IL_0000: nop - IL_0001: ldnull - IL_0002: ret - } // end of method F@5::Invoke - - } // end of class F@5 - - .method public static void F<(class [FSharp.Core]Microsoft.FSharp.Control.IEvent`2,int32>) T>(!!T[0...,0...] x) cil managed - { - // Code size 32 (0x20) - .maxstack 5 - .line 5,5 : 47,71 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldc.i4.0 - IL_0003: ldc.i4.0 - IL_0004: call instance !!T !!T[,]::Get(int32, - int32) - IL_0009: box !!T - IL_000e: unbox.any class [mscorlib]System.IObservable`1 - IL_0013: newobj instance void DoNotBoxStruct_MDArray_FSInterface/F@5::.ctor() - IL_0018: tail. - IL_001a: call void [FSharp.Core]Microsoft.FSharp.Control.CommonExtensions::AddToObservable(class [mscorlib]System.IObservable`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_001f: ret - } // end of method DoNotBoxStruct_MDArray_FSInterface::F - -} // end of class DoNotBoxStruct_MDArray_FSInterface - -.class private abstract auto ansi sealed ''.$DoNotBoxStruct_MDArray_FSInterface - extends [mscorlib]System.Object -{ - .method public static void main@() cil managed - { - .entrypoint - // Code size 2 (0x2) - .maxstack 2 - IL_0000: nop - IL_0001: ret - } // end of method $DoNotBoxStruct_MDArray_FSInterface::main@ - -} // end of class ''.$DoNotBoxStruct_MDArray_FSInterface - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_MDArray_FSInterface.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_MDArray_FSInterface.il.netfx4.bsl index 4c83fa806a9..ff53e6e2e2b 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_MDArray_FSInterface.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_MDArray_FSInterface.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17331 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly DoNotBoxStruct_MDArray_FSInterface { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.DoNotBoxStruct_MDArray_FSInterface { - // Offset: 0x00000000 Length: 0x00000289 + // Offset: 0x00000000 Length: 0x00000260 } .mresource public FSharpOptimizationData.DoNotBoxStruct_MDArray_FSInterface { - // Offset: 0x00000290 Length: 0x0000009C + // Offset: 0x00000268 Length: 0x0000009C } .module DoNotBoxStruct_MDArray_FSInterface.exe -// MVID: {4E8EC32D-8279-DA45-A745-03832DC38E4E} +// MVID: {5775B6FB-8279-DA45-A745-0383FBB67557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000370000 +// Image base: 0x012A0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -51,18 +51,20 @@ extends [mscorlib]System.Object { .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto ansi serializable nested assembly beforefieldinit F@5 + .class auto ansi serializable nested assembly beforefieldinit 'F@5-6' extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 { .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::.ctor() IL_0006: ret - } // end of method F@5::.ctor + } // end of method 'F@5-6'::.ctor .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Core.Unit Invoke(int32 x) cil managed @@ -70,19 +72,19 @@ // Code size 3 (0x3) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 68,70 + .line 5,5 : 68,70 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\DoNotBoxStruct\\DoNotBoxStruct_MDArray_FSInterface.fs' IL_0000: nop IL_0001: ldnull IL_0002: ret - } // end of method F@5::Invoke + } // end of method 'F@5-6'::Invoke - } // end of class F@5 + } // end of class 'F@5-6' .method public static void F<(class [FSharp.Core]Microsoft.FSharp.Control.IEvent`2,int32>) T>(!!T[0...,0...] x) cil managed { // Code size 32 (0x20) .maxstack 8 - .line 5,5 : 47,71 + .line 5,5 : 47,71 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldc.i4.0 @@ -91,7 +93,7 @@ int32) IL_0009: box !!T IL_000e: unbox.any class [mscorlib]System.IObservable`1 - IL_0013: newobj instance void DoNotBoxStruct_MDArray_FSInterface/F@5::.ctor() + IL_0013: newobj instance void DoNotBoxStruct_MDArray_FSInterface/'F@5-6'::.ctor() IL_0018: tail. IL_001a: call void [FSharp.Core]Microsoft.FSharp.Control.CommonExtensions::AddToObservable(class [mscorlib]System.IObservable`1, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_MDArray_FSInterface_NoExtMeth.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_MDArray_FSInterface_NoExtMeth.il.bsl deleted file mode 100644 index fd1f008475e..00000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_MDArray_FSInterface_NoExtMeth.il.bsl +++ /dev/null @@ -1,126 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly DoNotBoxStruct_MDArray_FSInterface_NoExtMeth -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.DoNotBoxStruct_MDArray_FSInterface_NoExtMeth -{ - // Offset: 0x00000000 Length: 0x00000293 -} -.mresource public FSharpOptimizationData.DoNotBoxStruct_MDArray_FSInterface_NoExtMeth -{ - // Offset: 0x00000298 Length: 0x000000B0 -} -.module DoNotBoxStruct_MDArray_FSInterface_NoExtMeth.exe -// MVID: {4BEB27F7-A67D-867A-A745-0383F727EB4B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x00200000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed DoNotBoxStruct_MDArray_FSInterface_NoExtMeth - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto autochar serializable sealed nested assembly beforefieldinit specialname F@6 - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 06 00 00 00 00 00 ) - .method public specialname rtspecialname - instance void .ctor() cil managed - { - // Code size 7 (0x7) - .maxstack 6 - IL_0000: ldarg.0 - IL_0001: call instance void [mscorlib]System.Object::.ctor() - IL_0006: ret - } // end of method F@6::.ctor - - .method assembly instance void Invoke(object sender, - int32 args) cil managed - { - // Code size 4 (0x4) - .maxstack 5 - .locals init ([0] int32 V_0) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 6,6 : 77,79 - IL_0000: ldarg.2 - IL_0001: stloc.0 - IL_0002: nop - IL_0003: ret - } // end of method F@6::Invoke - - } // end of class F@6 - - .method public static void F<(class [FSharp.Core]Microsoft.FSharp.Control.IEvent`2,int32>) T>(!!T[0...,0...] x) cil managed - { - // Code size 40 (0x28) - .maxstack 5 - .line 6,6 : 47,80 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldc.i4.0 - IL_0003: ldc.i4.0 - IL_0004: readonly. - IL_0006: call instance !!T& !!T[,]::Address(int32, - int32) - IL_000b: newobj instance void DoNotBoxStruct_MDArray_FSInterface_NoExtMeth/F@6::.ctor() - IL_0010: ldftn instance void DoNotBoxStruct_MDArray_FSInterface_NoExtMeth/F@6::Invoke(object, - int32) - IL_0016: newobj instance void class [FSharp.Core]Microsoft.FSharp.Control.FSharpHandler`1::.ctor(object, - native int) - IL_001b: constrained. !!T - IL_0021: callvirt instance void class [FSharp.Core]Microsoft.FSharp.Control.IDelegateEvent`1>::AddHandler(!0) - IL_0026: nop - IL_0027: ret - } // end of method DoNotBoxStruct_MDArray_FSInterface_NoExtMeth::F - -} // end of class DoNotBoxStruct_MDArray_FSInterface_NoExtMeth - -.class private abstract auto ansi sealed ''.$DoNotBoxStruct_MDArray_FSInterface_NoExtMeth - extends [mscorlib]System.Object -{ - .method public static void main@() cil managed - { - .entrypoint - // Code size 2 (0x2) - .maxstack 2 - IL_0000: nop - IL_0001: ret - } // end of method $DoNotBoxStruct_MDArray_FSInterface_NoExtMeth::main@ - -} // end of class ''.$DoNotBoxStruct_MDArray_FSInterface_NoExtMeth - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_NoArray_FSInterface.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_NoArray_FSInterface.il.bsl deleted file mode 100644 index f05e1e7731f..00000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_NoArray_FSInterface.il.bsl +++ /dev/null @@ -1,116 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly DoNotBoxStruct_NoArray_FSInterface -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.DoNotBoxStruct_NoArray_FSInterface -{ - // Offset: 0x00000000 Length: 0x00000265 -} -.mresource public FSharpOptimizationData.DoNotBoxStruct_NoArray_FSInterface -{ - // Offset: 0x00000270 Length: 0x0000009C -} -.module DoNotBoxStruct_NoArray_FSInterface.exe -// MVID: {4BEB281C-3F8A-B9D0-A745-03831C28EB4B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x00230000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed DoNotBoxStruct_NoArray_FSInterface - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto ansi serializable nested assembly beforefieldinit F@5 - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 - { - .method assembly specialname rtspecialname - instance void .ctor() cil managed - { - // Code size 7 (0x7) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::.ctor() - IL_0006: ret - } // end of method F@5::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Core.Unit - Invoke(int32 x) cil managed - { - // Code size 3 (0x3) - .maxstack 5 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 59,61 - IL_0000: nop - IL_0001: ldnull - IL_0002: ret - } // end of method F@5::Invoke - - } // end of class F@5 - - .method public static void F<(class [FSharp.Core]Microsoft.FSharp.Control.IEvent`2,int32>) T>(!!T x) cil managed - { - // Code size 25 (0x19) - .maxstack 4 - .line 5,5 : 44,62 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: box !!T - IL_0007: unbox.any class [mscorlib]System.IObservable`1 - IL_000c: newobj instance void DoNotBoxStruct_NoArray_FSInterface/F@5::.ctor() - IL_0011: tail. - IL_0013: call void [FSharp.Core]Microsoft.FSharp.Control.CommonExtensions::AddToObservable(class [mscorlib]System.IObservable`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_0018: ret - } // end of method DoNotBoxStruct_NoArray_FSInterface::F - -} // end of class DoNotBoxStruct_NoArray_FSInterface - -.class private abstract auto ansi sealed ''.$DoNotBoxStruct_NoArray_FSInterface - extends [mscorlib]System.Object -{ - .method public static void main@() cil managed - { - .entrypoint - // Code size 2 (0x2) - .maxstack 2 - IL_0000: nop - IL_0001: ret - } // end of method $DoNotBoxStruct_NoArray_FSInterface::main@ - -} // end of class ''.$DoNotBoxStruct_NoArray_FSInterface - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_NoArray_FSInterface.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_NoArray_FSInterface.il.netfx4.bsl index 7cdef49e33b..d1435d6dc92 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_NoArray_FSInterface.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_NoArray_FSInterface.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16774 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly DoNotBoxStruct_NoArray_FSInterface { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.DoNotBoxStruct_NoArray_FSInterface { - // Offset: 0x00000000 Length: 0x00000275 + // Offset: 0x00000000 Length: 0x00000250 } .mresource public FSharpOptimizationData.DoNotBoxStruct_NoArray_FSInterface { - // Offset: 0x00000280 Length: 0x0000009C + // Offset: 0x00000258 Length: 0x0000009C } .module DoNotBoxStruct_NoArray_FSInterface.exe -// MVID: {4DAC079C-3F8A-B9D0-A745-03839C07AC4D} +// MVID: {5775B701-3F8A-B9D0-A745-038301B77557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000360000 +// Image base: 0x00B50000 // =============== CLASS MEMBERS DECLARATION =================== @@ -51,18 +51,20 @@ extends [mscorlib]System.Object { .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto ansi serializable nested assembly beforefieldinit F@5 + .class auto ansi serializable nested assembly beforefieldinit 'F@5-7' extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 { .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::.ctor() IL_0006: ret - } // end of method F@5::.ctor + } // end of method 'F@5-7'::.ctor .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Core.Unit Invoke(int32 x) cil managed @@ -70,24 +72,24 @@ // Code size 3 (0x3) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 59,61 + .line 5,5 : 59,61 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\DoNotBoxStruct\\DoNotBoxStruct_NoArray_FSInterface.fs' IL_0000: nop IL_0001: ldnull IL_0002: ret - } // end of method F@5::Invoke + } // end of method 'F@5-7'::Invoke - } // end of class F@5 + } // end of class 'F@5-7' .method public static void F<(class [FSharp.Core]Microsoft.FSharp.Control.IEvent`2,int32>) T>(!!T x) cil managed { // Code size 25 (0x19) .maxstack 8 - .line 5,5 : 44,62 + .line 5,5 : 44,62 IL_0000: nop IL_0001: ldarg.0 IL_0002: box !!T IL_0007: unbox.any class [mscorlib]System.IObservable`1 - IL_000c: newobj instance void DoNotBoxStruct_NoArray_FSInterface/F@5::.ctor() + IL_000c: newobj instance void DoNotBoxStruct_NoArray_FSInterface/'F@5-7'::.ctor() IL_0011: tail. IL_0013: call void [FSharp.Core]Microsoft.FSharp.Control.CommonExtensions::AddToObservable(class [mscorlib]System.IObservable`1, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_NoArray_FSInterface_NoExtMeth.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_NoArray_FSInterface_NoExtMeth.il.bsl deleted file mode 100644 index eeba686644b..00000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/DoNotBoxStruct_NoArray_FSInterface_NoExtMeth.il.bsl +++ /dev/null @@ -1,124 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly DoNotBoxStruct_NoArray_FSInterface_NoExtMeth -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.DoNotBoxStruct_NoArray_FSInterface_NoExtMeth -{ - // Offset: 0x00000000 Length: 0x00000283 -} -.mresource public FSharpOptimizationData.DoNotBoxStruct_NoArray_FSInterface_NoExtMeth -{ - // Offset: 0x00000288 Length: 0x000000B0 -} -.module DoNotBoxStruct_NoArray_FSInterface_NoExtMeth.exe -// MVID: {4BEB27FC-CD0A-F713-A745-0383FC27EB4B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x00550000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed DoNotBoxStruct_NoArray_FSInterface_NoExtMeth - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto autochar serializable sealed nested assembly beforefieldinit specialname F@6 - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 06 00 00 00 00 00 ) - .method public specialname rtspecialname - instance void .ctor() cil managed - { - // Code size 7 (0x7) - .maxstack 6 - IL_0000: ldarg.0 - IL_0001: call instance void [mscorlib]System.Object::.ctor() - IL_0006: ret - } // end of method F@6::.ctor - - .method assembly instance void Invoke(object sender, - int32 args) cil managed - { - // Code size 4 (0x4) - .maxstack 5 - .locals init ([0] int32 V_0) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 6,6 : 68,70 - IL_0000: ldarg.2 - IL_0001: stloc.0 - IL_0002: nop - IL_0003: ret - } // end of method F@6::Invoke - - } // end of class F@6 - - .method public static void F<(class [FSharp.Core]Microsoft.FSharp.Control.IEvent`2,int32>) T>(!!T x) cil managed - { - // Code size 34 (0x22) - .maxstack 5 - .locals init ([0] !!T V_0) - .line 6,6 : 44,71 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: stloc.0 - IL_0003: ldloca.s V_0 - IL_0005: newobj instance void DoNotBoxStruct_NoArray_FSInterface_NoExtMeth/F@6::.ctor() - IL_000a: ldftn instance void DoNotBoxStruct_NoArray_FSInterface_NoExtMeth/F@6::Invoke(object, - int32) - IL_0010: newobj instance void class [FSharp.Core]Microsoft.FSharp.Control.FSharpHandler`1::.ctor(object, - native int) - IL_0015: constrained. !!T - IL_001b: callvirt instance void class [FSharp.Core]Microsoft.FSharp.Control.IDelegateEvent`1>::AddHandler(!0) - IL_0020: nop - IL_0021: ret - } // end of method DoNotBoxStruct_NoArray_FSInterface_NoExtMeth::F - -} // end of class DoNotBoxStruct_NoArray_FSInterface_NoExtMeth - -.class private abstract auto ansi sealed ''.$DoNotBoxStruct_NoArray_FSInterface_NoExtMeth - extends [mscorlib]System.Object -{ - .method public static void main@() cil managed - { - .entrypoint - // Code size 2 (0x2) - .maxstack 2 - IL_0000: nop - IL_0001: ret - } // end of method $DoNotBoxStruct_NoArray_FSInterface_NoExtMeth::main@ - -} // end of class ''.$DoNotBoxStruct_NoArray_FSInterface_NoExtMeth - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/AbstractClass.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/AbstractClass.il.bsl index 78ffb54d911..402f273c7eb 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/AbstractClass.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/AbstractClass.il.bsl @@ -76,7 +76,7 @@ { // .maxstack 8 - .line 5,5 : 22,26 '' + .line 5,5 : 22,26 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldc.i4.1 @@ -89,7 +89,7 @@ { // .maxstack 8 - .line 6,6 : 32,36 '' + .line 6,6 : 32,36 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldc.i4.1 @@ -113,7 +113,7 @@ .entrypoint // .maxstack 8 - .line 8,8 : 1,7 '' + .line 8,8 : 1,7 IL_0000: nop IL_0001: ldc.i4.0 IL_0002: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ArgumentNamesInClosures01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ArgumentNamesInClosures01.il.bsl deleted file mode 100644 index 2b7ff047e83..00000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ArgumentNamesInClosures01.il.bsl +++ /dev/null @@ -1,160 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly ArgumentNamesInClosures01 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.ArgumentNamesInClosures01 -{ - // Offset: 0x00000000 Length: 0x000003B3 -} -.mresource public FSharpOptimizationData.ArgumentNamesInClosures01 -{ - // Offset: 0x000003B8 Length: 0x0000010D -} -.module ArgumentNamesInClosures01.dll -// MVID: {4BEB284F-39CA-41B5-A745-03834F28EB4B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x00510000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed M - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto ansi serializable nested public C - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 03 00 00 00 00 00 ) - .method public instance int32 F(object o) cil managed - { - // Code size 10 (0xa) - .maxstack 3 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 36,36 : 29,44 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: tail. - IL_0004: callvirt instance int32 [mscorlib]System.Object::GetHashCode() - IL_0009: ret - } // end of method C::F - - } // end of class C - - .class auto ansi serializable nested public T - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 03 00 00 00 00 00 ) - .method public specialname rtspecialname - instance void .ctor() cil managed - { - // Code size 10 (0xa) - .maxstack 3 - .line 40,40 : 10,11 - IL_0000: ldarg.0 - IL_0001: call instance void [mscorlib]System.Object::.ctor() - IL_0006: ldarg.0 - IL_0007: pop - IL_0008: nop - IL_0009: ret - } // end of method T::.ctor - - .method public specialname instance class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 - get_F() cil managed - { - // Code size 7 (0x7) - .maxstack 3 - .line 41,41 : 22,23 - IL_0000: nop - IL_0001: newobj instance void M/get_F@41::.ctor() - IL_0006: ret - } // end of method T::get_F - - .property instance class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 - F() - { - .get instance class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 M/T::get_F() - } // end of property T::F - } // end of class T - - .class auto ansi serializable nested assembly beforefieldinit get_F@41 - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 - { - .method assembly specialname rtspecialname - instance void .ctor() cil managed - { - // Code size 7 (0x7) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::.ctor() - IL_0006: ret - } // end of method get_F@41::.ctor - - .method public strict virtual instance int32 - Invoke(class M/C i_want_to_see_this_identifier) cil managed - { - // Code size 10 (0xa) - .maxstack 5 - .line 41,41 : 22,23 - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: tail. - IL_0004: call int32 M::I(class M/C) - IL_0009: ret - } // end of method get_F@41::Invoke - - } // end of class get_F@41 - - .method public static int32 I(class M/C i_want_to_see_this_identifier) cil managed - { - // Code size 11 (0xb) - .maxstack 4 - .line 38,38 : 47,80 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: tail. - IL_0005: call instance int32 M/C::F(object) - IL_000a: ret - } // end of method M::I - -} // end of class M - -.class private abstract auto ansi sealed ''.$M - extends [mscorlib]System.Object -{ -} // end of class ''.$M - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ArgumentNamesInClosures01.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ArgumentNamesInClosures01.il.netfx4.bsl index b2d049e748f..158f9ff46d3 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ArgumentNamesInClosures01.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ArgumentNamesInClosures01.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17376 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly ArgumentNamesInClosures01 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.ArgumentNamesInClosures01 { - // Offset: 0x00000000 Length: 0x000003C3 + // Offset: 0x00000000 Length: 0x0000039F } .mresource public FSharpOptimizationData.ArgumentNamesInClosures01 { - // Offset: 0x000003C8 Length: 0x0000010D + // Offset: 0x000003A8 Length: 0x0000010D } .module ArgumentNamesInClosures01.dll -// MVID: {4F20DEF1-39CA-41B5-A745-0383F1DE204F} +// MVID: {5775B160-39CA-41B5-A745-038360B17557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00000019085A0000 +// Image base: 0x008E0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -61,7 +61,7 @@ // Code size 10 (0xa) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 36,36 : 29,44 + .line 36,36 : 29,44 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\ArgumentNamesInClosures01.fs' IL_0000: nop IL_0001: ldarg.0 IL_0002: tail. @@ -80,7 +80,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 40,40 : 10,11 + .line 40,40 : 10,11 IL_0000: ldarg.0 IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() IL_0006: ldarg.0 @@ -95,7 +95,7 @@ { // Code size 7 (0x7) .maxstack 8 - .line 41,41 : 22,23 + .line 41,41 : 22,23 IL_0000: nop IL_0001: newobj instance void M/get_F@41::.ctor() IL_0006: ret @@ -114,6 +114,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -126,7 +128,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 41,41 : 22,23 + .line 41,41 : 22,23 IL_0000: nop IL_0001: ldarg.1 IL_0002: tail. @@ -140,7 +142,7 @@ { // Code size 11 (0xb) .maxstack 8 - .line 38,38 : 47,80 + .line 38,38 : 47,80 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldnull diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/EntryPoint01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/EntryPoint01.il.bsl index 5f6374a63b1..1e2dee08589 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/EntryPoint01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/EntryPoint01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16774 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly EntryPoint01 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.EntryPoint01 { - // Offset: 0x00000000 Length: 0x00000277 + // Offset: 0x00000000 Length: 0x00000253 } .mresource public FSharpOptimizationData.EntryPoint01 { - // Offset: 0x00000280 Length: 0x00000090 + // Offset: 0x00000258 Length: 0x00000090 } .module EntryPoint01.exe -// MVID: {4DAC0DD2-9846-72C1-A745-0383D20DAC4D} +// MVID: {5775A461-9846-72C1-A745-038361A47557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000570000 +// Image base: 0x007C0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -70,15 +70,15 @@ // Code size 41 (0x29) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 + .line 8,8 : 4,49 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\EntryPoint01.fs' + .line 100001,100001 : 0,0 IL_0000: ldc.i4.0 IL_0001: stsfld int32 ''.$EntryPoint01::init@ IL_0006: ldsfld int32 ''.$EntryPoint01::init@ IL_000b: pop - .line 8,8 : 4,49 IL_000c: nop IL_000d: nop - .line 8,8 : 9,39 + .line 8,8 : 9,39 IL_000e: call int32 EntryPoint01::get_static_initializer() IL_0013: ldc.i4.s 10 IL_0015: bne.un.s IL_0019 @@ -87,17 +87,17 @@ IL_0019: br.s IL_001f - .line 8,8 : 40,41 + .line 8,8 : 40,41 IL_001b: ldc.i4.0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001c: nop IL_001d: br.s IL_0021 - .line 8,8 : 47,48 + .line 8,8 : 47,48 IL_001f: ldc.i4.1 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0020: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: tail. IL_0023: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32) IL_0028: ret @@ -122,7 +122,7 @@ // Code size 8 (0x8) .maxstack 3 .locals init ([0] int32 static_initializer) - .line 4,4 : 1,28 + .line 4,4 : 1,28 IL_0000: nop IL_0001: call int32 EntryPoint01::get_static_initializer() IL_0006: stloc.0 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/EqualsOnUnions01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/EqualsOnUnions01.il.bsl index b01b5b049cf..3fb89cf65e3 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/EqualsOnUnions01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/EqualsOnUnions01.il.bsl @@ -483,7 +483,7 @@ [7] class [mscorlib]System.Collections.IComparer V_7, [8] int32 V_8, [9] int32 V_9) - .line 6,6 : 6,7 '' + .line 6,6 : 6,7 IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any EqualsOnUnions01/U @@ -497,7 +497,7 @@ IL_0010: br IL_009b - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0015: ldarg.1 IL_0016: unbox.any EqualsOnUnions01/U IL_001b: ldnull @@ -508,7 +508,7 @@ IL_0022: br IL_0099 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0027: ldarg.0 IL_0028: stloc.2 IL_0029: ldloc.2 @@ -539,7 +539,7 @@ IL_004d: br.s IL_0095 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004f: ldarg.0 IL_0050: isinst EqualsOnUnions01/U/B IL_0055: brfalse.s IL_0059 @@ -548,7 +548,7 @@ IL_0059: br.s IL_0093 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_005b: ldarg.0 IL_005c: castclass EqualsOnUnions01/U/B IL_0061: stloc.s V_5 @@ -571,31 +571,31 @@ IL_0088: br.s IL_008c - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_008a: ldc.i4.m1 IL_008b: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_008c: ldloc.s V_8 IL_008e: ldloc.s V_9 IL_0090: cgt IL_0092: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0093: ldc.i4.0 IL_0094: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0095: ldloc.1 IL_0096: ldloc.3 IL_0097: sub IL_0098: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0099: ldc.i4.1 IL_009a: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_009b: ldarg.1 IL_009c: unbox.any EqualsOnUnions01/U IL_00a1: ldnull @@ -606,11 +606,11 @@ IL_00a8: br.s IL_00ac - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_00aa: ldc.i4.m1 IL_00ab: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_00ac: ldc.i4.0 IL_00ad: ret } // end of method U::CompareTo @@ -686,7 +686,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 6,6 : 6,7 '' + .line 6,6 : 6,7 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/EqualsOnUnions01.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/EqualsOnUnions01.il.netfx4.bsl index b01b5b049cf..3fb89cf65e3 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/EqualsOnUnions01.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/EqualsOnUnions01.il.netfx4.bsl @@ -483,7 +483,7 @@ [7] class [mscorlib]System.Collections.IComparer V_7, [8] int32 V_8, [9] int32 V_9) - .line 6,6 : 6,7 '' + .line 6,6 : 6,7 IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any EqualsOnUnions01/U @@ -497,7 +497,7 @@ IL_0010: br IL_009b - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0015: ldarg.1 IL_0016: unbox.any EqualsOnUnions01/U IL_001b: ldnull @@ -508,7 +508,7 @@ IL_0022: br IL_0099 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0027: ldarg.0 IL_0028: stloc.2 IL_0029: ldloc.2 @@ -539,7 +539,7 @@ IL_004d: br.s IL_0095 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004f: ldarg.0 IL_0050: isinst EqualsOnUnions01/U/B IL_0055: brfalse.s IL_0059 @@ -548,7 +548,7 @@ IL_0059: br.s IL_0093 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_005b: ldarg.0 IL_005c: castclass EqualsOnUnions01/U/B IL_0061: stloc.s V_5 @@ -571,31 +571,31 @@ IL_0088: br.s IL_008c - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_008a: ldc.i4.m1 IL_008b: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_008c: ldloc.s V_8 IL_008e: ldloc.s V_9 IL_0090: cgt IL_0092: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0093: ldc.i4.0 IL_0094: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0095: ldloc.1 IL_0096: ldloc.3 IL_0097: sub IL_0098: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0099: ldc.i4.1 IL_009a: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_009b: ldarg.1 IL_009c: unbox.any EqualsOnUnions01/U IL_00a1: ldnull @@ -606,11 +606,11 @@ IL_00a8: br.s IL_00ac - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_00aa: ldc.i4.m1 IL_00ab: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_00ac: ldc.i4.0 IL_00ad: ret } // end of method U::CompareTo @@ -686,7 +686,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 6,6 : 6,7 '' + .line 6,6 : 6,7 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop01.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop01.il.netfx4.bsl index 81dc9051ea2..9324399fd2d 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop01.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop01.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.33440 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.ForLoop01 { - // Offset: 0x00000000 Length: 0x00000143 + // Offset: 0x00000000 Length: 0x0000013F } .mresource public FSharpOptimizationData.ForLoop01 { // Offset: 0x00000148 Length: 0x00000050 } .module ForLoop01.exe -// MVID: {542DBE1D-1795-791C-A745-03831DBE2D54} +// MVID: {5772D752-1795-791C-A745-038352D77257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x02A30000 +// Image base: 0x00AF0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -71,7 +71,7 @@ [3] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_3, [4] int32 V_4) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 11,21 + .line 5,5 : 1,24 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\ForLoop01.fs' IL_0000: nop IL_0001: ldc.i4.1 IL_0002: ldc.i4.1 @@ -82,16 +82,17 @@ IL_0009: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::CreateSequence(class [mscorlib]System.Collections.Generic.IEnumerable`1) IL_000e: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToList(class [mscorlib]System.Collections.Generic.IEnumerable`1) IL_0013: stloc.0 + .line 5,5 : 1,24 '' IL_0014: ldloc.0 IL_0015: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_001a: stloc.1 - .line 5,5 : 1,24 '' + .line 5,5 : 1,24 IL_001b: ldloc.1 IL_001c: ldnull IL_001d: cgt.un IL_001f: brfalse.s IL_0050 - .line 5,5 : 11,21 '' + .line 5,5 : 1,24 '' IL_0021: ldloc.0 IL_0022: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() IL_0027: stloc.2 @@ -110,7 +111,7 @@ IL_0046: ldloc.0 IL_0047: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_004c: stloc.1 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004d: nop IL_004e: br.s IL_001b diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop02.il.bsl index 34ba15bbd5b..cd810ae2b16 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop02.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop02.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16774 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly ForLoop02 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.ForLoop02 { - // Offset: 0x00000000 Length: 0x00000163 + // Offset: 0x00000000 Length: 0x0000013F } .mresource public FSharpOptimizationData.ForLoop02 { - // Offset: 0x00000168 Length: 0x00000050 + // Offset: 0x00000148 Length: 0x00000050 } .module ForLoop02.exe -// MVID: {4DAC0DD9-1736-791C-A745-0383D90DAC4D} +// MVID: {5772EF77-1736-791C-A745-038377EF7257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000002010000 +// Image base: 0x00E40000 // =============== CLASS MEMBERS DECLARATION =================== @@ -69,7 +69,7 @@ [1] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_1, [2] int32 V_2) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 1,19 + .line 5,5 : 1,19 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\ForLoop02.fs' IL_0000: nop IL_0001: ldc.i4.1 IL_0002: stloc.0 @@ -79,7 +79,7 @@ IL_000a: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,int32>::.ctor(string) IL_000f: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0014: stloc.1 - .line 6,6 : 5,20 + .line 6,6 : 5,20 '' IL_0015: ldloc.0 IL_0016: stloc.2 IL_0017: ldloc.1 @@ -90,7 +90,7 @@ IL_0020: ldc.i4.1 IL_0021: add IL_0022: stloc.0 - .line 5,5 : 15,16 + .line 5,5 : 1,19 '' IL_0023: ldloc.0 IL_0024: ldc.i4.1 IL_0025: ldc.i4.3 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop03.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop03.il.bsl index 31961fc2f4f..dcb573fae15 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop03.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop03.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16774 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly ForLoop03 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.ForLoop03 { - // Offset: 0x00000000 Length: 0x0000021E + // Offset: 0x00000000 Length: 0x000001FA } .mresource public FSharpOptimizationData.ForLoop03 { - // Offset: 0x00000228 Length: 0x0000007B + // Offset: 0x00000200 Length: 0x0000007B } .module ForLoop03.exe -// MVID: {4DAC0DDB-1757-791C-A745-0383DB0DAC4D} +// MVID: {5772D756-1757-791C-A745-038356D77257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00000000002F0000 +// Image base: 0x00F40000 // =============== CLASS MEMBERS DECLARATION =================== @@ -73,19 +73,19 @@ [6] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_6, [7] int32 V_7) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 10,10 : 4,21 + .line 10,10 : 4,21 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\ForLoop03.fs' IL_0000: nop IL_0001: ldc.i4.0 IL_0002: stloc.0 - .line 11,11 : 4,28 + .line 11,11 : 4,28 '' IL_0003: ldc.i4.0 IL_0004: stloc.1 IL_0005: br.s IL_0049 - .line 12,12 : 15,17 + .line 12,12 : 6,20 '' IL_0007: call class [mscorlib]System.Collections.Generic.List`1 ForLoop03::get_ra() IL_000c: stloc.2 - .line 12,12 : 6,20 + .line 12,12 : 6,20 '' IL_000d: ldloc.2 IL_000e: callvirt instance valuetype [mscorlib]System.Collections.Generic.List`1/Enumerator class [mscorlib]System.Collections.Generic.List`1::GetEnumerator() IL_0013: stloc.3 @@ -95,7 +95,7 @@ IL_0016: call instance bool valuetype [mscorlib]System.Collections.Generic.List`1/Enumerator::MoveNext() IL_001b: brfalse.s IL_002d - .line 13,13 : 10,20 + .line 12,12 : 6,20 '' IL_001d: ldloca.s V_3 IL_001f: call instance !0 valuetype [mscorlib]System.Collections.Generic.List`1/Enumerator::get_Current() IL_0024: stloc.s x @@ -103,7 +103,7 @@ IL_0027: ldc.i4.1 IL_0028: add IL_0029: stloc.0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 '' IL_002a: nop IL_002b: br.s IL_0014 @@ -120,7 +120,7 @@ IL_003f: ldnull IL_0040: pop IL_0041: endfinally - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 '' } // end handler IL_0042: ldloc.s V_4 IL_0044: pop @@ -128,7 +128,7 @@ IL_0046: ldc.i4.1 IL_0047: add IL_0048: stloc.1 - .line 11,11 : 17,25 + .line 11,11 : 4,28 '' IL_0049: ldloc.1 IL_004a: ldc.i4.1 IL_004b: ldc.i4 0x989680 @@ -139,7 +139,7 @@ IL_0058: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,int32>::.ctor(string) IL_005d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0062: stloc.s V_6 - .line 14,14 : 4,22 + .line 14,14 : 4,22 '' IL_0064: ldloc.0 IL_0065: stloc.s V_7 IL_0067: ldloc.s V_6 @@ -173,19 +173,19 @@ .maxstack 5 .locals init ([0] class [mscorlib]System.Collections.Generic.List`1 ra, [1] int32 i) - .line 5,5 : 1,35 + .line 5,5 : 1,35 '' IL_0000: nop IL_0001: ldc.i4.s 100 IL_0003: newobj instance void class [mscorlib]System.Collections.Generic.List`1::.ctor(int32) IL_0008: dup IL_0009: stsfld class [mscorlib]System.Collections.Generic.List`1 ''.$ForLoop03::ra@5 IL_000e: stloc.0 - .line 6,6 : 1,20 + .line 6,6 : 1,20 '' IL_000f: ldc.i4.0 IL_0010: stloc.1 IL_0011: br.s IL_0022 - .line 6,6 : 21,30 + .line 6,6 : 21,30 '' IL_0013: call class [mscorlib]System.Collections.Generic.List`1 ForLoop03::get_ra() IL_0018: ldloc.1 IL_0019: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) @@ -193,7 +193,7 @@ IL_001f: ldc.i4.1 IL_0020: add IL_0021: stloc.1 - .line 6,6 : 14,17 + .line 6,6 : 1,20 '' IL_0022: ldloc.1 IL_0023: ldc.i4.1 IL_0024: ldc.i4.s 100 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/GeneralizationOnUnions01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/GeneralizationOnUnions01.il.bsl index 7026401c306..69d77f96985 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/GeneralizationOnUnions01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/GeneralizationOnUnions01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17376 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly GeneralizationOnUnions01 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.GeneralizationOnUnions01 { - // Offset: 0x00000000 Length: 0x000006B5 + // Offset: 0x00000000 Length: 0x00000699 } .mresource public FSharpOptimizationData.GeneralizationOnUnions01 { - // Offset: 0x000006C0 Length: 0x000001F4 + // Offset: 0x000006A0 Length: 0x000001F4 } .module GeneralizationOnUnions01.exe -// MVID: {4F31D7D8-4CA2-8CD1-A745-0383D8D7314F} +// MVID: {5775B1B8-4CA2-8CD1-A745-0383B8B17557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000280000 +// Image base: 0x01090000 // =============== CLASS MEMBERS DECLARATION =================== @@ -181,7 +181,7 @@ // Code size 14 (0xe) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 6,12 + .line 4,4 : 6,12 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\GeneralizationOnUnions01.fs' IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -198,7 +198,7 @@ // Code size 56 (0x38) .maxstack 3 .locals init ([0] class GeneralizationOnUnions01/Weirdo V_0) - .line 4,4 : 6,12 + .line 4,4 : 6,12 IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any GeneralizationOnUnions01/Weirdo @@ -212,7 +212,7 @@ IL_0010: br.s IL_0025 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0012: ldarg.1 IL_0013: unbox.any GeneralizationOnUnions01/Weirdo IL_0018: ldnull @@ -223,15 +223,15 @@ IL_001f: br.s IL_0023 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: ldc.i4.0 IL_0022: ret - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0023: ldc.i4.1 IL_0024: ret - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0025: ldarg.1 IL_0026: unbox.any GeneralizationOnUnions01/Weirdo IL_002b: ldnull @@ -242,11 +242,11 @@ IL_0032: br.s IL_0036 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0034: ldc.i4.m1 IL_0035: ret - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0036: ldc.i4.0 IL_0037: ret } // end of method Weirdo::CompareTo @@ -290,7 +290,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 4,4 : 6,12 + .line 4,4 : 6,12 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -423,6 +423,8 @@ .method assembly specialname rtspecialname instance void .ctor(int32 C) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -439,7 +441,7 @@ // Code size 10 (0xa) .maxstack 5 .locals init ([0] class GeneralizationOnUnions01/Weirdo V_0) - .line 8,8 : 14,15 + .line 8,8 : 14,15 IL_0000: ldarg.1 IL_0001: stloc.0 IL_0002: nop @@ -455,7 +457,7 @@ // Code size 5 (0x5) .maxstack 3 .locals init ([0] class GeneralizationOnUnions01/Weirdo V_0) - .line 5,5 : 11,12 + .line 5,5 : 11,12 IL_0000: ldarg.0 IL_0001: stloc.0 IL_0002: nop @@ -469,14 +471,15 @@ .maxstack 3 .locals init ([0] int32 C, [1] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 f) - .line 7,7 : 4,13 + .line 7,7 : 4,13 IL_0000: nop IL_0001: ldc.i4.1 IL_0002: stloc.0 + .line 9,9 : 4,6 IL_0003: ldloc.0 IL_0004: newobj instance void GeneralizationOnUnions01/f@8::.ctor(int32) IL_0009: stloc.1 - .line 9,9 : 4,6 + .line 9,9 : 4,6 IL_000a: ret } // end of method GeneralizationOnUnions01::g @@ -494,7 +497,7 @@ .entrypoint // Code size 9 (0x9) .maxstack 8 - .line 11,11 : 1,7 + .line 11,11 : 1,7 IL_0000: nop IL_0001: ldc.i4.0 IL_0002: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/IfThenElse01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/IfThenElse01.il.bsl index ab717ce93b7..933e7129450 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/IfThenElse01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/IfThenElse01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16774 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly IfThenElse01 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.IfThenElse01 { - // Offset: 0x00000000 Length: 0x00000225 + // Offset: 0x00000000 Length: 0x00000201 } .mresource public FSharpOptimizationData.IfThenElse01 { - // Offset: 0x00000230 Length: 0x00000092 + // Offset: 0x00000208 Length: 0x00000092 } .module IfThenElse01.dll -// MVID: {4DAC0DE0-2D6C-0B5D-A745-0383E00DAC4D} +// MVID: {5775B6FF-2D6C-0B5D-A745-0383FFB67557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00000000006F0000 +// Image base: 0x00BD0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -61,6 +61,10 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -71,6 +75,8 @@ .method public strict virtual instance object Specialize() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 12 (0xc) .maxstack 8 IL_0000: ldarg.0 @@ -109,16 +115,14 @@ !a z, !a w) cil managed { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 21 (0x15) .maxstack 7 .locals init ([0] class IfThenElse01/M/f5@5 V_0) + .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' + .line 5,5 : 48,63 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\IfThenElse01.fs' IL_0000: ldarg.0 IL_0001: ldfld class IfThenElse01/M/f5@5 class IfThenElse01/M/f5@5T::self0@ IL_0006: stloc.0 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 48,63 IL_0007: nop IL_0008: ldarg.1 IL_0009: ldarg.2 @@ -128,11 +132,11 @@ IL_000e: br.s IL_0012 - .line 5,5 : 64,65 + .line 5,5 : 64,65 IL_0010: ldarg.3 IL_0011: ret - .line 5,5 : 71,72 + .line 5,5 : 71,72 IL_0012: ldarg.s w IL_0014: ret } // end of method f5@5T::Invoke @@ -148,11 +152,11 @@ [2] char V_2, [3] int32 V_3, [4] int32 V_4) - .line 5,5 : 13,45 + .line 6,6 : 9,25 IL_0000: nop IL_0001: newobj instance void IfThenElse01/M/f5@5::.ctor() IL_0006: stloc.0 - .line 6,6 : 9,25 + .line 6,6 : 9,25 IL_0007: ldloc.0 IL_0008: ldc.i4.s 10 IL_000a: ldc.i4.s 10 @@ -193,7 +197,7 @@ { // Code size 8 (0x8) .maxstack 8 - .line 7,7 : 4,7 + .line 7,7 : 4,7 IL_0000: nop IL_0001: call char IfThenElse01/M::m() IL_0006: pop diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/LetIfThenElse01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/LetIfThenElse01.il.bsl deleted file mode 100644 index ff7b2c47f36..00000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/LetIfThenElse01.il.bsl +++ /dev/null @@ -1,242 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly LetIfThenElse01 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.LetIfThenElse01 -{ - // Offset: 0x00000000 Length: 0x000001F9 -} -.mresource public FSharpOptimizationData.LetIfThenElse01 -{ - // Offset: 0x00000200 Length: 0x00000076 -} -.module LetIfThenElse01.exe -// MVID: {4BEB2869-BE5A-D8FD-A745-03836928EB4B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x00270000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed LetIfThenElse01 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .method public static class [mscorlib]System.Tuple`4 - F(!!a y) cil managed - { - // Code size 145 (0x91) - .maxstack 6 - .locals init ([0] int32 x1, - [1] valuetype [mscorlib]System.DateTime V_1, - [2] int32 y1, - [3] valuetype [mscorlib]System.DateTime V_3, - [4] int32 x2, - [5] valuetype [mscorlib]System.DateTime V_5, - [6] int32 y2, - [7] valuetype [mscorlib]System.DateTime V_7) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 6,6 : 7,9 - IL_0000: nop - IL_0001: nop - .line 6,6 : 12,51 - IL_0002: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() - IL_0007: stloc.1 - IL_0008: ldloca.s V_1 - IL_000a: call instance int32 [mscorlib]System.DateTime::get_Year() - IL_000f: ldc.i4 0x7d0 - IL_0014: ble.s IL_0018 - - IL_0016: br.s IL_001a - - IL_0018: br.s IL_001e - - .line 6,6 : 52,53 - IL_001a: ldc.i4.1 - .line 100001,100001 : 0,0 - IL_001b: nop - IL_001c: br.s IL_0020 - - .line 6,6 : 59,60 - IL_001e: ldc.i4.2 - .line 100001,100001 : 0,0 - IL_001f: nop - .line 100001,100001 : 0,0 - IL_0020: stloc.0 - .line 7,7 : 7,9 - IL_0021: nop - .line 7,7 : 12,51 - IL_0022: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() - IL_0027: stloc.3 - IL_0028: ldloca.s V_3 - IL_002a: call instance int32 [mscorlib]System.DateTime::get_Year() - IL_002f: ldc.i4 0x7d0 - IL_0034: ble.s IL_0038 - - IL_0036: br.s IL_003a - - IL_0038: br.s IL_003e - - .line 7,7 : 52,53 - IL_003a: ldc.i4.1 - .line 100001,100001 : 0,0 - IL_003b: nop - IL_003c: br.s IL_0040 - - .line 7,7 : 59,60 - IL_003e: ldc.i4.2 - .line 100001,100001 : 0,0 - IL_003f: nop - .line 100001,100001 : 0,0 - IL_0040: stloc.2 - .line 8,8 : 7,9 - IL_0041: nop - .line 8,8 : 12,51 - IL_0042: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() - IL_0047: stloc.s V_5 - IL_0049: ldloca.s V_5 - IL_004b: call instance int32 [mscorlib]System.DateTime::get_Year() - IL_0050: ldc.i4 0x7d0 - IL_0055: bge.s IL_0059 - - IL_0057: br.s IL_005b - - IL_0059: br.s IL_005f - - .line 8,8 : 52,53 - IL_005b: ldc.i4.1 - .line 100001,100001 : 0,0 - IL_005c: nop - IL_005d: br.s IL_0061 - - .line 8,8 : 59,60 - IL_005f: ldc.i4.2 - .line 100001,100001 : 0,0 - IL_0060: nop - .line 100001,100001 : 0,0 - IL_0061: stloc.s x2 - .line 9,9 : 7,9 - IL_0063: nop - .line 9,9 : 12,51 - IL_0064: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() - IL_0069: stloc.s V_7 - IL_006b: ldloca.s V_7 - IL_006d: call instance int32 [mscorlib]System.DateTime::get_Year() - IL_0072: ldc.i4 0x7d0 - IL_0077: bge.s IL_007b - - IL_0079: br.s IL_007d - - IL_007b: br.s IL_0081 - - .line 9,9 : 52,53 - IL_007d: ldc.i4.1 - .line 100001,100001 : 0,0 - IL_007e: nop - IL_007f: br.s IL_0083 - - .line 9,9 : 59,60 - IL_0081: ldc.i4.2 - .line 100001,100001 : 0,0 - IL_0082: nop - .line 100001,100001 : 0,0 - IL_0083: stloc.s y2 - .line 10,10 : 3,14 - IL_0085: ldloc.0 - IL_0086: ldloc.2 - IL_0087: ldloc.s x2 - IL_0089: ldloc.s y2 - IL_008b: newobj instance void class [mscorlib]System.Tuple`4::.ctor(!0, - !1, - !2, - !3) - IL_0090: ret - } // end of method LetIfThenElse01::F - -} // end of class LetIfThenElse01 - -.class private abstract auto ansi sealed ''.$LetIfThenElse01 - extends [mscorlib]System.Object -{ - .field static assembly int32 init@ - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method public static void main@() cil managed - { - .entrypoint - // Code size 54 (0x36) - .maxstack 6 - .locals init ([0] class [mscorlib]System.Tuple`4 V_0, - [1] class [mscorlib]System.Tuple`4 V_1, - [2] int32 V_2, - [3] int32 V_3, - [4] int32 V_4, - [5] int32 V_5, - [6] class [mscorlib]System.Tuple`4 V_6) - .line 12,12 : 1,15 - IL_0000: nop - IL_0001: ldc.i4.1 - IL_0002: call class [mscorlib]System.Tuple`4 LetIfThenElse01::F(!!0) - IL_0007: stloc.0 - IL_0008: ldloc.0 - IL_0009: stloc.1 - IL_000a: ldloc.1 - IL_000b: call instance !0 class [mscorlib]System.Tuple`4::get_Item1() - IL_0010: stloc.2 - IL_0011: ldloc.1 - IL_0012: call instance !1 class [mscorlib]System.Tuple`4::get_Item2() - IL_0017: stloc.3 - IL_0018: ldloc.1 - IL_0019: call instance !2 class [mscorlib]System.Tuple`4::get_Item3() - IL_001e: stloc.s V_4 - IL_0020: ldloc.1 - IL_0021: call instance !3 class [mscorlib]System.Tuple`4::get_Item4() - IL_0026: stloc.s V_5 - IL_0028: ldloc.2 - IL_0029: ldloc.3 - IL_002a: ldloc.s V_4 - IL_002c: ldloc.s V_5 - IL_002e: newobj instance void class [mscorlib]System.Tuple`4::.ctor(!0, - !1, - !2, - !3) - IL_0033: stloc.s V_6 - IL_0035: ret - } // end of method $LetIfThenElse01::main@ - -} // end of class ''.$LetIfThenElse01 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/LetIfThenElse01.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/LetIfThenElse01.il.netfx4.bsl index e14faa0afd5..77f0dca63f7 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/LetIfThenElse01.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/LetIfThenElse01.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16774 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly LetIfThenElse01 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.LetIfThenElse01 { - // Offset: 0x00000000 Length: 0x00000209 + // Offset: 0x00000000 Length: 0x000001E5 } .mresource public FSharpOptimizationData.LetIfThenElse01 { - // Offset: 0x00000210 Length: 0x00000076 + // Offset: 0x000001F0 Length: 0x00000076 } .module LetIfThenElse01.exe -// MVID: {4DAC0DE2-BE5A-D8FD-A745-0383E20DAC4D} +// MVID: {5775B177-BE5A-D8FD-A745-038377B17557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000690000 +// Image base: 0x02660000 // =============== CLASS MEMBERS DECLARATION =================== @@ -54,7 +54,7 @@ .method public static class [mscorlib]System.Tuple`4 F(!!a y) cil managed { - // Code size 145 (0x91) + // Code size 141 (0x8d) .maxstack 6 .locals init ([0] int32 x1, [1] valuetype [mscorlib]System.DateTime V_1, @@ -65,121 +65,113 @@ [6] int32 y2, [7] valuetype [mscorlib]System.DateTime V_7) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 6,6 : 7,9 + .line 6,6 : 12,51 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\LetIfThenElse01.fs' IL_0000: nop - IL_0001: nop - .line 6,6 : 12,51 - IL_0002: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() - IL_0007: stloc.1 - IL_0008: ldloca.s V_1 - IL_000a: call instance int32 [mscorlib]System.DateTime::get_Year() - IL_000f: ldc.i4 0x7d0 - IL_0014: ble.s IL_0018 - - IL_0016: br.s IL_001a - - IL_0018: br.s IL_001e - - .line 6,6 : 52,53 - IL_001a: ldc.i4.1 - .line 100001,100001 : 0,0 - IL_001b: nop - IL_001c: br.s IL_0020 - - .line 6,6 : 59,60 - IL_001e: ldc.i4.2 - .line 100001,100001 : 0,0 - IL_001f: nop - .line 100001,100001 : 0,0 - IL_0020: stloc.0 - .line 7,7 : 7,9 - IL_0021: nop - .line 7,7 : 12,51 - IL_0022: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() - IL_0027: stloc.3 - IL_0028: ldloca.s V_3 - IL_002a: call instance int32 [mscorlib]System.DateTime::get_Year() - IL_002f: ldc.i4 0x7d0 - IL_0034: ble.s IL_0038 - - IL_0036: br.s IL_003a - - IL_0038: br.s IL_003e - - .line 7,7 : 52,53 - IL_003a: ldc.i4.1 - .line 100001,100001 : 0,0 - IL_003b: nop - IL_003c: br.s IL_0040 - - .line 7,7 : 59,60 - IL_003e: ldc.i4.2 - .line 100001,100001 : 0,0 - IL_003f: nop - .line 100001,100001 : 0,0 - IL_0040: stloc.2 - .line 8,8 : 7,9 - IL_0041: nop - .line 8,8 : 12,51 - IL_0042: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() - IL_0047: stloc.s V_5 - IL_0049: ldloca.s V_5 - IL_004b: call instance int32 [mscorlib]System.DateTime::get_Year() - IL_0050: ldc.i4 0x7d0 - IL_0055: bge.s IL_0059 - - IL_0057: br.s IL_005b - - IL_0059: br.s IL_005f - - .line 8,8 : 52,53 - IL_005b: ldc.i4.1 - .line 100001,100001 : 0,0 - IL_005c: nop - IL_005d: br.s IL_0061 - - .line 8,8 : 59,60 - IL_005f: ldc.i4.2 - .line 100001,100001 : 0,0 - IL_0060: nop - .line 100001,100001 : 0,0 - IL_0061: stloc.s x2 - .line 9,9 : 7,9 - IL_0063: nop - .line 9,9 : 12,51 - IL_0064: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() - IL_0069: stloc.s V_7 - IL_006b: ldloca.s V_7 - IL_006d: call instance int32 [mscorlib]System.DateTime::get_Year() - IL_0072: ldc.i4 0x7d0 - IL_0077: bge.s IL_007b - - IL_0079: br.s IL_007d - - IL_007b: br.s IL_0081 - - .line 9,9 : 52,53 - IL_007d: ldc.i4.1 - .line 100001,100001 : 0,0 + IL_0001: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() + IL_0006: stloc.1 + IL_0007: ldloca.s V_1 + IL_0009: call instance int32 [mscorlib]System.DateTime::get_Year() + IL_000e: ldc.i4 0x7d0 + IL_0013: ble.s IL_0017 + + IL_0015: br.s IL_0019 + + IL_0017: br.s IL_001d + + .line 6,6 : 52,53 + IL_0019: ldc.i4.1 + .line 100001,100001 : 0,0 + IL_001a: nop + IL_001b: br.s IL_001f + + .line 6,6 : 59,60 + IL_001d: ldc.i4.2 + .line 100001,100001 : 0,0 + IL_001e: nop + .line 100001,100001 : 0,0 + IL_001f: stloc.0 + .line 7,7 : 12,51 + IL_0020: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() + IL_0025: stloc.3 + IL_0026: ldloca.s V_3 + IL_0028: call instance int32 [mscorlib]System.DateTime::get_Year() + IL_002d: ldc.i4 0x7d0 + IL_0032: ble.s IL_0036 + + IL_0034: br.s IL_0038 + + IL_0036: br.s IL_003c + + .line 7,7 : 52,53 + IL_0038: ldc.i4.1 + .line 100001,100001 : 0,0 + IL_0039: nop + IL_003a: br.s IL_003e + + .line 7,7 : 59,60 + IL_003c: ldc.i4.2 + .line 100001,100001 : 0,0 + IL_003d: nop + .line 100001,100001 : 0,0 + IL_003e: stloc.2 + .line 8,8 : 12,51 + IL_003f: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() + IL_0044: stloc.s V_5 + IL_0046: ldloca.s V_5 + IL_0048: call instance int32 [mscorlib]System.DateTime::get_Year() + IL_004d: ldc.i4 0x7d0 + IL_0052: bge.s IL_0056 + + IL_0054: br.s IL_0058 + + IL_0056: br.s IL_005c + + .line 8,8 : 52,53 + IL_0058: ldc.i4.1 + .line 100001,100001 : 0,0 + IL_0059: nop + IL_005a: br.s IL_005e + + .line 8,8 : 59,60 + IL_005c: ldc.i4.2 + .line 100001,100001 : 0,0 + IL_005d: nop + .line 100001,100001 : 0,0 + IL_005e: stloc.s x2 + .line 9,9 : 12,51 + IL_0060: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() + IL_0065: stloc.s V_7 + IL_0067: ldloca.s V_7 + IL_0069: call instance int32 [mscorlib]System.DateTime::get_Year() + IL_006e: ldc.i4 0x7d0 + IL_0073: bge.s IL_0077 + + IL_0075: br.s IL_0079 + + IL_0077: br.s IL_007d + + .line 9,9 : 52,53 + IL_0079: ldc.i4.1 + .line 100001,100001 : 0,0 + IL_007a: nop + IL_007b: br.s IL_007f + + .line 9,9 : 59,60 + IL_007d: ldc.i4.2 + .line 100001,100001 : 0,0 IL_007e: nop - IL_007f: br.s IL_0083 - - .line 9,9 : 59,60 - IL_0081: ldc.i4.2 - .line 100001,100001 : 0,0 - IL_0082: nop - .line 100001,100001 : 0,0 - IL_0083: stloc.s y2 - .line 10,10 : 3,14 - IL_0085: ldloc.0 - IL_0086: ldloc.2 - IL_0087: ldloc.s x2 - IL_0089: ldloc.s y2 - IL_008b: newobj instance void class [mscorlib]System.Tuple`4::.ctor(!0, + .line 100001,100001 : 0,0 + IL_007f: stloc.s y2 + .line 10,10 : 3,14 + IL_0081: ldloc.0 + IL_0082: ldloc.2 + IL_0083: ldloc.s x2 + IL_0085: ldloc.s y2 + IL_0087: newobj instance void class [mscorlib]System.Tuple`4::.ctor(!0, !1, !2, !3) - IL_0090: ret + IL_008c: ret } // end of method LetIfThenElse01::F } // end of class LetIfThenElse01 @@ -203,7 +195,7 @@ [4] int32 V_4, [5] int32 V_5, [6] class [mscorlib]System.Tuple`4 V_6) - .line 12,12 : 1,15 + .line 12,12 : 1,15 IL_0000: nop IL_0001: ldc.i4.1 IL_0002: call class [mscorlib]System.Tuple`4 LetIfThenElse01::F(!!0) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Lock01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Lock01.il.bsl deleted file mode 100644 index 76ef9f5c6ab..00000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Lock01.il.bsl +++ /dev/null @@ -1,173 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly Lock01 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.Lock01 -{ - // Offset: 0x00000000 Length: 0x00000198 -} -.mresource public FSharpOptimizationData.Lock01 -{ - // Offset: 0x000001A0 Length: 0x00000064 -} -.module Lock01.exe -// MVID: {4BEB286E-2BCA-B308-A745-03836E28EB4B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x004C0000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed Lock01 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto ansi serializable nested assembly beforefieldinit clo@20 - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 - { - .method assembly specialname rtspecialname - instance void .ctor() cil managed - { - // Code size 7 (0x7) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::.ctor() - IL_0006: ret - } // end of method clo@20::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Core.Unit - Invoke(class [FSharp.Core]Microsoft.FSharp.Core.Unit unitVar0) cil managed - { - // Code size 3 (0x3) - .maxstack 5 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 20,20 : 19,21 - IL_0000: nop - IL_0001: ldnull - IL_0002: ret - } // end of method clo@20::Invoke - - } // end of class clo@20 - - .method public specialname static object - get_o() cil managed - { - // Code size 6 (0x6) - .maxstack 4 - IL_0000: ldsfld object ''.$Lock01::o@19 - IL_0005: ret - } // end of method Lock01::get_o - - .property object o() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) - .get object Lock01::get_o() - } // end of property Lock01::o -} // end of class Lock01 - -.class private abstract auto ansi sealed ''.$Lock01 - extends [mscorlib]System.Object -{ - .field static assembly object o@19 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .field static assembly int32 init@ - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method public static void main@() cil managed - { - .entrypoint - // Code size 69 (0x45) - .maxstack 4 - .locals init ([0] object o, - [1] object V_1, - [2] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_2, - [3] bool V_3, - [4] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_4) - .line 19,19 : 1,28 - IL_0000: nop - IL_0001: newobj instance void [mscorlib]System.Object::.ctor() - IL_0006: dup - IL_0007: stsfld object ''.$Lock01::o@19 - IL_000c: stloc.0 - .line 20,20 : 1,23 - IL_000d: call object Lock01::get_o() - IL_0012: stloc.1 - IL_0013: newobj instance void Lock01/clo@20::.ctor() - IL_0018: stloc.2 - IL_0019: ldc.i4.0 - IL_001a: stloc.3 - .try - { - IL_001b: ldloc.1 - IL_001c: ldloca.s V_3 - IL_001e: call void [mscorlib]System.Threading.Monitor::Enter(object, - bool&) - IL_0023: ldloc.2 - IL_0024: ldnull - IL_0025: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) - IL_002a: stloc.s V_4 - IL_002c: leave.s IL_0041 - - } // end .try - finally - { - IL_002e: ldloc.3 - IL_002f: brfalse.s IL_0033 - - IL_0031: br.s IL_0035 - - IL_0033: br.s IL_003e - - .line 100001,100001 : 0,0 - IL_0035: ldloc.1 - IL_0036: call void [mscorlib]System.Threading.Monitor::Exit(object) - IL_003b: ldnull - IL_003c: pop - IL_003d: endfinally - .line 100001,100001 : 0,0 - IL_003e: ldnull - IL_003f: pop - IL_0040: endfinally - .line 100001,100001 : 0,0 - } // end handler - IL_0041: ldloc.s V_4 - IL_0043: pop - IL_0044: ret - } // end of method $Lock01::main@ - -} // end of class ''.$Lock01 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Lock01.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Lock01.il.netfx4.bsl index 5d290b1cb70..5e4723fd2d1 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Lock01.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Lock01.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16774 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly Lock01 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Lock01 { - // Offset: 0x00000000 Length: 0x000001A8 + // Offset: 0x00000000 Length: 0x00000184 } .mresource public FSharpOptimizationData.Lock01 { - // Offset: 0x000001B0 Length: 0x00000064 + // Offset: 0x00000188 Length: 0x00000064 } .module Lock01.exe -// MVID: {4DAC0DE4-2BCA-B308-A745-0383E40DAC4D} +// MVID: {5775BA45-2BCA-B308-A745-038345BA7557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000700000 +// Image base: 0x01160000 // =============== CLASS MEMBERS DECLARATION =================== @@ -57,6 +57,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -70,7 +72,7 @@ // Code size 3 (0x3) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 20,20 : 19,21 + .line 20,20 : 19,21 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\Lock01.fs' IL_0000: nop IL_0001: ldnull IL_0002: ret @@ -113,13 +115,13 @@ [2] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_2, [3] bool V_3, [4] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_4) - .line 19,19 : 1,28 + .line 19,19 : 1,28 IL_0000: nop IL_0001: newobj instance void [mscorlib]System.Object::.ctor() IL_0006: dup IL_0007: stsfld object ''.$Lock01::o@19 IL_000c: stloc.0 - .line 20,20 : 1,23 + .line 20,20 : 1,23 IL_000d: call object Lock01::get_o() IL_0012: stloc.1 IL_0013: newobj instance void Lock01/clo@20::.ctor() @@ -148,17 +150,17 @@ IL_0033: br.s IL_003e - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0035: ldloc.1 IL_0036: call void [mscorlib]System.Threading.Monitor::Exit(object) IL_003b: ldnull IL_003c: pop IL_003d: endfinally - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_003e: ldnull IL_003f: pop IL_0040: endfinally - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 } // end handler IL_0041: ldloc.s V_4 IL_0043: pop diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/NoBoxingOnDispose01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/NoBoxingOnDispose01.il.bsl index b5ce587911d..e4d41c26ed5 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/NoBoxingOnDispose01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/NoBoxingOnDispose01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16774 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly NoBoxingOnDispose01 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.NoBoxingOnDispose01 { - // Offset: 0x00000000 Length: 0x0000023E + // Offset: 0x00000000 Length: 0x0000021A } .mresource public FSharpOptimizationData.NoBoxingOnDispose01 { - // Offset: 0x00000248 Length: 0x0000007F + // Offset: 0x00000220 Length: 0x0000007F } .module NoBoxingOnDispose01.exe -// MVID: {4DAC0DDE-4EA9-C934-A745-0383DE0DAC4D} +// MVID: {5772D758-4EA9-C934-A745-038358D77257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000380000 +// Image base: 0x01340000 // =============== CLASS MEMBERS DECLARATION =================== @@ -60,11 +60,11 @@ [2] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_2, [3] !!T a) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 6,6 : 12,13 + .line 6,6 : 3,16 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\NoBoxingOnDispose01.fs' IL_0000: nop IL_0001: ldarg.0 IL_0002: stloc.0 - .line 6,6 : 3,16 + .line 6,6 : 3,16 '' IL_0003: ldloc.0 IL_0004: callvirt instance valuetype [mscorlib]System.Collections.Generic.List`1/Enumerator class [mscorlib]System.Collections.Generic.List`1::GetEnumerator() IL_0009: stloc.1 @@ -74,11 +74,11 @@ IL_000c: call instance bool valuetype [mscorlib]System.Collections.Generic.List`1/Enumerator::MoveNext() IL_0011: brfalse.s IL_001e - .line 7,7 : 3,5 + .line 6,6 : 3,16 '' IL_0013: ldloca.s V_1 IL_0015: call instance !0 valuetype [mscorlib]System.Collections.Generic.List`1/Enumerator::get_Current() IL_001a: stloc.3 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 '' IL_001b: nop IL_001c: br.s IL_000a @@ -95,7 +95,7 @@ IL_002f: ldnull IL_0030: pop IL_0031: endfinally - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 '' } // end handler IL_0032: ldloc.2 IL_0033: pop diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Seq_for_all01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Seq_for_all01.il.bsl index acfd443f8f8..8bd00260abd 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Seq_for_all01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Seq_for_all01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16774 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly Seq_for_all01 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Seq_for_all01 { - // Offset: 0x00000000 Length: 0x000001CF + // Offset: 0x00000000 Length: 0x000001AB } .mresource public FSharpOptimizationData.Seq_for_all01 { - // Offset: 0x000001D8 Length: 0x00000072 + // Offset: 0x000001B0 Length: 0x00000072 } .module Seq_for_all01.exe -// MVID: {4DAC0DEB-D30D-BA80-A745-0383EB0DAC4D} +// MVID: {5775B182-D30D-BA80-A745-038382B17557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000600000 +// Image base: 0x00F10000 // =============== CLASS MEMBERS DECLARATION =================== @@ -57,6 +57,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -70,7 +72,7 @@ // Code size 14 (0xe) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 31,47 + .line 5,5 : 31,47 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\Seq_for_all01.fs' IL_0000: nop IL_0001: ldc.i4.1 IL_0002: brtrue.s IL_0006 @@ -79,15 +81,15 @@ IL_0006: br.s IL_000b - .line 5,5 : 48,50 - .line 100001,100001 : 0,0 + .line 5,5 : 48,50 + .line 100001,100001 : 0,0 IL_0008: nop IL_0009: br.s IL_000c - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_000b: nop - .line 6,6 : 31,35 + .line 6,6 : 31,35 IL_000c: ldc.i4.1 IL_000d: ret } // end of method q@4::Invoke @@ -125,7 +127,7 @@ // Code size 35 (0x23) .maxstack 5 .locals init ([0] bool q) - .line 4,7 : 1,28 + .line 4,7 : 1,28 IL_0000: nop IL_0001: newobj instance void Seq_for_all01/q@4::.ctor() IL_0006: ldc.i4.1 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Structs02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Structs02.il.bsl index 9e6069dc48d..a6ea2faa56d 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Structs02.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Structs02.il.bsl @@ -103,11 +103,11 @@ IL_001e: br.s IL_0022 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0020: ldc.i4.m1 IL_0021: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0022: ldloc.2 IL_0023: ldloc.3 IL_0024: cgt @@ -120,7 +120,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 - .line 6,6 : 6,11 '' + .line 6,6 : 6,11 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -141,7 +141,7 @@ [2] class [mscorlib]System.Collections.IComparer V_2, [3] int32 V_3, [4] int32 V_4) - .line 6,6 : 6,11 '' + .line 6,6 : 6,11 IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any Experiment.Test/Repro @@ -164,11 +164,11 @@ IL_0023: br.s IL_0027 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0025: ldc.i4.m1 IL_0026: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0027: ldloc.3 IL_0028: ldloc.s V_4 IL_002a: cgt @@ -183,7 +183,7 @@ .maxstack 7 .locals init ([0] int32 V_0, [1] class [mscorlib]System.Collections.IEqualityComparer V_1) - .line 6,6 : 6,11 '' + .line 6,6 : 6,11 IL_0000: nop IL_0001: ldc.i4.0 IL_0002: stloc.0 @@ -212,7 +212,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 6,6 : 6,11 '' + .line 6,6 : 6,11 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -264,14 +264,14 @@ [1] valuetype Experiment.Test/Repro& V_1, [2] int32 V_2, [3] int32 i) - .line 9,14 : 5,6 '' + .line 9,14 : 5,6 IL_0000: nop IL_0001: ldarg.0 - .line 10,10 : 9,26 '' + .line 10,10 : 9,26 IL_0002: ldc.i4.0 IL_0003: stloc.0 IL_0004: stloc.1 - .line 11,11 : 9,31 '' + .line 11,11 : 9,31 IL_0005: ldc.i4.0 IL_0006: stloc.3 IL_0007: ldarg.1 @@ -282,7 +282,7 @@ IL_000c: ldloc.3 IL_000d: blt.s IL_001e - .line 12,12 : 11,20 '' + .line 12,12 : 11,20 IL_000f: ldc.i4.s 26 IL_0011: ldloc.0 IL_0012: mul @@ -291,7 +291,7 @@ IL_0015: ldc.i4.1 IL_0016: add IL_0017: stloc.3 - .line 11,11 : 20,28 '' + .line 11,11 : 20,28 IL_0018: ldloc.3 IL_0019: ldloc.2 IL_001a: ldc.i4.1 @@ -299,7 +299,7 @@ IL_001c: bne.un.s IL_000f IL_001e: ldloc.1 - .line 13,13 : 9,10 '' + .line 13,13 : 9,10 IL_001f: ldloc.0 IL_0020: stfld int32 Experiment.Test/Repro::hash@ IL_0025: ret @@ -312,7 +312,7 @@ // Code size 19 (0x13) .maxstack 4 .locals init ([0] valuetype Experiment.Test/Repro& V_0) - .line 6,6 : 6,11 '' + .line 6,6 : 6,11 IL_0000: nop IL_0001: ldarga.s obj IL_0003: stloc.0 @@ -363,12 +363,12 @@ // Code size 17 (0x11) .maxstack 3 .locals init ([0] valuetype Experiment.Test/Repro t) - .line 17,17 : 5,22 '' + .line 17,17 : 5,22 IL_0000: nop IL_0001: ldc.i4.s 42 IL_0003: newobj instance void Experiment.Test/Repro::.ctor(int32) IL_0008: stloc.0 - .line 18,18 : 5,11 '' + .line 18,18 : 5,11 IL_0009: ldloca.s t IL_000b: ldfld int32 Experiment.Test/Repro::hash@ IL_0010: ret diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Structs02.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Structs02.il.netfx4.bsl index 3902b61d2f4..d506c5afa22 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Structs02.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Structs02.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.33440 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:1:0 + .ver 4:4:1:0 } .assembly Structs02 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Structs02 { - // Offset: 0x00000000 Length: 0x00000793 + // Offset: 0x00000000 Length: 0x00000787 } .mresource public FSharpOptimizationData.Structs02 { - // Offset: 0x00000798 Length: 0x00000237 + // Offset: 0x00000790 Length: 0x00000237 } .module Structs02.exe -// MVID: {527154F7-7040-5E27-A745-0383F7547152} +// MVID: {5772D77A-7040-5E27-A745-03837AD77257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00A80000 +// Image base: 0x005B0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -83,7 +83,7 @@ [2] int32 V_2, [3] int32 V_3) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 6,6 : 6,11 'C:\\en\\fsharp\\src\\qa\\md\\src\\fsh\\src\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\Structs02.fs' + .line 6,6 : 6,11 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\Structs02.fs' IL_0000: nop IL_0001: ldarga.s obj IL_0003: stloc.0 @@ -103,11 +103,11 @@ IL_001e: br.s IL_0022 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0020: ldc.i4.m1 IL_0021: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0022: ldloc.2 IL_0023: ldloc.3 IL_0024: cgt @@ -120,7 +120,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 - .line 6,6 : 6,11 '' + .line 6,6 : 6,11 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -141,7 +141,7 @@ [2] class [mscorlib]System.Collections.IComparer V_2, [3] int32 V_3, [4] int32 V_4) - .line 6,6 : 6,11 '' + .line 6,6 : 6,11 IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any Experiment.Test/Repro @@ -164,11 +164,11 @@ IL_0023: br.s IL_0027 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0025: ldc.i4.m1 IL_0026: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0027: ldloc.3 IL_0028: ldloc.s V_4 IL_002a: cgt @@ -183,7 +183,7 @@ .maxstack 7 .locals init ([0] int32 V_0, [1] class [mscorlib]System.Collections.IEqualityComparer V_1) - .line 6,6 : 6,11 '' + .line 6,6 : 6,11 IL_0000: nop IL_0001: ldc.i4.0 IL_0002: stloc.0 @@ -212,7 +212,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 6,6 : 6,11 '' + .line 6,6 : 6,11 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -264,14 +264,14 @@ [1] valuetype Experiment.Test/Repro& V_1, [2] int32 V_2, [3] int32 i) - .line 9,14 : 5,6 '' + .line 9,14 : 5,6 IL_0000: nop IL_0001: ldarg.0 - .line 10,10 : 9,26 '' + .line 10,10 : 9,26 IL_0002: ldc.i4.0 IL_0003: stloc.0 IL_0004: stloc.1 - .line 11,11 : 9,31 '' + .line 11,11 : 9,31 IL_0005: ldc.i4.0 IL_0006: stloc.3 IL_0007: ldarg.1 @@ -282,7 +282,7 @@ IL_000c: ldloc.3 IL_000d: blt.s IL_001e - .line 12,12 : 11,20 '' + .line 12,12 : 11,20 IL_000f: ldc.i4.s 26 IL_0011: ldloc.0 IL_0012: mul @@ -291,7 +291,7 @@ IL_0015: ldc.i4.1 IL_0016: add IL_0017: stloc.3 - .line 11,11 : 20,28 '' + .line 11,11 : 9,31 '' IL_0018: ldloc.3 IL_0019: ldloc.2 IL_001a: ldc.i4.1 @@ -299,7 +299,7 @@ IL_001c: bne.un.s IL_000f IL_001e: ldloc.1 - .line 13,13 : 9,10 '' + .line 13,13 : 9,10 IL_001f: ldloc.0 IL_0020: stfld int32 Experiment.Test/Repro::hash@ IL_0025: ret @@ -312,7 +312,7 @@ // Code size 19 (0x13) .maxstack 4 .locals init ([0] valuetype Experiment.Test/Repro& V_0) - .line 6,6 : 6,11 '' + .line 6,6 : 6,11 IL_0000: nop IL_0001: ldarga.s obj IL_0003: stloc.0 @@ -363,12 +363,12 @@ // Code size 17 (0x11) .maxstack 3 .locals init ([0] valuetype Experiment.Test/Repro t) - .line 17,17 : 5,22 '' + .line 17,17 : 5,22 IL_0000: nop IL_0001: ldc.i4.s 42 IL_0003: newobj instance void Experiment.Test/Repro::.ctor(int32) IL_0008: stloc.0 - .line 18,18 : 5,11 '' + .line 18,18 : 5,11 IL_0009: ldloca.s t IL_000b: ldfld int32 Experiment.Test/Repro::hash@ IL_0010: ret diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/StructsAsArrayElements01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/StructsAsArrayElements01.il.bsl deleted file mode 100644 index 3a5a3809104..00000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/StructsAsArrayElements01.il.bsl +++ /dev/null @@ -1,366 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly StructsAsArrayElements01 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.StructsAsArrayElements01 -{ - // Offset: 0x00000000 Length: 0x00000770 -} -.mresource public FSharpOptimizationData.StructsAsArrayElements01 -{ - // Offset: 0x00000778 Length: 0x0000022C -} -.module StructsAsArrayElements01.dll -// MVID: {4BEB2878-29F3-6E68-A745-03837828EB4B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x00250000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed StructsAsArrayElements01 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class sequential ansi serializable sealed nested public T - extends [mscorlib]System.ValueType - implements class [mscorlib]System.IEquatable`1, - [mscorlib]System.Collections.IStructuralEquatable, - class [mscorlib]System.IComparable`1, - [mscorlib]System.IComparable, - [mscorlib]System.Collections.IStructuralComparable - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.StructAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 03 00 00 00 00 00 ) - .field public int32 i - .method public hidebysig virtual final - instance int32 CompareTo(valuetype StructsAsArrayElements01/T obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 39 (0x27) - .maxstack 4 - .locals init ([0] valuetype StructsAsArrayElements01/T& V_0, - [1] class [mscorlib]System.Collections.IComparer V_1, - [2] int32 V_2, - [3] int32 V_3) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 7,7 : 6,7 - IL_0000: nop - IL_0001: ldarga.s obj - IL_0003: stloc.0 - IL_0004: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0009: stloc.1 - IL_000a: ldarg.0 - IL_000b: ldfld int32 StructsAsArrayElements01/T::i - IL_0010: stloc.2 - IL_0011: ldloc.0 - IL_0012: ldfld int32 StructsAsArrayElements01/T::i - IL_0017: stloc.3 - IL_0018: ldloc.2 - IL_0019: ldloc.3 - IL_001a: bge.s IL_001e - - IL_001c: br.s IL_0020 - - IL_001e: br.s IL_0022 - - .line 100001,100001 : 0,0 - IL_0020: ldc.i4.m1 - IL_0021: ret - - .line 100001,100001 : 0,0 - IL_0022: ldloc.2 - IL_0023: ldloc.3 - IL_0024: cgt - IL_0026: ret - } // end of method T::CompareTo - - .method public hidebysig virtual final - instance int32 CompareTo(object obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 14 (0xe) - .maxstack 4 - .line 7,7 : 6,7 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldarg.1 - IL_0003: unbox.any StructsAsArrayElements01/T - IL_0008: call instance int32 StructsAsArrayElements01/T::CompareTo(valuetype StructsAsArrayElements01/T) - IL_000d: ret - } // end of method T::CompareTo - - .method public hidebysig virtual final - instance int32 CompareTo(object obj, - class [mscorlib]System.Collections.IComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 45 (0x2d) - .maxstack 4 - .locals init ([0] valuetype StructsAsArrayElements01/T V_0, - [1] valuetype StructsAsArrayElements01/T& V_1, - [2] class [mscorlib]System.Collections.IComparer V_2, - [3] int32 V_3, - [4] int32 V_4) - .line 7,7 : 6,7 - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: unbox.any StructsAsArrayElements01/T - IL_0007: stloc.0 - IL_0008: ldloca.s V_0 - IL_000a: stloc.1 - IL_000b: ldarg.2 - IL_000c: stloc.2 - IL_000d: ldarg.0 - IL_000e: ldfld int32 StructsAsArrayElements01/T::i - IL_0013: stloc.3 - IL_0014: ldloc.1 - IL_0015: ldfld int32 StructsAsArrayElements01/T::i - IL_001a: stloc.s V_4 - IL_001c: ldloc.3 - IL_001d: ldloc.s V_4 - IL_001f: bge.s IL_0023 - - IL_0021: br.s IL_0025 - - IL_0023: br.s IL_0027 - - .line 100001,100001 : 0,0 - IL_0025: ldc.i4.m1 - IL_0026: ret - - .line 100001,100001 : 0,0 - IL_0027: ldloc.3 - IL_0028: ldloc.s V_4 - IL_002a: cgt - IL_002c: ret - } // end of method T::CompareTo - - .method public hidebysig virtual final - instance int32 GetHashCode(class [mscorlib]System.Collections.IEqualityComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 28 (0x1c) - .maxstack 7 - .locals init ([0] int32 V_0, - [1] class [mscorlib]System.Collections.IEqualityComparer V_1) - .line 7,7 : 6,7 - IL_0000: nop - IL_0001: ldc.i4.0 - IL_0002: stloc.0 - IL_0003: ldc.i4 0x9e3779b9 - IL_0008: ldarg.1 - IL_0009: stloc.1 - IL_000a: ldarg.0 - IL_000b: ldfld int32 StructsAsArrayElements01/T::i - IL_0010: ldloc.0 - IL_0011: ldc.i4.6 - IL_0012: shl - IL_0013: ldloc.0 - IL_0014: ldc.i4.2 - IL_0015: shr - IL_0016: add - IL_0017: add - IL_0018: add - IL_0019: stloc.0 - IL_001a: ldloc.0 - IL_001b: ret - } // end of method T::GetHashCode - - .method public hidebysig virtual final - instance int32 GetHashCode() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 13 (0xd) - .maxstack 4 - .line 7,7 : 6,7 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() - IL_0007: call instance int32 StructsAsArrayElements01/T::GetHashCode(class [mscorlib]System.Collections.IEqualityComparer) - IL_000c: ret - } // end of method T::GetHashCode - - .method public hidebysig virtual final - instance bool Equals(object obj, - class [mscorlib]System.Collections.IEqualityComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 40 (0x28) - .maxstack 4 - .locals init (valuetype StructsAsArrayElements01/T V_0, - valuetype StructsAsArrayElements01/T& V_1, - class [mscorlib]System.Collections.IEqualityComparer V_2) - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::TypeTestGeneric(object) - IL_0007: brtrue.s IL_000b - - IL_0009: br.s IL_0026 - - IL_000b: ldarg.1 - IL_000c: unbox.any StructsAsArrayElements01/T - IL_0011: stloc.0 - IL_0012: ldloca.s V_0 - IL_0014: stloc.1 - IL_0015: ldarg.2 - IL_0016: stloc.2 - IL_0017: ldarg.0 - IL_0018: ldfld int32 StructsAsArrayElements01/T::i - IL_001d: ldloc.1 - IL_001e: ldfld int32 StructsAsArrayElements01/T::i - IL_0023: ceq - IL_0025: ret - - IL_0026: ldc.i4.0 - IL_0027: ret - } // end of method T::Equals - - .method public instance void Set(int32 i) cil managed - { - // Code size 9 (0x9) - .maxstack 4 - .line 9,9 : 31,42 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldarg.1 - IL_0003: stfld int32 StructsAsArrayElements01/T::i - IL_0008: ret - } // end of method T::Set - - .method public hidebysig virtual final - instance bool Equals(valuetype StructsAsArrayElements01/T obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 19 (0x13) - .maxstack 4 - .locals init ([0] valuetype StructsAsArrayElements01/T& V_0) - .line 7,7 : 6,7 - IL_0000: nop - IL_0001: ldarga.s obj - IL_0003: stloc.0 - IL_0004: ldarg.0 - IL_0005: ldfld int32 StructsAsArrayElements01/T::i - IL_000a: ldloc.0 - IL_000b: ldfld int32 StructsAsArrayElements01/T::i - IL_0010: ceq - IL_0012: ret - } // end of method T::Equals - - .method public hidebysig virtual final - instance bool Equals(object obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 28 (0x1c) - .maxstack 4 - .locals init (valuetype StructsAsArrayElements01/T V_0) - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::TypeTestGeneric(object) - IL_0007: brtrue.s IL_000b - - IL_0009: br.s IL_001a - - IL_000b: ldarg.1 - IL_000c: unbox.any StructsAsArrayElements01/T - IL_0011: stloc.0 - IL_0012: ldarg.0 - IL_0013: ldloc.0 - IL_0014: call instance bool StructsAsArrayElements01/T::Equals(valuetype StructsAsArrayElements01/T) - IL_0019: ret - - IL_001a: ldc.i4.0 - IL_001b: ret - } // end of method T::Equals - - } // end of class T - - .method public specialname static valuetype StructsAsArrayElements01/T[] - get_a() cil managed - { - // Code size 6 (0x6) - .maxstack 4 - IL_0000: ldsfld valuetype StructsAsArrayElements01/T[] ''.$StructsAsArrayElements01::a@11 - IL_0005: ret - } // end of method StructsAsArrayElements01::get_a - - .property valuetype StructsAsArrayElements01/T[] - a() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) - .get valuetype StructsAsArrayElements01/T[] StructsAsArrayElements01::get_a() - } // end of property StructsAsArrayElements01::a -} // end of class StructsAsArrayElements01 - -.class private abstract auto ansi sealed ''.$StructsAsArrayElements01 - extends [mscorlib]System.Object -{ - .field static assembly initonly valuetype StructsAsArrayElements01/T[] a@11 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .field static assembly int32 init@ - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method private specialname rtspecialname static - void .cctor() cil managed - { - // Code size 44 (0x2c) - .maxstack 4 - .locals init ([0] valuetype StructsAsArrayElements01/T[] a, - [1] valuetype StructsAsArrayElements01/T V_1) - .line 11,11 : 1,48 - IL_0000: nop - IL_0001: ldc.i4.s 10 - IL_0003: ldloca.s V_1 - IL_0005: initobj StructsAsArrayElements01/T - IL_000b: ldloc.1 - IL_000c: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.ArrayModule::Create(int32, - !!0) - IL_0011: dup - IL_0012: stsfld valuetype StructsAsArrayElements01/T[] ''.$StructsAsArrayElements01::a@11 - IL_0017: stloc.0 - .line 12,12 : 1,13 - IL_0018: call valuetype StructsAsArrayElements01/T[] StructsAsArrayElements01::get_a() - IL_001d: ldc.i4.0 - IL_001e: ldelema StructsAsArrayElements01/T - IL_0023: ldc.i4.s 27 - IL_0025: call instance void StructsAsArrayElements01/T::Set(int32) - IL_002a: nop - IL_002b: ret - } // end of method $StructsAsArrayElements01::.cctor - -} // end of class ''.$StructsAsArrayElements01 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/generictypestaticfield01.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/generictypestaticfield01.il.netfx4.bsl index cba3637e06d..c9f17d15264 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/generictypestaticfield01.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/generictypestaticfield01.il.netfx4.bsl @@ -77,14 +77,14 @@ { // Code size 20 (0x14) .maxstack 8 - .line 3,3 : 10,41 '' + .line 3,3 : 10,41 IL_0000: nop IL_0001: newobj instance void class GenericTypeStaticField01/Foo`1::.ctor() IL_0006: stsfld class GenericTypeStaticField01/Foo`1 class GenericTypeStaticField01/Foo`1::theInstance IL_000b: ldc.i4.1 IL_000c: volatile. IL_000e: stsfld int32 class GenericTypeStaticField01/Foo`1::init@2 - .line 2,2 : 6,9 '' + .line 2,2 : 6,9 IL_0013: ret } // end of method Foo`1::.cctor @@ -93,7 +93,7 @@ { // Code size 27 (0x1b) .maxstack 8 - .line 4,4 : 28,39 '' + .line 4,4 : 28,39 IL_0000: volatile. IL_0002: ldsfld int32 class GenericTypeStaticField01/Foo`1::init@2 IL_0007: ldc.i4.1 @@ -128,7 +128,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 6,6 : 6,9 '' + .line 6,6 : 6,9 IL_0000: ldarg.0 IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() IL_0006: ldarg.0 @@ -142,14 +142,14 @@ { // Code size 20 (0x14) .maxstack 8 - .line 7,7 : 10,44 '' + .line 7,7 : 10,44 IL_0000: nop IL_0001: newobj instance void class GenericTypeStaticField01/Bar`2::.ctor() IL_0006: stsfld class GenericTypeStaticField01/Bar`2 class GenericTypeStaticField01/Bar`2::theInstance IL_000b: ldc.i4.1 IL_000c: volatile. IL_000e: stsfld int32 class GenericTypeStaticField01/Bar`2::'init@6-1' - .line 6,6 : 6,9 '' + .line 6,6 : 6,9 IL_0013: ret } // end of method Bar`2::.cctor @@ -158,7 +158,7 @@ { // Code size 27 (0x1b) .maxstack 8 - .line 8,8 : 28,39 '' + .line 8,8 : 28,39 IL_0000: volatile. IL_0002: ldsfld int32 class GenericTypeStaticField01/Bar`2::'init@6-1' IL_0007: ldc.i4.1 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation05.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation05.il.bsl index 6f74e89bfff..682b8b7b134 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation05.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation05.il.bsl @@ -73,7 +73,7 @@ IL_000a: ldc.i4.1 IL_000b: volatile. IL_000d: stfld int32 Mutation05/C::x - .line 2,2 : 6,7 '' + .line 2,2 : 6,7 IL_0012: ret } // end of method C::.ctor @@ -82,7 +82,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 6,6 : 32,33 '' + .line 6,6 : 32,33 IL_0000: nop IL_0001: ldarg.0 IL_0002: volatile. @@ -95,7 +95,7 @@ { // Code size 11 (0xb) .maxstack 8 - .line 6,6 : 46,52 '' + .line 6,6 : 46,52 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -123,7 +123,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 9,9 : 6,13 '' + .line 9,9 : 6,13 IL_0000: ldarg.0 IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() IL_0006: ldarg.0 @@ -137,7 +137,7 @@ { // Code size 33 (0x21) .maxstack 8 - .line 13,13 : 34,35 '' + .line 13,13 : 34,35 IL_0000: volatile. IL_0002: ldsfld int32 Mutation05/StaticC::init@9 IL_0007: ldc.i4.1 @@ -147,15 +147,15 @@ IL_000c: br.s IL_0017 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_000e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit() IL_0013: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0014: nop IL_0015: br.s IL_0018 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0017: nop IL_0018: nop IL_0019: volatile. @@ -168,7 +168,7 @@ { // Code size 34 (0x22) .maxstack 8 - .line 13,13 : 48,54 '' + .line 13,13 : 48,54 IL_0000: volatile. IL_0002: ldsfld int32 Mutation05/StaticC::init@9 IL_0007: ldc.i4.1 @@ -178,15 +178,15 @@ IL_000c: br.s IL_0017 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_000e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit() IL_0013: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0014: nop IL_0015: br.s IL_0018 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0017: nop IL_0018: nop IL_0019: ldarg.0 @@ -200,7 +200,7 @@ { // Code size 13 (0xd) .maxstack 8 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldc.i4.0 IL_0001: stsfld int32 ''.$Mutation05::init@ IL_0006: ldsfld int32 ''.$Mutation05::init@ @@ -229,7 +229,7 @@ .entrypoint // Code size 18 (0x12) .maxstack 8 - .line 11,11 : 12,29 '' + .line 11,11 : 12,29 IL_0000: nop IL_0001: ldc.i4.1 IL_0002: volatile. @@ -237,7 +237,7 @@ IL_0009: ldc.i4.1 IL_000a: volatile. IL_000c: stsfld int32 Mutation05/StaticC::init@9 - .line 9,9 : 6,13 '' + .line 9,9 : 6,13 IL_0011: ret } // end of method $Mutation05::main@ diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Aggregates01.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Aggregates01.il.netfx4.bsl index ea1deb6afa5..a38bcd2b311 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Aggregates01.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Aggregates01.il.netfx4.bsl @@ -133,25 +133,25 @@ IL_001f: br.s IL_0027 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br.s IL_009a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0024: nop IL_0025: br.s IL_0089 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br IL_00bb - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002d: nop - .line 12,12 : 9,33 '' + .line 12,12 : 9,33 IL_002e: ldarg.0 IL_002f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_factorsOf300() IL_0034: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 @@ -160,7 +160,7 @@ IL_0043: ldarg.0 IL_0044: ldc.i4.1 IL_0045: stfld int32 Linq101Aggregates01/uniqueFactors@12::pc - .line 12,12 : 9,33 '' + .line 12,12 : 9,33 IL_004a: ldarg.0 IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' IL_0050: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -171,7 +171,7 @@ IL_0059: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' IL_005e: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0063: stfld int32 Linq101Aggregates01/uniqueFactors@12::_arg1 - .line 12,12 : 9,33 '' + .line 12,12 : 9,33 IL_0068: ldarg.0 IL_0069: ldarg.0 IL_006a: ldfld int32 Linq101Aggregates01/uniqueFactors@12::_arg1 @@ -179,7 +179,7 @@ IL_0074: ldarg.0 IL_0075: ldc.i4.2 IL_0076: stfld int32 Linq101Aggregates01/uniqueFactors@12::pc - .line 13,13 : 9,17 '' + .line 13,13 : 9,17 IL_007b: ldarg.0 IL_007c: ldarg.0 IL_007d: ldfld int32 Linq101Aggregates01/uniqueFactors@12::n @@ -190,18 +190,18 @@ IL_0089: ldarg.0 IL_008a: ldc.i4.0 IL_008b: stfld int32 Linq101Aggregates01/uniqueFactors@12::n - .line 12,12 : 9,33 '' + .line 12,12 : 9,33 IL_0090: ldarg.0 IL_0091: ldc.i4.0 IL_0092: stfld int32 Linq101Aggregates01/uniqueFactors@12::_arg1 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0097: nop IL_0098: br.s IL_004a IL_009a: ldarg.0 IL_009b: ldc.i4.3 IL_009c: stfld int32 Linq101Aggregates01/uniqueFactors@12::pc - .line 12,12 : 9,33 '' + .line 12,12 : 9,33 IL_00a1: ldarg.0 IL_00a2: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' IL_00a7: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -227,7 +227,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -238,13 +238,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -265,30 +265,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -297,7 +297,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -314,18 +314,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 12,12 : 9,33 '' + .line 12,12 : 9,33 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -338,11 +338,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0095: ret } // end of method uniqueFactors@12::Close @@ -483,7 +483,7 @@ { // Code size 196 (0xc4) .maxstack 6 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/numSum@21::pc IL_0006: ldc.i4.1 @@ -500,25 +500,25 @@ IL_001f: br.s IL_0027 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br.s IL_009a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0024: nop IL_0025: br.s IL_0089 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br IL_00bb - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002d: nop - .line 21,21 : 9,28 '' + .line 21,21 : 9,28 IL_002e: ldarg.0 IL_002f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_numbers() IL_0034: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 @@ -527,7 +527,7 @@ IL_0043: ldarg.0 IL_0044: ldc.i4.1 IL_0045: stfld int32 Linq101Aggregates01/numSum@21::pc - .line 21,21 : 9,28 '' + .line 21,21 : 9,28 IL_004a: ldarg.0 IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' IL_0050: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -538,7 +538,7 @@ IL_0059: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' IL_005e: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0063: stfld int32 Linq101Aggregates01/numSum@21::_arg1 - .line 21,21 : 9,28 '' + .line 21,21 : 9,28 IL_0068: ldarg.0 IL_0069: ldarg.0 IL_006a: ldfld int32 Linq101Aggregates01/numSum@21::_arg1 @@ -546,7 +546,7 @@ IL_0074: ldarg.0 IL_0075: ldc.i4.2 IL_0076: stfld int32 Linq101Aggregates01/numSum@21::pc - .line 22,22 : 9,16 '' + .line 22,22 : 9,16 IL_007b: ldarg.0 IL_007c: ldarg.0 IL_007d: ldfld int32 Linq101Aggregates01/numSum@21::n @@ -557,18 +557,18 @@ IL_0089: ldarg.0 IL_008a: ldc.i4.0 IL_008b: stfld int32 Linq101Aggregates01/numSum@21::n - .line 21,21 : 9,28 '' + .line 21,21 : 9,28 IL_0090: ldarg.0 IL_0091: ldc.i4.0 IL_0092: stfld int32 Linq101Aggregates01/numSum@21::_arg1 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0097: nop IL_0098: br.s IL_004a IL_009a: ldarg.0 IL_009b: ldc.i4.3 IL_009c: stfld int32 Linq101Aggregates01/numSum@21::pc - .line 21,21 : 9,28 '' + .line 21,21 : 9,28 IL_00a1: ldarg.0 IL_00a2: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' IL_00a7: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -594,7 +594,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -605,13 +605,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -632,30 +632,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -664,7 +664,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -681,18 +681,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 21,21 : 9,28 '' + .line 21,21 : 9,28 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -705,11 +705,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0095: ret } // end of method numSum@21::Close @@ -813,7 +813,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 22,22 : 15,16 '' + .line 22,22 : 15,16 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -876,7 +876,7 @@ { // Code size 196 (0xc4) .maxstack 6 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/totalChars@30::pc IL_0006: ldc.i4.1 @@ -893,25 +893,25 @@ IL_001f: br.s IL_0027 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br.s IL_009a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0024: nop IL_0025: br.s IL_0089 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br IL_00bb - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002d: nop - .line 30,30 : 9,26 '' + .line 30,30 : 9,26 IL_002e: ldarg.0 IL_002f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_words() IL_0034: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 @@ -920,7 +920,7 @@ IL_0043: ldarg.0 IL_0044: ldc.i4.1 IL_0045: stfld int32 Linq101Aggregates01/totalChars@30::pc - .line 30,30 : 9,26 '' + .line 30,30 : 9,26 IL_004a: ldarg.0 IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' IL_0050: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -931,7 +931,7 @@ IL_0059: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' IL_005e: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0063: stfld string Linq101Aggregates01/totalChars@30::_arg1 - .line 30,30 : 9,26 '' + .line 30,30 : 9,26 IL_0068: ldarg.0 IL_0069: ldarg.0 IL_006a: ldfld string Linq101Aggregates01/totalChars@30::_arg1 @@ -939,7 +939,7 @@ IL_0074: ldarg.0 IL_0075: ldc.i4.2 IL_0076: stfld int32 Linq101Aggregates01/totalChars@30::pc - .line 31,31 : 9,25 '' + .line 31,31 : 9,25 IL_007b: ldarg.0 IL_007c: ldarg.0 IL_007d: ldfld string Linq101Aggregates01/totalChars@30::w @@ -950,18 +950,18 @@ IL_0089: ldarg.0 IL_008a: ldnull IL_008b: stfld string Linq101Aggregates01/totalChars@30::w - .line 30,30 : 9,26 '' + .line 30,30 : 9,26 IL_0090: ldarg.0 IL_0091: ldnull IL_0092: stfld string Linq101Aggregates01/totalChars@30::_arg1 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0097: nop IL_0098: br.s IL_004a IL_009a: ldarg.0 IL_009b: ldc.i4.3 IL_009c: stfld int32 Linq101Aggregates01/totalChars@30::pc - .line 30,30 : 9,26 '' + .line 30,30 : 9,26 IL_00a1: ldarg.0 IL_00a2: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' IL_00a7: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -987,7 +987,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -998,13 +998,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -1025,30 +1025,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -1057,7 +1057,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -1074,18 +1074,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 30,30 : 9,26 '' + .line 30,30 : 9,26 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -1098,11 +1098,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0095: ret } // end of method totalChars@30::Close @@ -1206,7 +1206,7 @@ { // Code size 8 (0x8) .maxstack 8 - .line 31,31 : 16,24 '' + .line 31,31 : 16,24 IL_0000: nop IL_0001: ldarg.1 IL_0002: callvirt instance int32 [mscorlib]System.String::get_Length() @@ -1238,11 +1238,11 @@ // Code size 18 (0x12) .maxstack 6 .locals init ([0] class [Utils]Utils/Product p) - .line 39,39 : 9,29 '' + .line 39,39 : 9,29 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 40,40 : 9,32 '' + .line 40,40 : 9,32 IL_0003: ldarg.0 IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Aggregates01/categories@39::builder@ IL_0009: ldloc.0 @@ -1271,7 +1271,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 40,40 : 20,21 '' + .line 40,40 : 20,21 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -1297,7 +1297,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 40,40 : 22,32 '' + .line 40,40 : 22,32 IL_0000: nop IL_0001: ldarg.1 IL_0002: tail. @@ -1367,7 +1367,7 @@ { // Code size 200 (0xc8) .maxstack 6 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/sum@42::pc IL_0006: ldc.i4.1 @@ -1384,25 +1384,25 @@ IL_001f: br.s IL_002a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br IL_009e - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br.s IL_008d - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002a: nop IL_002b: br IL_00bf - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0030: nop - .line 42,42 : 13,26 '' + .line 42,42 : 13,26 IL_0031: ldarg.0 IL_0032: ldarg.0 IL_0033: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/sum@42::g @@ -1412,7 +1412,7 @@ IL_0047: ldarg.0 IL_0048: ldc.i4.1 IL_0049: stfld int32 Linq101Aggregates01/sum@42::pc - .line 42,42 : 13,26 '' + .line 42,42 : 13,26 IL_004e: ldarg.0 IL_004f: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' IL_0054: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -1423,7 +1423,7 @@ IL_005d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' IL_0062: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0067: stfld class [Utils]Utils/Product Linq101Aggregates01/sum@42::_arg3 - .line 42,42 : 13,26 '' + .line 42,42 : 13,26 IL_006c: ldarg.0 IL_006d: ldarg.0 IL_006e: ldfld class [Utils]Utils/Product Linq101Aggregates01/sum@42::_arg3 @@ -1431,7 +1431,7 @@ IL_0078: ldarg.0 IL_0079: ldc.i4.2 IL_007a: stfld int32 Linq101Aggregates01/sum@42::pc - .line 43,43 : 13,33 '' + .line 43,43 : 13,33 IL_007f: ldarg.0 IL_0080: ldarg.0 IL_0081: ldfld class [Utils]Utils/Product Linq101Aggregates01/sum@42::x @@ -1442,18 +1442,18 @@ IL_008d: ldarg.0 IL_008e: ldnull IL_008f: stfld class [Utils]Utils/Product Linq101Aggregates01/sum@42::x - .line 42,42 : 13,26 '' + .line 42,42 : 13,26 IL_0094: ldarg.0 IL_0095: ldnull IL_0096: stfld class [Utils]Utils/Product Linq101Aggregates01/sum@42::_arg3 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_009b: nop IL_009c: br.s IL_004e IL_009e: ldarg.0 IL_009f: ldc.i4.3 IL_00a0: stfld int32 Linq101Aggregates01/sum@42::pc - .line 42,42 : 13,26 '' + .line 42,42 : 13,26 IL_00a5: ldarg.0 IL_00a6: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' IL_00ab: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -1479,7 +1479,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -1490,13 +1490,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -1517,30 +1517,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -1549,7 +1549,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -1566,18 +1566,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 42,42 : 13,26 '' + .line 42,42 : 13,26 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -1590,11 +1590,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0095: ret } // end of method sum@42::Close @@ -1701,7 +1701,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 43,43 : 19,33 '' + .line 43,43 : 19,33 IL_0000: nop IL_0001: ldarg.1 IL_0002: tail. @@ -1745,7 +1745,7 @@ [9] int32 V_9, [10] int32 V_10, [11] class [mscorlib]System.IDisposable V_11) - .line 40,40 : 38,39 '' + .line 40,40 : 38,39 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 @@ -1790,7 +1790,7 @@ IL_0050: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() IL_0055: brfalse.s IL_006d - .line 43,43 : 13,33 '' + .line 43,43 : 13,33 IL_0057: ldloc.s V_10 IL_0059: ldloc.s V_6 IL_005b: ldloc.s V_8 @@ -1798,7 +1798,7 @@ IL_0062: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) IL_0067: add.ovf IL_0068: stloc.s V_10 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_006a: nop IL_006b: br.s IL_004e @@ -1819,21 +1819,21 @@ IL_0082: br.s IL_008e - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0084: ldloc.s V_11 IL_0086: callvirt instance void [mscorlib]System.IDisposable::Dispose() IL_008b: ldnull IL_008c: pop IL_008d: endfinally - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_008e: ldnull IL_008f: pop IL_0090: endfinally - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler IL_0091: ldloc.s V_9 IL_0093: stloc.1 - .line 45,45 : 9,28 '' + .line 45,45 : 9,28 IL_0094: ldarg.0 IL_0095: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Aggregates01/'categories@40-3'::builder@ IL_009a: ldloc.0 @@ -1867,7 +1867,7 @@ .maxstack 6 .locals init ([0] class [System.Core]System.Linq.IGrouping`2 g, [1] int32 sum) - .line 45,45 : 17,27 '' + .line 45,45 : 17,27 IL_0000: ldarg.1 IL_0001: call instance !0 class [mscorlib]System.Tuple`2,int32>::get_Item1() IL_0006: stloc.0 @@ -1940,7 +1940,7 @@ { // Code size 196 (0xc4) .maxstack 6 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/minNum@49::pc IL_0006: ldc.i4.1 @@ -1957,25 +1957,25 @@ IL_001f: br.s IL_0027 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br.s IL_009a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0024: nop IL_0025: br.s IL_0089 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br IL_00bb - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002d: nop - .line 49,49 : 22,41 '' + .line 49,49 : 22,41 IL_002e: ldarg.0 IL_002f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_numbers() IL_0034: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 @@ -1984,7 +1984,7 @@ IL_0043: ldarg.0 IL_0044: ldc.i4.1 IL_0045: stfld int32 Linq101Aggregates01/minNum@49::pc - .line 49,49 : 22,41 '' + .line 49,49 : 22,41 IL_004a: ldarg.0 IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' IL_0050: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -1995,7 +1995,7 @@ IL_0059: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' IL_005e: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0063: stfld int32 Linq101Aggregates01/minNum@49::_arg1 - .line 49,49 : 22,41 '' + .line 49,49 : 22,41 IL_0068: ldarg.0 IL_0069: ldarg.0 IL_006a: ldfld int32 Linq101Aggregates01/minNum@49::_arg1 @@ -2003,7 +2003,7 @@ IL_0074: ldarg.0 IL_0075: ldc.i4.2 IL_0076: stfld int32 Linq101Aggregates01/minNum@49::pc - .line 49,49 : 42,49 '' + .line 49,49 : 42,49 IL_007b: ldarg.0 IL_007c: ldarg.0 IL_007d: ldfld int32 Linq101Aggregates01/minNum@49::n @@ -2014,18 +2014,18 @@ IL_0089: ldarg.0 IL_008a: ldc.i4.0 IL_008b: stfld int32 Linq101Aggregates01/minNum@49::n - .line 49,49 : 22,41 '' + .line 49,49 : 22,41 IL_0090: ldarg.0 IL_0091: ldc.i4.0 IL_0092: stfld int32 Linq101Aggregates01/minNum@49::_arg1 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0097: nop IL_0098: br.s IL_004a IL_009a: ldarg.0 IL_009b: ldc.i4.3 IL_009c: stfld int32 Linq101Aggregates01/minNum@49::pc - .line 49,49 : 22,41 '' + .line 49,49 : 22,41 IL_00a1: ldarg.0 IL_00a2: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' IL_00a7: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -2051,7 +2051,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -2062,13 +2062,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -2089,30 +2089,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -2121,7 +2121,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -2138,18 +2138,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 49,49 : 22,41 '' + .line 49,49 : 22,41 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -2162,11 +2162,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0095: ret } // end of method minNum@49::Close @@ -2270,7 +2270,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 49,49 : 48,49 '' + .line 49,49 : 48,49 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -2333,7 +2333,7 @@ { // Code size 196 (0xc4) .maxstack 6 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/shortestWord@52::pc IL_0006: ldc.i4.1 @@ -2350,25 +2350,25 @@ IL_001f: br.s IL_0027 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br.s IL_009a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0024: nop IL_0025: br.s IL_0089 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br IL_00bb - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002d: nop - .line 52,52 : 28,45 '' + .line 52,52 : 28,45 IL_002e: ldarg.0 IL_002f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_words() IL_0034: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 @@ -2377,7 +2377,7 @@ IL_0043: ldarg.0 IL_0044: ldc.i4.1 IL_0045: stfld int32 Linq101Aggregates01/shortestWord@52::pc - .line 52,52 : 28,45 '' + .line 52,52 : 28,45 IL_004a: ldarg.0 IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' IL_0050: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -2388,7 +2388,7 @@ IL_0059: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' IL_005e: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0063: stfld string Linq101Aggregates01/shortestWord@52::_arg1 - .line 52,52 : 28,45 '' + .line 52,52 : 28,45 IL_0068: ldarg.0 IL_0069: ldarg.0 IL_006a: ldfld string Linq101Aggregates01/shortestWord@52::_arg1 @@ -2396,7 +2396,7 @@ IL_0074: ldarg.0 IL_0075: ldc.i4.2 IL_0076: stfld int32 Linq101Aggregates01/shortestWord@52::pc - .line 52,52 : 46,60 '' + .line 52,52 : 46,60 IL_007b: ldarg.0 IL_007c: ldarg.0 IL_007d: ldfld string Linq101Aggregates01/shortestWord@52::w @@ -2407,18 +2407,18 @@ IL_0089: ldarg.0 IL_008a: ldnull IL_008b: stfld string Linq101Aggregates01/shortestWord@52::w - .line 52,52 : 28,45 '' + .line 52,52 : 28,45 IL_0090: ldarg.0 IL_0091: ldnull IL_0092: stfld string Linq101Aggregates01/shortestWord@52::_arg1 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0097: nop IL_0098: br.s IL_004a IL_009a: ldarg.0 IL_009b: ldc.i4.3 IL_009c: stfld int32 Linq101Aggregates01/shortestWord@52::pc - .line 52,52 : 28,45 '' + .line 52,52 : 28,45 IL_00a1: ldarg.0 IL_00a2: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' IL_00a7: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -2444,7 +2444,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -2455,13 +2455,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -2482,30 +2482,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -2514,7 +2514,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -2531,18 +2531,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 52,52 : 28,45 '' + .line 52,52 : 28,45 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -2555,11 +2555,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0095: ret } // end of method shortestWord@52::Close @@ -2663,7 +2663,7 @@ { // Code size 8 (0x8) .maxstack 8 - .line 52,52 : 52,60 '' + .line 52,52 : 52,60 IL_0000: nop IL_0001: ldarg.1 IL_0002: callvirt instance int32 [mscorlib]System.String::get_Length() @@ -2695,11 +2695,11 @@ // Code size 18 (0x12) .maxstack 6 .locals init ([0] class [Utils]Utils/Product p) - .line 57,57 : 9,29 '' + .line 57,57 : 9,29 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 58,58 : 9,32 '' + .line 58,58 : 9,32 IL_0003: ldarg.0 IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Aggregates01/categories2@57::builder@ IL_0009: ldloc.0 @@ -2728,7 +2728,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 58,58 : 20,21 '' + .line 58,58 : 20,21 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -2754,7 +2754,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 58,58 : 22,32 '' + .line 58,58 : 22,32 IL_0000: nop IL_0001: ldarg.1 IL_0002: tail. @@ -2824,7 +2824,7 @@ { // Code size 200 (0xc8) .maxstack 6 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/min@59::pc IL_0006: ldc.i4.1 @@ -2841,25 +2841,25 @@ IL_001f: br.s IL_002a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br IL_009e - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br.s IL_008d - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002a: nop IL_002b: br IL_00bf - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0030: nop - .line 59,59 : 27,40 '' + .line 59,59 : 27,40 IL_0031: ldarg.0 IL_0032: ldarg.0 IL_0033: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/min@59::g @@ -2869,7 +2869,7 @@ IL_0047: ldarg.0 IL_0048: ldc.i4.1 IL_0049: stfld int32 Linq101Aggregates01/min@59::pc - .line 59,59 : 27,40 '' + .line 59,59 : 27,40 IL_004e: ldarg.0 IL_004f: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' IL_0054: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -2880,7 +2880,7 @@ IL_005d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' IL_0062: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0067: stfld class [Utils]Utils/Product Linq101Aggregates01/min@59::_arg3 - .line 59,59 : 27,40 '' + .line 59,59 : 27,40 IL_006c: ldarg.0 IL_006d: ldarg.0 IL_006e: ldfld class [Utils]Utils/Product Linq101Aggregates01/min@59::_arg3 @@ -2888,7 +2888,7 @@ IL_0078: ldarg.0 IL_0079: ldc.i4.2 IL_007a: stfld int32 Linq101Aggregates01/min@59::pc - .line 59,59 : 41,58 '' + .line 59,59 : 41,58 IL_007f: ldarg.0 IL_0080: ldarg.0 IL_0081: ldfld class [Utils]Utils/Product Linq101Aggregates01/min@59::x @@ -2899,18 +2899,18 @@ IL_008d: ldarg.0 IL_008e: ldnull IL_008f: stfld class [Utils]Utils/Product Linq101Aggregates01/min@59::x - .line 59,59 : 27,40 '' + .line 59,59 : 27,40 IL_0094: ldarg.0 IL_0095: ldnull IL_0096: stfld class [Utils]Utils/Product Linq101Aggregates01/min@59::_arg3 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_009b: nop IL_009c: br.s IL_004e IL_009e: ldarg.0 IL_009f: ldc.i4.3 IL_00a0: stfld int32 Linq101Aggregates01/min@59::pc - .line 59,59 : 27,40 '' + .line 59,59 : 27,40 IL_00a5: ldarg.0 IL_00a6: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' IL_00ab: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -2936,7 +2936,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -2947,13 +2947,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -2974,30 +2974,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -3006,7 +3006,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -3023,18 +3023,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 59,59 : 27,40 '' + .line 59,59 : 27,40 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -3047,11 +3047,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0095: ret } // end of method min@59::Close @@ -3158,7 +3158,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 59,59 : 47,58 '' + .line 59,59 : 47,58 IL_0000: nop IL_0001: ldarg.1 IL_0002: tail. @@ -3193,7 +3193,7 @@ .locals init ([0] class [System.Core]System.Linq.IGrouping`2 g, [1] valuetype [mscorlib]System.Decimal min, [2] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) - .line 58,58 : 38,39 '' + .line 58,58 : 38,39 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 @@ -3217,7 +3217,7 @@ IL_001f: callvirt instance !!2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::MinBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) IL_0024: stloc.1 - .line 60,60 : 9,28 '' + .line 60,60 : 9,28 IL_0025: ldarg.0 IL_0026: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Aggregates01/'categories2@58-3'::builder@ IL_002b: ldloc.0 @@ -3251,7 +3251,7 @@ .maxstack 6 .locals init ([0] class [System.Core]System.Linq.IGrouping`2 g, [1] valuetype [mscorlib]System.Decimal min) - .line 60,60 : 17,27 '' + .line 60,60 : 17,27 IL_0000: ldarg.1 IL_0001: call instance !0 class [mscorlib]System.Tuple`2,valuetype [mscorlib]System.Decimal>::get_Item1() IL_0006: stloc.0 @@ -3292,11 +3292,11 @@ // Code size 18 (0x12) .maxstack 6 .locals init ([0] class [Utils]Utils/Product p) - .line 66,66 : 9,29 '' + .line 66,66 : 9,29 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 67,67 : 9,32 '' + .line 67,67 : 9,32 IL_0003: ldarg.0 IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Aggregates01/categories3@66::builder@ IL_0009: ldloc.0 @@ -3325,7 +3325,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 67,67 : 20,21 '' + .line 67,67 : 20,21 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -3351,7 +3351,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 67,67 : 22,32 '' + .line 67,67 : 22,32 IL_0000: nop IL_0001: ldarg.1 IL_0002: tail. @@ -3380,7 +3380,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 68,68 : 46,57 '' + .line 68,68 : 46,57 IL_0000: nop IL_0001: ldarg.1 IL_0002: tail. @@ -3450,7 +3450,7 @@ { // Code size 200 (0xc8) .maxstack 6 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/cheapestProducts@69::pc IL_0006: ldc.i4.1 @@ -3467,25 +3467,25 @@ IL_001f: br.s IL_002a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br IL_009e - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br.s IL_008d - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002a: nop IL_002b: br IL_00bf - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0030: nop - .line 69,69 : 40,53 '' + .line 69,69 : 40,53 IL_0031: ldarg.0 IL_0032: ldarg.0 IL_0033: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/cheapestProducts@69::g @@ -3495,7 +3495,7 @@ IL_0047: ldarg.0 IL_0048: ldc.i4.1 IL_0049: stfld int32 Linq101Aggregates01/cheapestProducts@69::pc - .line 69,69 : 40,53 '' + .line 69,69 : 40,53 IL_004e: ldarg.0 IL_004f: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' IL_0054: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -3506,7 +3506,7 @@ IL_005d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' IL_0062: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0067: stfld class [Utils]Utils/Product Linq101Aggregates01/cheapestProducts@69::_arg3 - .line 69,69 : 40,53 '' + .line 69,69 : 40,53 IL_006c: ldarg.0 IL_006d: ldarg.0 IL_006e: ldfld class [Utils]Utils/Product Linq101Aggregates01/cheapestProducts@69::_arg3 @@ -3514,7 +3514,7 @@ IL_0078: ldarg.0 IL_0079: ldc.i4.2 IL_007a: stfld int32 Linq101Aggregates01/cheapestProducts@69::pc - .line 69,69 : 54,79 '' + .line 69,69 : 54,79 IL_007f: ldarg.0 IL_0080: ldarg.0 IL_0081: ldfld class [Utils]Utils/Product Linq101Aggregates01/cheapestProducts@69::x @@ -3525,18 +3525,18 @@ IL_008d: ldarg.0 IL_008e: ldnull IL_008f: stfld class [Utils]Utils/Product Linq101Aggregates01/cheapestProducts@69::x - .line 69,69 : 40,53 '' + .line 69,69 : 40,53 IL_0094: ldarg.0 IL_0095: ldnull IL_0096: stfld class [Utils]Utils/Product Linq101Aggregates01/cheapestProducts@69::_arg3 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_009b: nop IL_009c: br.s IL_004e IL_009e: ldarg.0 IL_009f: ldc.i4.3 IL_00a0: stfld int32 Linq101Aggregates01/cheapestProducts@69::pc - .line 69,69 : 40,53 '' + .line 69,69 : 40,53 IL_00a5: ldarg.0 IL_00a6: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' IL_00ab: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -3562,7 +3562,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -3573,13 +3573,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -3600,30 +3600,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -3632,7 +3632,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -3649,18 +3649,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 69,69 : 40,53 '' + .line 69,69 : 40,53 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -3673,11 +3673,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0095: ret } // end of method cheapestProducts@69::Close @@ -3788,7 +3788,7 @@ { // Code size 19 (0x13) .maxstack 8 - .line 69,69 : 61,78 '' + .line 69,69 : 61,78 IL_0000: nop IL_0001: ldarg.1 IL_0002: callvirt instance valuetype [mscorlib]System.Decimal [Utils]Utils/Product::get_UnitPrice() @@ -3827,11 +3827,11 @@ [1] valuetype [mscorlib]System.Decimal min, [2] class [mscorlib]System.Collections.Generic.IEnumerable`1 cheapestProducts, [3] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) - .line 67,67 : 38,39 '' + .line 67,67 : 38,39 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 68,68 : 9,58 '' + .line 68,68 : 9,58 IL_0003: ldloc.0 IL_0004: newobj instance void Linq101Aggregates01/'min@68-2'::.ctor() IL_0009: ldftn instance valuetype [mscorlib]System.Decimal Linq101Aggregates01/'min@68-2'::Invoke(class [Utils]Utils/Product) @@ -3840,7 +3840,7 @@ IL_0014: call valuetype [mscorlib]System.Decimal [System.Core]System.Linq.Enumerable::Min(class [mscorlib]System.Collections.Generic.IEnumerable`1, class [mscorlib]System.Func`2) IL_0019: stloc.1 - .line 69,69 : 13,29 '' + .line 69,69 : 13,29 IL_001a: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_001f: stloc.3 IL_0020: ldloc.3 @@ -3863,7 +3863,7 @@ class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) IL_003c: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerable`1 class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::get_Source() IL_0041: stloc.2 - .line 70,70 : 9,41 '' + .line 70,70 : 9,41 IL_0042: ldarg.0 IL_0043: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Aggregates01/'categories3@67-3'::builder@ IL_0048: ldloc.0 @@ -3900,7 +3900,7 @@ .locals init ([0] class [System.Core]System.Linq.IGrouping`2 g, [1] valuetype [mscorlib]System.Decimal min, [2] class [mscorlib]System.Collections.Generic.IEnumerable`1 cheapestProducts) - .line 70,70 : 17,40 '' + .line 70,70 : 17,40 IL_0000: ldarg.1 IL_0001: call instance !0 class [mscorlib]System.Tuple`3,valuetype [mscorlib]System.Decimal,class [mscorlib]System.Collections.Generic.IEnumerable`1>::get_Item1() IL_0006: stloc.0 @@ -3976,7 +3976,7 @@ { // Code size 196 (0xc4) .maxstack 6 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/maxNum@74::pc IL_0006: ldc.i4.1 @@ -3993,25 +3993,25 @@ IL_001f: br.s IL_0027 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br.s IL_009a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0024: nop IL_0025: br.s IL_0089 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br IL_00bb - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002d: nop - .line 74,74 : 22,41 '' + .line 74,74 : 22,41 IL_002e: ldarg.0 IL_002f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_numbers() IL_0034: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 @@ -4020,7 +4020,7 @@ IL_0043: ldarg.0 IL_0044: ldc.i4.1 IL_0045: stfld int32 Linq101Aggregates01/maxNum@74::pc - .line 74,74 : 22,41 '' + .line 74,74 : 22,41 IL_004a: ldarg.0 IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' IL_0050: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -4031,7 +4031,7 @@ IL_0059: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' IL_005e: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0063: stfld int32 Linq101Aggregates01/maxNum@74::_arg1 - .line 74,74 : 22,41 '' + .line 74,74 : 22,41 IL_0068: ldarg.0 IL_0069: ldarg.0 IL_006a: ldfld int32 Linq101Aggregates01/maxNum@74::_arg1 @@ -4039,7 +4039,7 @@ IL_0074: ldarg.0 IL_0075: ldc.i4.2 IL_0076: stfld int32 Linq101Aggregates01/maxNum@74::pc - .line 74,74 : 42,49 '' + .line 74,74 : 42,49 IL_007b: ldarg.0 IL_007c: ldarg.0 IL_007d: ldfld int32 Linq101Aggregates01/maxNum@74::n @@ -4050,18 +4050,18 @@ IL_0089: ldarg.0 IL_008a: ldc.i4.0 IL_008b: stfld int32 Linq101Aggregates01/maxNum@74::n - .line 74,74 : 22,41 '' + .line 74,74 : 22,41 IL_0090: ldarg.0 IL_0091: ldc.i4.0 IL_0092: stfld int32 Linq101Aggregates01/maxNum@74::_arg1 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0097: nop IL_0098: br.s IL_004a IL_009a: ldarg.0 IL_009b: ldc.i4.3 IL_009c: stfld int32 Linq101Aggregates01/maxNum@74::pc - .line 74,74 : 22,41 '' + .line 74,74 : 22,41 IL_00a1: ldarg.0 IL_00a2: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' IL_00a7: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -4087,7 +4087,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -4098,13 +4098,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -4125,30 +4125,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -4157,7 +4157,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -4174,18 +4174,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 74,74 : 22,41 '' + .line 74,74 : 22,41 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -4198,11 +4198,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0095: ret } // end of method maxNum@74::Close @@ -4306,7 +4306,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 74,74 : 48,49 '' + .line 74,74 : 48,49 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -4369,7 +4369,7 @@ { // Code size 196 (0xc4) .maxstack 6 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/longestLength@77::pc IL_0006: ldc.i4.1 @@ -4386,25 +4386,25 @@ IL_001f: br.s IL_0027 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br.s IL_009a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0024: nop IL_0025: br.s IL_0089 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br IL_00bb - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002d: nop - .line 77,77 : 29,46 '' + .line 77,77 : 29,46 IL_002e: ldarg.0 IL_002f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_words() IL_0034: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 @@ -4413,7 +4413,7 @@ IL_0043: ldarg.0 IL_0044: ldc.i4.1 IL_0045: stfld int32 Linq101Aggregates01/longestLength@77::pc - .line 77,77 : 29,46 '' + .line 77,77 : 29,46 IL_004a: ldarg.0 IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' IL_0050: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -4424,7 +4424,7 @@ IL_0059: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' IL_005e: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0063: stfld string Linq101Aggregates01/longestLength@77::_arg1 - .line 77,77 : 29,46 '' + .line 77,77 : 29,46 IL_0068: ldarg.0 IL_0069: ldarg.0 IL_006a: ldfld string Linq101Aggregates01/longestLength@77::_arg1 @@ -4432,7 +4432,7 @@ IL_0074: ldarg.0 IL_0075: ldc.i4.2 IL_0076: stfld int32 Linq101Aggregates01/longestLength@77::pc - .line 77,77 : 47,61 '' + .line 77,77 : 47,61 IL_007b: ldarg.0 IL_007c: ldarg.0 IL_007d: ldfld string Linq101Aggregates01/longestLength@77::w @@ -4443,18 +4443,18 @@ IL_0089: ldarg.0 IL_008a: ldnull IL_008b: stfld string Linq101Aggregates01/longestLength@77::w - .line 77,77 : 29,46 '' + .line 77,77 : 29,46 IL_0090: ldarg.0 IL_0091: ldnull IL_0092: stfld string Linq101Aggregates01/longestLength@77::_arg1 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0097: nop IL_0098: br.s IL_004a IL_009a: ldarg.0 IL_009b: ldc.i4.3 IL_009c: stfld int32 Linq101Aggregates01/longestLength@77::pc - .line 77,77 : 29,46 '' + .line 77,77 : 29,46 IL_00a1: ldarg.0 IL_00a2: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' IL_00a7: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -4480,7 +4480,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -4491,13 +4491,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -4518,30 +4518,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -4550,7 +4550,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -4567,18 +4567,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 77,77 : 29,46 '' + .line 77,77 : 29,46 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -4591,11 +4591,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0095: ret } // end of method longestLength@77::Close @@ -4699,7 +4699,7 @@ { // Code size 8 (0x8) .maxstack 8 - .line 77,77 : 53,61 '' + .line 77,77 : 53,61 IL_0000: nop IL_0001: ldarg.1 IL_0002: callvirt instance int32 [mscorlib]System.String::get_Length() @@ -4731,11 +4731,11 @@ // Code size 18 (0x12) .maxstack 6 .locals init ([0] class [Utils]Utils/Product p) - .line 82,82 : 9,29 '' + .line 82,82 : 9,29 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 83,83 : 9,32 '' + .line 83,83 : 9,32 IL_0003: ldarg.0 IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Aggregates01/categories4@82::builder@ IL_0009: ldloc.0 @@ -4764,7 +4764,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 83,83 : 20,21 '' + .line 83,83 : 20,21 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -4790,7 +4790,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 83,83 : 22,32 '' + .line 83,83 : 22,32 IL_0000: nop IL_0001: ldarg.1 IL_0002: tail. @@ -4860,7 +4860,7 @@ { // Code size 200 (0xc8) .maxstack 6 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc IL_0006: ldc.i4.1 @@ -4877,25 +4877,25 @@ IL_001f: br.s IL_002a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br IL_009e - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br.s IL_008d - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002a: nop IL_002b: br IL_00bf - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0030: nop - .line 84,84 : 42,55 '' + .line 84,84 : 42,55 IL_0031: ldarg.0 IL_0032: ldarg.0 IL_0033: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/mostExpensivePrice@84::g @@ -4905,7 +4905,7 @@ IL_0047: ldarg.0 IL_0048: ldc.i4.1 IL_0049: stfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc - .line 84,84 : 42,55 '' + .line 84,84 : 42,55 IL_004e: ldarg.0 IL_004f: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' IL_0054: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -4916,7 +4916,7 @@ IL_005d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' IL_0062: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0067: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensivePrice@84::_arg3 - .line 84,84 : 42,55 '' + .line 84,84 : 42,55 IL_006c: ldarg.0 IL_006d: ldarg.0 IL_006e: ldfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensivePrice@84::_arg3 @@ -4924,7 +4924,7 @@ IL_0078: ldarg.0 IL_0079: ldc.i4.2 IL_007a: stfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc - .line 84,84 : 56,73 '' + .line 84,84 : 56,73 IL_007f: ldarg.0 IL_0080: ldarg.0 IL_0081: ldfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensivePrice@84::x @@ -4935,18 +4935,18 @@ IL_008d: ldarg.0 IL_008e: ldnull IL_008f: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensivePrice@84::x - .line 84,84 : 42,55 '' + .line 84,84 : 42,55 IL_0094: ldarg.0 IL_0095: ldnull IL_0096: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensivePrice@84::_arg3 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_009b: nop IL_009c: br.s IL_004e IL_009e: ldarg.0 IL_009f: ldc.i4.3 IL_00a0: stfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc - .line 84,84 : 42,55 '' + .line 84,84 : 42,55 IL_00a5: ldarg.0 IL_00a6: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' IL_00ab: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -4972,7 +4972,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -4983,13 +4983,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -5010,30 +5010,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -5042,7 +5042,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -5059,18 +5059,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 84,84 : 42,55 '' + .line 84,84 : 42,55 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -5083,11 +5083,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0095: ret } // end of method mostExpensivePrice@84::Close @@ -5194,7 +5194,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 84,84 : 62,73 '' + .line 84,84 : 62,73 IL_0000: nop IL_0001: ldarg.1 IL_0002: tail. @@ -5229,7 +5229,7 @@ .locals init ([0] class [System.Core]System.Linq.IGrouping`2 g, [1] valuetype [mscorlib]System.Decimal mostExpensivePrice, [2] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) - .line 83,83 : 38,39 '' + .line 83,83 : 38,39 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 @@ -5253,7 +5253,7 @@ IL_001f: callvirt instance !!2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::MaxBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) IL_0024: stloc.1 - .line 85,85 : 9,43 '' + .line 85,85 : 9,43 IL_0025: ldarg.0 IL_0026: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Aggregates01/'categories4@83-3'::builder@ IL_002b: ldloc.0 @@ -5287,7 +5287,7 @@ .maxstack 6 .locals init ([0] class [System.Core]System.Linq.IGrouping`2 g, [1] valuetype [mscorlib]System.Decimal mostExpensivePrice) - .line 85,85 : 17,42 '' + .line 85,85 : 17,42 IL_0000: ldarg.1 IL_0001: call instance !0 class [mscorlib]System.Tuple`2,valuetype [mscorlib]System.Decimal>::get_Item1() IL_0006: stloc.0 @@ -5328,11 +5328,11 @@ // Code size 18 (0x12) .maxstack 6 .locals init ([0] class [Utils]Utils/Product p) - .line 91,91 : 9,29 '' + .line 91,91 : 9,29 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 92,92 : 9,32 '' + .line 92,92 : 9,32 IL_0003: ldarg.0 IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Aggregates01/categories5@91::builder@ IL_0009: ldloc.0 @@ -5361,7 +5361,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 92,92 : 20,21 '' + .line 92,92 : 20,21 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -5387,7 +5387,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 92,92 : 22,32 '' + .line 92,92 : 22,32 IL_0000: nop IL_0001: ldarg.1 IL_0002: tail. @@ -5457,7 +5457,7 @@ { // Code size 200 (0xc8) .maxstack 6 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/maxPrice@93::pc IL_0006: ldc.i4.1 @@ -5474,25 +5474,25 @@ IL_001f: br.s IL_002a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br IL_009e - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br.s IL_008d - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002a: nop IL_002b: br IL_00bf - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0030: nop - .line 93,93 : 32,45 '' + .line 93,93 : 32,45 IL_0031: ldarg.0 IL_0032: ldarg.0 IL_0033: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/maxPrice@93::g @@ -5502,7 +5502,7 @@ IL_0047: ldarg.0 IL_0048: ldc.i4.1 IL_0049: stfld int32 Linq101Aggregates01/maxPrice@93::pc - .line 93,93 : 32,45 '' + .line 93,93 : 32,45 IL_004e: ldarg.0 IL_004f: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' IL_0054: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -5513,7 +5513,7 @@ IL_005d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' IL_0062: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0067: stfld class [Utils]Utils/Product Linq101Aggregates01/maxPrice@93::_arg3 - .line 93,93 : 32,45 '' + .line 93,93 : 32,45 IL_006c: ldarg.0 IL_006d: ldarg.0 IL_006e: ldfld class [Utils]Utils/Product Linq101Aggregates01/maxPrice@93::_arg3 @@ -5521,7 +5521,7 @@ IL_0078: ldarg.0 IL_0079: ldc.i4.2 IL_007a: stfld int32 Linq101Aggregates01/maxPrice@93::pc - .line 93,93 : 46,63 '' + .line 93,93 : 46,63 IL_007f: ldarg.0 IL_0080: ldarg.0 IL_0081: ldfld class [Utils]Utils/Product Linq101Aggregates01/maxPrice@93::x @@ -5532,18 +5532,18 @@ IL_008d: ldarg.0 IL_008e: ldnull IL_008f: stfld class [Utils]Utils/Product Linq101Aggregates01/maxPrice@93::x - .line 93,93 : 32,45 '' + .line 93,93 : 32,45 IL_0094: ldarg.0 IL_0095: ldnull IL_0096: stfld class [Utils]Utils/Product Linq101Aggregates01/maxPrice@93::_arg3 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_009b: nop IL_009c: br.s IL_004e IL_009e: ldarg.0 IL_009f: ldc.i4.3 IL_00a0: stfld int32 Linq101Aggregates01/maxPrice@93::pc - .line 93,93 : 32,45 '' + .line 93,93 : 32,45 IL_00a5: ldarg.0 IL_00a6: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' IL_00ab: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -5569,7 +5569,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -5580,13 +5580,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -5607,30 +5607,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -5639,7 +5639,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -5656,18 +5656,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 93,93 : 32,45 '' + .line 93,93 : 32,45 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -5680,11 +5680,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0095: ret } // end of method maxPrice@93::Close @@ -5791,7 +5791,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 93,93 : 52,63 '' + .line 93,93 : 52,63 IL_0000: nop IL_0001: ldarg.1 IL_0002: tail. @@ -5861,7 +5861,7 @@ { // Code size 200 (0xc8) .maxstack 6 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc IL_0006: ldc.i4.1 @@ -5878,25 +5878,25 @@ IL_001f: br.s IL_002a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br IL_009e - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br.s IL_008d - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002a: nop IL_002b: br IL_00bf - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0030: nop - .line 94,94 : 45,58 '' + .line 94,94 : 45,58 IL_0031: ldarg.0 IL_0032: ldarg.0 IL_0033: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/mostExpensiveProducts@94::g @@ -5906,7 +5906,7 @@ IL_0047: ldarg.0 IL_0048: ldc.i4.1 IL_0049: stfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc - .line 94,94 : 45,58 '' + .line 94,94 : 45,58 IL_004e: ldarg.0 IL_004f: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' IL_0054: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -5917,7 +5917,7 @@ IL_005d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' IL_0062: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0067: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensiveProducts@94::_arg4 - .line 94,94 : 45,58 '' + .line 94,94 : 45,58 IL_006c: ldarg.0 IL_006d: ldarg.0 IL_006e: ldfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensiveProducts@94::_arg4 @@ -5925,7 +5925,7 @@ IL_0078: ldarg.0 IL_0079: ldc.i4.2 IL_007a: stfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc - .line 94,94 : 59,89 '' + .line 94,94 : 59,89 IL_007f: ldarg.0 IL_0080: ldarg.0 IL_0081: ldfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensiveProducts@94::x @@ -5936,18 +5936,18 @@ IL_008d: ldarg.0 IL_008e: ldnull IL_008f: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensiveProducts@94::x - .line 94,94 : 45,58 '' + .line 94,94 : 45,58 IL_0094: ldarg.0 IL_0095: ldnull IL_0096: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensiveProducts@94::_arg4 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_009b: nop IL_009c: br.s IL_004e IL_009e: ldarg.0 IL_009f: ldc.i4.3 IL_00a0: stfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc - .line 94,94 : 45,58 '' + .line 94,94 : 45,58 IL_00a5: ldarg.0 IL_00a6: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' IL_00ab: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -5973,7 +5973,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -5984,13 +5984,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -6011,30 +6011,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -6043,7 +6043,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -6060,18 +6060,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 94,94 : 45,58 '' + .line 94,94 : 45,58 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -6084,11 +6084,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0095: ret } // end of method mostExpensiveProducts@94::Close @@ -6199,7 +6199,7 @@ { // Code size 19 (0x13) .maxstack 8 - .line 94,94 : 66,88 '' + .line 94,94 : 66,88 IL_0000: nop IL_0001: ldarg.1 IL_0002: callvirt instance valuetype [mscorlib]System.Decimal [Utils]Utils/Product::get_UnitPrice() @@ -6239,7 +6239,7 @@ [2] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@, [3] class [mscorlib]System.Collections.Generic.IEnumerable`1 mostExpensiveProducts, [4] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder V_4) - .line 92,92 : 38,39 '' + .line 92,92 : 38,39 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 @@ -6263,7 +6263,7 @@ IL_001f: callvirt instance !!2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::MaxBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) IL_0024: stloc.1 - .line 94,94 : 13,34 '' + .line 94,94 : 13,34 IL_0025: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_002a: stloc.s V_4 IL_002c: ldloc.s V_4 @@ -6286,7 +6286,7 @@ class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) IL_0049: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerable`1 class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::get_Source() IL_004e: stloc.3 - .line 95,95 : 9,46 '' + .line 95,95 : 9,46 IL_004f: ldarg.0 IL_0050: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Aggregates01/'categories5@92-3'::builder@ IL_0055: ldloc.0 @@ -6323,7 +6323,7 @@ .locals init ([0] class [System.Core]System.Linq.IGrouping`2 g, [1] valuetype [mscorlib]System.Decimal maxPrice, [2] class [mscorlib]System.Collections.Generic.IEnumerable`1 mostExpensiveProducts) - .line 95,95 : 17,45 '' + .line 95,95 : 17,45 IL_0000: ldarg.1 IL_0001: call instance !0 class [mscorlib]System.Tuple`3,valuetype [mscorlib]System.Decimal,class [mscorlib]System.Collections.Generic.IEnumerable`1>::get_Item1() IL_0006: stloc.0 @@ -6399,7 +6399,7 @@ { // Code size 223 (0xdf) .maxstack 6 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/averageNum@100::pc IL_0006: ldc.i4.1 @@ -6416,25 +6416,25 @@ IL_001f: br.s IL_002a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br IL_00ad - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br.s IL_008c - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002a: nop IL_002b: br IL_00ce - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0030: nop - .line 100,100 : 26,46 '' + .line 100,100 : 26,46 IL_0031: ldarg.0 IL_0032: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_numbers2() IL_0037: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 @@ -6443,7 +6443,7 @@ IL_0046: ldarg.0 IL_0047: ldc.i4.1 IL_0048: stfld int32 Linq101Aggregates01/averageNum@100::pc - .line 100,100 : 26,46 '' + .line 100,100 : 26,46 IL_004d: ldarg.0 IL_004e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' IL_0053: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -6454,7 +6454,7 @@ IL_005c: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' IL_0061: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0066: stfld float64 Linq101Aggregates01/averageNum@100::_arg1 - .line 100,100 : 26,46 '' + .line 100,100 : 26,46 IL_006b: ldarg.0 IL_006c: ldarg.0 IL_006d: ldfld float64 Linq101Aggregates01/averageNum@100::_arg1 @@ -6462,7 +6462,7 @@ IL_0077: ldarg.0 IL_0078: ldc.i4.2 IL_0079: stfld int32 Linq101Aggregates01/averageNum@100::pc - .line 100,100 : 47,58 '' + .line 100,100 : 47,58 IL_007e: ldarg.0 IL_007f: ldarg.0 IL_0080: ldfld float64 Linq101Aggregates01/averageNum@100::n @@ -6473,18 +6473,18 @@ IL_008c: ldarg.0 IL_008d: ldc.r8 0.0 IL_0096: stfld float64 Linq101Aggregates01/averageNum@100::n - .line 100,100 : 26,46 '' + .line 100,100 : 26,46 IL_009b: ldarg.0 IL_009c: ldc.r8 0.0 IL_00a5: stfld float64 Linq101Aggregates01/averageNum@100::_arg1 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_00aa: nop IL_00ab: br.s IL_004d IL_00ad: ldarg.0 IL_00ae: ldc.i4.3 IL_00af: stfld int32 Linq101Aggregates01/averageNum@100::pc - .line 100,100 : 26,46 '' + .line 100,100 : 26,46 IL_00b4: ldarg.0 IL_00b5: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' IL_00ba: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -6510,7 +6510,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -6521,13 +6521,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0091 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -6548,30 +6548,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -6580,7 +6580,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -6597,18 +6597,18 @@ { IL_007d: castclass [mscorlib]System.Exception IL_0082: stloc.2 - .line 100,100 : 26,46 '' + .line 100,100 : 26,46 IL_0083: ldloc.2 IL_0084: stloc.0 IL_0085: ldnull IL_0086: stloc.1 IL_0087: leave.s IL_0089 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler IL_0089: ldloc.1 IL_008a: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_008b: nop IL_008c: br IL_0002 @@ -6621,11 +6621,11 @@ IL_0099: br.s IL_009d - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_009b: ldloc.0 IL_009c: throw - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_009d: ret } // end of method averageNum@100::Close @@ -6729,7 +6729,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 100,100 : 57,58 '' + .line 100,100 : 57,58 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -6761,16 +6761,16 @@ .maxstack 7 .locals init ([0] string w, [1] float64 wl) - .line 105,105 : 9,26 '' + .line 105,105 : 9,26 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 106,106 : 9,35 '' + .line 106,106 : 9,35 IL_0003: ldloc.0 IL_0004: callvirt instance int32 [mscorlib]System.String::get_Length() IL_0009: conv.r8 IL_000a: stloc.1 - .line 107,107 : 9,21 '' + .line 107,107 : 9,21 IL_000b: ldarg.0 IL_000c: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Aggregates01/averageLength@105::builder@ IL_0011: ldloc.0 @@ -6804,7 +6804,7 @@ .maxstack 5 .locals init ([0] string w, [1] float64 wl) - .line 107,107 : 19,21 '' + .line 107,107 : 19,21 IL_0000: ldarg.1 IL_0001: call instance !0 class [mscorlib]System.Tuple`2::get_Item1() IL_0006: stloc.0 @@ -6841,11 +6841,11 @@ // Code size 18 (0x12) .maxstack 6 .locals init ([0] class [Utils]Utils/Product p) - .line 113,113 : 9,29 '' + .line 113,113 : 9,29 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 114,114 : 9,32 '' + .line 114,114 : 9,32 IL_0003: ldarg.0 IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Aggregates01/categories6@113::builder@ IL_0009: ldloc.0 @@ -6874,7 +6874,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 114,114 : 20,21 '' + .line 114,114 : 20,21 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -6900,7 +6900,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 114,114 : 22,32 '' + .line 114,114 : 22,32 IL_0000: nop IL_0001: ldarg.1 IL_0002: tail. @@ -6970,7 +6970,7 @@ { // Code size 200 (0xc8) .maxstack 6 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/averagePrice@115::pc IL_0006: ldc.i4.1 @@ -6987,25 +6987,25 @@ IL_001f: br.s IL_002a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br IL_009e - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br.s IL_008d - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002a: nop IL_002b: br IL_00bf - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0030: nop - .line 115,115 : 36,49 '' + .line 115,115 : 36,49 IL_0031: ldarg.0 IL_0032: ldarg.0 IL_0033: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/averagePrice@115::g @@ -7015,7 +7015,7 @@ IL_0047: ldarg.0 IL_0048: ldc.i4.1 IL_0049: stfld int32 Linq101Aggregates01/averagePrice@115::pc - .line 115,115 : 36,49 '' + .line 115,115 : 36,49 IL_004e: ldarg.0 IL_004f: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' IL_0054: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -7026,7 +7026,7 @@ IL_005d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' IL_0062: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0067: stfld class [Utils]Utils/Product Linq101Aggregates01/averagePrice@115::_arg3 - .line 115,115 : 36,49 '' + .line 115,115 : 36,49 IL_006c: ldarg.0 IL_006d: ldarg.0 IL_006e: ldfld class [Utils]Utils/Product Linq101Aggregates01/averagePrice@115::_arg3 @@ -7034,7 +7034,7 @@ IL_0078: ldarg.0 IL_0079: ldc.i4.2 IL_007a: stfld int32 Linq101Aggregates01/averagePrice@115::pc - .line 115,115 : 50,71 '' + .line 115,115 : 50,71 IL_007f: ldarg.0 IL_0080: ldarg.0 IL_0081: ldfld class [Utils]Utils/Product Linq101Aggregates01/averagePrice@115::x @@ -7045,18 +7045,18 @@ IL_008d: ldarg.0 IL_008e: ldnull IL_008f: stfld class [Utils]Utils/Product Linq101Aggregates01/averagePrice@115::x - .line 115,115 : 36,49 '' + .line 115,115 : 36,49 IL_0094: ldarg.0 IL_0095: ldnull IL_0096: stfld class [Utils]Utils/Product Linq101Aggregates01/averagePrice@115::_arg3 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_009b: nop IL_009c: br.s IL_004e IL_009e: ldarg.0 IL_009f: ldc.i4.3 IL_00a0: stfld int32 Linq101Aggregates01/averagePrice@115::pc - .line 115,115 : 36,49 '' + .line 115,115 : 36,49 IL_00a5: ldarg.0 IL_00a6: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' IL_00ab: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -7082,7 +7082,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -7093,13 +7093,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -7120,30 +7120,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -7152,7 +7152,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -7169,18 +7169,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 115,115 : 36,49 '' + .line 115,115 : 36,49 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -7193,11 +7193,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0095: ret } // end of method averagePrice@115::Close @@ -7304,7 +7304,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 115,115 : 60,71 '' + .line 115,115 : 60,71 IL_0000: nop IL_0001: ldarg.1 IL_0002: tail. @@ -7351,7 +7351,7 @@ [12] valuetype [mscorlib]System.Decimal V_12, [13] int32 V_13, [14] class [mscorlib]System.IDisposable V_14) - .line 114,114 : 38,39 '' + .line 114,114 : 38,39 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 @@ -7391,17 +7391,17 @@ IL_004b: br.s IL_0060 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004d: ldstr "source" IL_0052: newobj instance void [mscorlib]System.ArgumentNullException::.ctor(string) IL_0057: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Raise(class [mscorlib]System.Exception) IL_005c: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_005d: nop IL_005e: br.s IL_0061 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0060: nop IL_0061: ldloc.s V_7 IL_0063: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() @@ -7433,12 +7433,12 @@ IL_0092: call valuetype [mscorlib]System.Decimal [mscorlib]System.Decimal::op_Addition(valuetype [mscorlib]System.Decimal, valuetype [mscorlib]System.Decimal) IL_0097: stloc.s V_10 - .line 115,115 : 50,71 '' + .line 115,115 : 50,71 IL_0099: ldloc.s V_11 IL_009b: ldc.i4.1 IL_009c: add IL_009d: stloc.s V_11 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_009f: nop IL_00a0: br.s IL_0079 @@ -7449,17 +7449,17 @@ IL_00a8: br.s IL_00bd - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_00aa: ldstr "source" IL_00af: newobj instance void [mscorlib]System.InvalidOperationException::.ctor(string) IL_00b4: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Raise(class [mscorlib]System.Exception) IL_00b9: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_00ba: nop IL_00bb: br.s IL_00be - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_00bd: nop IL_00be: ldloc.s V_10 IL_00c0: stloc.s V_12 @@ -7486,21 +7486,21 @@ IL_00e7: br.s IL_00f3 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_00e9: ldloc.s V_14 IL_00eb: callvirt instance void [mscorlib]System.IDisposable::Dispose() IL_00f0: ldnull IL_00f1: pop IL_00f2: endfinally - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_00f3: ldnull IL_00f4: pop IL_00f5: endfinally - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler IL_00f6: ldloc.s V_9 IL_00f8: stloc.1 - .line 116,116 : 9,37 '' + .line 116,116 : 9,37 IL_00f9: ldarg.0 IL_00fa: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Aggregates01/'categories6@114-3'::builder@ IL_00ff: ldloc.0 @@ -7534,7 +7534,7 @@ .maxstack 6 .locals init ([0] class [System.Core]System.Linq.IGrouping`2 g, [1] valuetype [mscorlib]System.Decimal averagePrice) - .line 116,116 : 17,36 '' + .line 116,116 : 17,36 IL_0000: ldarg.1 IL_0001: call instance !0 class [mscorlib]System.Tuple`2,valuetype [mscorlib]System.Decimal>::get_Item1() IL_0006: stloc.0 @@ -7974,7 +7974,7 @@ [74] int32 V_74, [75] class [mscorlib]System.IDisposable V_75, [76] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder V_76) - .line 8,8 : 1,31 '' + .line 8,8 : 1,31 IL_0000: nop IL_0001: ldc.i4.2 IL_0002: ldc.i4.2 @@ -7995,7 +7995,7 @@ IL_0024: dup IL_0025: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Aggregates01::factorsOf300@8 IL_002a: stloc.0 - .line 10,14 : 1,20 '' + .line 10,14 : 1,20 IL_002b: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_0030: stloc.s builder@ IL_0032: ldloc.s builder@ @@ -8016,7 +8016,7 @@ IL_0052: dup IL_0053: stsfld int32 ''.$Linq101Aggregates01::uniqueFactors@10 IL_0058: stloc.1 - .line 17,17 : 1,47 '' + .line 17,17 : 1,47 IL_0059: ldc.i4.5 IL_005a: ldc.i4.4 IL_005b: ldc.i4.1 @@ -8090,7 +8090,7 @@ IL_00f1: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() IL_00f6: brfalse.s IL_010e - .line 22,22 : 9,16 '' + .line 22,22 : 9,16 IL_00f8: ldloc.s V_29 IL_00fa: ldloc.s V_25 IL_00fc: ldloc.s V_27 @@ -8098,7 +8098,7 @@ IL_0103: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) IL_0108: add.ovf IL_0109: stloc.s V_29 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_010b: nop IL_010c: br.s IL_00ef @@ -8119,23 +8119,23 @@ IL_0123: br.s IL_012f - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0125: ldloc.s V_30 IL_0127: callvirt instance void [mscorlib]System.IDisposable::Dispose() IL_012c: ldnull IL_012d: pop IL_012e: endfinally - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_012f: ldnull IL_0130: pop IL_0131: endfinally - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler IL_0132: ldloc.s V_28 IL_0134: dup IL_0135: stsfld int32 ''.$Linq101Aggregates01::numSum@19 IL_013a: stloc.3 - .line 26,26 : 1,45 '' + .line 26,26 : 1,45 IL_013b: ldstr "cherry" IL_0140: ldstr "apple" IL_0145: ldstr "blueberry" @@ -8188,7 +8188,7 @@ IL_01b5: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() IL_01ba: brfalse.s IL_01d2 - .line 31,31 : 9,25 '' + .line 31,31 : 9,25 IL_01bc: ldloc.s V_39 IL_01be: ldloc.s V_35 IL_01c0: ldloc.s V_37 @@ -8196,7 +8196,7 @@ IL_01c7: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) IL_01cc: add.ovf IL_01cd: stloc.s V_39 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_01cf: nop IL_01d0: br.s IL_01b3 @@ -8217,28 +8217,28 @@ IL_01e7: br.s IL_01f3 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_01e9: ldloc.s V_40 IL_01eb: callvirt instance void [mscorlib]System.IDisposable::Dispose() IL_01f0: ldnull IL_01f1: pop IL_01f2: endfinally - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_01f3: ldnull IL_01f4: pop IL_01f5: endfinally - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler IL_01f6: ldloc.s V_38 IL_01f8: dup IL_01f9: stsfld int32 ''.$Linq101Aggregates01::totalChars@28 IL_01fe: stloc.s totalChars - .line 35,35 : 1,32 '' + .line 35,35 : 1,32 IL_0200: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [Utils]Utils::getProductList() IL_0205: dup IL_0206: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Aggregates01::products@35 IL_020b: stloc.s products - .line 37,46 : 1,21 '' + .line 37,46 : 1,21 IL_020d: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_0212: stloc.s V_41 IL_0214: ldloc.s V_41 @@ -8310,7 +8310,7 @@ IL_02bc: dup IL_02bd: stsfld int32 ''.$Linq101Aggregates01::shortestWord@52 IL_02c2: stloc.s shortestWord - .line 55,61 : 1,21 '' + .line 55,61 : 1,21 IL_02c4: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_02c9: stloc.s V_44 IL_02cb: ldloc.s V_44 @@ -8342,7 +8342,7 @@ IL_031f: dup IL_0320: stsfld class [mscorlib]System.Tuple`2[] ''.$Linq101Aggregates01::categories2@55 IL_0325: stloc.s categories2 - .line 64,71 : 1,21 '' + .line 64,71 : 1,21 IL_0327: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_032c: stloc.s V_45 IL_032e: ldloc.s V_45 @@ -8414,7 +8414,7 @@ IL_03d6: dup IL_03d7: stsfld int32 ''.$Linq101Aggregates01::longestLength@77 IL_03dc: stloc.s longestLength - .line 80,86 : 1,21 '' + .line 80,86 : 1,21 IL_03de: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_03e3: stloc.s V_48 IL_03e5: ldloc.s V_48 @@ -8446,7 +8446,7 @@ IL_0439: dup IL_043a: stsfld class [mscorlib]System.Tuple`2[] ''.$Linq101Aggregates01::categories4@80 IL_043f: stloc.s categories4 - .line 89,96 : 1,21 '' + .line 89,96 : 1,21 IL_0441: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_0446: stloc.s V_49 IL_0448: ldloc.s V_49 @@ -8478,7 +8478,7 @@ IL_049c: dup IL_049d: stsfld class [mscorlib]System.Tuple`2>[] ''.$Linq101Aggregates01::categories5@89 IL_04a2: stloc.s categories5 - .line 99,99 : 1,66 '' + .line 99,99 : 1,66 IL_04a4: ldc.r8 5. IL_04ad: ldc.r8 4. IL_04b6: ldc.r8 1. @@ -8547,17 +8547,17 @@ IL_059f: br.s IL_05b4 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_05a1: ldstr "source" IL_05a6: newobj instance void [mscorlib]System.ArgumentNullException::.ctor(string) IL_05ab: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Raise(class [mscorlib]System.Exception) IL_05b0: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_05b1: nop IL_05b2: br.s IL_05b5 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_05b4: nop IL_05b5: ldloc.s V_55 IL_05b7: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() @@ -8579,12 +8579,12 @@ IL_05e0: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) IL_05e5: add IL_05e6: stloc.s V_58 - .line 100,100 : 47,58 '' + .line 100,100 : 47,58 IL_05e8: ldloc.s V_59 IL_05ea: ldc.i4.1 IL_05eb: add IL_05ec: stloc.s V_59 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_05ee: nop IL_05ef: br.s IL_05cc @@ -8595,17 +8595,17 @@ IL_05f7: br.s IL_060c - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_05f9: ldstr "source" IL_05fe: newobj instance void [mscorlib]System.InvalidOperationException::.ctor(string) IL_0603: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Raise(class [mscorlib]System.Exception) IL_0608: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0609: nop IL_060a: br.s IL_060d - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_060c: nop IL_060d: ldloc.s V_58 IL_060f: stloc.s V_60 @@ -8631,17 +8631,17 @@ IL_062e: br.s IL_063a - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0630: ldloc.s V_62 IL_0632: callvirt instance void [mscorlib]System.IDisposable::Dispose() IL_0637: ldnull IL_0638: pop IL_0639: endfinally - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_063a: ldnull IL_063b: pop IL_063c: endfinally - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler IL_063d: ldloc.s V_57 IL_063f: dup @@ -8679,17 +8679,17 @@ IL_06a1: br.s IL_06b6 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_06a3: ldstr "source" IL_06a8: newobj instance void [mscorlib]System.ArgumentNullException::.ctor(string) IL_06ad: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Raise(class [mscorlib]System.Exception) IL_06b2: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_06b3: nop IL_06b4: br.s IL_06b7 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_06b6: nop IL_06b7: ldloc.s V_68 IL_06b9: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1>::GetEnumerator() @@ -8711,12 +8711,12 @@ IL_06e2: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,float64>::Invoke(!0) IL_06e7: add IL_06e8: stloc.s V_71 - .line 107,107 : 9,21 '' + .line 107,107 : 9,21 IL_06ea: ldloc.s V_72 IL_06ec: ldc.i4.1 IL_06ed: add IL_06ee: stloc.s V_72 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_06f0: nop IL_06f1: br.s IL_06ce @@ -8727,17 +8727,17 @@ IL_06f9: br.s IL_070e - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_06fb: ldstr "source" IL_0700: newobj instance void [mscorlib]System.InvalidOperationException::.ctor(string) IL_0705: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Raise(class [mscorlib]System.Exception) IL_070a: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_070b: nop IL_070c: br.s IL_070f - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_070e: nop IL_070f: ldloc.s V_71 IL_0711: stloc.s V_73 @@ -8763,23 +8763,23 @@ IL_0730: br.s IL_073c - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0732: ldloc.s V_75 IL_0734: callvirt instance void [mscorlib]System.IDisposable::Dispose() IL_0739: ldnull IL_073a: pop IL_073b: endfinally - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_073c: ldnull IL_073d: pop IL_073e: endfinally - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler IL_073f: ldloc.s V_70 IL_0741: dup IL_0742: stsfld float64 ''.$Linq101Aggregates01::averageLength@103 IL_0747: stloc.s averageLength - .line 111,117 : 1,21 '' + .line 111,117 : 1,21 IL_0749: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_074e: stloc.s V_76 IL_0750: ldloc.s V_76 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101ElementOperators01.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101ElementOperators01.il.netfx4.bsl index 12183d06fad..12655e4ec41 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101ElementOperators01.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101ElementOperators01.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17376 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly extern Utils { @@ -26,27 +26,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Linq101ElementOperators01 { - // Offset: 0x00000000 Length: 0x000003A7 + // Offset: 0x00000000 Length: 0x00000382 } .mresource public FSharpOptimizationData.Linq101ElementOperators01 { - // Offset: 0x000003B0 Length: 0x00000127 + // Offset: 0x00000388 Length: 0x00000127 } .module Linq101ElementOperators01.exe -// MVID: {4F31D858-19D7-C20D-A745-038358D8314F} +// MVID: {5775BA25-19D7-C20D-A745-038325BA7557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000490000 +// Image base: 0x00B40000 // =============== CLASS MEMBERS DECLARATION =================== @@ -111,7 +111,7 @@ // Code size 196 (0xc4) .maxstack 6 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\QueryExpressionStepping\\Linq101ElementOperators01.fs' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101ElementOperators01/products12@12::pc IL_0006: ldc.i4.1 @@ -128,25 +128,25 @@ IL_001f: br.s IL_0027 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br.s IL_009a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0024: nop IL_0025: br.s IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br IL_00bb - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002d: nop - .line 12,12 : 9,29 + .line 12,12 : 9,29 IL_002e: ldarg.0 IL_002f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101ElementOperators01::get_products() IL_0034: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 @@ -155,7 +155,7 @@ IL_0043: ldarg.0 IL_0044: ldc.i4.1 IL_0045: stfld int32 Linq101ElementOperators01/products12@12::pc - .line 12,12 : 9,29 + .line 12,12 : 9,29 IL_004a: ldarg.0 IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' IL_0050: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -166,7 +166,7 @@ IL_0059: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' IL_005e: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0063: stfld class [Utils]Utils/Product Linq101ElementOperators01/products12@12::_arg1 - .line 12,12 : 9,29 + .line 12,12 : 9,29 IL_0068: ldarg.0 IL_0069: ldarg.0 IL_006a: ldfld class [Utils]Utils/Product Linq101ElementOperators01/products12@12::_arg1 @@ -174,7 +174,7 @@ IL_0074: ldarg.0 IL_0075: ldc.i4.2 IL_0076: stfld int32 Linq101ElementOperators01/products12@12::pc - .line 13,13 : 9,33 + .line 13,13 : 9,33 IL_007b: ldarg.0 IL_007c: ldarg.0 IL_007d: ldfld class [Utils]Utils/Product Linq101ElementOperators01/products12@12::p @@ -185,18 +185,18 @@ IL_0089: ldarg.0 IL_008a: ldnull IL_008b: stfld class [Utils]Utils/Product Linq101ElementOperators01/products12@12::p - .line 12,12 : 9,29 + .line 12,12 : 9,29 IL_0090: ldarg.0 IL_0091: ldnull IL_0092: stfld class [Utils]Utils/Product Linq101ElementOperators01/products12@12::_arg1 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0097: nop IL_0098: br.s IL_004a IL_009a: ldarg.0 IL_009b: ldc.i4.3 IL_009c: stfld int32 Linq101ElementOperators01/products12@12::pc - .line 12,12 : 9,29 + .line 12,12 : 9,29 IL_00a1: ldarg.0 IL_00a2: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' IL_00a7: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -222,7 +222,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -233,13 +233,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -260,30 +260,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -292,7 +292,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -309,18 +309,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 12,12 : 9,29 + .line 12,12 : 9,29 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -333,11 +333,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0095: ret } // end of method products12@12::Close @@ -429,6 +429,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -441,7 +443,7 @@ { // Code size 12 (0xc) .maxstack 8 - .line 13,13 : 16,32 + .line 13,13 : 16,32 IL_0000: nop IL_0001: ldarg.1 IL_0002: callvirt instance int32 [Utils]Utils/Product::get_ProductID() @@ -507,7 +509,7 @@ { // Code size 196 (0xc4) .maxstack 6 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101ElementOperators01/startsWithO@22::pc IL_0006: ldc.i4.1 @@ -524,25 +526,25 @@ IL_001f: br.s IL_0027 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br.s IL_009a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0024: nop IL_0025: br.s IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br IL_00bb - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002d: nop - .line 22,22 : 9,28 + .line 22,22 : 9,28 IL_002e: ldarg.0 IL_002f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101ElementOperators01::get_strings() IL_0034: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 @@ -551,7 +553,7 @@ IL_0043: ldarg.0 IL_0044: ldc.i4.1 IL_0045: stfld int32 Linq101ElementOperators01/startsWithO@22::pc - .line 22,22 : 9,28 + .line 22,22 : 9,28 IL_004a: ldarg.0 IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' IL_0050: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -562,7 +564,7 @@ IL_0059: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' IL_005e: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0063: stfld string Linq101ElementOperators01/startsWithO@22::_arg1 - .line 22,22 : 9,28 + .line 22,22 : 9,28 IL_0068: ldarg.0 IL_0069: ldarg.0 IL_006a: ldfld string Linq101ElementOperators01/startsWithO@22::_arg1 @@ -570,7 +572,7 @@ IL_0074: ldarg.0 IL_0075: ldc.i4.2 IL_0076: stfld int32 Linq101ElementOperators01/startsWithO@22::pc - .line 23,23 : 9,28 + .line 23,23 : 9,28 IL_007b: ldarg.0 IL_007c: ldarg.0 IL_007d: ldfld string Linq101ElementOperators01/startsWithO@22::s @@ -581,18 +583,18 @@ IL_0089: ldarg.0 IL_008a: ldnull IL_008b: stfld string Linq101ElementOperators01/startsWithO@22::s - .line 22,22 : 9,28 + .line 22,22 : 9,28 IL_0090: ldarg.0 IL_0091: ldnull IL_0092: stfld string Linq101ElementOperators01/startsWithO@22::_arg1 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0097: nop IL_0098: br.s IL_004a IL_009a: ldarg.0 IL_009b: ldc.i4.3 IL_009c: stfld int32 Linq101ElementOperators01/startsWithO@22::pc - .line 22,22 : 9,28 + .line 22,22 : 9,28 IL_00a1: ldarg.0 IL_00a2: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' IL_00a7: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -618,7 +620,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -629,13 +631,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -656,30 +658,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -688,7 +690,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -705,18 +707,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 22,22 : 9,28 + .line 22,22 : 9,28 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -729,11 +731,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0095: ret } // end of method startsWithO@22::Close @@ -825,6 +827,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -837,7 +841,7 @@ { // Code size 13 (0xd) .maxstack 8 - .line 23,23 : 16,27 + .line 23,23 : 16,27 IL_0000: nop IL_0001: ldarg.1 IL_0002: ldc.i4.0 @@ -904,7 +908,7 @@ { // Code size 196 (0xc4) .maxstack 6 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc IL_0006: ldc.i4.1 @@ -921,25 +925,25 @@ IL_001f: br.s IL_0027 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br.s IL_009a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0024: nop IL_0025: br.s IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br IL_00bb - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002d: nop - .line 31,31 : 9,28 + .line 31,31 : 9,28 IL_002e: ldarg.0 IL_002f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101ElementOperators01::get_numbers() IL_0034: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 @@ -948,7 +952,7 @@ IL_0043: ldarg.0 IL_0044: ldc.i4.1 IL_0045: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc - .line 31,31 : 9,28 + .line 31,31 : 9,28 IL_004a: ldarg.0 IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' IL_0050: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -959,7 +963,7 @@ IL_0059: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' IL_005e: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0063: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::_arg1 - .line 31,31 : 9,28 + .line 31,31 : 9,28 IL_0068: ldarg.0 IL_0069: ldarg.0 IL_006a: ldfld int32 Linq101ElementOperators01/firstNumOrDefault@31::_arg1 @@ -967,7 +971,7 @@ IL_0074: ldarg.0 IL_0075: ldc.i4.2 IL_0076: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc - .line 32,32 : 9,22 + .line 32,32 : 9,22 IL_007b: ldarg.0 IL_007c: ldarg.0 IL_007d: ldfld int32 Linq101ElementOperators01/firstNumOrDefault@31::n @@ -978,18 +982,18 @@ IL_0089: ldarg.0 IL_008a: ldc.i4.0 IL_008b: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::n - .line 31,31 : 9,28 + .line 31,31 : 9,28 IL_0090: ldarg.0 IL_0091: ldc.i4.0 IL_0092: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::_arg1 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0097: nop IL_0098: br.s IL_004a IL_009a: ldarg.0 IL_009b: ldc.i4.3 IL_009c: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc - .line 31,31 : 9,28 + .line 31,31 : 9,28 IL_00a1: ldarg.0 IL_00a2: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' IL_00a7: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -1015,7 +1019,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -1026,13 +1030,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -1053,30 +1057,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -1085,7 +1089,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -1102,18 +1106,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 31,31 : 9,28 + .line 31,31 : 9,28 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -1126,11 +1130,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0095: ret } // end of method firstNumOrDefault@31::Close @@ -1271,7 +1275,7 @@ { // Code size 196 (0xc4) .maxstack 6 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101ElementOperators01/fourthLowNum@52::pc IL_0006: ldc.i4.1 @@ -1288,25 +1292,25 @@ IL_001f: br.s IL_0027 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br.s IL_009a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0024: nop IL_0025: br.s IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br IL_00bb - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002d: nop - .line 52,52 : 9,29 + .line 52,52 : 9,29 IL_002e: ldarg.0 IL_002f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101ElementOperators01::get_numbers2() IL_0034: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 @@ -1315,7 +1319,7 @@ IL_0043: ldarg.0 IL_0044: ldc.i4.1 IL_0045: stfld int32 Linq101ElementOperators01/fourthLowNum@52::pc - .line 52,52 : 9,29 + .line 52,52 : 9,29 IL_004a: ldarg.0 IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' IL_0050: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -1326,7 +1330,7 @@ IL_0059: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' IL_005e: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0063: stfld int32 Linq101ElementOperators01/fourthLowNum@52::_arg1 - .line 52,52 : 9,29 + .line 52,52 : 9,29 IL_0068: ldarg.0 IL_0069: ldarg.0 IL_006a: ldfld int32 Linq101ElementOperators01/fourthLowNum@52::_arg1 @@ -1334,7 +1338,7 @@ IL_0074: ldarg.0 IL_0075: ldc.i4.2 IL_0076: stfld int32 Linq101ElementOperators01/fourthLowNum@52::pc - .line 53,53 : 9,22 + .line 53,53 : 9,22 IL_007b: ldarg.0 IL_007c: ldarg.0 IL_007d: ldfld int32 Linq101ElementOperators01/fourthLowNum@52::n @@ -1345,18 +1349,18 @@ IL_0089: ldarg.0 IL_008a: ldc.i4.0 IL_008b: stfld int32 Linq101ElementOperators01/fourthLowNum@52::n - .line 52,52 : 9,29 + .line 52,52 : 9,29 IL_0090: ldarg.0 IL_0091: ldc.i4.0 IL_0092: stfld int32 Linq101ElementOperators01/fourthLowNum@52::_arg1 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0097: nop IL_0098: br.s IL_004a IL_009a: ldarg.0 IL_009b: ldc.i4.3 IL_009c: stfld int32 Linq101ElementOperators01/fourthLowNum@52::pc - .line 52,52 : 9,29 + .line 52,52 : 9,29 IL_00a1: ldarg.0 IL_00a2: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' IL_00a7: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -1382,7 +1386,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -1393,13 +1397,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -1420,30 +1424,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -1452,7 +1456,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -1469,18 +1473,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 52,52 : 9,29 + .line 52,52 : 9,29 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -1493,11 +1497,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0095: ret } // end of method fourthLowNum@52::Close @@ -1589,6 +1593,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -1601,7 +1607,7 @@ { // Code size 6 (0x6) .maxstack 8 - .line 53,53 : 16,21 + .line 53,53 : 16,21 IL_0000: nop IL_0001: ldarg.1 IL_0002: ldc.i4.5 @@ -1769,7 +1775,7 @@ [9] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder V_9, [10] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder V_10, [11] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder V_11) - .line 8,8 : 1,32 + .line 8,8 : 1,32 IL_0000: nop IL_0001: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [Utils]Utils::getProductList() IL_0006: dup @@ -1797,7 +1803,7 @@ IL_0036: dup IL_0037: stsfld class [Utils]Utils/Product ''.$Linq101ElementOperators01::products12@10 IL_003c: stloc.1 - .line 18,18 : 1,97 + .line 18,18 : 1,97 IL_003d: ldstr "zero" IL_0042: ldstr "one" IL_0047: ldstr "two" @@ -1854,7 +1860,7 @@ IL_00d6: dup IL_00d7: stsfld string ''.$Linq101ElementOperators01::startsWithO@20 IL_00dc: stloc.3 - .line 28,28 : 1,28 + .line 28,28 : 1,28 IL_00dd: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101ElementOperators01::get_numbers() IL_00e2: stloc.s numbers IL_00e4: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() @@ -1875,7 +1881,7 @@ IL_0101: dup IL_0102: stsfld int32 ''.$Linq101ElementOperators01::firstNumOrDefault@29 IL_0107: stloc.s firstNumOrDefault - .line 48,48 : 1,48 + .line 48,48 : 1,48 IL_0109: ldc.i4.5 IL_010a: ldc.i4.4 IL_010b: ldc.i4.1 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Grouping01.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Grouping01.il.netfx4.bsl index 1b0aad1e38e..2e58bcb7ed4 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Grouping01.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Grouping01.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17376 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly extern System.Core { @@ -31,27 +31,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Linq101Grouping01 { - // Offset: 0x00000000 Length: 0x0000042C + // Offset: 0x00000000 Length: 0x00000407 } .mresource public FSharpOptimizationData.Linq101Grouping01 { - // Offset: 0x00000430 Length: 0x00000129 + // Offset: 0x00000410 Length: 0x00000129 } .module Linq101Grouping01.exe -// MVID: {4F31D85B-FB79-E5BF-A745-03835BD8314F} +// MVID: {5775B6EF-FB79-E5BF-A745-0383EFB67557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000590000 +// Image base: 0x00D50000 // =============== CLASS MEMBERS DECLARATION =================== @@ -67,6 +67,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -84,11 +86,11 @@ .maxstack 6 .locals init ([0] int32 n) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 14,14 : 9,28 + .line 14,14 : 9,28 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\QueryExpressionStepping\\Linq101Grouping01.fs' IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 15,15 : 9,29 + .line 15,15 : 9,29 IL_0003: ldarg.0 IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Grouping01/numberGroups@14::builder@ IL_0009: ldloc.0 @@ -105,6 +107,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -117,7 +121,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 15,15 : 20,21 + .line 15,15 : 20,21 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -131,6 +135,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -143,7 +149,7 @@ { // Code size 5 (0x5) .maxstack 8 - .line 15,15 : 23,28 + .line 15,15 : 23,28 IL_0000: nop IL_0001: ldarg.1 IL_0002: ldc.i4.5 @@ -160,6 +166,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -176,7 +184,7 @@ // Code size 18 (0x12) .maxstack 6 .locals init ([0] class [System.Core]System.Linq.IGrouping`2 g) - .line 15,15 : 35,36 + .line 15,15 : 35,36 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 @@ -196,6 +204,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -208,7 +218,7 @@ { // Code size 19 (0x13) .maxstack 8 - .line 16,16 : 17,35 + .line 16,16 : 17,35 IL_0000: nop IL_0001: ldarg.1 IL_0002: callvirt instance !0 class [System.Core]System.Linq.IGrouping`2::get_Key() @@ -228,6 +238,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -244,11 +256,11 @@ // Code size 18 (0x12) .maxstack 6 .locals init ([0] string w) - .line 24,24 : 9,26 + .line 24,24 : 9,26 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 25,25 : 9,29 + .line 25,25 : 9,29 IL_0003: ldarg.0 IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Grouping01/wordGroups@24::builder@ IL_0009: ldloc.0 @@ -265,6 +277,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -277,7 +291,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 25,25 : 20,21 + .line 25,25 : 20,21 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -291,6 +305,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -303,7 +319,7 @@ { // Code size 9 (0x9) .maxstack 8 - .line 25,25 : 24,25 + .line 25,25 : 24,25 IL_0000: nop IL_0001: ldarg.1 IL_0002: ldc.i4.0 @@ -320,6 +336,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -336,7 +354,7 @@ // Code size 18 (0x12) .maxstack 6 .locals init ([0] class [System.Core]System.Linq.IGrouping`2 g) - .line 25,25 : 35,36 + .line 25,25 : 35,36 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 @@ -356,6 +374,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -368,7 +388,7 @@ { // Code size 19 (0x13) .maxstack 8 - .line 26,26 : 17,35 + .line 26,26 : 17,35 IL_0000: nop IL_0001: ldarg.1 IL_0002: callvirt instance !0 class [System.Core]System.Linq.IGrouping`2::get_Key() @@ -388,6 +408,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -404,11 +426,11 @@ // Code size 18 (0x12) .maxstack 6 .locals init ([0] class [Utils]Utils/Product p) - .line 34,34 : 9,29 + .line 34,34 : 9,29 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 35,35 : 9,32 + .line 35,35 : 9,32 IL_0003: ldarg.0 IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Grouping01/orderGroups@34::builder@ IL_0009: ldloc.0 @@ -425,6 +447,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -437,7 +461,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 35,35 : 20,21 + .line 35,35 : 20,21 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -451,6 +475,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -463,7 +489,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 35,35 : 22,32 + .line 35,35 : 22,32 IL_0000: nop IL_0001: ldarg.1 IL_0002: tail. @@ -480,6 +506,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -496,7 +524,7 @@ // Code size 18 (0x12) .maxstack 6 .locals init ([0] class [System.Core]System.Linq.IGrouping`2 g) - .line 35,35 : 38,39 + .line 35,35 : 38,39 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 @@ -516,6 +544,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -528,7 +558,7 @@ { // Code size 19 (0x13) .maxstack 8 - .line 36,36 : 17,35 + .line 36,36 : 17,35 IL_0000: nop IL_0001: ldarg.1 IL_0002: callvirt instance !0 class [System.Core]System.Linq.IGrouping`2::get_Key() @@ -548,6 +578,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -564,11 +596,11 @@ // Code size 18 (0x12) .maxstack 6 .locals init ([0] class [Utils]Utils/Order o) - .line 47,47 : 17,37 + .line 47,47 : 17,37 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 48,48 : 17,48 + .line 48,48 : 17,48 IL_0003: ldarg.0 IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Grouping01/yearGroups@47::builder@ IL_0009: ldloc.0 @@ -585,6 +617,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -597,7 +631,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 48,48 : 28,29 + .line 48,48 : 28,29 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -611,6 +645,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -624,7 +660,7 @@ // Code size 16 (0x10) .maxstack 5 .locals init ([0] valuetype [mscorlib]System.DateTime V_0) - .line 48,48 : 31,47 + .line 48,48 : 31,47 IL_0000: nop IL_0001: ldarg.1 IL_0002: callvirt instance valuetype [mscorlib]System.DateTime [Utils]Utils/Order::get_OrderDate() @@ -643,6 +679,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -659,11 +697,11 @@ // Code size 18 (0x12) .maxstack 6 .locals init ([0] class [Utils]Utils/Order o) - .line 51,51 : 25,39 + .line 51,51 : 25,39 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 52,52 : 25,57 + .line 52,52 : 25,57 IL_0003: ldarg.0 IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Grouping01/monthGroups@51::builder@ IL_0009: ldloc.0 @@ -680,6 +718,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -692,7 +732,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 52,52 : 36,37 + .line 52,52 : 36,37 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -706,6 +746,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -719,7 +761,7 @@ // Code size 16 (0x10) .maxstack 5 .locals init ([0] valuetype [mscorlib]System.DateTime V_0) - .line 52,52 : 39,56 + .line 52,52 : 39,56 IL_0000: nop IL_0001: ldarg.1 IL_0002: callvirt instance valuetype [mscorlib]System.DateTime [Utils]Utils/Order::get_OrderDate() @@ -738,6 +780,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -754,7 +798,7 @@ // Code size 18 (0x12) .maxstack 6 .locals init ([0] class [System.Core]System.Linq.IGrouping`2 mg) - .line 52,52 : 63,65 + .line 52,52 : 63,65 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 @@ -774,6 +818,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -786,7 +832,7 @@ { // Code size 19 (0x13) .maxstack 8 - .line 53,53 : 33,53 + .line 53,53 : 33,53 IL_0000: nop IL_0001: ldarg.1 IL_0002: callvirt instance !0 class [System.Core]System.Linq.IGrouping`2::get_Key() @@ -806,6 +852,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -824,7 +872,7 @@ .locals init ([0] class [System.Core]System.Linq.IGrouping`2 yg, [1] class [mscorlib]System.Collections.Generic.IEnumerable`1> monthGroups, [2] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) - .line 48,48 : 54,56 + .line 48,48 : 54,56 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 @@ -856,7 +904,7 @@ class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) IL_0048: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerable`1 class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,class [mscorlib]System.Collections.IEnumerable>::get_Source() IL_004d: stloc.1 - .line 55,55 : 17,55 + .line 55,55 : 17,55 IL_004e: ldarg.0 IL_004f: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Grouping01/'yearGroups@48-3'::builder@ IL_0054: ldloc.0 @@ -876,6 +924,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -890,7 +940,7 @@ .maxstack 6 .locals init ([0] class [System.Core]System.Linq.IGrouping`2 yg, [1] class [mscorlib]System.Collections.Generic.IEnumerable`1> monthGroups) - .line 55,55 : 25,54 + .line 55,55 : 25,54 IL_0000: ldarg.1 IL_0001: call instance !0 class [mscorlib]System.Tuple`2,class [mscorlib]System.Collections.Generic.IEnumerable`1>>::get_Item1() IL_0006: stloc.0 @@ -916,6 +966,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -934,11 +986,11 @@ .locals init ([0] class [Utils]Utils/Customer c, [1] class [mscorlib]System.Collections.Generic.IEnumerable`1[]>> yearGroups, [2] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) - .line 44,44 : 9,30 + .line 44,44 : 9,30 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 45,45 : 13,23 + .line 57,57 : 9,53 IL_0003: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_0008: stloc.2 IL_0009: ldloc.2 @@ -968,7 +1020,7 @@ class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) IL_004d: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerable`1 class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2[]>,class [mscorlib]System.Collections.IEnumerable>::get_Source() IL_0052: stloc.1 - .line 57,57 : 9,53 + .line 57,57 : 9,53 IL_0053: ldarg.0 IL_0054: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Grouping01/customerOrderGroups@44::builder@ IL_0059: ldloc.0 @@ -988,6 +1040,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -1002,7 +1056,7 @@ .maxstack 6 .locals init ([0] class [Utils]Utils/Customer c, [1] class [mscorlib]System.Collections.Generic.IEnumerable`1[]>> yearGroups) - .line 57,57 : 17,52 + .line 57,57 : 17,52 IL_0000: ldarg.1 IL_0001: call instance !0 class [mscorlib]System.Tuple`2[]>>>::get_Item1() IL_0006: stloc.0 @@ -1035,7 +1089,7 @@ { // Code size 6 (0x6) .maxstack 8 - IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Grouping01::numbers@10 + IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Grouping01::'numbers@10-1' IL_0005: ret } // end of method Linq101Grouping01::get_numbers @@ -1071,7 +1125,7 @@ { // Code size 6 (0x6) .maxstack 8 - IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Grouping01::products@30 + IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Grouping01::'products@30-2' IL_0005: ret } // end of method Linq101Grouping01::get_products @@ -1163,7 +1217,7 @@ { .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 digits@7 .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 numbers@10 + .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 'numbers@10-1' .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) .field static assembly class [mscorlib]System.Tuple`2[] numberGroups@12 .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) @@ -1171,7 +1225,7 @@ .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) .field static assembly class [mscorlib]System.Tuple`2[] wordGroups@22 .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 products@30 + .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 'products@30-2' .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) .field static assembly class [mscorlib]System.Tuple`2[] orderGroups@32 .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) @@ -1201,7 +1255,7 @@ [10] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder V_10, [11] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder V_11, [12] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder V_12) - .line 7,7 : 1,96 + .line 7,7 : 1,96 IL_0000: nop IL_0001: ldstr "zero" IL_0006: ldstr "one" @@ -1237,7 +1291,7 @@ IL_006a: dup IL_006b: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Grouping01::digits@7 IL_0070: stloc.0 - .line 10,10 : 1,47 + .line 10,10 : 1,47 IL_0071: ldc.i4.5 IL_0072: ldc.i4.4 IL_0073: ldc.i4.1 @@ -1270,9 +1324,9 @@ IL_00ae: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1) IL_00b3: dup - IL_00b4: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Grouping01::numbers@10 + IL_00b4: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Grouping01::'numbers@10-1' IL_00b9: stloc.1 - .line 12,17 : 1,21 + .line 12,17 : 1,21 IL_00ba: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_00bf: stloc.s builder@ IL_00c1: ldloc.s builder@ @@ -1304,7 +1358,7 @@ IL_0115: dup IL_0116: stsfld class [mscorlib]System.Tuple`2[] ''.$Linq101Grouping01::numberGroups@12 IL_011b: stloc.2 - .line 20,20 : 1,80 + .line 20,20 : 1,80 IL_011c: ldstr "blueberry" IL_0121: ldstr "chimpanzee" IL_0126: ldstr "abacus" @@ -1327,7 +1381,7 @@ IL_015d: dup IL_015e: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Grouping01::words@20 IL_0163: stloc.3 - .line 22,27 : 1,21 + .line 22,27 : 1,21 IL_0164: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_0169: stloc.s V_10 IL_016b: ldloc.s V_10 @@ -1359,12 +1413,12 @@ IL_01bf: dup IL_01c0: stsfld class [mscorlib]System.Tuple`2[] ''.$Linq101Grouping01::wordGroups@22 IL_01c5: stloc.s wordGroups - .line 30,30 : 1,32 + .line 30,30 : 1,32 IL_01c7: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [Utils]Utils::getProductList() IL_01cc: dup - IL_01cd: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Grouping01::products@30 + IL_01cd: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Grouping01::'products@30-2' IL_01d2: stloc.s products - .line 32,37 : 1,21 + .line 32,37 : 1,21 IL_01d4: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_01d9: stloc.s V_11 IL_01db: ldloc.s V_11 @@ -1396,12 +1450,12 @@ IL_022f: dup IL_0230: stsfld class [mscorlib]System.Tuple`2[] ''.$Linq101Grouping01::orderGroups@32 IL_0235: stloc.s orderGroups - .line 40,40 : 1,34 + .line 40,40 : 1,34 IL_0237: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [Utils]Utils::getCustomerList() IL_023c: dup IL_023d: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Grouping01::customers@40 IL_0242: stloc.s customers - .line 42,58 : 1,21 + .line 42,58 : 1,21 IL_0244: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_0249: stloc.s V_12 IL_024b: ldloc.s V_12 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Joins01.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Joins01.il.netfx4.bsl index 8cb00c315e1..2853d79b367 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Joins01.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Joins01.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17376 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly extern Utils { @@ -31,27 +31,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Linq101Joins01 { - // Offset: 0x00000000 Length: 0x00000333 + // Offset: 0x00000000 Length: 0x0000030E } .mresource public FSharpOptimizationData.Linq101Joins01 { - // Offset: 0x00000338 Length: 0x000000C3 + // Offset: 0x00000318 Length: 0x000000C3 } .module Linq101Joins01.exe -// MVID: {4F31D85E-151B-685E-A745-03835ED8314F} +// MVID: {5775B169-151B-685E-A745-038369B17557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000590000 +// Image base: 0x005C0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,6 +66,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -79,7 +81,7 @@ // Code size 3 (0x3) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 14,14 : 32,33 + .line 14,14 : 32,33 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\QueryExpressionStepping\\Linq101Joins01.fs' IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -93,6 +95,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -105,7 +109,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 14,14 : 36,46 + .line 14,14 : 36,46 IL_0000: nop IL_0001: ldarg.1 IL_0002: tail. @@ -121,6 +125,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -134,7 +140,7 @@ { // Code size 9 (0x9) .maxstack 8 - .line 14,14 : 9,47 + .line 14,14 : 9,47 IL_0000: nop IL_0001: ldarg.1 IL_0002: ldarg.2 @@ -152,6 +158,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -170,7 +178,7 @@ .locals init ([0] class [mscorlib]System.Tuple`2 V_0, [1] class [Utils]Utils/Product p, [2] string c) - .line 14,14 : 9,47 + .line 14,14 : 9,47 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 @@ -199,6 +207,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -213,7 +223,7 @@ .maxstack 6 .locals init ([0] string c, [1] class [Utils]Utils/Product p) - .line 15,15 : 17,33 + .line 15,15 : 17,33 IL_0000: ldarg.1 IL_0001: call instance !0 class [mscorlib]System.Tuple`2::get_Item1() IL_0006: stloc.0 @@ -237,6 +247,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -249,7 +261,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 22,22 : 37,38 + .line 22,22 : 37,38 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -263,6 +275,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -275,7 +289,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 22,22 : 41,51 + .line 22,22 : 41,51 IL_0000: nop IL_0001: ldarg.1 IL_0002: tail. @@ -291,6 +305,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -304,7 +320,7 @@ { // Code size 9 (0x9) .maxstack 8 - .line 22,22 : 9,60 + .line 22,22 : 9,60 IL_0000: nop IL_0001: ldarg.1 IL_0002: ldarg.2 @@ -322,6 +338,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -340,7 +358,7 @@ .locals init ([0] class [mscorlib]System.Tuple`2> V_0, [1] class [mscorlib]System.Collections.Generic.IEnumerable`1 ps, [2] string c) - .line 22,22 : 9,60 + .line 22,22 : 9,60 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 @@ -369,6 +387,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -383,7 +403,7 @@ .maxstack 6 .locals init ([0] string c, [1] class [mscorlib]System.Collections.Generic.IEnumerable`1 ps) - .line 23,23 : 17,22 + .line 23,23 : 17,22 IL_0000: ldarg.1 IL_0001: call instance !0 class [mscorlib]System.Tuple`2>::get_Item1() IL_0006: stloc.0 @@ -406,6 +426,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -418,7 +440,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 30,30 : 37,38 + .line 30,30 : 37,38 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -432,6 +454,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -444,7 +468,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 30,30 : 41,51 + .line 30,30 : 41,51 IL_0000: nop IL_0001: ldarg.1 IL_0002: tail. @@ -460,6 +484,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -473,7 +499,7 @@ { // Code size 9 (0x9) .maxstack 8 - .line 30,30 : 9,60 + .line 30,30 : 9,60 IL_0000: nop IL_0001: ldarg.1 IL_0002: ldarg.2 @@ -495,6 +521,8 @@ class [mscorlib]System.Collections.Generic.IEnumerable`1 ps, string c) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 28 (0x1c) .maxstack 8 IL_0000: ldarg.0 @@ -517,11 +545,11 @@ // Code size 35 (0x23) .maxstack 8 .locals init ([0] class [Utils]Utils/Product p) - .line 31,31 : 9,23 + .line 31,31 : 9,23 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 32,32 : 9,34 + .line 32,32 : 9,34 IL_0003: ldarg.0 IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Joins01/'q3@31-4'::builder@ IL_0009: ldarg.0 @@ -546,6 +574,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -564,7 +594,7 @@ .locals init ([0] class [mscorlib]System.Tuple`2> V_0, [1] class [mscorlib]System.Collections.Generic.IEnumerable`1 ps, [2] string c) - .line 30,30 : 9,60 + .line 30,30 : 9,60 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 @@ -601,6 +631,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -616,7 +648,7 @@ .locals init ([0] string c, [1] class [mscorlib]System.Collections.Generic.IEnumerable`1 ps, [2] class [Utils]Utils/Product p) - .line 32,32 : 17,33 + .line 32,32 : 17,33 IL_0000: ldarg.1 IL_0001: call instance !0 class [mscorlib]System.Tuple`3,class [Utils]Utils/Product>::get_Item1() IL_0006: stloc.0 @@ -643,6 +675,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -655,7 +689,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 39,39 : 37,38 + .line 39,39 : 37,38 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -669,6 +703,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -681,7 +717,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 39,39 : 41,51 + .line 39,39 : 41,51 IL_0000: nop IL_0001: ldarg.1 IL_0002: tail. @@ -697,6 +733,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -710,7 +748,7 @@ { // Code size 9 (0x9) .maxstack 8 - .line 39,39 : 9,60 + .line 39,39 : 9,60 IL_0000: nop IL_0001: ldarg.1 IL_0002: ldarg.2 @@ -732,6 +770,8 @@ class [mscorlib]System.Collections.Generic.IEnumerable`1 ps, string c) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 28 (0x1c) .maxstack 8 IL_0000: ldarg.0 @@ -751,57 +791,55 @@ .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,class [Utils]Utils/Product,string>,object> Invoke(class [Utils]Utils/Product _arg2) cil managed { - // Code size 71 (0x47) + // Code size 70 (0x46) .maxstack 9 .locals init ([0] class [Utils]Utils/Product p, [1] string t) - .line 40,40 : 9,40 + .line 40,40 : 9,40 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 41,41 : 13,14 - IL_0003: nop - .line 41,41 : 17,39 - IL_0004: ldloc.0 - IL_0005: box [Utils]Utils/Product - IL_000a: ldnull - IL_000b: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericEqualityIntrinsic(!!0, + .line 41,41 : 17,39 + IL_0003: ldloc.0 + IL_0004: box [Utils]Utils/Product + IL_0009: ldnull + IL_000a: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericEqualityIntrinsic(!!0, !!0) - IL_0010: brfalse.s IL_0014 - - IL_0012: br.s IL_0016 - - IL_0014: br.s IL_001e - - .line 41,41 : 40,55 - IL_0016: ldstr "(No products)" - .line 100001,100001 : 0,0 - IL_001b: nop - IL_001c: br.s IL_0025 - - .line 41,41 : 61,74 - IL_001e: ldloc.0 - IL_001f: callvirt instance string [Utils]Utils/Product::get_ProductName() - .line 100001,100001 : 0,0 - IL_0024: nop - .line 100001,100001 : 0,0 - IL_0025: stloc.1 - .line 42,42 : 9,22 - IL_0026: ldarg.0 - IL_0027: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Joins01/'q4@40-4'::builder@ - IL_002c: ldarg.0 - IL_002d: ldfld string Linq101Joins01/'q4@40-4'::c - IL_0032: ldarg.0 - IL_0033: ldfld class [mscorlib]System.Collections.Generic.IEnumerable`1 Linq101Joins01/'q4@40-4'::ps - IL_0038: ldloc.0 - IL_0039: ldloc.1 - IL_003a: newobj instance void class [mscorlib]System.Tuple`4,class [Utils]Utils/Product,string>::.ctor(!0, + IL_000f: brfalse.s IL_0013 + + IL_0011: br.s IL_0015 + + IL_0013: br.s IL_001d + + .line 41,41 : 40,55 + IL_0015: ldstr "(No products)" + .line 100001,100001 : 0,0 + IL_001a: nop + IL_001b: br.s IL_0024 + + .line 41,41 : 61,74 + IL_001d: ldloc.0 + IL_001e: callvirt instance string [Utils]Utils/Product::get_ProductName() + .line 100001,100001 : 0,0 + IL_0023: nop + .line 100001,100001 : 0,0 + IL_0024: stloc.1 + .line 42,42 : 9,22 + IL_0025: ldarg.0 + IL_0026: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Joins01/'q4@40-4'::builder@ + IL_002b: ldarg.0 + IL_002c: ldfld string Linq101Joins01/'q4@40-4'::c + IL_0031: ldarg.0 + IL_0032: ldfld class [mscorlib]System.Collections.Generic.IEnumerable`1 Linq101Joins01/'q4@40-4'::ps + IL_0037: ldloc.0 + IL_0038: ldloc.1 + IL_0039: newobj instance void class [mscorlib]System.Tuple`4,class [Utils]Utils/Product,string>::.ctor(!0, !1, !2, !3) - IL_003f: tail. - IL_0041: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Yield,class [Utils]Utils/Product,string>,object>(!!0) - IL_0046: ret + IL_003e: tail. + IL_0040: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Yield,class [Utils]Utils/Product,string>,object>(!!0) + IL_0045: ret } // end of method 'q4@40-4'::Invoke } // end of class 'q4@40-4' @@ -813,6 +851,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -831,7 +871,7 @@ .locals init ([0] class [mscorlib]System.Tuple`2> V_0, [1] class [mscorlib]System.Collections.Generic.IEnumerable`1 ps, [2] string c) - .line 39,39 : 9,60 + .line 39,39 : 9,60 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 @@ -869,6 +909,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -885,7 +927,7 @@ [1] class [mscorlib]System.Collections.Generic.IEnumerable`1 ps, [2] class [Utils]Utils/Product p, [3] string t) - .line 42,42 : 17,21 + .line 42,42 : 17,21 IL_0000: ldarg.1 IL_0001: call instance !0 class [mscorlib]System.Tuple`4,class [Utils]Utils/Product,string>::get_Item1() IL_0006: stloc.0 @@ -922,7 +964,7 @@ { // Code size 6 (0x6) .maxstack 8 - IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Joins01::products@9 + IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Joins01::'products@9-4' IL_0005: ret } // end of method Linq101Joins01::get_products @@ -1005,7 +1047,7 @@ { .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 categories@8 .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 products@9 + .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 'products@9-4' .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) .field static assembly class [mscorlib]System.Tuple`2[] q@11 .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) @@ -1034,7 +1076,7 @@ [7] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder V_7, [8] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder V_8, [9] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder V_9) - .line 8,8 : 1,88 + .line 8,8 : 1,88 IL_0000: nop IL_0001: ldstr "Beverages" IL_0006: ldstr "Condiments" @@ -1055,12 +1097,12 @@ IL_0038: dup IL_0039: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Joins01::categories@8 IL_003e: stloc.0 - .line 9,9 : 1,32 + .line 9,9 : 1,32 IL_003f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [Utils]Utils::getProductList() IL_0044: dup - IL_0045: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Joins01::products@9 + IL_0045: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Joins01::'products@9-4' IL_004a: stloc.1 - .line 11,16 : 1,21 + .line 11,16 : 1,21 IL_004b: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_0050: stloc.s builder@ IL_0052: ldloc.s builder@ @@ -1094,7 +1136,7 @@ IL_00ae: dup IL_00af: stsfld class [mscorlib]System.Tuple`2[] ''.$Linq101Joins01::q@11 IL_00b4: stloc.2 - .line 19,24 : 1,21 + .line 19,24 : 1,21 IL_00b5: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_00ba: stloc.s V_7 IL_00bc: ldloc.s V_7 @@ -1128,7 +1170,7 @@ IL_0118: dup IL_0119: stsfld class [mscorlib]System.Tuple`2>[] ''.$Linq101Joins01::q2@19 IL_011e: stloc.3 - .line 27,33 : 1,21 + .line 27,33 : 1,21 IL_011f: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_0124: stloc.s V_8 IL_0126: ldloc.s V_8 @@ -1162,7 +1204,7 @@ IL_0182: dup IL_0183: stsfld class [mscorlib]System.Tuple`2[] ''.$Linq101Joins01::q3@27 IL_0188: stloc.s q3 - .line 36,43 : 1,21 + .line 36,43 : 1,21 IL_018a: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_018f: stloc.s V_9 IL_0191: ldloc.s V_9 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Ordering01.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Ordering01.il.netfx4.bsl index b5cfde409e3..2441c89fdb9 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Ordering01.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Ordering01.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17376 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly extern Utils { @@ -26,27 +26,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Linq101Ordering01 { - // Offset: 0x00000000 Length: 0x000003D7 + // Offset: 0x00000000 Length: 0x000003B2 } .mresource public FSharpOptimizationData.Linq101Ordering01 { - // Offset: 0x000003E0 Length: 0x00000134 + // Offset: 0x000003B8 Length: 0x00000134 } .module Linq101Ordering01.exe -// MVID: {4F31D862-649A-6956-A745-038362D8314F} +// MVID: {5775B16C-649A-6956-A745-03836CB17557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000470000 +// Image base: 0x006E0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -111,7 +111,7 @@ // Code size 196 (0xc4) .maxstack 6 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\QueryExpressionStepping\\Linq101Ordering01.fs' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Ordering01/sortedWords@11::pc IL_0006: ldc.i4.1 @@ -128,25 +128,25 @@ IL_001f: br.s IL_0027 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br.s IL_009a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0024: nop IL_0025: br.s IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br IL_00bb - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002d: nop - .line 11,11 : 9,26 + .line 11,11 : 9,26 IL_002e: ldarg.0 IL_002f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Ordering01::get_words() IL_0034: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 @@ -155,7 +155,7 @@ IL_0043: ldarg.0 IL_0044: ldc.i4.1 IL_0045: stfld int32 Linq101Ordering01/sortedWords@11::pc - .line 11,11 : 9,26 + .line 11,11 : 9,26 IL_004a: ldarg.0 IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' IL_0050: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -166,7 +166,7 @@ IL_0059: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' IL_005e: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0063: stfld string Linq101Ordering01/sortedWords@11::_arg1 - .line 11,11 : 9,26 + .line 11,11 : 9,26 IL_0068: ldarg.0 IL_0069: ldarg.0 IL_006a: ldfld string Linq101Ordering01/sortedWords@11::_arg1 @@ -174,7 +174,7 @@ IL_0074: ldarg.0 IL_0075: ldc.i4.2 IL_0076: stfld int32 Linq101Ordering01/sortedWords@11::pc - .line 12,12 : 9,17 + .line 12,12 : 9,17 IL_007b: ldarg.0 IL_007c: ldarg.0 IL_007d: ldfld string Linq101Ordering01/sortedWords@11::w @@ -185,18 +185,18 @@ IL_0089: ldarg.0 IL_008a: ldnull IL_008b: stfld string Linq101Ordering01/sortedWords@11::w - .line 11,11 : 9,26 + .line 11,11 : 9,26 IL_0090: ldarg.0 IL_0091: ldnull IL_0092: stfld string Linq101Ordering01/sortedWords@11::_arg1 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0097: nop IL_0098: br.s IL_004a IL_009a: ldarg.0 IL_009b: ldc.i4.3 IL_009c: stfld int32 Linq101Ordering01/sortedWords@11::pc - .line 11,11 : 9,26 + .line 11,11 : 9,26 IL_00a1: ldarg.0 IL_00a2: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' IL_00a7: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -222,7 +222,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -233,13 +233,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -260,30 +260,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -292,7 +292,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -309,18 +309,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 11,11 : 9,26 + .line 11,11 : 9,26 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -333,11 +333,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0095: ret } // end of method sortedWords@11::Close @@ -429,6 +429,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -441,7 +443,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 12,12 : 16,17 + .line 12,12 : 16,17 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -504,7 +506,7 @@ { // Code size 196 (0xc4) .maxstack 6 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Ordering01/sortedWords2@18::pc IL_0006: ldc.i4.1 @@ -521,25 +523,25 @@ IL_001f: br.s IL_0027 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br.s IL_009a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0024: nop IL_0025: br.s IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br IL_00bb - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002d: nop - .line 18,18 : 9,26 + .line 18,18 : 9,26 IL_002e: ldarg.0 IL_002f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Ordering01::get_words() IL_0034: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 @@ -548,7 +550,7 @@ IL_0043: ldarg.0 IL_0044: ldc.i4.1 IL_0045: stfld int32 Linq101Ordering01/sortedWords2@18::pc - .line 18,18 : 9,26 + .line 18,18 : 9,26 IL_004a: ldarg.0 IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' IL_0050: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -559,7 +561,7 @@ IL_0059: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' IL_005e: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0063: stfld string Linq101Ordering01/sortedWords2@18::_arg1 - .line 18,18 : 9,26 + .line 18,18 : 9,26 IL_0068: ldarg.0 IL_0069: ldarg.0 IL_006a: ldfld string Linq101Ordering01/sortedWords2@18::_arg1 @@ -567,7 +569,7 @@ IL_0074: ldarg.0 IL_0075: ldc.i4.2 IL_0076: stfld int32 Linq101Ordering01/sortedWords2@18::pc - .line 19,19 : 9,26 + .line 19,19 : 9,26 IL_007b: ldarg.0 IL_007c: ldarg.0 IL_007d: ldfld string Linq101Ordering01/sortedWords2@18::w @@ -578,18 +580,18 @@ IL_0089: ldarg.0 IL_008a: ldnull IL_008b: stfld string Linq101Ordering01/sortedWords2@18::w - .line 18,18 : 9,26 + .line 18,18 : 9,26 IL_0090: ldarg.0 IL_0091: ldnull IL_0092: stfld string Linq101Ordering01/sortedWords2@18::_arg1 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0097: nop IL_0098: br.s IL_004a IL_009a: ldarg.0 IL_009b: ldc.i4.3 IL_009c: stfld int32 Linq101Ordering01/sortedWords2@18::pc - .line 18,18 : 9,26 + .line 18,18 : 9,26 IL_00a1: ldarg.0 IL_00a2: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' IL_00a7: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -615,7 +617,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -626,13 +628,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -653,30 +655,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -685,7 +687,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -702,18 +704,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 18,18 : 9,26 + .line 18,18 : 9,26 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -726,11 +728,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0095: ret } // end of method sortedWords2@18::Close @@ -822,6 +824,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -834,7 +838,7 @@ { // Code size 8 (0x8) .maxstack 8 - .line 19,19 : 17,25 + .line 19,19 : 17,25 IL_0000: nop IL_0001: ldarg.1 IL_0002: callvirt instance int32 [mscorlib]System.String::get_Length() @@ -850,6 +854,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -866,11 +872,11 @@ // Code size 18 (0x12) .maxstack 6 .locals init ([0] class [Utils]Utils/Product p) - .line 26,26 : 9,29 + .line 26,26 : 9,29 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 27,27 : 9,29 + .line 27,27 : 9,29 IL_0003: ldarg.0 IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Ordering01/sortedProducts@26::builder@ IL_0009: ldloc.0 @@ -887,6 +893,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -899,7 +907,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 27,27 : 16,29 + .line 27,27 : 16,29 IL_0000: nop IL_0001: ldarg.1 IL_0002: tail. @@ -915,6 +923,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -927,7 +937,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 28,28 : 16,17 + .line 28,28 : 16,17 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -990,7 +1000,7 @@ { // Code size 196 (0xc4) .maxstack 6 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Ordering01/sortedProducts2@44::pc IL_0006: ldc.i4.1 @@ -1007,25 +1017,25 @@ IL_001f: br.s IL_0027 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br.s IL_009a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0024: nop IL_0025: br.s IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br IL_00bb - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002d: nop - .line 44,44 : 9,29 + .line 44,44 : 9,29 IL_002e: ldarg.0 IL_002f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Ordering01::get_products() IL_0034: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 @@ -1034,7 +1044,7 @@ IL_0043: ldarg.0 IL_0044: ldc.i4.1 IL_0045: stfld int32 Linq101Ordering01/sortedProducts2@44::pc - .line 44,44 : 9,29 + .line 44,44 : 9,29 IL_004a: ldarg.0 IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' IL_0050: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -1045,7 +1055,7 @@ IL_0059: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' IL_005e: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0063: stfld class [Utils]Utils/Product Linq101Ordering01/sortedProducts2@44::_arg1 - .line 44,44 : 9,29 + .line 44,44 : 9,29 IL_0068: ldarg.0 IL_0069: ldarg.0 IL_006a: ldfld class [Utils]Utils/Product Linq101Ordering01/sortedProducts2@44::_arg1 @@ -1053,7 +1063,7 @@ IL_0074: ldarg.0 IL_0075: ldc.i4.2 IL_0076: stfld int32 Linq101Ordering01/sortedProducts2@44::pc - .line 45,45 : 9,40 + .line 45,45 : 9,40 IL_007b: ldarg.0 IL_007c: ldarg.0 IL_007d: ldfld class [Utils]Utils/Product Linq101Ordering01/sortedProducts2@44::p @@ -1064,18 +1074,18 @@ IL_0089: ldarg.0 IL_008a: ldnull IL_008b: stfld class [Utils]Utils/Product Linq101Ordering01/sortedProducts2@44::p - .line 44,44 : 9,29 + .line 44,44 : 9,29 IL_0090: ldarg.0 IL_0091: ldnull IL_0092: stfld class [Utils]Utils/Product Linq101Ordering01/sortedProducts2@44::_arg1 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0097: nop IL_0098: br.s IL_004a IL_009a: ldarg.0 IL_009b: ldc.i4.3 IL_009c: stfld int32 Linq101Ordering01/sortedProducts2@44::pc - .line 44,44 : 9,29 + .line 44,44 : 9,29 IL_00a1: ldarg.0 IL_00a2: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' IL_00a7: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -1101,7 +1111,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -1112,13 +1122,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -1139,30 +1149,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -1171,7 +1181,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -1188,18 +1198,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 44,44 : 9,29 + .line 44,44 : 9,29 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -1212,11 +1222,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0095: ret } // end of method sortedProducts2@44::Close @@ -1308,6 +1318,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -1320,7 +1332,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 45,45 : 26,40 + .line 45,45 : 26,40 IL_0000: nop IL_0001: ldarg.1 IL_0002: tail. @@ -1385,7 +1397,7 @@ { // Code size 196 (0xc4) .maxstack 6 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Ordering01/sortedDigits@52::pc IL_0006: ldc.i4.1 @@ -1402,25 +1414,25 @@ IL_001f: br.s IL_0027 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br.s IL_009a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0024: nop IL_0025: br.s IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br IL_00bb - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002d: nop - .line 52,52 : 9,27 + .line 52,52 : 9,27 IL_002e: ldarg.0 IL_002f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Ordering01::get_digits() IL_0034: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 @@ -1429,7 +1441,7 @@ IL_0043: ldarg.0 IL_0044: ldc.i4.1 IL_0045: stfld int32 Linq101Ordering01/sortedDigits@52::pc - .line 52,52 : 9,27 + .line 52,52 : 9,27 IL_004a: ldarg.0 IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' IL_0050: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -1440,7 +1452,7 @@ IL_0059: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' IL_005e: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0063: stfld string Linq101Ordering01/sortedDigits@52::_arg1 - .line 52,52 : 9,27 + .line 52,52 : 9,27 IL_0068: ldarg.0 IL_0069: ldarg.0 IL_006a: ldfld string Linq101Ordering01/sortedDigits@52::_arg1 @@ -1448,7 +1460,7 @@ IL_0074: ldarg.0 IL_0075: ldc.i4.2 IL_0076: stfld int32 Linq101Ordering01/sortedDigits@52::pc - .line 53,53 : 9,24 + .line 53,53 : 9,24 IL_007b: ldarg.0 IL_007c: ldarg.0 IL_007d: ldfld string Linq101Ordering01/sortedDigits@52::d @@ -1459,18 +1471,18 @@ IL_0089: ldarg.0 IL_008a: ldnull IL_008b: stfld string Linq101Ordering01/sortedDigits@52::d - .line 52,52 : 9,27 + .line 52,52 : 9,27 IL_0090: ldarg.0 IL_0091: ldnull IL_0092: stfld string Linq101Ordering01/sortedDigits@52::_arg1 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0097: nop IL_0098: br.s IL_004a IL_009a: ldarg.0 IL_009b: ldc.i4.3 IL_009c: stfld int32 Linq101Ordering01/sortedDigits@52::pc - .line 52,52 : 9,27 + .line 52,52 : 9,27 IL_00a1: ldarg.0 IL_00a2: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' IL_00a7: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -1496,7 +1508,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -1507,13 +1519,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -1534,30 +1546,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -1566,7 +1578,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -1583,18 +1595,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 52,52 : 9,27 + .line 52,52 : 9,27 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -1607,11 +1619,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0095: ret } // end of method sortedDigits@52::Close @@ -1703,6 +1715,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -1715,7 +1729,7 @@ { // Code size 8 (0x8) .maxstack 8 - .line 53,53 : 16,24 + .line 53,53 : 16,24 IL_0000: nop IL_0001: ldarg.1 IL_0002: callvirt instance int32 [mscorlib]System.String::get_Length() @@ -1730,6 +1744,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -1742,7 +1758,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 54,54 : 16,17 + .line 54,54 : 16,17 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -1757,6 +1773,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -1773,11 +1791,11 @@ // Code size 18 (0x12) .maxstack 6 .locals init ([0] class [Utils]Utils/Product p) - .line 60,60 : 9,29 + .line 60,60 : 9,29 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 61,61 : 9,26 + .line 61,61 : 9,26 IL_0003: ldarg.0 IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Ordering01/sortedProducts3@60::builder@ IL_0009: ldloc.0 @@ -1794,6 +1812,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -1806,7 +1826,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 61,61 : 16,26 + .line 61,61 : 16,26 IL_0000: nop IL_0001: ldarg.1 IL_0002: tail. @@ -1822,6 +1842,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -1834,7 +1856,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 62,62 : 26,37 + .line 62,62 : 26,37 IL_0000: nop IL_0001: ldarg.1 IL_0002: tail. @@ -1850,6 +1872,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -1862,7 +1886,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 63,63 : 16,17 + .line 63,63 : 16,17 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -1875,7 +1899,7 @@ { // Code size 6 (0x6) .maxstack 8 - IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Ordering01::words@8 + IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Ordering01::'words@8-2' IL_0005: ret } // end of method Linq101Ordering01::get_words @@ -1902,7 +1926,7 @@ { // Code size 6 (0x6) .maxstack 8 - IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Ordering01::products@23 + IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Ordering01::'products@23-6' IL_0005: ret } // end of method Linq101Ordering01::get_products @@ -1929,7 +1953,7 @@ { // Code size 6 (0x6) .maxstack 8 - IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Ordering01::digits@49 + IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Ordering01::'digits@49-2' IL_0005: ret } // end of method Linq101Ordering01::get_digits @@ -2007,19 +2031,19 @@ .class private abstract auto ansi sealed ''.$Linq101Ordering01 extends [mscorlib]System.Object { - .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 words@8 + .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 'words@8-2' .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 sortedWords@9 .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 sortedWords2@16 .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 products@23 + .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 'products@23-6' .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) .field static assembly class [Utils]Utils/Product[] sortedProducts@24 .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) .field static assembly class [Utils]Utils/Product[] sortedProducts2@42 .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 digits@49 + .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 'digits@49-2' .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 sortedDigits@50 .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) @@ -2049,7 +2073,7 @@ [12] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder V_12, [13] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder V_13, [14] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder V_14) - .line 8,8 : 1,45 + .line 8,8 : 1,45 IL_0000: nop IL_0001: ldstr "cherry" IL_0006: ldstr "apple" @@ -2062,9 +2086,9 @@ IL_001f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1) IL_0024: dup - IL_0025: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Ordering01::words@8 + IL_0025: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Ordering01::'words@8-2' IL_002a: stloc.0 - .line 9,13 : 1,20 + .line 9,13 : 1,20 IL_002b: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_0030: stloc.s builder@ IL_0032: ldloc.s builder@ @@ -2087,7 +2111,7 @@ IL_0057: dup IL_0058: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Ordering01::sortedWords@9 IL_005d: stloc.1 - .line 16,20 : 1,20 + .line 16,20 : 1,20 IL_005e: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_0063: stloc.s V_10 IL_0065: ldloc.s V_10 @@ -2110,12 +2134,12 @@ IL_008a: dup IL_008b: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Ordering01::sortedWords2@16 IL_0090: stloc.2 - .line 23,23 : 1,32 + .line 23,23 : 1,32 IL_0091: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [Utils]Utils::getProductList() IL_0096: dup - IL_0097: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Ordering01::products@23 + IL_0097: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Ordering01::'products@23-6' IL_009c: stloc.3 - .line 24,29 : 1,21 + .line 24,29 : 1,21 IL_009d: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_00a2: stloc.s V_11 IL_00a4: ldloc.s V_11 @@ -2140,7 +2164,7 @@ IL_00e5: dup IL_00e6: stsfld class [Utils]Utils/Product[] ''.$Linq101Ordering01::sortedProducts@24 IL_00eb: stloc.s sortedProducts - .line 42,46 : 1,21 + .line 42,46 : 1,21 IL_00ed: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_00f2: stloc.s V_12 IL_00f4: ldloc.s V_12 @@ -2163,7 +2187,7 @@ IL_0119: dup IL_011a: stsfld class [Utils]Utils/Product[] ''.$Linq101Ordering01::sortedProducts2@42 IL_011f: stloc.s sortedProducts2 - .line 49,49 : 1,96 + .line 49,49 : 1,96 IL_0121: ldstr "zero" IL_0126: ldstr "one" IL_012b: ldstr "two" @@ -2196,9 +2220,9 @@ IL_0185: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1) IL_018a: dup - IL_018b: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Ordering01::digits@49 + IL_018b: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Ordering01::'digits@49-2' IL_0190: stloc.s digits - .line 50,55 : 1,20 + .line 50,55 : 1,20 IL_0192: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_0197: stloc.s V_13 IL_0199: ldloc.s V_13 @@ -2225,7 +2249,7 @@ IL_01ca: dup IL_01cb: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Ordering01::sortedDigits@50 IL_01d0: stloc.s sortedDigits - .line 58,64 : 1,21 + .line 58,64 : 1,21 IL_01d2: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_01d7: stloc.s V_14 IL_01d9: ldloc.s V_14 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Partitioning01.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Partitioning01.il.netfx4.bsl index 4c11db6026b..717fb96c059 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Partitioning01.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Partitioning01.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17376 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly extern Utils { @@ -26,27 +26,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Linq101Partitioning01 { - // Offset: 0x00000000 Length: 0x000003FB + // Offset: 0x00000000 Length: 0x000003D6 } .mresource public FSharpOptimizationData.Linq101Partitioning01 { - // Offset: 0x00000400 Length: 0x00000138 + // Offset: 0x000003E0 Length: 0x00000138 } .module Linq101Partitioning01.exe -// MVID: {4F31D865-B280-A6A2-A745-038365D8314F} +// MVID: {5775BA4D-B280-A6A2-A745-03834DBA7557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000370000 +// Image base: 0x00590000 // =============== CLASS MEMBERS DECLARATION =================== @@ -111,7 +111,7 @@ // Code size 196 (0xc4) .maxstack 6 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\QueryExpressionStepping\\Linq101Partitioning01.fs' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Partitioning01/first3Numbers@12::pc IL_0006: ldc.i4.1 @@ -128,25 +128,25 @@ IL_001f: br.s IL_0027 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br.s IL_009a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0024: nop IL_0025: br.s IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br IL_00bb - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002d: nop - .line 12,12 : 9,28 + .line 12,12 : 9,28 IL_002e: ldarg.0 IL_002f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Partitioning01::get_numbers() IL_0034: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 @@ -155,7 +155,7 @@ IL_0043: ldarg.0 IL_0044: ldc.i4.1 IL_0045: stfld int32 Linq101Partitioning01/first3Numbers@12::pc - .line 12,12 : 9,28 + .line 12,12 : 9,28 IL_004a: ldarg.0 IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' IL_0050: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -166,7 +166,7 @@ IL_0059: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' IL_005e: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0063: stfld int32 Linq101Partitioning01/first3Numbers@12::_arg1 - .line 12,12 : 9,28 + .line 12,12 : 9,28 IL_0068: ldarg.0 IL_0069: ldarg.0 IL_006a: ldfld int32 Linq101Partitioning01/first3Numbers@12::_arg1 @@ -174,7 +174,7 @@ IL_0074: ldarg.0 IL_0075: ldc.i4.2 IL_0076: stfld int32 Linq101Partitioning01/first3Numbers@12::pc - .line 13,13 : 9,15 + .line 13,13 : 9,15 IL_007b: ldarg.0 IL_007c: ldarg.0 IL_007d: ldfld int32 Linq101Partitioning01/first3Numbers@12::n @@ -185,18 +185,18 @@ IL_0089: ldarg.0 IL_008a: ldc.i4.0 IL_008b: stfld int32 Linq101Partitioning01/first3Numbers@12::n - .line 12,12 : 9,28 + .line 12,12 : 9,28 IL_0090: ldarg.0 IL_0091: ldc.i4.0 IL_0092: stfld int32 Linq101Partitioning01/first3Numbers@12::_arg1 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0097: nop IL_0098: br.s IL_004a IL_009a: ldarg.0 IL_009b: ldc.i4.3 IL_009c: stfld int32 Linq101Partitioning01/first3Numbers@12::pc - .line 12,12 : 9,28 + .line 12,12 : 9,28 IL_00a1: ldarg.0 IL_00a2: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' IL_00a7: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -222,7 +222,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -233,13 +233,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -260,30 +260,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -292,7 +292,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -309,18 +309,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 12,12 : 9,28 + .line 12,12 : 9,28 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -333,11 +333,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0095: ret } // end of method first3Numbers@12::Close @@ -432,6 +432,8 @@ instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@, class [Utils]Utils/Customer c) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 21 (0x15) .maxstack 8 IL_0000: ldarg.0 @@ -451,11 +453,11 @@ // Code size 29 (0x1d) .maxstack 7 .locals init ([0] class [Utils]Utils/Order o) - .line 21,21 : 9,29 + .line 21,21 : 9,29 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 22,22 : 9,32 + .line 22,22 : 9,32 IL_0003: ldarg.0 IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Partitioning01/'WAOrders@21-1'::builder@ IL_0009: ldarg.0 @@ -477,6 +479,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -493,11 +497,11 @@ // Code size 51 (0x33) .maxstack 8 .locals init ([0] class [Utils]Utils/Customer c) - .line 20,20 : 9,30 + .line 20,20 : 9,30 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 21,21 : 9,29 + .line 21,21 : 9,29 IL_0003: ldarg.0 IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Partitioning01/WAOrders@20::builder@ IL_0009: ldarg.0 @@ -525,6 +529,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -539,7 +545,7 @@ .maxstack 6 .locals init ([0] class [Utils]Utils/Customer c, [1] class [Utils]Utils/Order o) - .line 22,22 : 16,31 + .line 22,22 : 16,31 IL_0000: ldarg.1 IL_0001: call instance !0 class [mscorlib]System.Tuple`2::get_Item1() IL_0006: stloc.0 @@ -563,6 +569,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -577,7 +585,7 @@ .maxstack 7 .locals init ([0] class [Utils]Utils/Customer c, [1] class [Utils]Utils/Order o) - .line 23,23 : 17,53 + .line 23,23 : 17,53 IL_0000: ldarg.1 IL_0001: call instance !0 class [mscorlib]System.Tuple`2::get_Item1() IL_0006: stloc.0 @@ -654,7 +662,7 @@ { // Code size 196 (0xc4) .maxstack 6 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc IL_0006: ldc.i4.1 @@ -671,25 +679,25 @@ IL_001f: br.s IL_0027 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br.s IL_009a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0024: nop IL_0025: br.s IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br IL_00bb - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002d: nop - .line 29,29 : 9,28 + .line 29,29 : 9,28 IL_002e: ldarg.0 IL_002f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Partitioning01::get_numbers() IL_0034: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 @@ -698,7 +706,7 @@ IL_0043: ldarg.0 IL_0044: ldc.i4.1 IL_0045: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc - .line 29,29 : 9,28 + .line 29,29 : 9,28 IL_004a: ldarg.0 IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' IL_0050: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -709,7 +717,7 @@ IL_0059: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' IL_005e: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0063: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::_arg1 - .line 29,29 : 9,28 + .line 29,29 : 9,28 IL_0068: ldarg.0 IL_0069: ldarg.0 IL_006a: ldfld int32 Linq101Partitioning01/allButFirst4Numbers@29::_arg1 @@ -717,7 +725,7 @@ IL_0074: ldarg.0 IL_0075: ldc.i4.2 IL_0076: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc - .line 30,30 : 9,15 + .line 30,30 : 9,15 IL_007b: ldarg.0 IL_007c: ldarg.0 IL_007d: ldfld int32 Linq101Partitioning01/allButFirst4Numbers@29::n @@ -728,18 +736,18 @@ IL_0089: ldarg.0 IL_008a: ldc.i4.0 IL_008b: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::n - .line 29,29 : 9,28 + .line 29,29 : 9,28 IL_0090: ldarg.0 IL_0091: ldc.i4.0 IL_0092: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::_arg1 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0097: nop IL_0098: br.s IL_004a IL_009a: ldarg.0 IL_009b: ldc.i4.3 IL_009c: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc - .line 29,29 : 9,28 + .line 29,29 : 9,28 IL_00a1: ldarg.0 IL_00a2: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' IL_00a7: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -765,7 +773,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -776,13 +784,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -803,30 +811,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -835,7 +843,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -852,18 +860,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 29,29 : 9,28 + .line 29,29 : 9,28 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -876,11 +884,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0095: ret } // end of method allButFirst4Numbers@29::Close @@ -975,6 +983,8 @@ instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@, class [Utils]Utils/Customer c) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 21 (0x15) .maxstack 8 IL_0000: ldarg.0 @@ -994,11 +1004,11 @@ // Code size 29 (0x1d) .maxstack 7 .locals init ([0] class [Utils]Utils/Order o) - .line 37,37 : 9,29 + .line 37,37 : 9,29 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 38,38 : 9,32 + .line 38,38 : 9,32 IL_0003: ldarg.0 IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Partitioning01/'WAOrders2@37-1'::builder@ IL_0009: ldarg.0 @@ -1020,6 +1030,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -1036,11 +1048,11 @@ // Code size 51 (0x33) .maxstack 8 .locals init ([0] class [Utils]Utils/Customer c) - .line 36,36 : 9,30 + .line 36,36 : 9,30 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 37,37 : 9,29 + .line 37,37 : 9,29 IL_0003: ldarg.0 IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Partitioning01/WAOrders2@36::builder@ IL_0009: ldarg.0 @@ -1068,6 +1080,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -1082,7 +1096,7 @@ .maxstack 6 .locals init ([0] class [Utils]Utils/Customer c, [1] class [Utils]Utils/Order o) - .line 38,38 : 16,31 + .line 38,38 : 16,31 IL_0000: ldarg.1 IL_0001: call instance !0 class [mscorlib]System.Tuple`2::get_Item1() IL_0006: stloc.0 @@ -1106,6 +1120,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -1120,7 +1136,7 @@ .maxstack 7 .locals init ([0] class [Utils]Utils/Customer c, [1] class [Utils]Utils/Order o) - .line 39,39 : 17,53 + .line 39,39 : 17,53 IL_0000: ldarg.1 IL_0001: call instance !0 class [mscorlib]System.Tuple`2::get_Item1() IL_0006: stloc.0 @@ -1197,7 +1213,7 @@ { // Code size 196 (0xc4) .maxstack 6 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc IL_0006: ldc.i4.1 @@ -1214,25 +1230,25 @@ IL_001f: br.s IL_0027 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br.s IL_009a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0024: nop IL_0025: br.s IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br IL_00bb - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002d: nop - .line 45,45 : 9,28 + .line 45,45 : 9,28 IL_002e: ldarg.0 IL_002f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Partitioning01::get_numbers() IL_0034: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 @@ -1241,7 +1257,7 @@ IL_0043: ldarg.0 IL_0044: ldc.i4.1 IL_0045: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc - .line 45,45 : 9,28 + .line 45,45 : 9,28 IL_004a: ldarg.0 IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' IL_0050: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -1252,7 +1268,7 @@ IL_0059: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' IL_005e: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0063: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::_arg1 - .line 45,45 : 9,28 + .line 45,45 : 9,28 IL_0068: ldarg.0 IL_0069: ldarg.0 IL_006a: ldfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::_arg1 @@ -1260,7 +1276,7 @@ IL_0074: ldarg.0 IL_0075: ldc.i4.2 IL_0076: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc - .line 46,46 : 9,26 + .line 46,46 : 9,26 IL_007b: ldarg.0 IL_007c: ldarg.0 IL_007d: ldfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::n @@ -1271,18 +1287,18 @@ IL_0089: ldarg.0 IL_008a: ldc.i4.0 IL_008b: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::n - .line 45,45 : 9,28 + .line 45,45 : 9,28 IL_0090: ldarg.0 IL_0091: ldc.i4.0 IL_0092: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::_arg1 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0097: nop IL_0098: br.s IL_004a IL_009a: ldarg.0 IL_009b: ldc.i4.3 IL_009c: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc - .line 45,45 : 9,28 + .line 45,45 : 9,28 IL_00a1: ldarg.0 IL_00a2: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' IL_00a7: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -1308,7 +1324,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -1319,13 +1335,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -1346,30 +1362,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -1378,7 +1394,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -1395,18 +1411,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 45,45 : 9,28 + .line 45,45 : 9,28 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -1419,11 +1435,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0095: ret } // end of method firstNumbersLessThan6@45::Close @@ -1515,6 +1531,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -1527,7 +1545,7 @@ { // Code size 6 (0x6) .maxstack 8 - .line 46,46 : 20,25 + .line 46,46 : 20,25 IL_0000: nop IL_0001: ldarg.1 IL_0002: ldc.i4.6 @@ -1592,7 +1610,7 @@ { // Code size 196 (0xc4) .maxstack 6 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc IL_0006: ldc.i4.1 @@ -1609,25 +1627,25 @@ IL_001f: br.s IL_0027 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br.s IL_009a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0024: nop IL_0025: br.s IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br IL_00bb - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002d: nop - .line 52,52 : 9,28 + .line 52,52 : 9,28 IL_002e: ldarg.0 IL_002f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Partitioning01::get_numbers() IL_0034: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 @@ -1636,7 +1654,7 @@ IL_0043: ldarg.0 IL_0044: ldc.i4.1 IL_0045: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc - .line 52,52 : 9,28 + .line 52,52 : 9,28 IL_004a: ldarg.0 IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' IL_0050: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -1647,7 +1665,7 @@ IL_0059: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' IL_005e: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0063: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::_arg1 - .line 52,52 : 9,28 + .line 52,52 : 9,28 IL_0068: ldarg.0 IL_0069: ldarg.0 IL_006a: ldfld int32 Linq101Partitioning01/allButFirst3Numbers@52::_arg1 @@ -1655,7 +1673,7 @@ IL_0074: ldarg.0 IL_0075: ldc.i4.2 IL_0076: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc - .line 53,53 : 9,31 + .line 53,53 : 9,31 IL_007b: ldarg.0 IL_007c: ldarg.0 IL_007d: ldfld int32 Linq101Partitioning01/allButFirst3Numbers@52::n @@ -1666,18 +1684,18 @@ IL_0089: ldarg.0 IL_008a: ldc.i4.0 IL_008b: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::n - .line 52,52 : 9,28 + .line 52,52 : 9,28 IL_0090: ldarg.0 IL_0091: ldc.i4.0 IL_0092: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::_arg1 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0097: nop IL_0098: br.s IL_004a IL_009a: ldarg.0 IL_009b: ldc.i4.3 IL_009c: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc - .line 52,52 : 9,28 + .line 52,52 : 9,28 IL_00a1: ldarg.0 IL_00a2: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' IL_00a7: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -1703,7 +1721,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -1714,13 +1732,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -1741,30 +1759,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -1773,7 +1791,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -1790,18 +1808,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 52,52 : 9,28 + .line 52,52 : 9,28 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -1814,11 +1832,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0095: ret } // end of method allButFirst3Numbers@52::Close @@ -1910,6 +1928,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -1922,7 +1942,7 @@ { // Code size 11 (0xb) .maxstack 8 - .line 53,53 : 20,30 + .line 53,53 : 20,30 IL_0000: nop IL_0001: ldarg.1 IL_0002: ldc.i4.3 @@ -1941,7 +1961,7 @@ { // Code size 6 (0x6) .maxstack 8 - IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Partitioning01::numbers@7 + IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Partitioning01::'numbers@7-3' IL_0005: ret } // end of method Linq101Partitioning01::get_numbers @@ -1959,7 +1979,7 @@ { // Code size 6 (0x6) .maxstack 8 - IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Partitioning01::customers@17 + IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Partitioning01::'customers@17-2' IL_0005: ret } // end of method Linq101Partitioning01::get_customers @@ -2061,11 +2081,11 @@ .class private abstract auto ansi sealed ''.$Linq101Partitioning01 extends [mscorlib]System.Object { - .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 numbers@7 + .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 'numbers@7-3' .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 first3Numbers@10 .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 customers@17 + .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 'customers@17-2' .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) .field static assembly class [mscorlib]System.Tuple`3[] WAOrders@18 .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) @@ -2100,7 +2120,7 @@ [11] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder V_11, [12] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder V_12, [13] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder V_13) - .line 7,7 : 1,47 + .line 7,7 : 1,47 IL_0000: nop IL_0001: ldc.i4.5 IL_0002: ldc.i4.4 @@ -2134,9 +2154,9 @@ IL_003e: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1) IL_0043: dup - IL_0044: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Partitioning01::numbers@7 + IL_0044: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Partitioning01::'numbers@7-3' IL_0049: stloc.0 - .line 10,14 : 1,20 + .line 10,14 : 1,20 IL_004a: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_004f: stloc.s builder@ IL_0051: ldloc.s builder@ @@ -2159,12 +2179,12 @@ IL_0072: dup IL_0073: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Partitioning01::first3Numbers@10 IL_0078: stloc.1 - .line 17,17 : 1,34 + .line 17,17 : 1,34 IL_0079: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [Utils]Utils::getCustomerList() IL_007e: dup - IL_007f: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Partitioning01::customers@17 + IL_007f: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Partitioning01::'customers@17-2' IL_0084: stloc.2 - .line 18,24 : 1,21 + .line 18,24 : 1,21 IL_0085: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_008a: stloc.s V_9 IL_008c: ldloc.s V_9 @@ -2189,7 +2209,7 @@ IL_00cd: dup IL_00ce: stsfld class [mscorlib]System.Tuple`3[] ''.$Linq101Partitioning01::WAOrders@18 IL_00d3: stloc.3 - .line 27,31 : 1,20 + .line 27,31 : 1,20 IL_00d4: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_00d9: stloc.s V_10 IL_00db: ldloc.s V_10 @@ -2212,7 +2232,7 @@ IL_00fc: dup IL_00fd: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Partitioning01::allButFirst4Numbers@27 IL_0102: stloc.s allButFirst4Numbers - .line 34,40 : 1,34 + .line 34,40 : 1,34 IL_0104: ldc.i4.2 IL_0105: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_010a: stloc.s V_11 @@ -2240,7 +2260,7 @@ IL_0152: dup IL_0153: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1> ''.$Linq101Partitioning01::WAOrders2@34 IL_0158: stloc.s WAOrders2 - .line 43,47 : 1,20 + .line 43,47 : 1,20 IL_015a: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_015f: stloc.s V_12 IL_0161: ldloc.s V_12 @@ -2263,7 +2283,7 @@ IL_0186: dup IL_0187: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Partitioning01::firstNumbersLessThan6@43 IL_018c: stloc.s firstNumbersLessThan6 - .line 50,54 : 1,20 + .line 50,54 : 1,20 IL_018e: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_0193: stloc.s V_13 IL_0195: ldloc.s V_13 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Quantifiers01.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Quantifiers01.il.netfx4.bsl index ed80481a283..a33c640b57f 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Quantifiers01.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Quantifiers01.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17376 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly extern Utils { @@ -31,27 +31,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Linq101Quantifiers01 { - // Offset: 0x00000000 Length: 0x000003BC + // Offset: 0x00000000 Length: 0x00000397 } .mresource public FSharpOptimizationData.Linq101Quantifiers01 { - // Offset: 0x000003C0 Length: 0x000000FF + // Offset: 0x000003A0 Length: 0x000000FF } .module Linq101Quantifiers01.exe -// MVID: {4F31D868-76DD-E373-A745-038368D8314F} +// MVID: {5775B173-76DD-E373-A745-038373B17557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000270000 +// Image base: 0x007D0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -116,7 +116,7 @@ // Code size 196 (0xc4) .maxstack 6 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\QueryExpressionStepping\\Linq101Quantifiers01.fs' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Quantifiers01/iAfterE@12::pc IL_0006: ldc.i4.1 @@ -133,25 +133,25 @@ IL_001f: br.s IL_0027 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br.s IL_009a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0024: nop IL_0025: br.s IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br IL_00bb - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002d: nop - .line 12,12 : 9,26 + .line 12,12 : 9,26 IL_002e: ldarg.0 IL_002f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Quantifiers01::get_words() IL_0034: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 @@ -160,7 +160,7 @@ IL_0043: ldarg.0 IL_0044: ldc.i4.1 IL_0045: stfld int32 Linq101Quantifiers01/iAfterE@12::pc - .line 12,12 : 9,26 + .line 12,12 : 9,26 IL_004a: ldarg.0 IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' IL_0050: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -171,7 +171,7 @@ IL_0059: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' IL_005e: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0063: stfld string Linq101Quantifiers01/iAfterE@12::_arg1 - .line 12,12 : 9,26 + .line 12,12 : 9,26 IL_0068: ldarg.0 IL_0069: ldarg.0 IL_006a: ldfld string Linq101Quantifiers01/iAfterE@12::_arg1 @@ -179,7 +179,7 @@ IL_0074: ldarg.0 IL_0075: ldc.i4.2 IL_0076: stfld int32 Linq101Quantifiers01/iAfterE@12::pc - .line 13,13 : 9,34 + .line 13,13 : 9,34 IL_007b: ldarg.0 IL_007c: ldarg.0 IL_007d: ldfld string Linq101Quantifiers01/iAfterE@12::w @@ -190,18 +190,18 @@ IL_0089: ldarg.0 IL_008a: ldnull IL_008b: stfld string Linq101Quantifiers01/iAfterE@12::w - .line 12,12 : 9,26 + .line 12,12 : 9,26 IL_0090: ldarg.0 IL_0091: ldnull IL_0092: stfld string Linq101Quantifiers01/iAfterE@12::_arg1 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0097: nop IL_0098: br.s IL_004a IL_009a: ldarg.0 IL_009b: ldc.i4.3 IL_009c: stfld int32 Linq101Quantifiers01/iAfterE@12::pc - .line 12,12 : 9,26 + .line 12,12 : 9,26 IL_00a1: ldarg.0 IL_00a2: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' IL_00a7: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -227,7 +227,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -238,13 +238,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -265,30 +265,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -297,7 +297,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -314,18 +314,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 12,12 : 9,26 + .line 12,12 : 9,26 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -338,11 +338,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0095: ret } // end of method iAfterE@12::Close @@ -434,6 +434,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -446,7 +448,7 @@ { // Code size 13 (0xd) .maxstack 8 - .line 13,13 : 17,33 + .line 13,13 : 17,33 IL_0000: nop IL_0001: ldarg.1 IL_0002: ldstr "ei" @@ -463,6 +465,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -479,11 +483,11 @@ // Code size 18 (0x12) .maxstack 6 .locals init ([0] class [Utils]Utils/Product p) - .line 21,21 : 9,29 + .line 21,21 : 9,29 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 22,22 : 9,32 + .line 22,22 : 9,32 IL_0003: ldarg.0 IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Quantifiers01/productGroups@21::builder@ IL_0009: ldloc.0 @@ -500,6 +504,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -512,7 +518,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 22,22 : 20,21 + .line 22,22 : 20,21 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -526,6 +532,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -538,7 +546,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 22,22 : 22,32 + .line 22,22 : 22,32 IL_0000: nop IL_0001: ldarg.1 IL_0002: tail. @@ -555,6 +563,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -571,7 +581,7 @@ // Code size 18 (0x12) .maxstack 6 .locals init ([0] class [System.Core]System.Linq.IGrouping`2 g) - .line 22,22 : 38,39 + .line 22,22 : 38,39 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 @@ -604,7 +614,7 @@ { // Code size 11 (0xb) .maxstack 8 - .line 23,23 : 31,49 + .line 23,23 : 31,49 IL_0000: nop IL_0001: ldarg.1 IL_0002: callvirt instance int32 [Utils]Utils/Product::get_UnitsInStock() @@ -621,6 +631,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -633,7 +645,7 @@ { // Code size 24 (0x18) .maxstack 8 - .line 23,23 : 16,50 + .line 23,23 : 16,50 IL_0000: nop IL_0001: ldarg.1 IL_0002: newobj instance void Linq101Quantifiers01/'productGroups@23-5'::.ctor() @@ -653,6 +665,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -665,7 +679,7 @@ { // Code size 14 (0xe) .maxstack 8 - .line 24,24 : 17,25 + .line 24,24 : 17,25 IL_0000: nop IL_0001: ldarg.1 IL_0002: callvirt instance !0 class [System.Core]System.Linq.IGrouping`2::get_Key() @@ -732,7 +746,7 @@ { // Code size 196 (0xc4) .maxstack 6 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Quantifiers01/onlyOdd@32::pc IL_0006: ldc.i4.1 @@ -749,25 +763,25 @@ IL_001f: br.s IL_0027 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br.s IL_009a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0024: nop IL_0025: br.s IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br IL_00bb - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002d: nop - .line 32,32 : 9,28 + .line 32,32 : 9,28 IL_002e: ldarg.0 IL_002f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Quantifiers01::get_numbers() IL_0034: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 @@ -776,7 +790,7 @@ IL_0043: ldarg.0 IL_0044: ldc.i4.1 IL_0045: stfld int32 Linq101Quantifiers01/onlyOdd@32::pc - .line 32,32 : 9,28 + .line 32,32 : 9,28 IL_004a: ldarg.0 IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' IL_0050: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -787,7 +801,7 @@ IL_0059: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' IL_005e: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() IL_0063: stfld int32 Linq101Quantifiers01/onlyOdd@32::_arg1 - .line 32,32 : 9,28 + .line 32,32 : 9,28 IL_0068: ldarg.0 IL_0069: ldarg.0 IL_006a: ldfld int32 Linq101Quantifiers01/onlyOdd@32::_arg1 @@ -795,7 +809,7 @@ IL_0074: ldarg.0 IL_0075: ldc.i4.2 IL_0076: stfld int32 Linq101Quantifiers01/onlyOdd@32::pc - .line 33,33 : 9,24 + .line 33,33 : 9,24 IL_007b: ldarg.0 IL_007c: ldarg.0 IL_007d: ldfld int32 Linq101Quantifiers01/onlyOdd@32::n @@ -806,18 +820,18 @@ IL_0089: ldarg.0 IL_008a: ldc.i4.0 IL_008b: stfld int32 Linq101Quantifiers01/onlyOdd@32::n - .line 32,32 : 9,28 + .line 32,32 : 9,28 IL_0090: ldarg.0 IL_0091: ldc.i4.0 IL_0092: stfld int32 Linq101Quantifiers01/onlyOdd@32::_arg1 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0097: nop IL_0098: br.s IL_004a IL_009a: ldarg.0 IL_009b: ldc.i4.3 IL_009c: stfld int32 Linq101Quantifiers01/onlyOdd@32::pc - .line 32,32 : 9,28 + .line 32,32 : 9,28 IL_00a1: ldarg.0 IL_00a2: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' IL_00a7: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -843,7 +857,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -854,13 +868,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -881,30 +895,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -913,7 +927,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -930,18 +944,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 32,32 : 9,28 + .line 32,32 : 9,28 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -954,11 +968,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0095: ret } // end of method onlyOdd@32::Close @@ -1050,6 +1064,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -1062,7 +1078,7 @@ { // Code size 8 (0x8) .maxstack 8 - .line 33,33 : 14,23 + .line 33,33 : 14,23 IL_0000: nop IL_0001: ldarg.1 IL_0002: ldc.i4.2 @@ -1081,6 +1097,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -1097,11 +1115,11 @@ // Code size 18 (0x12) .maxstack 6 .locals init ([0] class [Utils]Utils/Product p) - .line 39,39 : 9,29 + .line 39,39 : 9,29 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 40,40 : 9,32 + .line 40,40 : 9,32 IL_0003: ldarg.0 IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Quantifiers01/productGroups2@39::builder@ IL_0009: ldloc.0 @@ -1118,6 +1136,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -1130,7 +1150,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 40,40 : 20,21 + .line 40,40 : 20,21 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -1144,6 +1164,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -1156,7 +1178,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 40,40 : 22,32 + .line 40,40 : 22,32 IL_0000: nop IL_0001: ldarg.1 IL_0002: tail. @@ -1173,6 +1195,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -1189,7 +1213,7 @@ // Code size 18 (0x12) .maxstack 6 .locals init ([0] class [System.Core]System.Linq.IGrouping`2 g) - .line 40,40 : 38,39 + .line 40,40 : 38,39 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 @@ -1222,7 +1246,7 @@ { // Code size 11 (0xb) .maxstack 8 - .line 41,41 : 31,49 + .line 41,41 : 31,49 IL_0000: nop IL_0001: ldarg.1 IL_0002: callvirt instance int32 [Utils]Utils/Product::get_UnitsInStock() @@ -1239,6 +1263,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -1251,7 +1277,7 @@ { // Code size 24 (0x18) .maxstack 8 - .line 41,41 : 16,50 + .line 41,41 : 16,50 IL_0000: nop IL_0001: ldarg.1 IL_0002: newobj instance void Linq101Quantifiers01/'productGroups2@41-5'::.ctor() @@ -1271,6 +1297,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -1283,7 +1311,7 @@ { // Code size 14 (0xe) .maxstack 8 - .line 42,42 : 17,25 + .line 42,42 : 17,25 IL_0000: nop IL_0001: ldarg.1 IL_0002: callvirt instance !0 class [System.Core]System.Linq.IGrouping`2::get_Key() @@ -1300,7 +1328,7 @@ { // Code size 6 (0x6) .maxstack 8 - IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Quantifiers01::words@8 + IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Quantifiers01::'words@8-4' IL_0005: ret } // end of method Linq101Quantifiers01::get_words @@ -1318,7 +1346,7 @@ { // Code size 6 (0x6) .maxstack 8 - IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Quantifiers01::products@17 + IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Quantifiers01::'products@17-8' IL_0005: ret } // end of method Linq101Quantifiers01::get_products @@ -1336,7 +1364,7 @@ { // Code size 6 (0x6) .maxstack 8 - IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Quantifiers01::numbers@28 + IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Quantifiers01::'numbers@28-5' IL_0005: ret } // end of method Linq101Quantifiers01::get_numbers @@ -1403,15 +1431,15 @@ .class private abstract auto ansi sealed ''.$Linq101Quantifiers01 extends [mscorlib]System.Object { - .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 words@8 + .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 'words@8-4' .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) .field static assembly bool iAfterE@10 .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 products@17 + .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 'products@17-8' .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) .field static assembly class [mscorlib]System.Tuple`2>[] productGroups@19 .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 numbers@28 + .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 'numbers@28-5' .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) .field static assembly bool onlyOdd@30 .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) @@ -1437,7 +1465,7 @@ [8] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder V_8, [9] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder V_9, [10] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder V_10) - .line 8,8 : 1,54 + .line 8,8 : 1,54 IL_0000: nop IL_0001: ldstr "believe" IL_0006: ldstr "relief" @@ -1453,7 +1481,7 @@ IL_0029: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1) IL_002e: dup - IL_002f: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Quantifiers01::words@8 + IL_002f: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Quantifiers01::'words@8-4' IL_0034: stloc.0 IL_0035: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_003a: stloc.s builder@ @@ -1475,12 +1503,12 @@ IL_0057: dup IL_0058: stsfld bool ''.$Linq101Quantifiers01::iAfterE@10 IL_005d: stloc.1 - .line 17,17 : 1,32 + .line 17,17 : 1,32 IL_005e: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [Utils]Utils::getProductList() IL_0063: dup - IL_0064: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Quantifiers01::products@17 + IL_0064: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Quantifiers01::'products@17-8' IL_0069: stloc.2 - .line 19,25 : 1,21 + .line 19,25 : 1,21 IL_006a: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_006f: stloc.s V_8 IL_0071: ldloc.s V_8 @@ -1516,7 +1544,7 @@ IL_00d1: dup IL_00d2: stsfld class [mscorlib]System.Tuple`2>[] ''.$Linq101Quantifiers01::productGroups@19 IL_00d7: stloc.3 - .line 28,28 : 1,35 + .line 28,28 : 1,35 IL_00d8: ldc.i4.1 IL_00d9: ldc.i4.s 11 IL_00db: ldc.i4.3 @@ -1540,7 +1568,7 @@ IL_0107: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1) IL_010c: dup - IL_010d: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Quantifiers01::numbers@28 + IL_010d: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Quantifiers01::'numbers@28-5' IL_0112: stloc.s numbers IL_0114: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_0119: stloc.s V_9 @@ -1562,7 +1590,7 @@ IL_0136: dup IL_0137: stsfld bool ''.$Linq101Quantifiers01::onlyOdd@30 IL_013c: stloc.s onlyOdd - .line 37,43 : 1,21 + .line 37,43 : 1,21 IL_013e: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_0143: stloc.s V_10 IL_0145: ldloc.s V_10 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Where01.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Where01.il.netfx4.bsl index 58b3d442adb..3a10f696ff9 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Where01.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Where01.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17376 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly extern Utils { @@ -26,27 +26,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Linq101Where01 { - // Offset: 0x00000000 Length: 0x000003F3 + // Offset: 0x00000000 Length: 0x000003CE } .mresource public FSharpOptimizationData.Linq101Where01 { - // Offset: 0x000003F8 Length: 0x0000012E + // Offset: 0x000003D8 Length: 0x0000012E } .module Linq101Where01.exe -// MVID: {4F31D873-FF23-CD21-A745-038373D8314F} +// MVID: {5775B177-FF23-CD21-A745-038377B17557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000470000 +// Image base: 0x00FE0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -62,6 +62,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -79,11 +81,11 @@ .maxstack 6 .locals init ([0] int32 n) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 14,14 : 9,28 + .line 14,14 : 9,28 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\QueryExpressionStepping\\Linq101Where01.fs' IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 15,15 : 9,22 + .line 15,15 : 9,22 IL_0003: ldarg.0 IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Where01/lowNums@14::builder@ IL_0009: ldloc.0 @@ -100,6 +102,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -112,7 +116,7 @@ { // Code size 6 (0x6) .maxstack 8 - .line 15,15 : 16,21 + .line 15,15 : 16,21 IL_0000: nop IL_0001: ldarg.1 IL_0002: ldc.i4.5 @@ -128,6 +132,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -140,7 +146,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 16,16 : 16,17 + .line 16,16 : 16,17 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -155,6 +161,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -171,11 +179,11 @@ // Code size 18 (0x12) .maxstack 6 .locals init ([0] class [Utils]Utils/Product p) - .line 24,24 : 9,29 + .line 24,24 : 9,29 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 25,25 : 9,35 + .line 25,25 : 9,35 IL_0003: ldarg.0 IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Where01/soldOutProducts@24::builder@ IL_0009: ldloc.0 @@ -192,6 +200,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -204,7 +214,7 @@ { // Code size 11 (0xb) .maxstack 8 - .line 25,25 : 16,34 + .line 25,25 : 16,34 IL_0000: nop IL_0001: ldarg.1 IL_0002: callvirt instance int32 [Utils]Utils/Product::get_UnitsInStock() @@ -221,6 +231,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -233,7 +245,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 26,26 : 16,17 + .line 26,26 : 16,17 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -248,6 +260,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -264,11 +278,11 @@ // Code size 18 (0x12) .maxstack 6 .locals init ([0] class [Utils]Utils/Product p) - .line 32,32 : 9,29 + .line 32,32 : 9,29 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 33,33 : 9,58 + .line 33,33 : 9,58 IL_0003: ldarg.0 IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Where01/expensiveInStockProducts@32::builder@ IL_0009: ldloc.0 @@ -285,6 +299,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -335,6 +351,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -347,7 +365,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 34,34 : 16,17 + .line 34,34 : 16,17 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -362,6 +380,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder builder@) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -378,11 +398,11 @@ // Code size 18 (0x12) .maxstack 6 .locals init ([0] class [Utils]Utils/Customer c) - .line 42,42 : 9,30 + .line 42,42 : 9,30 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 43,43 : 9,32 + .line 43,43 : 9,32 IL_0003: ldarg.0 IL_0004: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Where01/waCustomers@42::builder@ IL_0009: ldloc.0 @@ -399,6 +419,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -411,7 +433,7 @@ { // Code size 18 (0x12) .maxstack 8 - .line 43,43 : 16,31 + .line 43,43 : 16,31 IL_0000: nop IL_0001: ldarg.1 IL_0002: callvirt instance string [Utils]Utils/Customer::get_Region() @@ -429,6 +451,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -441,7 +465,7 @@ { // Code size 3 (0x3) .maxstack 8 - .line 44,44 : 16,17 + .line 44,44 : 16,17 IL_0000: nop IL_0001: ldarg.1 IL_0002: ret @@ -455,6 +479,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -467,7 +493,7 @@ { // Code size 10 (0xa) .maxstack 8 - .line 55,55 : 19,21 + .line 55,55 : 19,21 IL_0000: nop IL_0001: ldarg.1 IL_0002: tail. @@ -483,6 +509,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -496,7 +524,7 @@ { // Code size 23 (0x17) .maxstack 8 - .line 54,54 : 29,49 + .line 54,54 : 29,49 IL_0000: nop IL_0001: ldarg.2 IL_0002: callvirt instance int32 [mscorlib]System.String::get_Length() @@ -507,12 +535,12 @@ IL_000c: br.s IL_0015 - .line 54,54 : 50,57 + .line 54,54 : 50,57 IL_000e: ldarg.2 IL_000f: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::Some(!0) IL_0014: ret - .line 54,54 : 63,67 + .line 54,54 : 63,67 IL_0015: ldnull IL_0016: ret } // end of method 'shortDigits@54-1'::Invoke @@ -525,6 +553,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -538,11 +568,11 @@ // Code size 12 (0xc) .maxstack 5 .locals init ([0] string d) - .line 51,51 : 9,27 + .line 51,51 : 9,27 IL_0000: nop IL_0001: ldarg.1 IL_0002: stloc.0 - .line 52,52 : 9,17 + .line 52,52 : 9,17 IL_0003: ldloc.0 IL_0004: tail. IL_0006: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Singleton(!!0) @@ -598,7 +628,7 @@ { // Code size 187 (0xbb) .maxstack 7 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Where01/'shortDigits@52-2'::pc IL_0006: ldc.i4.1 @@ -615,25 +645,25 @@ IL_001f: br.s IL_0027 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop IL_0022: br.s IL_0091 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0024: nop IL_0025: br.s IL_0087 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: nop IL_0028: br IL_00b2 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_002d: nop - .line 52,52 : 9,17 + .line 52,52 : 9,17 IL_002e: ldarg.0 IL_002f: newobj instance void Linq101Where01/'shortDigits@51-3'::.ctor() IL_0034: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Where01::get_digits() @@ -645,7 +675,7 @@ IL_004d: ldarg.0 IL_004e: ldc.i4.1 IL_004f: stfld int32 Linq101Where01/'shortDigits@52-2'::pc - .line 52,52 : 9,17 + .line 52,52 : 9,17 IL_0054: ldarg.0 IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Where01/'shortDigits@52-2'::'enum' IL_005a: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() @@ -659,7 +689,7 @@ IL_0072: ldarg.0 IL_0073: ldc.i4.2 IL_0074: stfld int32 Linq101Where01/'shortDigits@52-2'::pc - .line 52,52 : 16,17 + .line 52,52 : 16,17 IL_0079: ldarg.0 IL_007a: ldarg.0 IL_007b: ldfld string Linq101Where01/'shortDigits@52-2'::d @@ -667,18 +697,18 @@ IL_0085: ldc.i4.1 IL_0086: ret - .line 52,52 : 9,17 + .line 52,52 : 9,17 IL_0087: ldarg.0 IL_0088: ldnull IL_0089: stfld string Linq101Where01/'shortDigits@52-2'::d - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_008e: nop IL_008f: br.s IL_0054 IL_0091: ldarg.0 IL_0092: ldc.i4.3 IL_0093: stfld int32 Linq101Where01/'shortDigits@52-2'::pc - .line 52,52 : 9,17 + .line 52,52 : 9,17 IL_0098: ldarg.0 IL_0099: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Where01/'shortDigits@52-2'::'enum' IL_009e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) @@ -704,7 +734,7 @@ .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldarg.0 @@ -715,13 +745,13 @@ IL_0015) IL_0013: br.s IL_001b - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br IL_0089 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop .try { @@ -742,30 +772,30 @@ IL_003f: br.s IL_004a - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0041: nop IL_0042: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0044: nop IL_0045: br.s IL_004f - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0047: nop IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: nop IL_004b: br.s IL_0063 - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004d: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: ldarg.0 IL_0050: ldc.i4.3 @@ -774,7 +804,7 @@ IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Where01/'shortDigits@52-2'::'enum' IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) IL_0061: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0062: nop IL_0063: ldarg.0 IL_0064: ldc.i4.3 @@ -791,18 +821,18 @@ { IL_0075: castclass [mscorlib]System.Exception IL_007a: stloc.2 - .line 52,52 : 9,17 + .line 52,52 : 9,17 IL_007b: ldloc.2 IL_007c: stloc.0 IL_007d: ldnull IL_007e: stloc.1 IL_007f: leave.s IL_0081 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 } // end handler IL_0081: ldloc.1 IL_0082: pop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0083: nop IL_0084: br IL_0002 @@ -815,11 +845,11 @@ IL_0091: br.s IL_0095 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0093: ldloc.0 IL_0094: throw - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0095: ret } // end of method 'shortDigits@52-2'::Close @@ -908,7 +938,7 @@ { // Code size 6 (0x6) .maxstack 8 - IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Where01::numbers@9 + IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Where01::'numbers@9-7' IL_0005: ret } // end of method Linq101Where01::get_numbers @@ -926,7 +956,7 @@ { // Code size 6 (0x6) .maxstack 8 - IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Where01::products@20 + IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Where01::'products@20-10' IL_0005: ret } // end of method Linq101Where01::get_products @@ -953,7 +983,7 @@ { // Code size 6 (0x6) .maxstack 8 - IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Where01::customers@38 + IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Where01::'customers@38-4' IL_0005: ret } // end of method Linq101Where01::get_customers @@ -971,7 +1001,7 @@ { // Code size 6 (0x6) .maxstack 8 - IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Where01::digits@48 + IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Where01::'digits@48-4' IL_0005: ret } // end of method Linq101Where01::get_digits @@ -1043,21 +1073,21 @@ .class private abstract auto ansi sealed ''.$Linq101Where01 extends [mscorlib]System.Object { - .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 numbers@9 + .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 'numbers@9-7' .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 lowNums@12 .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 products@20 + .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 'products@20-10' .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) .field static assembly class [mscorlib]System.Collections.Generic.IEnumerable`1 soldOutProducts@22 .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) .field static assembly class [mscorlib]System.Collections.Generic.IEnumerable`1 expensiveInStockProducts@30 .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 customers@38 + .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 'customers@38-4' .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) .field static assembly class [Utils]Utils/Customer[] waCustomers@40 .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 digits@48 + .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 'digits@48-4' .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) .field static assembly class [mscorlib]System.Collections.Generic.IEnumerable`1 shortDigits@49 .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) @@ -1084,7 +1114,7 @@ [11] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder V_11, [12] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder V_12, [13] class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder V_13) - .line 9,9 : 1,47 + .line 9,9 : 1,47 IL_0000: nop IL_0001: ldc.i4.5 IL_0002: ldc.i4.4 @@ -1118,9 +1148,9 @@ IL_003e: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1) IL_0043: dup - IL_0044: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Where01::numbers@9 + IL_0044: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Where01::'numbers@9-7' IL_0049: stloc.0 - .line 12,17 : 1,20 + .line 12,17 : 1,20 IL_004a: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_004f: stloc.s builder@ IL_0051: ldloc.s builder@ @@ -1145,10 +1175,10 @@ IL_0092: dup IL_0093: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Where01::lowNums@12 IL_0098: stloc.1 - .line 20,20 : 1,32 + .line 20,20 : 1,32 IL_0099: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [Utils]Utils::getProductList() IL_009e: dup - IL_009f: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Where01::products@20 + IL_009f: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Where01::'products@20-10' IL_00a4: stloc.2 IL_00a5: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_00aa: stloc.s V_10 @@ -1196,12 +1226,12 @@ IL_0132: dup IL_0133: stsfld class [mscorlib]System.Collections.Generic.IEnumerable`1 ''.$Linq101Where01::expensiveInStockProducts@30 IL_0138: stloc.s expensiveInStockProducts - .line 38,38 : 1,34 + .line 38,38 : 1,34 IL_013a: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [Utils]Utils::getCustomerList() IL_013f: dup - IL_0140: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Where01::customers@38 + IL_0140: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Where01::'customers@38-4' IL_0145: stloc.s customers - .line 40,45 : 1,21 + .line 40,45 : 1,21 IL_0147: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_014c: stloc.s V_12 IL_014e: ldloc.s V_12 @@ -1226,7 +1256,7 @@ IL_018f: dup IL_0190: stsfld class [Utils]Utils/Customer[] ''.$Linq101Where01::waCustomers@40 IL_0195: stloc.s waCustomers - .line 48,48 : 1,96 + .line 48,48 : 1,96 IL_0197: ldstr "zero" IL_019c: ldstr "one" IL_01a1: ldstr "two" @@ -1259,9 +1289,9 @@ IL_01fb: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1) IL_0200: dup - IL_0201: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Where01::digits@48 + IL_0201: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Where01::'digits@48-4' IL_0206: stloc.s digits - .line 49,55 : 1,21 + .line 49,55 : 1,21 IL_0208: newobj instance void Linq101Where01/shortDigits@55::.ctor() IL_020d: newobj instance void Linq101Where01/'shortDigits@54-1'::.ctor() IL_0212: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest4.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest4.il.bsl deleted file mode 100644 index 9c9da970c21..00000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest4.il.bsl +++ /dev/null @@ -1,360 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 3.5.30729.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v2.0.50727 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 2:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 2:0:0:0 -} -.assembly SeqExpressionSteppingTest4 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.SeqExpressionSteppingTest4 -{ - // Offset: 0x00000000 Length: 0x00000249 -} -.mresource public FSharpOptimizationData.SeqExpressionSteppingTest4 -{ - // Offset: 0x00000250 Length: 0x000000AD -} -.module SeqExpressionSteppingTest4.dll -// MVID: {4D94A7DA-241E-0874-A745-0383DAA7944D} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x002D0000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed SeqExpressionSteppingTest4 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class abstract auto ansi sealed nested public SeqExpressionSteppingTest4 - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto autochar serializable sealed nested assembly beforefieldinit specialname f3@4 - extends class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1 - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 06 00 00 00 00 00 ) - .field public class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x - .field public class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 y - .field public int32 z - .field public int32 pc - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .field public int32 current - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method public specialname rtspecialname - instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 y, - int32 z, - int32 pc, - int32 current) cil managed - { - // Code size 44 (0x2c) - .maxstack 6 - IL_0000: ldarg.0 - IL_0001: ldarg.1 - IL_0002: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::x - IL_0007: ldarg.0 - IL_0008: ldarg.2 - IL_0009: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::y - IL_000e: ldarg.0 - IL_000f: ldarg.3 - IL_0010: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::z - IL_0015: ldarg.0 - IL_0016: ldarg.s pc - IL_0018: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::pc - IL_001d: ldarg.0 - IL_001e: ldarg.s current - IL_0020: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::current - IL_0025: ldarg.0 - IL_0026: call instance void class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1::.ctor() - IL_002b: ret - } // end of method f3@4::.ctor - - .method public strict virtual instance int32 - GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed - { - // Code size 210 (0xd2) - .maxstack 7 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 - IL_0000: ldarg.0 - IL_0001: ldfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::pc - IL_0006: ldc.i4.1 - IL_0007: sub - IL_0008: switch ( - IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_0030 - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_002a - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_0021: nop - IL_0022: br.s IL_007b - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_0024: nop - IL_0025: br IL_00ad - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_002a: nop - IL_002b: br IL_00c9 - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_0030: nop - .line 4,4 : 15,28 - IL_0031: ldarg.0 - IL_0032: ldc.i4.0 - IL_0033: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_0038: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::x - .line 5,5 : 15,21 - IL_003d: ldarg.0 - IL_003e: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::x - IL_0043: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0048: nop - .line 6,6 : 15,28 - IL_0049: ldarg.0 - IL_004a: ldc.i4.0 - IL_004b: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_0050: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::y - .line 7,7 : 15,21 - IL_0055: ldarg.0 - IL_0056: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::y - IL_005b: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.1 - IL_0063: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::pc - .line 8,8 : 15,23 - IL_0068: ldarg.0 - IL_0069: ldarg.0 - IL_006a: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::x - IL_006f: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0074: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::current - IL_0079: ldc.i4.1 - IL_007a: ret - - .line 9,9 : 15,30 - IL_007b: ldarg.0 - IL_007c: ldarg.0 - IL_007d: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::x - IL_0082: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0087: ldarg.0 - IL_0088: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::y - IL_008d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0092: add - IL_0093: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::z - IL_0098: ldarg.0 - IL_0099: ldc.i4.2 - IL_009a: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::pc - .line 10,10 : 15,22 - IL_009f: ldarg.0 - IL_00a0: ldarg.0 - IL_00a1: ldfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::z - IL_00a6: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::current - IL_00ab: ldc.i4.1 - IL_00ac: ret - - .line 9,9 : 19,20 - IL_00ad: ldarg.0 - IL_00ae: ldc.i4.0 - IL_00af: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::z - .line 6,6 : 19,20 - IL_00b4: ldarg.0 - IL_00b5: ldnull - IL_00b6: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::y - IL_00bb: ldarg.0 - IL_00bc: ldnull - IL_00bd: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::x - IL_00c2: ldarg.0 - IL_00c3: ldc.i4.3 - IL_00c4: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::pc - IL_00c9: ldarg.0 - IL_00ca: ldc.i4.0 - IL_00cb: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::current - IL_00d0: ldc.i4.0 - IL_00d1: ret - } // end of method f3@4::GenerateNext - - .method public strict virtual instance void - Close() cil managed - { - // Code size 9 (0x9) - .maxstack 6 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldc.i4.3 - IL_0003: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::pc - IL_0008: ret - } // end of method f3@4::Close - - .method public strict virtual instance bool - get_CheckClose() cil managed - { - // Code size 57 (0x39) - .maxstack 5 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::pc - IL_0007: switch ( - IL_001e, - IL_0020, - IL_0022, - IL_0024) - IL_001c: br.s IL_0032 - - IL_001e: br.s IL_0026 - - IL_0020: br.s IL_0029 - - IL_0022: br.s IL_002c - - IL_0024: br.s IL_002f - - IL_0026: nop - IL_0027: br.s IL_0037 - - IL_0029: nop - IL_002a: br.s IL_0035 - - IL_002c: nop - IL_002d: br.s IL_0033 - - IL_002f: nop - IL_0030: br.s IL_0037 - - IL_0032: nop - IL_0033: ldc.i4.0 - IL_0034: ret - - IL_0035: ldc.i4.0 - IL_0036: ret - - IL_0037: ldc.i4.0 - IL_0038: ret - } // end of method f3@4::get_CheckClose - - .method public strict virtual instance int32 - get_LastGenerated() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 8 (0x8) - .maxstack 5 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::current - IL_0007: ret - } // end of method f3@4::get_LastGenerated - - .method public strict virtual instance class [mscorlib]System.Collections.Generic.IEnumerator`1 - GetFreshEnumerator() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 12 (0xc) - .maxstack 9 - IL_0000: nop - IL_0001: ldnull - IL_0002: ldnull - IL_0003: ldc.i4.0 - IL_0004: ldc.i4.0 - IL_0005: ldc.i4.0 - IL_0006: newobj instance void SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, - int32, - int32, - int32) - IL_000b: ret - } // end of method f3@4::GetFreshEnumerator - - } // end of class f3@4 - - .method public static class [mscorlib]System.Collections.Generic.IEnumerable`1 - f3() cil managed - { - // Code size 12 (0xc) - .maxstack 7 - .line 4,10 : 9,24 - IL_0000: nop - IL_0001: ldnull - IL_0002: ldnull - IL_0003: ldc.i4.0 - IL_0004: ldc.i4.0 - IL_0005: ldc.i4.0 - IL_0006: newobj instance void SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@4::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, - int32, - int32, - int32) - IL_000b: ret - } // end of method SeqExpressionSteppingTest4::f3 - - } // end of class SeqExpressionSteppingTest4 - -} // end of class SeqExpressionSteppingTest4 - -.class private abstract auto ansi sealed ''.$SeqExpressionSteppingTest4 - extends [mscorlib]System.Object -{ - .field static assembly int32 init@ - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method private specialname rtspecialname static - void .cctor() cil managed - { - // Code size 13 (0xd) - .maxstack 3 - .line 12,12 : 13,30 - IL_0000: nop - IL_0001: call class [mscorlib]System.Collections.Generic.IEnumerable`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4::f3() - IL_0006: call int32 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Length(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_000b: pop - IL_000c: ret - } // end of method $SeqExpressionSteppingTest4::.cctor - -} // end of class ''.$SeqExpressionSteppingTest4 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest5.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest5.il.bsl deleted file mode 100644 index 890987dcc1f..00000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest5.il.bsl +++ /dev/null @@ -1,520 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 3.5.30729.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v2.0.50727 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 2:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 2:0:0:0 -} -.assembly SeqExpressionSteppingTest5 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.SeqExpressionSteppingTest5 -{ - // Offset: 0x00000000 Length: 0x00000249 -} -.mresource public FSharpOptimizationData.SeqExpressionSteppingTest5 -{ - // Offset: 0x00000250 Length: 0x000000AD -} -.module SeqExpressionSteppingTest5.dll -// MVID: {4D94A815-241E-0893-A745-038315A8944D} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x002A0000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed SeqExpressionSteppingTest5 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class abstract auto ansi sealed nested public SeqExpressionSteppingTest5 - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto autochar serializable sealed nested assembly beforefieldinit specialname f4@4 - extends class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1 - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 06 00 00 00 00 00 ) - .field public class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x - .field public class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 y - .field public int32 z - .field public int32 pc - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .field public int32 current - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method public specialname rtspecialname - instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 y, - int32 z, - int32 pc, - int32 current) cil managed - { - // Code size 44 (0x2c) - .maxstack 6 - IL_0000: ldarg.0 - IL_0001: ldarg.1 - IL_0002: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::x - IL_0007: ldarg.0 - IL_0008: ldarg.2 - IL_0009: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::y - IL_000e: ldarg.0 - IL_000f: ldarg.3 - IL_0010: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::z - IL_0015: ldarg.0 - IL_0016: ldarg.s pc - IL_0018: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::pc - IL_001d: ldarg.0 - IL_001e: ldarg.s current - IL_0020: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::current - IL_0025: ldarg.0 - IL_0026: call instance void class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1::.ctor() - IL_002b: ret - } // end of method f4@4::.ctor - - .method public strict virtual instance int32 - GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed - { - // Code size 249 (0xf9) - .maxstack 7 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 - IL_0000: ldarg.0 - IL_0001: ldfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::pc - IL_0006: ldc.i4.1 - IL_0007: sub - IL_0008: switch ( - IL_001f, - IL_0021, - IL_0023, - IL_0025) - IL_001d: br.s IL_0039 - - IL_001f: br.s IL_0027 - - IL_0021: br.s IL_002d - - IL_0023: br.s IL_0030 - - IL_0025: br.s IL_0033 - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_0027: nop - IL_0028: br IL_00bf - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_002d: nop - IL_002e: br.s IL_007f - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_0030: nop - IL_0031: br.s IL_00b1 - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_0033: nop - IL_0034: br IL_00f0 - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_0039: nop - .line 4,4 : 15,28 - IL_003a: ldarg.0 - IL_003b: ldc.i4.0 - IL_003c: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_0041: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::x - IL_0046: ldarg.0 - IL_0047: ldc.i4.1 - IL_0048: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::pc - .line 6,6 : 19,32 - IL_004d: ldarg.0 - IL_004e: ldc.i4.0 - IL_004f: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_0054: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::y - .line 7,7 : 19,25 - IL_0059: ldarg.0 - IL_005a: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::y - IL_005f: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0064: nop - IL_0065: ldarg.0 - IL_0066: ldc.i4.2 - IL_0067: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::pc - .line 8,8 : 19,27 - IL_006c: ldarg.0 - IL_006d: ldarg.0 - IL_006e: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::x - IL_0073: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0078: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::current - IL_007d: ldc.i4.1 - IL_007e: ret - - .line 9,9 : 19,34 - IL_007f: ldarg.0 - IL_0080: ldarg.0 - IL_0081: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::x - IL_0086: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_008b: ldarg.0 - IL_008c: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::y - IL_0091: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0096: add - IL_0097: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::z - IL_009c: ldarg.0 - IL_009d: ldc.i4.3 - IL_009e: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::pc - .line 10,10 : 19,26 - IL_00a3: ldarg.0 - IL_00a4: ldarg.0 - IL_00a5: ldfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::z - IL_00aa: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::current - IL_00af: ldc.i4.1 - IL_00b0: ret - - .line 9,9 : 23,24 - IL_00b1: ldarg.0 - IL_00b2: ldc.i4.0 - IL_00b3: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::z - IL_00b8: ldarg.0 - IL_00b9: ldnull - IL_00ba: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::y - IL_00bf: ldarg.0 - IL_00c0: ldc.i4.4 - IL_00c1: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::pc - .line 12,12 : 18,24 - IL_00c6: ldarg.0 - IL_00c7: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::x - IL_00cc: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_00d1: nop - .line 13,13 : 18,32 - IL_00d2: ldstr "done" - IL_00d7: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_00dc: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_00e1: pop - IL_00e2: ldarg.0 - IL_00e3: ldnull - IL_00e4: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::x - IL_00e9: ldarg.0 - IL_00ea: ldc.i4.4 - IL_00eb: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::pc - IL_00f0: ldarg.0 - IL_00f1: ldc.i4.0 - IL_00f2: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::current - IL_00f7: ldc.i4.0 - IL_00f8: ret - } // end of method f4@4::GenerateNext - - .method public strict virtual instance void - Close() cil managed - { - // Code size 178 (0xb2) - .maxstack 6 - .locals init ([0] class [mscorlib]System.Exception V_0, - [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, - [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 - IL_0000: ldnull - IL_0001: stloc.0 - IL_0002: ldarg.0 - IL_0003: ldfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::pc - IL_0008: ldc.i4.4 - IL_0009: sub - IL_000a: switch ( - IL_0015) - IL_0013: br.s IL_001b - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_0015: nop - IL_0016: br IL_00a5 - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_001b: nop - .try - { - IL_001c: ldarg.0 - IL_001d: ldfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::pc - IL_0022: switch ( - IL_003d, - IL_003f, - IL_0041, - IL_0043, - IL_0045) - IL_003b: br.s IL_0056 - - IL_003d: br.s IL_0047 - - IL_003f: br.s IL_004a - - IL_0041: br.s IL_004d - - IL_0043: br.s IL_0050 - - IL_0045: br.s IL_0053 - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_0047: nop - IL_0048: br.s IL_007f - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_004a: nop - IL_004b: br.s IL_005b - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_004d: nop - IL_004e: br.s IL_005a - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_0050: nop - IL_0051: br.s IL_0057 - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_0053: nop - IL_0054: br.s IL_007f - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_0056: nop - .line 100001,100001 : 0,0 - IL_0057: nop - IL_0058: br.s IL_005b - - .line 100001,100001 : 0,0 - IL_005a: nop - IL_005b: ldarg.0 - IL_005c: ldc.i4.4 - IL_005d: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::pc - .line 12,12 : 18,24 - IL_0062: ldarg.0 - IL_0063: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::x - IL_0068: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_006d: nop - .line 13,13 : 18,32 - IL_006e: ldstr "done" - IL_0073: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0078: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_007d: pop - .line 100001,100001 : 0,0 - IL_007e: nop - IL_007f: ldarg.0 - IL_0080: ldc.i4.4 - IL_0081: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::pc - IL_0086: ldarg.0 - IL_0087: ldc.i4.0 - IL_0088: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::current - IL_008d: ldnull - IL_008e: stloc.1 - IL_008f: leave.s IL_009d - - } // end .try - catch [mscorlib]System.Object - { - IL_0091: castclass [mscorlib]System.Exception - IL_0096: stloc.2 - .line 4,4 : 19,20 - IL_0097: ldloc.2 - IL_0098: stloc.0 - IL_0099: ldnull - IL_009a: stloc.1 - IL_009b: leave.s IL_009d - - .line 100001,100001 : 0,0 - } // end handler - IL_009d: ldloc.1 - IL_009e: pop - .line 100001,100001 : 0,0 - IL_009f: nop - IL_00a0: br IL_0002 - - IL_00a5: ldloc.0 - IL_00a6: ldnull - IL_00a7: cgt.un - IL_00a9: brfalse.s IL_00ad - - IL_00ab: br.s IL_00af - - IL_00ad: br.s IL_00b1 - - .line 100001,100001 : 0,0 - IL_00af: ldloc.0 - IL_00b0: throw - - .line 100001,100001 : 0,0 - IL_00b1: ret - } // end of method f4@4::Close - - .method public strict virtual instance bool - get_CheckClose() cil managed - { - // Code size 68 (0x44) - .maxstack 5 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::pc - IL_0007: switch ( - IL_0022, - IL_0024, - IL_0026, - IL_0028, - IL_002a) - IL_0020: br.s IL_003b - - IL_0022: br.s IL_002c - - IL_0024: br.s IL_002f - - IL_0026: br.s IL_0032 - - IL_0028: br.s IL_0035 - - IL_002a: br.s IL_0038 - - IL_002c: nop - IL_002d: br.s IL_0042 - - IL_002f: nop - IL_0030: br.s IL_0040 - - IL_0032: nop - IL_0033: br.s IL_003e - - IL_0035: nop - IL_0036: br.s IL_003c - - IL_0038: nop - IL_0039: br.s IL_0042 - - IL_003b: nop - IL_003c: ldc.i4.1 - IL_003d: ret - - IL_003e: ldc.i4.1 - IL_003f: ret - - IL_0040: ldc.i4.1 - IL_0041: ret - - IL_0042: ldc.i4.0 - IL_0043: ret - } // end of method f4@4::get_CheckClose - - .method public strict virtual instance int32 - get_LastGenerated() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 8 (0x8) - .maxstack 5 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::current - IL_0007: ret - } // end of method f4@4::get_LastGenerated - - .method public strict virtual instance class [mscorlib]System.Collections.Generic.IEnumerator`1 - GetFreshEnumerator() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 12 (0xc) - .maxstack 9 - IL_0000: nop - IL_0001: ldnull - IL_0002: ldnull - IL_0003: ldc.i4.0 - IL_0004: ldc.i4.0 - IL_0005: ldc.i4.0 - IL_0006: newobj instance void SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, - int32, - int32, - int32) - IL_000b: ret - } // end of method f4@4::GetFreshEnumerator - - } // end of class f4@4 - - .method public static class [mscorlib]System.Collections.Generic.IEnumerable`1 - f4() cil managed - { - // Code size 12 (0xc) - .maxstack 7 - .line 4,13 : 9,34 - IL_0000: nop - IL_0001: ldnull - IL_0002: ldnull - IL_0003: ldc.i4.0 - IL_0004: ldc.i4.0 - IL_0005: ldc.i4.0 - IL_0006: newobj instance void SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@4::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, - int32, - int32, - int32) - IL_000b: ret - } // end of method SeqExpressionSteppingTest5::f4 - - } // end of class SeqExpressionSteppingTest5 - -} // end of class SeqExpressionSteppingTest5 - -.class private abstract auto ansi sealed ''.$SeqExpressionSteppingTest5 - extends [mscorlib]System.Object -{ - .field static assembly int32 init@ - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method private specialname rtspecialname static - void .cctor() cil managed - { - // Code size 13 (0xd) - .maxstack 3 - .line 15,15 : 13,30 - IL_0000: nop - IL_0001: call class [mscorlib]System.Collections.Generic.IEnumerable`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5::f4() - IL_0006: call int32 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Length(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_000b: pop - IL_000c: ret - } // end of method $SeqExpressionSteppingTest5::.cctor - -} // end of class ''.$SeqExpressionSteppingTest5 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest6.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest6.il.bsl deleted file mode 100644 index 3e960ee230e..00000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest6.il.bsl +++ /dev/null @@ -1,631 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 3.5.30729.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v2.0.50727 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 2:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 2:0:0:0 -} -.assembly SeqExpressionSteppingTest6 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.SeqExpressionSteppingTest6 -{ - // Offset: 0x00000000 Length: 0x0000027E -} -.mresource public FSharpOptimizationData.SeqExpressionSteppingTest6 -{ - // Offset: 0x00000288 Length: 0x000000BA -} -.module SeqExpressionSteppingTest6.dll -// MVID: {4D94A849-241E-0936-A745-038349A8944D} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x003B0000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed SeqExpressionSteppingTest6 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class abstract auto ansi sealed nested public SeqExpressionSteppingTest6 - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto autochar sealed nested assembly beforefieldinit specialname f7@5 - extends class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1 - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 06 00 00 00 00 00 ) - .field public int32 x - .field public int32 x0 - .field public class [mscorlib]System.Collections.Generic.IEnumerator`1 'enum' - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .field public class [mscorlib]System.Collections.Generic.IEnumerator`1 enum0 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .field public int32 pc - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .field public int32 current - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method public specialname rtspecialname - instance void .ctor(int32 x, - int32 x0, - class [mscorlib]System.Collections.Generic.IEnumerator`1 'enum', - class [mscorlib]System.Collections.Generic.IEnumerator`1 enum0, - int32 pc, - int32 current) cil managed - { - // Code size 52 (0x34) - .maxstack 6 - IL_0000: ldarg.0 - IL_0001: ldarg.1 - IL_0002: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::x - IL_0007: ldarg.0 - IL_0008: ldarg.2 - IL_0009: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::x0 - IL_000e: ldarg.0 - IL_000f: ldarg.3 - IL_0010: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::'enum' - IL_0015: ldarg.0 - IL_0016: ldarg.s enum0 - IL_0018: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::enum0 - IL_001d: ldarg.0 - IL_001e: ldarg.s pc - IL_0020: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::pc - IL_0025: ldarg.0 - IL_0026: ldarg.s current - IL_0028: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::current - IL_002d: ldarg.0 - IL_002e: call instance void class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1::.ctor() - IL_0033: ret - } // end of method f7@5::.ctor - - .method public strict virtual instance int32 - GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed - { - // Code size 351 (0x15f) - .maxstack 6 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 - IL_0000: ldarg.0 - IL_0001: ldfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::pc - IL_0006: ldc.i4.1 - IL_0007: sub - IL_0008: switch ( - IL_0023, - IL_0025, - IL_0027, - IL_0029, - IL_002b) - IL_0021: br.s IL_0048 - - IL_0023: br.s IL_002d - - IL_0025: br.s IL_0033 - - IL_0027: br.s IL_0036 - - IL_0029: br.s IL_003c - - IL_002b: br.s IL_0042 - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_002d: nop - IL_002e: br IL_00b2 - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_0033: nop - IL_0034: br.s IL_00a8 - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_0036: nop - IL_0037: br IL_0135 - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_003c: nop - IL_003d: br IL_012b - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_0042: nop - IL_0043: br IL_0156 - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_0048: nop - .line 5,7 : 15,25 - IL_0049: ldarg.0 - IL_004a: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6::get_es() - IL_004f: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 - IL_0054: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0059: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::'enum' - IL_005e: ldarg.0 - IL_005f: ldc.i4.1 - IL_0060: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::pc - .line 5,7 : 15,25 - IL_0065: ldarg.0 - IL_0066: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::'enum' - IL_006b: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0070: brfalse.s IL_00b2 - - IL_0072: ldarg.0 - IL_0073: ldarg.0 - IL_0074: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::'enum' - IL_0079: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_007e: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::x - .line 6,6 : 18,33 - IL_0083: ldstr "hello" - IL_0088: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_008d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0092: pop - IL_0093: ldarg.0 - IL_0094: ldc.i4.2 - IL_0095: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::pc - .line 7,7 : 18,25 - IL_009a: ldarg.0 - IL_009b: ldarg.0 - IL_009c: ldfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::x - IL_00a1: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::current - IL_00a6: ldc.i4.1 - IL_00a7: ret - - .line 5,7 : 15,25 - IL_00a8: ldarg.0 - IL_00a9: ldc.i4.0 - IL_00aa: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::x - .line 100001,100001 : 0,0 - IL_00af: nop - IL_00b0: br.s IL_0065 - - IL_00b2: ldarg.0 - IL_00b3: ldc.i4.5 - IL_00b4: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::pc - .line 5,7 : 15,25 - IL_00b9: ldarg.0 - IL_00ba: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::'enum' - IL_00bf: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_00c4: nop - IL_00c5: ldarg.0 - IL_00c6: ldnull - IL_00c7: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::'enum' - .line 8,10 : 15,25 - IL_00cc: ldarg.0 - IL_00cd: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6::get_es() - IL_00d2: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 - IL_00d7: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_00dc: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::enum0 - IL_00e1: ldarg.0 - IL_00e2: ldc.i4.3 - IL_00e3: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::pc - .line 8,10 : 15,25 - IL_00e8: ldarg.0 - IL_00e9: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::enum0 - IL_00ee: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_00f3: brfalse.s IL_0135 - - IL_00f5: ldarg.0 - IL_00f6: ldarg.0 - IL_00f7: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::enum0 - IL_00fc: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0101: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::x0 - .line 9,9 : 18,35 - IL_0106: ldstr "goodbye" - IL_010b: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0110: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0115: pop - IL_0116: ldarg.0 - IL_0117: ldc.i4.4 - IL_0118: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::pc - .line 10,10 : 18,25 - IL_011d: ldarg.0 - IL_011e: ldarg.0 - IL_011f: ldfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::x0 - IL_0124: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::current - IL_0129: ldc.i4.1 - IL_012a: ret - - .line 8,10 : 15,25 - IL_012b: ldarg.0 - IL_012c: ldc.i4.0 - IL_012d: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::x0 - .line 100001,100001 : 0,0 - IL_0132: nop - IL_0133: br.s IL_00e8 - - IL_0135: ldarg.0 - IL_0136: ldc.i4.5 - IL_0137: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::pc - .line 8,10 : 15,25 - IL_013c: ldarg.0 - IL_013d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::enum0 - IL_0142: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0147: nop - IL_0148: ldarg.0 - IL_0149: ldnull - IL_014a: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::enum0 - IL_014f: ldarg.0 - IL_0150: ldc.i4.5 - IL_0151: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::pc - IL_0156: ldarg.0 - IL_0157: ldc.i4.0 - IL_0158: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::current - IL_015d: ldc.i4.0 - IL_015e: ret - } // end of method f7@5::GenerateNext - - .method public strict virtual instance void - Close() cil managed - { - // Code size 191 (0xbf) - .maxstack 6 - .locals init ([0] class [mscorlib]System.Exception V_0, - [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, - [2] class [mscorlib]System.Exception e) - .line 100001,100001 : 0,0 - IL_0000: ldnull - IL_0001: stloc.0 - IL_0002: ldarg.0 - IL_0003: ldfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::pc - IL_0008: ldc.i4.5 - IL_0009: sub - IL_000a: switch ( - IL_0015) - IL_0013: br.s IL_001b - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_0015: nop - IL_0016: br IL_00b2 - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_001b: nop - .try - { - IL_001c: ldarg.0 - IL_001d: ldfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::pc - IL_0022: switch ( - IL_0041, - IL_0043, - IL_0045, - IL_0047, - IL_0049, - IL_004b) - IL_003f: br.s IL_005f - - IL_0041: br.s IL_004d - - IL_0043: br.s IL_0050 - - IL_0045: br.s IL_0053 - - IL_0047: br.s IL_0056 - - IL_0049: br.s IL_0059 - - IL_004b: br.s IL_005c - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_004d: nop - IL_004e: br.s IL_008c - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_0050: nop - IL_0051: br.s IL_0078 - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_0053: nop - IL_0054: br.s IL_0077 - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_0056: nop - IL_0057: br.s IL_0061 - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_0059: nop - IL_005a: br.s IL_0060 - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_005c: nop - IL_005d: br.s IL_008c - - .line 100001,100001 : 0,0 - .line 100001,100001 : 0,0 - IL_005f: nop - .line 100001,100001 : 0,0 - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.5 - IL_0063: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::pc - IL_0068: ldarg.0 - IL_0069: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::enum0 - IL_006e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0073: nop - .line 100001,100001 : 0,0 - IL_0074: nop - IL_0075: br.s IL_008c - - .line 100001,100001 : 0,0 - IL_0077: nop - IL_0078: ldarg.0 - IL_0079: ldc.i4.5 - IL_007a: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::pc - IL_007f: ldarg.0 - IL_0080: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::'enum' - IL_0085: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_008a: nop - .line 100001,100001 : 0,0 - IL_008b: nop - IL_008c: ldarg.0 - IL_008d: ldc.i4.5 - IL_008e: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::pc - IL_0093: ldarg.0 - IL_0094: ldc.i4.0 - IL_0095: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::current - IL_009a: ldnull - IL_009b: stloc.1 - IL_009c: leave.s IL_00aa - - } // end .try - catch [mscorlib]System.Object - { - IL_009e: castclass [mscorlib]System.Exception - IL_00a3: stloc.2 - .line 5,7 : 15,25 - IL_00a4: ldloc.2 - IL_00a5: stloc.0 - IL_00a6: ldnull - IL_00a7: stloc.1 - IL_00a8: leave.s IL_00aa - - .line 100001,100001 : 0,0 - } // end handler - IL_00aa: ldloc.1 - IL_00ab: pop - .line 100001,100001 : 0,0 - IL_00ac: nop - IL_00ad: br IL_0002 - - IL_00b2: ldloc.0 - IL_00b3: ldnull - IL_00b4: cgt.un - IL_00b6: brfalse.s IL_00ba - - IL_00b8: br.s IL_00bc - - IL_00ba: br.s IL_00be - - .line 100001,100001 : 0,0 - IL_00bc: ldloc.0 - IL_00bd: throw - - .line 100001,100001 : 0,0 - IL_00be: ret - } // end of method f7@5::Close - - .method public strict virtual instance bool - get_CheckClose() cil managed - { - // Code size 79 (0x4f) - .maxstack 5 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::pc - IL_0007: switch ( - IL_0026, - IL_0028, - IL_002a, - IL_002c, - IL_002e, - IL_0030) - IL_0024: br.s IL_0044 - - IL_0026: br.s IL_0032 - - IL_0028: br.s IL_0035 - - IL_002a: br.s IL_0038 - - IL_002c: br.s IL_003b - - IL_002e: br.s IL_003e - - IL_0030: br.s IL_0041 - - IL_0032: nop - IL_0033: br.s IL_004d - - IL_0035: nop - IL_0036: br.s IL_004b - - IL_0038: nop - IL_0039: br.s IL_0049 - - IL_003b: nop - IL_003c: br.s IL_0047 - - IL_003e: nop - IL_003f: br.s IL_0045 - - IL_0041: nop - IL_0042: br.s IL_004d - - IL_0044: nop - IL_0045: ldc.i4.1 - IL_0046: ret - - IL_0047: ldc.i4.1 - IL_0048: ret - - IL_0049: ldc.i4.1 - IL_004a: ret - - IL_004b: ldc.i4.1 - IL_004c: ret - - IL_004d: ldc.i4.0 - IL_004e: ret - } // end of method f7@5::get_CheckClose - - .method public strict virtual instance int32 - get_LastGenerated() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 8 (0x8) - .maxstack 5 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::current - IL_0007: ret - } // end of method f7@5::get_LastGenerated - - .method public strict virtual instance class [mscorlib]System.Collections.Generic.IEnumerator`1 - GetFreshEnumerator() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 13 (0xd) - .maxstack 10 - IL_0000: nop - IL_0001: ldc.i4.0 - IL_0002: ldc.i4.0 - IL_0003: ldnull - IL_0004: ldnull - IL_0005: ldc.i4.0 - IL_0006: ldc.i4.0 - IL_0007: newobj instance void SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::.ctor(int32, - int32, - class [mscorlib]System.Collections.Generic.IEnumerator`1, - class [mscorlib]System.Collections.Generic.IEnumerator`1, - int32, - int32) - IL_000c: ret - } // end of method f7@5::GetFreshEnumerator - - } // end of class f7@5 - - .method public specialname static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 - get_es() cil managed - { - // Code size 6 (0x6) - .maxstack 4 - IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$SeqExpressionSteppingTest6::es@3 - IL_0005: ret - } // end of method SeqExpressionSteppingTest6::get_es - - .method public static class [mscorlib]System.Collections.Generic.IEnumerable`1 - f7() cil managed - { - // Code size 13 (0xd) - .maxstack 8 - .line 5,10 : 9,27 - IL_0000: nop - IL_0001: ldc.i4.0 - IL_0002: ldc.i4.0 - IL_0003: ldnull - IL_0004: ldnull - IL_0005: ldc.i4.0 - IL_0006: ldc.i4.0 - IL_0007: newobj instance void SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@5::.ctor(int32, - int32, - class [mscorlib]System.Collections.Generic.IEnumerator`1, - class [mscorlib]System.Collections.Generic.IEnumerator`1, - int32, - int32) - IL_000c: ret - } // end of method SeqExpressionSteppingTest6::f7 - - .property class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 - es() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) - .get class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6::get_es() - } // end of property SeqExpressionSteppingTest6::es - } // end of class SeqExpressionSteppingTest6 - -} // end of class SeqExpressionSteppingTest6 - -.class private abstract auto ansi sealed ''.$SeqExpressionSteppingTest6 - extends [mscorlib]System.Object -{ - .field static assembly initonly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 es@3 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .field static assembly int32 init@ - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method private specialname rtspecialname static - void .cctor() cil managed - { - // Code size 43 (0x2b) - .maxstack 6 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 es) - .line 3,3 : 5,21 - IL_0000: nop - IL_0001: ldc.i4.1 - IL_0002: ldc.i4.2 - IL_0003: ldc.i4.3 - IL_0004: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty() - IL_0009: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, - class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1) - IL_000e: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, - class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1) - IL_0013: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, - class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1) - IL_0018: dup - IL_0019: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$SeqExpressionSteppingTest6::es@3 - IL_001e: stloc.0 - .line 12,12 : 13,31 - IL_001f: call class [mscorlib]System.Collections.Generic.IEnumerable`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6::f7() - IL_0024: call int32 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Length(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0029: pop - IL_002a: ret - } // end of method $SeqExpressionSteppingTest6::.cctor - -} // end of class ''.$SeqExpressionSteppingTest6 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest7.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest7.il.bsl deleted file mode 100644 index 1291f759594..00000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest7.il.bsl +++ /dev/null @@ -1,370 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:1:0 -} -.assembly SeqExpressionSteppingTest7 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.SeqExpressionSteppingTest7 -{ - // Offset: 0x00000000 Length: 0x00000272 -} -.mresource public FSharpOptimizationData.SeqExpressionSteppingTest7 -{ - // Offset: 0x00000278 Length: 0x00000098 -} -.module SeqExpressionSteppingTest7.exe -// MVID: {575BE157-2432-93C3-A745-038357E15B57} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x00DE0000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed SeqExpressionSteppingTest7 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto autochar serializable sealed nested assembly beforefieldinit specialname f@5 - extends class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1 - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 06 00 00 00 00 00 ) - .field public int32 pc - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .field public !a current - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method public specialname rtspecialname - instance void .ctor(int32 pc, - !a current) cil managed - { - // Code size 21 (0x15) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldarg.1 - IL_0002: stfld int32 class SeqExpressionSteppingTest7/f@5::pc - IL_0007: ldarg.0 - IL_0008: ldarg.2 - IL_0009: stfld !0 class SeqExpressionSteppingTest7/f@5::current - IL_000e: ldarg.0 - IL_000f: call instance void class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1::.ctor() - IL_0014: ret - } // end of method f@5::.ctor - - .method public strict virtual instance int32 - GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed - { - // Code size 106 (0x6a) - .maxstack 6 - .locals init ([0] !a V_0) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\SeqExpressionStepping\\SeqExpressionSteppingTest7.fs' - IL_0000: ldarg.0 - IL_0001: ldfld int32 class SeqExpressionSteppingTest7/f@5::pc - IL_0006: ldc.i4.1 - IL_0007: sub - IL_0008: switch ( - IL_0017, - IL_0019) - IL_0015: br.s IL_0021 - - IL_0017: br.s IL_001b - - IL_0019: br.s IL_001e - - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_004e - - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0059 - - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' - IL_0021: nop - .line 5,5 : 14,36 '' - IL_0022: nop - .line 5,5 : 18,24 '' - IL_0023: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest7::get_r() - IL_0028: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_002d: nop - .line 5,5 : 26,30 '' - IL_002e: ldc.i4.1 - IL_002f: brfalse.s IL_0033 - - IL_0031: br.s IL_0035 - - IL_0033: br.s IL_0051 - - IL_0035: ldarg.0 - IL_0036: ldc.i4.1 - IL_0037: stfld int32 class SeqExpressionSteppingTest7/f@5::pc - .line 5,5 : 44,55 '' - IL_003c: ldarg.1 - IL_003d: ldstr "" - IL_0042: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::FailWith>(string) - IL_0047: stobj class [mscorlib]System.Collections.Generic.IEnumerable`1 - IL_004c: ldc.i4.2 - IL_004d: ret - - .line 100001,100001 : 0,0 '' - IL_004e: nop - IL_004f: br.s IL_0052 - - .line 5,5 : 14,36 '' - .line 100001,100001 : 0,0 '' - IL_0051: nop - IL_0052: ldarg.0 - IL_0053: ldc.i4.2 - IL_0054: stfld int32 class SeqExpressionSteppingTest7/f@5::pc - IL_0059: ldarg.0 - IL_005a: ldloca.s V_0 - IL_005c: initobj !a - IL_0062: ldloc.0 - IL_0063: stfld !0 class SeqExpressionSteppingTest7/f@5::current - IL_0068: ldc.i4.0 - IL_0069: ret - } // end of method f@5::GenerateNext - - .method public strict virtual instance void - Close() cil managed - { - // Code size 9 (0x9) - .maxstack 8 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldc.i4.2 - IL_0003: stfld int32 class SeqExpressionSteppingTest7/f@5::pc - IL_0008: ret - } // end of method f@5::Close - - .method public strict virtual instance bool - get_CheckClose() cil managed - { - // Code size 47 (0x2f) - .maxstack 8 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldfld int32 class SeqExpressionSteppingTest7/f@5::pc - IL_0007: switch ( - IL_001a, - IL_001c, - IL_001e) - IL_0018: br.s IL_0029 - - IL_001a: br.s IL_0020 - - IL_001c: br.s IL_0023 - - IL_001e: br.s IL_0026 - - IL_0020: nop - IL_0021: br.s IL_002d - - IL_0023: nop - IL_0024: br.s IL_002a - - IL_0026: nop - IL_0027: br.s IL_002d - - IL_0029: nop - IL_002a: ldc.i4.0 - IL_002b: ret - - IL_002c: nop - IL_002d: ldc.i4.0 - IL_002e: ret - } // end of method f@5::get_CheckClose - - .method public strict virtual instance !a - get_LastGenerated() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 8 (0x8) - .maxstack 8 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldfld !0 class SeqExpressionSteppingTest7/f@5::current - IL_0007: ret - } // end of method f@5::get_LastGenerated - - .method public strict virtual instance class [mscorlib]System.Collections.Generic.IEnumerator`1 - GetFreshEnumerator() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 17 (0x11) - .maxstack 6 - .locals init (!a V_0) - IL_0000: nop - IL_0001: ldc.i4.0 - IL_0002: ldloca.s V_0 - IL_0004: initobj !a - IL_000a: ldloc.0 - IL_000b: newobj instance void class SeqExpressionSteppingTest7/f@5::.ctor(int32, - !0) - IL_0010: ret - } // end of method f@5::GetFreshEnumerator - - } // end of class f@5 - - .method public specialname static class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 - get_r() cil managed - { - // Code size 6 (0x6) - .maxstack 8 - IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ''.$SeqExpressionSteppingTest7::r@4 - IL_0005: ret - } // end of method SeqExpressionSteppingTest7::get_r - - .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 - f() cil managed - { - // Code size 24 (0x18) - .maxstack 4 - .locals init ([0] !!a V_0) - .line 5,5 : 12,57 '' - IL_0000: nop - IL_0001: ldc.i4.0 - IL_0002: ldloca.s V_0 - IL_0004: initobj !!a - IL_000a: ldloc.0 - IL_000b: newobj instance void class SeqExpressionSteppingTest7/f@5::.ctor(int32, - !0) - IL_0010: tail. - IL_0012: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToList(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0017: ret - } // end of method SeqExpressionSteppingTest7::f - - .property class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 - r() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) - .get class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest7::get_r() - } // end of property SeqExpressionSteppingTest7::r -} // end of class SeqExpressionSteppingTest7 - -.class private abstract auto ansi sealed ''.$SeqExpressionSteppingTest7 - extends [mscorlib]System.Object -{ - .field static assembly class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 r@4 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .field static assembly int32 init@ - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method public static void main@() cil managed - { - .entrypoint - // Code size 109 (0x6d) - .maxstack 4 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 r, - [1] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,class [FSharp.Core]Microsoft.FSharp.Core.Unit> V_1, - [2] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_2, - [3] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_3, - [4] class [mscorlib]System.Exception V_4, - [5] class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 V_5) - .line 4,4 : 1,14 '' - IL_0000: nop - IL_0001: ldc.i4.0 - IL_0002: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_0007: dup - IL_0008: stsfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ''.$SeqExpressionSteppingTest7::r@4 - IL_000d: stloc.0 - IL_000e: ldstr "res = %A" - IL_0013: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit>,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1>::.ctor(string) - IL_0018: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine,class [FSharp.Core]Microsoft.FSharp.Core.Unit>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_001d: stloc.1 - .line 6,6 : 1,53 '' - IL_001e: nop - .line 6,6 : 21,24 '' - .try - { - IL_001f: nop - .line 6,6 : 25,29 '' - IL_0020: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 SeqExpressionSteppingTest7::f() - IL_0025: stloc.3 - IL_0026: leave.s IL_0062 - - .line 6,6 : 30,34 '' - } // end .try - catch [mscorlib]System.Object - { - IL_0028: castclass [mscorlib]System.Exception - IL_002d: stloc.s V_4 - IL_002f: ldloc.s V_4 - IL_0031: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::FailurePattern(class [mscorlib]System.Exception) - IL_0036: stloc.s V_5 - IL_0038: ldloc.s V_5 - IL_003a: brfalse.s IL_003e - - IL_003c: br.s IL_0040 - - IL_003e: br.s IL_0057 - - .line 6,6 : 48,52 '' - IL_0040: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest7::get_r() - IL_0045: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_004a: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty() - IL_004f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, - class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1) - IL_0054: stloc.3 - IL_0055: leave.s IL_0062 - - .line 100001,100001 : 0,0 '' - IL_0057: rethrow - IL_0059: ldnull - IL_005a: unbox.any class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 - IL_005f: stloc.3 - IL_0060: leave.s IL_0062 - - .line 100001,100001 : 0,0 '' - } // end handler - IL_0062: ldloc.3 - IL_0063: stloc.2 - IL_0064: ldloc.1 - IL_0065: ldloc.2 - IL_0066: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,class [FSharp.Core]Microsoft.FSharp.Core.Unit>::Invoke(!0) - IL_006b: pop - IL_006c: ret - } // end of method $SeqExpressionSteppingTest7::main@ - -} // end of class ''.$SeqExpressionSteppingTest7 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest7.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest7.il.netfx4.bsl index 1291f759594..99421dbc1d6 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest7.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest7.il.netfx4.bsl @@ -36,13 +36,13 @@ // Offset: 0x00000278 Length: 0x00000098 } .module SeqExpressionSteppingTest7.exe -// MVID: {575BE157-2432-93C3-A745-038357E15B57} +// MVID: {5775B18F-2432-93C3-A745-03838FB17557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00DE0000 +// Image base: 0x00C80000 // =============== CLASS MEMBERS DECLARATION =================== @@ -101,26 +101,26 @@ IL_0019: br.s IL_001e - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001b: nop IL_001c: br.s IL_004e - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_001e: nop IL_001f: br.s IL_0059 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0021: nop - .line 5,5 : 14,36 '' + .line 5,5 : 14,36 IL_0022: nop - .line 5,5 : 18,24 '' + .line 5,5 : 18,24 IL_0023: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest7::get_r() IL_0028: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) IL_002d: nop - .line 5,5 : 26,30 '' + .line 5,5 : 26,30 IL_002e: ldc.i4.1 IL_002f: brfalse.s IL_0033 @@ -131,7 +131,7 @@ IL_0035: ldarg.0 IL_0036: ldc.i4.1 IL_0037: stfld int32 class SeqExpressionSteppingTest7/f@5::pc - .line 5,5 : 44,55 '' + .line 5,5 : 44,55 IL_003c: ldarg.1 IL_003d: ldstr "" IL_0042: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::FailWith>(string) @@ -139,12 +139,12 @@ IL_004c: ldc.i4.2 IL_004d: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004e: nop IL_004f: br.s IL_0052 - .line 5,5 : 14,36 '' - .line 100001,100001 : 0,0 '' + .line 5,5 : 14,36 + .line 100001,100001 : 0,0 IL_0051: nop IL_0052: ldarg.0 IL_0053: ldc.i4.2 @@ -256,7 +256,7 @@ // Code size 24 (0x18) .maxstack 4 .locals init ([0] !!a V_0) - .line 5,5 : 12,57 '' + .line 5,5 : 12,57 IL_0000: nop IL_0001: ldc.i4.0 IL_0002: ldloca.s V_0 @@ -289,7 +289,7 @@ .method public static void main@() cil managed { .entrypoint - // Code size 109 (0x6d) + // Code size 108 (0x6c) .maxstack 4 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 r, [1] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,class [FSharp.Core]Microsoft.FSharp.Core.Unit> V_1, @@ -297,7 +297,7 @@ [3] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_3, [4] class [mscorlib]System.Exception V_4, [5] class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 V_5) - .line 4,4 : 1,14 '' + .line 4,4 : 1,14 IL_0000: nop IL_0001: ldc.i4.0 IL_0002: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) @@ -308,58 +308,56 @@ IL_0013: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit>,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1>::.ctor(string) IL_0018: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine,class [FSharp.Core]Microsoft.FSharp.Core.Unit>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_001d: stloc.1 - .line 6,6 : 1,53 '' - IL_001e: nop - .line 6,6 : 21,24 '' + .line 6,6 : 21,24 .try { - IL_001f: nop - .line 6,6 : 25,29 '' - IL_0020: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 SeqExpressionSteppingTest7::f() - IL_0025: stloc.3 - IL_0026: leave.s IL_0062 + IL_001e: nop + .line 6,6 : 25,29 + IL_001f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 SeqExpressionSteppingTest7::f() + IL_0024: stloc.3 + IL_0025: leave.s IL_0061 - .line 6,6 : 30,34 '' + .line 6,6 : 30,34 } // end .try catch [mscorlib]System.Object { - IL_0028: castclass [mscorlib]System.Exception - IL_002d: stloc.s V_4 - IL_002f: ldloc.s V_4 - IL_0031: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::FailurePattern(class [mscorlib]System.Exception) - IL_0036: stloc.s V_5 - IL_0038: ldloc.s V_5 - IL_003a: brfalse.s IL_003e - - IL_003c: br.s IL_0040 - - IL_003e: br.s IL_0057 - - .line 6,6 : 48,52 '' - IL_0040: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest7::get_r() - IL_0045: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_004a: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty() - IL_004f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_0027: castclass [mscorlib]System.Exception + IL_002c: stloc.s V_4 + IL_002e: ldloc.s V_4 + IL_0030: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::FailurePattern(class [mscorlib]System.Exception) + IL_0035: stloc.s V_5 + IL_0037: ldloc.s V_5 + IL_0039: brfalse.s IL_003d + + IL_003b: br.s IL_003f + + IL_003d: br.s IL_0056 + + .line 6,6 : 48,52 + IL_003f: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest7::get_r() + IL_0044: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0049: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty() + IL_004e: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1) - IL_0054: stloc.3 - IL_0055: leave.s IL_0062 + IL_0053: stloc.3 + IL_0054: leave.s IL_0061 - .line 100001,100001 : 0,0 '' - IL_0057: rethrow - IL_0059: ldnull - IL_005a: unbox.any class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 - IL_005f: stloc.3 - IL_0060: leave.s IL_0062 + .line 100001,100001 : 0,0 + IL_0056: rethrow + IL_0058: ldnull + IL_0059: unbox.any class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 + IL_005e: stloc.3 + IL_005f: leave.s IL_0061 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler - IL_0062: ldloc.3 - IL_0063: stloc.2 - IL_0064: ldloc.1 - IL_0065: ldloc.2 - IL_0066: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,class [FSharp.Core]Microsoft.FSharp.Core.Unit>::Invoke(!0) - IL_006b: pop - IL_006c: ret + IL_0061: ldloc.3 + IL_0062: stloc.2 + IL_0063: ldloc.1 + IL_0064: ldloc.2 + IL_0065: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,class [FSharp.Core]Microsoft.FSharp.Core.Unit>::Invoke(!0) + IL_006a: pop + IL_006b: ret } // end of method $SeqExpressionSteppingTest7::main@ } // end of class ''.$SeqExpressionSteppingTest7 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelModule.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelModule.il.bsl index 972eced84a0..042143d9677 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelModule.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelModule.il.bsl @@ -241,7 +241,7 @@ [3] class [mscorlib]System.Collections.IComparer V_3, [4] int32 V_4, [5] int32 V_5) - .line 6,6 : 14,18 '' + .line 6,6 : 14,18 IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any ABC/Expr @@ -255,7 +255,7 @@ IL_0010: br.s IL_004e - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0012: ldarg.1 IL_0013: unbox.any ABC/Expr IL_0018: ldnull @@ -266,10 +266,10 @@ IL_001f: br.s IL_004c - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0021: ldarg.0 IL_0022: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0023: ldarg.0 IL_0024: stloc.1 IL_0025: ldloc.0 @@ -290,21 +290,21 @@ IL_0041: br.s IL_0045 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0043: ldc.i4.m1 IL_0044: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0045: ldloc.s V_4 IL_0047: ldloc.s V_5 IL_0049: cgt IL_004b: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004c: ldc.i4.1 IL_004d: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004e: ldarg.1 IL_004f: unbox.any ABC/Expr IL_0054: ldnull @@ -315,11 +315,11 @@ IL_005b: br.s IL_005f - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_005d: ldc.i4.m1 IL_005e: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_005f: ldc.i4.0 IL_0060: ret } // end of method Expr::CompareTo @@ -379,7 +379,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 6,6 : 14,18 '' + .line 6,6 : 14,18 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -645,7 +645,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 7,7 : 19,24 '' + .line 7,7 : 19,24 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -815,7 +815,7 @@ { // Code size 17 (0x11) .maxstack 8 - .line 8,8 : 16,17 '' + .line 8,8 : 16,17 IL_0000: ldarg.0 IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() IL_0006: ldarg.0 @@ -824,7 +824,7 @@ IL_0009: ldarg.0 IL_000a: ldarg.1 IL_000b: stfld string ABC/A::x - .line 8,8 : 14,15 '' + .line 8,8 : 14,15 IL_0010: ret } // end of method A::.ctor @@ -833,7 +833,7 @@ { // Code size 8 (0x8) .maxstack 8 - .line 8,8 : 42,43 '' + .line 8,8 : 42,43 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld string ABC/A::x @@ -1017,7 +1017,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 - .line 16,16 : 18,22 '' + .line 16,16 : 18,22 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -1039,7 +1039,7 @@ [3] class [mscorlib]System.Collections.IComparer V_3, [4] int32 V_4, [5] int32 V_5) - .line 16,16 : 18,22 '' + .line 16,16 : 18,22 IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any ABC/ABC/Expr @@ -1053,7 +1053,7 @@ IL_0010: br.s IL_004e - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0012: ldarg.1 IL_0013: unbox.any ABC/ABC/Expr IL_0018: ldnull @@ -1064,10 +1064,10 @@ IL_001f: br.s IL_004c - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0021: ldarg.0 IL_0022: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0023: ldarg.0 IL_0024: stloc.1 IL_0025: ldloc.0 @@ -1088,21 +1088,21 @@ IL_0041: br.s IL_0045 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0043: ldc.i4.m1 IL_0044: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0045: ldloc.s V_4 IL_0047: ldloc.s V_5 IL_0049: cgt IL_004b: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004c: ldc.i4.1 IL_004d: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004e: ldarg.1 IL_004f: unbox.any ABC/ABC/Expr IL_0054: ldnull @@ -1113,11 +1113,11 @@ IL_005b: br.s IL_005f - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_005d: ldc.i4.m1 IL_005e: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_005f: ldc.i4.0 IL_0060: ret } // end of method Expr::CompareTo @@ -1177,7 +1177,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 16,16 : 18,22 '' + .line 16,16 : 18,22 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -1443,7 +1443,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 17,17 : 23,28 '' + .line 17,17 : 23,28 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -1613,7 +1613,7 @@ { // Code size 17 (0x11) .maxstack 8 - .line 18,18 : 20,21 '' + .line 18,18 : 20,21 IL_0000: ldarg.0 IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() IL_0006: ldarg.0 @@ -1622,7 +1622,7 @@ IL_0009: ldarg.0 IL_000a: ldarg.1 IL_000b: stfld string ABC/ABC/A::x - .line 18,18 : 18,19 '' + .line 18,18 : 18,19 IL_0010: ret } // end of method A::.ctor @@ -1631,7 +1631,7 @@ { // Code size 8 (0x8) .maxstack 8 - .line 18,18 : 46,47 '' + .line 18,18 : 46,47 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld string ABC/ABC/A::x @@ -1650,7 +1650,7 @@ .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationArgumentCountsAttribute::.ctor(int32[]) = ( 01 00 02 00 00 00 01 00 00 00 01 00 00 00 00 00 ) // Code size 5 (0x5) .maxstack 8 - .line 21,21 : 27,32 '' + .line 21,21 : 27,32 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -1682,7 +1682,7 @@ .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationArgumentCountsAttribute::.ctor(int32[]) = ( 01 00 02 00 00 00 01 00 00 00 01 00 00 00 00 00 ) // Code size 5 (0x5) .maxstack 8 - .line 11,11 : 23,28 '' + .line 11,11 : 23,28 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -1722,11 +1722,11 @@ .maxstack 3 .locals init ([0] string V_0, [1] string greeting) - .line 12,12 : 9,31 '' + .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 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelModuleP.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelModuleP.il.bsl index 51e5cc6249a..a504b86ed4e 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelModuleP.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelModuleP.il.bsl @@ -241,7 +241,7 @@ [3] class [mscorlib]System.Collections.IComparer V_3, [4] int32 V_4, [5] int32 V_5) - .line 6,6 : 14,18 '' + .line 6,6 : 14,18 IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any ABC/Expr @@ -255,7 +255,7 @@ IL_0010: br.s IL_004e - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0012: ldarg.1 IL_0013: unbox.any ABC/Expr IL_0018: ldnull @@ -266,10 +266,10 @@ IL_001f: br.s IL_004c - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0021: ldarg.0 IL_0022: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0023: ldarg.0 IL_0024: stloc.1 IL_0025: ldloc.0 @@ -290,21 +290,21 @@ IL_0041: br.s IL_0045 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0043: ldc.i4.m1 IL_0044: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0045: ldloc.s V_4 IL_0047: ldloc.s V_5 IL_0049: cgt IL_004b: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004c: ldc.i4.1 IL_004d: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004e: ldarg.1 IL_004f: unbox.any ABC/Expr IL_0054: ldnull @@ -315,11 +315,11 @@ IL_005b: br.s IL_005f - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_005d: ldc.i4.m1 IL_005e: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_005f: ldc.i4.0 IL_0060: ret } // end of method Expr::CompareTo @@ -379,7 +379,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 6,6 : 14,18 '' + .line 6,6 : 14,18 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -631,7 +631,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 7,7 : 19,24 '' + .line 7,7 : 19,24 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -801,7 +801,7 @@ { // Code size 17 (0x11) .maxstack 8 - .line 8,8 : 16,17 '' + .line 8,8 : 16,17 IL_0000: ldarg.0 IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() IL_0006: ldarg.0 @@ -810,7 +810,7 @@ IL_0009: ldarg.0 IL_000a: ldarg.1 IL_000b: stfld string ABC/A::x - .line 8,8 : 14,15 '' + .line 8,8 : 14,15 IL_0010: ret } // end of method A::.ctor @@ -819,7 +819,7 @@ { // Code size 8 (0x8) .maxstack 8 - .line 8,8 : 42,43 '' + .line 8,8 : 42,43 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld string ABC/A::x @@ -1003,7 +1003,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 - .line 16,16 : 18,22 '' + .line 16,16 : 18,22 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -1025,7 +1025,7 @@ [3] class [mscorlib]System.Collections.IComparer V_3, [4] int32 V_4, [5] int32 V_5) - .line 16,16 : 18,22 '' + .line 16,16 : 18,22 IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any ABC/ABC/Expr @@ -1039,7 +1039,7 @@ IL_0010: br.s IL_004e - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0012: ldarg.1 IL_0013: unbox.any ABC/ABC/Expr IL_0018: ldnull @@ -1050,10 +1050,10 @@ IL_001f: br.s IL_004c - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0021: ldarg.0 IL_0022: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0023: ldarg.0 IL_0024: stloc.1 IL_0025: ldloc.0 @@ -1074,21 +1074,21 @@ IL_0041: br.s IL_0045 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0043: ldc.i4.m1 IL_0044: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0045: ldloc.s V_4 IL_0047: ldloc.s V_5 IL_0049: cgt IL_004b: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004c: ldc.i4.1 IL_004d: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004e: ldarg.1 IL_004f: unbox.any ABC/ABC/Expr IL_0054: ldnull @@ -1099,11 +1099,11 @@ IL_005b: br.s IL_005f - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_005d: ldc.i4.m1 IL_005e: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_005f: ldc.i4.0 IL_0060: ret } // end of method Expr::CompareTo @@ -1163,7 +1163,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 16,16 : 18,22 '' + .line 16,16 : 18,22 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -1415,7 +1415,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 17,17 : 23,28 '' + .line 17,17 : 23,28 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -1585,7 +1585,7 @@ { // Code size 17 (0x11) .maxstack 8 - .line 18,18 : 20,21 '' + .line 18,18 : 20,21 IL_0000: ldarg.0 IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() IL_0006: ldarg.0 @@ -1594,7 +1594,7 @@ IL_0009: ldarg.0 IL_000a: ldarg.1 IL_000b: stfld string ABC/ABC/A::x - .line 18,18 : 18,19 '' + .line 18,18 : 18,19 IL_0010: ret } // end of method A::.ctor @@ -1603,7 +1603,7 @@ { // Code size 8 (0x8) .maxstack 8 - .line 18,18 : 46,47 '' + .line 18,18 : 46,47 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld string ABC/ABC/A::x @@ -1622,7 +1622,7 @@ .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationArgumentCountsAttribute::.ctor(int32[]) = ( 01 00 02 00 00 00 01 00 00 00 01 00 00 00 00 00 ) // Code size 5 (0x5) .maxstack 8 - .line 21,21 : 27,32 '' + .line 21,21 : 27,32 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -1654,7 +1654,7 @@ .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationArgumentCountsAttribute::.ctor(int32[]) = ( 01 00 02 00 00 00 01 00 00 00 01 00 00 00 00 00 ) // Code size 5 (0x5) .maxstack 8 - .line 11,11 : 23,28 '' + .line 11,11 : 23,28 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -1694,11 +1694,11 @@ .maxstack 3 .locals init ([0] string V_0, [1] string greeting) - .line 12,12 : 9,31 '' + .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 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelNamespace.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelNamespace.il.bsl index b9d03a5dc59..4ec579e7517 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelNamespace.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelNamespace.il.bsl @@ -236,7 +236,7 @@ [3] class [mscorlib]System.Collections.IComparer V_3, [4] int32 V_4, [5] int32 V_5) - .line 7,7 : 10,14 '' + .line 7,7 : 10,14 IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any XYZ.Expr @@ -250,7 +250,7 @@ IL_0010: br.s IL_004e - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0012: ldarg.1 IL_0013: unbox.any XYZ.Expr IL_0018: ldnull @@ -261,10 +261,10 @@ IL_001f: br.s IL_004c - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0021: ldarg.0 IL_0022: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0023: ldarg.0 IL_0024: stloc.1 IL_0025: ldloc.0 @@ -285,21 +285,21 @@ IL_0041: br.s IL_0045 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0043: ldc.i4.m1 IL_0044: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0045: ldloc.s V_4 IL_0047: ldloc.s V_5 IL_0049: cgt IL_004b: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004c: ldc.i4.1 IL_004d: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004e: ldarg.1 IL_004f: unbox.any XYZ.Expr IL_0054: ldnull @@ -310,11 +310,11 @@ IL_005b: br.s IL_005f - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_005d: ldc.i4.m1 IL_005e: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_005f: ldc.i4.0 IL_0060: ret } // end of method Expr::CompareTo @@ -374,7 +374,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 7,7 : 10,14 '' + .line 7,7 : 10,14 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -640,7 +640,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 8,8 : 15,20 '' + .line 8,8 : 15,20 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -810,7 +810,7 @@ { // Code size 17 (0x11) .maxstack 8 - .line 9,9 : 12,13 '' + .line 9,9 : 12,13 IL_0000: ldarg.0 IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() IL_0006: ldarg.0 @@ -819,7 +819,7 @@ IL_0009: ldarg.0 IL_000a: ldarg.1 IL_000b: stfld string XYZ.A::x - .line 9,9 : 10,11 '' + .line 9,9 : 10,11 IL_0010: ret } // end of method A::.ctor @@ -828,7 +828,7 @@ { // Code size 8 (0x8) .maxstack 8 - .line 9,9 : 38,39 '' + .line 9,9 : 38,39 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld string XYZ.A::x @@ -1012,7 +1012,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 - .line 13,13 : 14,18 '' + .line 13,13 : 14,18 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -1034,7 +1034,7 @@ [3] class [mscorlib]System.Collections.IComparer V_3, [4] int32 V_4, [5] int32 V_5) - .line 13,13 : 14,18 '' + .line 13,13 : 14,18 IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any XYZ.ABC/Expr @@ -1048,7 +1048,7 @@ IL_0010: br.s IL_004e - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0012: ldarg.1 IL_0013: unbox.any XYZ.ABC/Expr IL_0018: ldnull @@ -1059,10 +1059,10 @@ IL_001f: br.s IL_004c - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0021: ldarg.0 IL_0022: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0023: ldarg.0 IL_0024: stloc.1 IL_0025: ldloc.0 @@ -1083,21 +1083,21 @@ IL_0041: br.s IL_0045 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0043: ldc.i4.m1 IL_0044: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0045: ldloc.s V_4 IL_0047: ldloc.s V_5 IL_0049: cgt IL_004b: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004c: ldc.i4.1 IL_004d: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004e: ldarg.1 IL_004f: unbox.any XYZ.ABC/Expr IL_0054: ldnull @@ -1108,11 +1108,11 @@ IL_005b: br.s IL_005f - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_005d: ldc.i4.m1 IL_005e: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_005f: ldc.i4.0 IL_0060: ret } // end of method Expr::CompareTo @@ -1172,7 +1172,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 13,13 : 14,18 '' + .line 13,13 : 14,18 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -1438,7 +1438,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 14,14 : 19,24 '' + .line 14,14 : 19,24 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -1608,7 +1608,7 @@ { // Code size 17 (0x11) .maxstack 8 - .line 15,15 : 16,17 '' + .line 15,15 : 16,17 IL_0000: ldarg.0 IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() IL_0006: ldarg.0 @@ -1617,7 +1617,7 @@ IL_0009: ldarg.0 IL_000a: ldarg.1 IL_000b: stfld string XYZ.ABC/A::x - .line 15,15 : 14,15 '' + .line 15,15 : 14,15 IL_0010: ret } // end of method A::.ctor @@ -1626,7 +1626,7 @@ { // Code size 8 (0x8) .maxstack 8 - .line 15,15 : 42,43 '' + .line 15,15 : 42,43 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld string XYZ.ABC/A::x @@ -1810,7 +1810,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 - .line 23,23 : 18,22 '' + .line 23,23 : 18,22 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -1832,7 +1832,7 @@ [3] class [mscorlib]System.Collections.IComparer V_3, [4] int32 V_4, [5] int32 V_5) - .line 23,23 : 18,22 '' + .line 23,23 : 18,22 IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any XYZ.ABC/ABC/Expr @@ -1846,7 +1846,7 @@ IL_0010: br.s IL_004e - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0012: ldarg.1 IL_0013: unbox.any XYZ.ABC/ABC/Expr IL_0018: ldnull @@ -1857,10 +1857,10 @@ IL_001f: br.s IL_004c - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0021: ldarg.0 IL_0022: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0023: ldarg.0 IL_0024: stloc.1 IL_0025: ldloc.0 @@ -1881,21 +1881,21 @@ IL_0041: br.s IL_0045 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0043: ldc.i4.m1 IL_0044: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0045: ldloc.s V_4 IL_0047: ldloc.s V_5 IL_0049: cgt IL_004b: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004c: ldc.i4.1 IL_004d: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004e: ldarg.1 IL_004f: unbox.any XYZ.ABC/ABC/Expr IL_0054: ldnull @@ -1906,11 +1906,11 @@ IL_005b: br.s IL_005f - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_005d: ldc.i4.m1 IL_005e: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_005f: ldc.i4.0 IL_0060: ret } // end of method Expr::CompareTo @@ -1970,7 +1970,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 23,23 : 18,22 '' + .line 23,23 : 18,22 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -2236,7 +2236,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 24,24 : 23,28 '' + .line 24,24 : 23,28 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -2406,7 +2406,7 @@ { // Code size 17 (0x11) .maxstack 8 - .line 25,25 : 20,21 '' + .line 25,25 : 20,21 IL_0000: ldarg.0 IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() IL_0006: ldarg.0 @@ -2415,7 +2415,7 @@ IL_0009: ldarg.0 IL_000a: ldarg.1 IL_000b: stfld string XYZ.ABC/ABC/A::x - .line 25,25 : 18,19 '' + .line 25,25 : 18,19 IL_0010: ret } // end of method A::.ctor @@ -2424,7 +2424,7 @@ { // Code size 8 (0x8) .maxstack 8 - .line 25,25 : 46,47 '' + .line 25,25 : 46,47 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld string XYZ.ABC/ABC/A::x @@ -2443,7 +2443,7 @@ .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationArgumentCountsAttribute::.ctor(int32[]) = ( 01 00 02 00 00 00 01 00 00 00 01 00 00 00 00 00 ) // Code size 5 (0x5) .maxstack 8 - .line 28,28 : 27,32 '' + .line 28,28 : 27,32 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -2475,7 +2475,7 @@ .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationArgumentCountsAttribute::.ctor(int32[]) = ( 01 00 02 00 00 00 01 00 00 00 01 00 00 00 00 00 ) // Code size 5 (0x5) .maxstack 8 - .line 18,18 : 23,28 '' + .line 18,18 : 23,28 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -2515,11 +2515,11 @@ .maxstack 3 .locals init ([0] string V_0, [1] string greeting) - .line 19,19 : 9,31 '' + .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 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelNamespaceP.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelNamespaceP.il.bsl index a419b7a9c0c..6e206df9ecc 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelNamespaceP.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelNamespaceP.il.bsl @@ -236,7 +236,7 @@ [3] class [mscorlib]System.Collections.IComparer V_3, [4] int32 V_4, [5] int32 V_5) - .line 7,7 : 10,14 '' + .line 7,7 : 10,14 IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any XYZ.Expr @@ -250,7 +250,7 @@ IL_0010: br.s IL_004e - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0012: ldarg.1 IL_0013: unbox.any XYZ.Expr IL_0018: ldnull @@ -261,10 +261,10 @@ IL_001f: br.s IL_004c - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0021: ldarg.0 IL_0022: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0023: ldarg.0 IL_0024: stloc.1 IL_0025: ldloc.0 @@ -285,21 +285,21 @@ IL_0041: br.s IL_0045 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0043: ldc.i4.m1 IL_0044: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0045: ldloc.s V_4 IL_0047: ldloc.s V_5 IL_0049: cgt IL_004b: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004c: ldc.i4.1 IL_004d: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004e: ldarg.1 IL_004f: unbox.any XYZ.Expr IL_0054: ldnull @@ -310,11 +310,11 @@ IL_005b: br.s IL_005f - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_005d: ldc.i4.m1 IL_005e: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_005f: ldc.i4.0 IL_0060: ret } // end of method Expr::CompareTo @@ -374,7 +374,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 7,7 : 10,14 '' + .line 7,7 : 10,14 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -626,7 +626,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 8,8 : 15,20 '' + .line 8,8 : 15,20 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -796,7 +796,7 @@ { // Code size 17 (0x11) .maxstack 8 - .line 9,9 : 12,13 '' + .line 9,9 : 12,13 IL_0000: ldarg.0 IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() IL_0006: ldarg.0 @@ -805,7 +805,7 @@ IL_0009: ldarg.0 IL_000a: ldarg.1 IL_000b: stfld string XYZ.A::x - .line 9,9 : 10,11 '' + .line 9,9 : 10,11 IL_0010: ret } // end of method A::.ctor @@ -814,7 +814,7 @@ { // Code size 8 (0x8) .maxstack 8 - .line 9,9 : 38,39 '' + .line 9,9 : 38,39 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld string XYZ.A::x @@ -998,7 +998,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 - .line 13,13 : 14,18 '' + .line 13,13 : 14,18 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -1020,7 +1020,7 @@ [3] class [mscorlib]System.Collections.IComparer V_3, [4] int32 V_4, [5] int32 V_5) - .line 13,13 : 14,18 '' + .line 13,13 : 14,18 IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any XYZ.ABC/Expr @@ -1034,7 +1034,7 @@ IL_0010: br.s IL_004e - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0012: ldarg.1 IL_0013: unbox.any XYZ.ABC/Expr IL_0018: ldnull @@ -1045,10 +1045,10 @@ IL_001f: br.s IL_004c - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0021: ldarg.0 IL_0022: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0023: ldarg.0 IL_0024: stloc.1 IL_0025: ldloc.0 @@ -1069,21 +1069,21 @@ IL_0041: br.s IL_0045 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0043: ldc.i4.m1 IL_0044: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0045: ldloc.s V_4 IL_0047: ldloc.s V_5 IL_0049: cgt IL_004b: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004c: ldc.i4.1 IL_004d: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004e: ldarg.1 IL_004f: unbox.any XYZ.ABC/Expr IL_0054: ldnull @@ -1094,11 +1094,11 @@ IL_005b: br.s IL_005f - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_005d: ldc.i4.m1 IL_005e: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_005f: ldc.i4.0 IL_0060: ret } // end of method Expr::CompareTo @@ -1158,7 +1158,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 13,13 : 14,18 '' + .line 13,13 : 14,18 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -1410,7 +1410,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 14,14 : 19,24 '' + .line 14,14 : 19,24 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -1580,7 +1580,7 @@ { // Code size 17 (0x11) .maxstack 8 - .line 15,15 : 16,17 '' + .line 15,15 : 16,17 IL_0000: ldarg.0 IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() IL_0006: ldarg.0 @@ -1589,7 +1589,7 @@ IL_0009: ldarg.0 IL_000a: ldarg.1 IL_000b: stfld string XYZ.ABC/A::x - .line 15,15 : 14,15 '' + .line 15,15 : 14,15 IL_0010: ret } // end of method A::.ctor @@ -1598,7 +1598,7 @@ { // Code size 8 (0x8) .maxstack 8 - .line 15,15 : 42,43 '' + .line 15,15 : 42,43 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld string XYZ.ABC/A::x @@ -1782,7 +1782,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 - .line 23,23 : 18,22 '' + .line 23,23 : 18,22 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -1804,7 +1804,7 @@ [3] class [mscorlib]System.Collections.IComparer V_3, [4] int32 V_4, [5] int32 V_5) - .line 23,23 : 18,22 '' + .line 23,23 : 18,22 IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any XYZ.ABC/ABC/Expr @@ -1818,7 +1818,7 @@ IL_0010: br.s IL_004e - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0012: ldarg.1 IL_0013: unbox.any XYZ.ABC/ABC/Expr IL_0018: ldnull @@ -1829,10 +1829,10 @@ IL_001f: br.s IL_004c - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0021: ldarg.0 IL_0022: pop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0023: ldarg.0 IL_0024: stloc.1 IL_0025: ldloc.0 @@ -1853,21 +1853,21 @@ IL_0041: br.s IL_0045 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0043: ldc.i4.m1 IL_0044: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0045: ldloc.s V_4 IL_0047: ldloc.s V_5 IL_0049: cgt IL_004b: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004c: ldc.i4.1 IL_004d: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_004e: ldarg.1 IL_004f: unbox.any XYZ.ABC/ABC/Expr IL_0054: ldnull @@ -1878,11 +1878,11 @@ IL_005b: br.s IL_005f - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_005d: ldc.i4.m1 IL_005e: ret - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_005f: ldc.i4.0 IL_0060: ret } // end of method Expr::CompareTo @@ -1942,7 +1942,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 23,23 : 18,22 '' + .line 23,23 : 18,22 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -2194,7 +2194,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 24,24 : 23,28 '' + .line 24,24 : 23,28 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -2364,7 +2364,7 @@ { // Code size 17 (0x11) .maxstack 8 - .line 25,25 : 20,21 '' + .line 25,25 : 20,21 IL_0000: ldarg.0 IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() IL_0006: ldarg.0 @@ -2373,7 +2373,7 @@ IL_0009: ldarg.0 IL_000a: ldarg.1 IL_000b: stfld string XYZ.ABC/ABC/A::x - .line 25,25 : 18,19 '' + .line 25,25 : 18,19 IL_0010: ret } // end of method A::.ctor @@ -2382,7 +2382,7 @@ { // Code size 8 (0x8) .maxstack 8 - .line 25,25 : 46,47 '' + .line 25,25 : 46,47 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld string XYZ.ABC/ABC/A::x @@ -2401,7 +2401,7 @@ .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationArgumentCountsAttribute::.ctor(int32[]) = ( 01 00 02 00 00 00 01 00 00 00 01 00 00 00 00 00 ) // Code size 5 (0x5) .maxstack 8 - .line 28,28 : 27,32 '' + .line 28,28 : 27,32 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -2433,7 +2433,7 @@ .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationArgumentCountsAttribute::.ctor(int32[]) = ( 01 00 02 00 00 00 01 00 00 00 01 00 00 00 00 00 ) // Code size 5 (0x5) .maxstack 8 - .line 18,18 : 23,28 '' + .line 18,18 : 23,28 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -2473,11 +2473,11 @@ .maxstack 3 .locals init ([0] string V_0, [1] string greeting) - .line 19,19 : 9,31 '' + .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 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Class01.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Class01.il.netfx4.bsl index a444d021439..327d3e15700 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Class01.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Class01.il.netfx4.bsl @@ -77,7 +77,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 42 (0x2a) .maxstack 8 - .line 7,7 : 23,37 '' + .line 7,7 : 23,37 IL_0000: nop IL_0001: volatile. IL_0003: ldsfld int32 StaticInit_ClassS01/C::init@4 @@ -88,15 +88,15 @@ IL_000d: br.s IL_0018 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_000f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit() IL_0014: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br.s IL_0019 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0018: nop IL_0019: ldsfld int32 StaticInit_ClassS01/C::x IL_001e: ldstr "2" @@ -110,7 +110,7 @@ { // Code size 13 (0xd) .maxstack 8 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldc.i4.0 IL_0001: stsfld int32 ''.$StaticInit_ClassS01::init@ IL_0006: ldsfld int32 ''.$StaticInit_ClassS01::init@ @@ -134,7 +134,7 @@ { // Code size 25 (0x19) .maxstack 8 - .line 6,6 : 12,30 '' + .line 6,6 : 12,30 IL_0000: nop IL_0001: ldstr "1" IL_0006: callvirt instance int32 [mscorlib]System.String::get_Length() @@ -142,7 +142,7 @@ IL_0010: ldc.i4.1 IL_0011: volatile. IL_0013: stsfld int32 StaticInit_ClassS01/C::init@4 - .line 4,4 : 6,7 '' + .line 4,4 : 6,7 IL_0018: ret } // end of method $StaticInit_ClassS01::.cctor diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Struct01.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Struct01.il.netfx4.bsl index 79dc35a089c..4be7c3092e7 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Struct01.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Struct01.il.netfx4.bsl @@ -93,7 +93,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 - .line 4,4 : 6,7 '' + .line 4,4 : 6,7 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -111,7 +111,7 @@ .maxstack 5 .locals init ([0] valuetype StaticInit_Struct01/C V_0, [1] valuetype StaticInit_Struct01/C& V_1) - .line 4,4 : 6,7 '' + .line 4,4 : 6,7 IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any StaticInit_Struct01/C @@ -137,7 +137,7 @@ // Code size 32 (0x20) .maxstack 7 .locals init ([0] int32 V_0) - .line 4,4 : 6,7 '' + .line 4,4 : 6,7 IL_0000: nop IL_0001: ldc.i4.0 IL_0002: stloc.0 @@ -167,7 +167,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 4,4 : 6,7 '' + .line 4,4 : 6,7 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -216,12 +216,12 @@ { // Code size 9 (0x9) .maxstack 8 - .line 4,4 : 8,9 '' + .line 4,4 : 8,9 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 IL_0003: stfld valuetype [mscorlib]System.DateTime StaticInit_Struct01/C::s - .line 4,4 : 6,7 '' + .line 4,4 : 6,7 IL_0008: ret } // end of method C::.ctor @@ -230,7 +230,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 42 (0x2a) .maxstack 8 - .line 7,7 : 23,37 '' + .line 7,7 : 23,37 IL_0000: nop IL_0001: volatile. IL_0003: ldsfld int32 StaticInit_Struct01/C::init@4 @@ -241,15 +241,15 @@ IL_000d: br.s IL_0018 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_000f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit() IL_0014: nop - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0015: nop IL_0016: br.s IL_0019 - .line 100001,100001 : 0,0 '' - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0018: nop IL_0019: ldsfld int32 StaticInit_Struct01/C::x IL_001e: ldstr "2" @@ -265,7 +265,7 @@ // Code size 24 (0x18) .maxstack 4 .locals init ([0] valuetype StaticInit_Struct01/C& V_0) - .line 4,4 : 6,7 '' + .line 4,4 : 6,7 IL_0000: nop IL_0001: ldarga.s obj IL_0003: stloc.0 @@ -310,7 +310,7 @@ { // Code size 13 (0xd) .maxstack 8 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0000: ldc.i4.0 IL_0001: stsfld int32 ''.$StaticInit_Struct01::init@ IL_0006: ldsfld int32 ''.$StaticInit_Struct01::init@ @@ -334,7 +334,7 @@ { // Code size 25 (0x19) .maxstack 8 - .line 6,6 : 12,30 '' + .line 6,6 : 12,30 IL_0000: nop IL_0001: ldstr "1" IL_0006: callvirt instance int32 [mscorlib]System.String::get_Length() @@ -342,7 +342,7 @@ IL_0010: ldc.i4.1 IL_0011: volatile. IL_0013: stsfld int32 StaticInit_Struct01/C::init@4 - .line 4,4 : 6,7 '' + .line 4,4 : 6,7 IL_0018: ret } // end of method $StaticInit_Struct01::.cctor diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch03.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch03.il.bsl index 263dc54c659..7f747c19e56 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch03.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch03.il.bsl @@ -84,25 +84,25 @@ IL_001b: ldloc.0 IL_001c: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice1Of3 IL_0021: stloc.2 - .line 7,7 : 13,35 '' + .line 7,7 : 13,35 IL_0022: ldstr "A" IL_0027: call void [mscorlib]System.Console::WriteLine(string) IL_002c: ret - .line 5,5 : 9,21 '' + .line 5,5 : 9,21 IL_002d: ldloc.0 IL_002e: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice2Of3 IL_0033: stloc.3 - .line 9,9 : 13,35 '' + .line 9,9 : 13,35 IL_0034: ldstr "B" IL_0039: call void [mscorlib]System.Console::WriteLine(string) IL_003e: ret - .line 5,5 : 9,21 '' + .line 5,5 : 9,21 IL_003f: ldloc.0 IL_0040: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice3Of3 IL_0045: stloc.s V_4 - .line 11,11 : 13,35 '' + .line 11,11 : 13,35 IL_0047: ldstr "C" IL_004c: call void [mscorlib]System.Console::WriteLine(string) IL_0051: ret diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch04.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch04.il.bsl index 27f346464dc..0340a8ad35f 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch04.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch04.il.bsl @@ -84,25 +84,25 @@ IL_001b: ldloc.0 IL_001c: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice2Of3 IL_0021: stloc.2 - .line 7,7 : 13,35 '' + .line 7,7 : 13,35 IL_0022: ldstr "B" IL_0027: call void [mscorlib]System.Console::WriteLine(string) IL_002c: ret - .line 5,5 : 9,21 '' + .line 5,5 : 9,21 IL_002d: ldloc.0 IL_002e: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice3Of3 IL_0033: stloc.3 - .line 9,9 : 13,35 '' + .line 9,9 : 13,35 IL_0034: ldstr "C" IL_0039: call void [mscorlib]System.Console::WriteLine(string) IL_003e: ret - .line 5,5 : 9,21 '' + .line 5,5 : 9,21 IL_003f: ldloc.0 IL_0040: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice1Of3 IL_0045: stloc.s V_4 - .line 11,11 : 13,35 '' + .line 11,11 : 13,35 IL_0047: ldstr "A" IL_004c: call void [mscorlib]System.Console::WriteLine(string) IL_0051: ret diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch08.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch08.il.bsl index 06565c6d609..cb16b21c4b7 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch08.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch08.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16774 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly SteppingMatch08 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.SteppingMatch08 { - // Offset: 0x00000000 Length: 0x00000203 + // Offset: 0x00000000 Length: 0x000001DF } .mresource public FSharpOptimizationData.SteppingMatch08 { - // Offset: 0x00000208 Length: 0x00000079 + // Offset: 0x000001E8 Length: 0x00000079 } .module SteppingMatch08.dll -// MVID: {4DAC14DC-F238-BA3A-A745-0383DC14AC4D} +// MVID: {5775B193-F238-BA3A-A745-038393B17557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000260000 +// Image base: 0x011A0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -53,33 +53,31 @@ .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) .method public static void test(int32 x) cil managed { - // Code size 22 (0x16) + // Code size 21 (0x15) .maxstack 3 .locals init ([0] int32 b) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 9,10 + .line 5,5 : 9,21 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch08.fs' IL_0000: nop - IL_0001: nop - .line 5,5 : 9,21 - IL_0002: ldarg.0 - IL_0003: switch ( - IL_000e) - IL_000c: br.s IL_0012 - - .line 6,6 : 16,17 - IL_000e: ldc.i4.2 - .line 100001,100001 : 0,0 - IL_000f: nop - IL_0010: br.s IL_0014 - - .line 7,7 : 18,19 - IL_0012: ldc.i4.0 - .line 100001,100001 : 0,0 - IL_0013: nop - .line 100001,100001 : 0,0 - IL_0014: stloc.0 - .line 10,10 : 5,38 - IL_0015: ret + IL_0001: ldarg.0 + IL_0002: switch ( + IL_000d) + IL_000b: br.s IL_0011 + + .line 6,6 : 16,17 + IL_000d: ldc.i4.2 + .line 100001,100001 : 0,0 + IL_000e: nop + IL_000f: br.s IL_0013 + + .line 7,7 : 18,19 + IL_0011: ldc.i4.0 + .line 100001,100001 : 0,0 + IL_0012: nop + .line 100001,100001 : 0,0 + IL_0013: stloc.0 + .line 10,10 : 5,38 + IL_0014: ret } // end of method SteppingMatch08::test } // end of class SteppingMatch08 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch09.fs b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch09.fs index c169defb35a..b1cca3856b1 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch09.fs +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch09.fs @@ -9,3 +9,35 @@ let public funcA n = None | _ -> Some( 22 ) // debug range should cover all of "Some( 22 )" + +// Test case from https://github.com/Microsoft/visualfsharp/issues/105 +let OuterWithGenericInner list = + let GenericInner (list: 'T list) = + match list with + | [] -> 1 + | _ -> 2 + + GenericInner list + +// Test case from https://github.com/Microsoft/visualfsharp/issues/105 +let OuterWithNonGenericInner list = + let NonGenericInner (list: int list) = + match list with + | [] -> 1 + | _ -> 2 + + NonGenericInner list + +// Test case from https://github.com/Microsoft/visualfsharp/issues/105 +let OuterWithNonGenericInnerWithCapture x list = + let NonGenericInnerWithCapture (list: int list) = + match list with + | [] -> 1 + | _ -> x + + NonGenericInnerWithCapture list + +//let _ = OuterWithGenericInner [1;2;3;4;5;6] +//let _ = OuterWithNonGenericInner [1;2;3;4;5;6] +//let _ = OuterWithNonGenericInnerWithCapture 5 [1;2;3;4;5;6] + diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch09.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch09.il.bsl index 12713813f6c..1c52afff123 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch09.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch09.il.bsl @@ -1,4 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.18020 + +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -12,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly SteppingMatch09 { @@ -21,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.SteppingMatch09 { - // Offset: 0x00000000 Length: 0x000001ED + // Offset: 0x00000000 Length: 0x00000318 } .mresource public FSharpOptimizationData.SteppingMatch09 { - // Offset: 0x000001F8 Length: 0x0000007A + // Offset: 0x00000320 Length: 0x000000EB } .module SteppingMatch09.dll -// MVID: {515BDBE9-4935-D6AC-A745-0383E9DB5B51} +// MVID: {5775B195-4935-D6AC-A745-038395B17557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00E10000 +// Image base: 0x00900000 // =============== CLASS MEMBERS DECLARATION =================== @@ -50,13 +51,184 @@ extends [mscorlib]System.Object { .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .class auto ansi serializable nested assembly beforefieldinit GenericInner@15 + extends [FSharp.Core]Microsoft.FSharp.Core.FSharpTypeFunc + { + .method assembly specialname rtspecialname + instance void .ctor() cil managed + { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpTypeFunc::.ctor() + IL_0006: ret + } // end of method GenericInner@15::.ctor + + .method public strict virtual instance object + Specialize() cil managed + { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + // Code size 12 (0xc) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: newobj instance void class SteppingMatch09/GenericInner@15T::.ctor(class SteppingMatch09/GenericInner@15) + IL_0006: box class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,int32> + IL_000b: ret + } // end of method GenericInner@15::Specialize + + } // end of class GenericInner@15 + + .class auto ansi serializable nested assembly beforefieldinit GenericInner@15T + extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,int32> + { + .field public class SteppingMatch09/GenericInner@15 self0@ + .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .method assembly specialname rtspecialname + instance void .ctor(class SteppingMatch09/GenericInner@15 self0@) cil managed + { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + // Code size 14 (0xe) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,int32>::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld class SteppingMatch09/GenericInner@15 class SteppingMatch09/GenericInner@15T::self0@ + IL_000d: ret + } // end of method GenericInner@15T::.ctor + + .method public strict virtual instance int32 + Invoke(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 list) cil managed + { + // Code size 24 (0x18) + .maxstack 6 + .locals init ([0] class SteppingMatch09/GenericInner@15 V_0) + .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' + .line 16,16 : 6,21 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch09.fs' + IL_0000: ldarg.0 + IL_0001: ldfld class SteppingMatch09/GenericInner@15 class SteppingMatch09/GenericInner@15T::self0@ + IL_0006: stloc.0 + IL_0007: nop + IL_0008: ldarg.1 + IL_0009: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_000e: brtrue.s IL_0012 + + IL_0010: br.s IL_0014 + + IL_0012: br.s IL_0016 + + .line 17,17 : 14,15 + IL_0014: ldc.i4.1 + IL_0015: ret + + .line 18,18 : 13,14 + IL_0016: ldc.i4.2 + IL_0017: ret + } // end of method GenericInner@15T::Invoke + + } // end of class GenericInner@15T + + .class auto ansi serializable nested assembly beforefieldinit NonGenericInner@25 + extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,int32> + { + .method assembly specialname rtspecialname + instance void .ctor() cil managed + { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,int32>::.ctor() + IL_0006: ret + } // end of method NonGenericInner@25::.ctor + + .method public strict virtual instance int32 + Invoke(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 list) cil managed + { + // Code size 17 (0x11) + .maxstack 8 + .line 25,25 : 6,21 + IL_0000: nop + IL_0001: ldarg.1 + IL_0002: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0007: brtrue.s IL_000b + + IL_0009: br.s IL_000d + + IL_000b: br.s IL_000f + + .line 26,26 : 14,15 + IL_000d: ldc.i4.1 + IL_000e: ret + + .line 27,27 : 13,14 + IL_000f: ldc.i4.2 + IL_0010: ret + } // end of method NonGenericInner@25::Invoke + + } // end of class NonGenericInner@25 + + .class auto ansi serializable nested assembly beforefieldinit NonGenericInnerWithCapture@34 + extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,int32> + { + .field public int32 x + .method assembly specialname rtspecialname + instance void .ctor(int32 x) cil managed + { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + // Code size 14 (0xe) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,int32>::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 SteppingMatch09/NonGenericInnerWithCapture@34::x + IL_000d: ret + } // end of method NonGenericInnerWithCapture@34::.ctor + + .method public strict virtual instance int32 + Invoke(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 list) cil managed + { + // Code size 22 (0x16) + .maxstack 8 + .line 34,34 : 6,21 + IL_0000: nop + IL_0001: ldarg.1 + IL_0002: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0007: brtrue.s IL_000b + + IL_0009: br.s IL_000d + + IL_000b: br.s IL_000f + + .line 35,35 : 14,15 + IL_000d: ldc.i4.1 + IL_000e: ret + + .line 36,36 : 13,14 + IL_000f: ldarg.0 + IL_0010: ldfld int32 SteppingMatch09/NonGenericInnerWithCapture@34::x + IL_0015: ret + } // end of method NonGenericInnerWithCapture@34::Invoke + + } // end of class NonGenericInnerWithCapture@34 + .method public static class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 funcA(int32 n) cil managed { // Code size 41 (0x29) .maxstack 8 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 9,21 + .line 5,5 : 9,21 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldc.i4.1 @@ -70,21 +242,80 @@ IL_0015: br.s IL_001f - .line 7,7 : 13,21 + .line 7,7 : 13,21 IL_0017: ldc.i4.s 10 IL_0019: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::Some(!0) IL_001e: ret - .line 9,9 : 13,17 + .line 9,9 : 13,17 IL_001f: ldnull IL_0020: ret - .line 11,11 : 20,34 + .line 11,11 : 20,34 IL_0021: ldc.i4.s 22 IL_0023: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::Some(!0) IL_0028: ret } // end of method SteppingMatch09::funcA + .method public static int32 OuterWithGenericInner(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 list) cil managed + { + // Code size 29 (0x1d) + .maxstack 4 + .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpTypeFunc GenericInner, + [1] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_1) + .line 20,20 : 3,20 + IL_0000: nop + IL_0001: newobj instance void SteppingMatch09/GenericInner@15::.ctor() + IL_0006: stloc.0 + .line 20,20 : 3,20 + IL_0007: ldloc.0 + IL_0008: ldarg.0 + IL_0009: stloc.1 + IL_000a: callvirt instance object [FSharp.Core]Microsoft.FSharp.Core.FSharpTypeFunc::Specialize() + IL_000f: unbox.any class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,int32> + IL_0014: ldloc.1 + IL_0015: tail. + IL_0017: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,int32>::Invoke(!0) + IL_001c: ret + } // end of method SteppingMatch09::OuterWithGenericInner + + .method public static int32 OuterWithNonGenericInner(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 list) cil managed + { + // Code size 17 (0x11) + .maxstack 4 + .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,int32> NonGenericInner) + .line 29,29 : 3,23 + IL_0000: nop + IL_0001: newobj instance void SteppingMatch09/NonGenericInner@25::.ctor() + IL_0006: stloc.0 + .line 29,29 : 3,23 + IL_0007: ldloc.0 + IL_0008: ldarg.0 + IL_0009: tail. + IL_000b: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,int32>::Invoke(!0) + IL_0010: ret + } // end of method SteppingMatch09::OuterWithNonGenericInner + + .method public static int32 OuterWithNonGenericInnerWithCapture(int32 x, + class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 list) cil managed + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationArgumentCountsAttribute::.ctor(int32[]) = ( 01 00 02 00 00 00 01 00 00 00 01 00 00 00 00 00 ) + // Code size 18 (0x12) + .maxstack 4 + .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,int32> NonGenericInnerWithCapture) + .line 38,38 : 3,34 + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: newobj instance void SteppingMatch09/NonGenericInnerWithCapture@34::.ctor(int32) + IL_0007: stloc.0 + .line 38,38 : 3,34 + IL_0008: ldloc.0 + IL_0009: ldarg.1 + IL_000a: tail. + IL_000c: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,int32>::Invoke(!0) + IL_0011: ret + } // end of method SteppingMatch09::OuterWithNonGenericInnerWithCapture + } // end of class SteppingMatch09 .class private abstract auto ansi sealed ''.$SteppingMatch09 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/keep.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/keep.lst new file mode 100644 index 00000000000..f59ec20aabf --- /dev/null +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/keep.lst @@ -0,0 +1 @@ +* \ No newline at end of file diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction14.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction14.il.netfx4.bsl index 762644f6f72..32aacd04f31 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction14.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction14.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16774 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction14 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.TestFunction14 { - // Offset: 0x00000000 Length: 0x0000020E + // Offset: 0x00000000 Length: 0x000001EA } .mresource public FSharpOptimizationData.TestFunction14 { - // Offset: 0x00000218 Length: 0x00000072 + // Offset: 0x000001F0 Length: 0x00000072 } .module TestFunction14.exe -// MVID: {4DAC30EA-A624-4587-A745-0383EA30AC4D} +// MVID: {5775B1E6-A624-4587-A745-0383E6B17557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000470000 +// Image base: 0x005F0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -57,6 +57,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -70,7 +72,7 @@ // Code size 11 (0xb) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 24,27 + .line 5,5 : 24,27 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction14.fs' IL_0000: nop IL_0001: ldarg.1 IL_0002: ldc.i4.2 @@ -87,6 +89,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -99,7 +103,7 @@ { // Code size 5 (0x5) .maxstack 8 - .line 5,5 : 40,45 + .line 5,5 : 40,45 IL_0000: nop IL_0001: ldarg.1 IL_0002: ldc.i4.1 @@ -114,7 +118,7 @@ { // Code size 29 (0x1d) .maxstack 8 - .line 5,5 : 5,47 + .line 5,5 : 5,47 IL_0000: nop IL_0001: newobj instance void TestFunction14/TestFunction14@5::.ctor() IL_0006: newobj instance void TestFunction14/'TestFunction14@5-1'::.ctor() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction19.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction19.il.netfx4.bsl index 285baff8399..f57f90e5ead 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction19.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction19.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17376 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly TestFunction19 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.TestFunction19 { - // Offset: 0x00000000 Length: 0x00000376 + // Offset: 0x00000000 Length: 0x00000352 } .mresource public FSharpOptimizationData.TestFunction19 { - // Offset: 0x00000380 Length: 0x00000100 + // Offset: 0x00000358 Length: 0x00000100 } .module TestFunction19.exe -// MVID: {4F20E3AE-A624-46AE-A745-0383AEE3204F} +// MVID: {5775B1A4-A624-46AE-A745-0383A4B17557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000004BBDBA0000 +// Image base: 0x00660000 // =============== CLASS MEMBERS DECLARATION =================== @@ -64,7 +64,7 @@ // Code size 24 (0x18) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 8,9 + .line 4,4 : 8,9 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction19.fs' IL_0000: ldarg.0 IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() IL_0006: ldarg.0 @@ -73,11 +73,11 @@ IL_0009: ldarg.0 IL_000a: ldarg.1 IL_000b: stfld int32 TestFunction19/C::x - .line 4,4 : 14,15 + .line 4,4 : 14,15 IL_0010: ldarg.0 IL_0011: ldarg.2 IL_0012: stfld int32 TestFunction19/C::y - .line 4,4 : 6,7 + .line 4,4 : 6,7 IL_0017: ret } // end of method C::.ctor @@ -86,7 +86,7 @@ { // Code size 8 (0x8) .maxstack 8 - .line 5,5 : 21,22 + .line 5,5 : 21,22 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld int32 TestFunction19/C::x @@ -98,7 +98,7 @@ { // Code size 8 (0x8) .maxstack 8 - .line 6,6 : 21,22 + .line 6,6 : 21,22 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld int32 TestFunction19/C::y @@ -125,6 +125,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 clo2) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -140,7 +142,7 @@ { // Code size 16 (0x10) .maxstack 8 - .line 11,11 : 5,31 + .line 11,11 : 5,31 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 TestFunction19/'TestFunction19@11-1'::clo2 @@ -162,6 +164,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> clo1) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -178,7 +182,7 @@ // Code size 21 (0x15) .maxstack 6 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_0) - .line 11,11 : 5,31 + .line 11,11 : 5,31 IL_0000: ldarg.0 IL_0001: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> TestFunction19/TestFunction19@11::clo1 IL_0006: ldarg.1 @@ -199,14 +203,14 @@ .locals init ([0] class TestFunction19/C c1, [1] class TestFunction19/C c2, [2] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> V_2) - .line 9,9 : 5,24 + .line 9,9 : 5,24 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.0 IL_0003: newobj instance void TestFunction19/C::.ctor(int32, int32) IL_0008: stloc.0 - .line 10,10 : 5,24 + .line 10,10 : 5,24 IL_0009: ldarg.0 IL_000a: ldarg.0 IL_000b: newobj instance void TestFunction19/C::.ctor(int32, @@ -216,7 +220,7 @@ IL_0016: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5>,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [mscorlib]System.Tuple`2>::.ctor(string) IL_001b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0020: stloc.2 - .line 11,11 : 5,37 + .line 11,11 : 5,37 IL_0021: ldloc.2 IL_0022: newobj instance void TestFunction19/TestFunction19@11::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) IL_0027: ldloc.0 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction20.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction20.il.netfx4.bsl index 5d1b3ada9dc..1b91095427f 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction20.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction20.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17376 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly TestFunction20 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.TestFunction20 { - // Offset: 0x00000000 Length: 0x000003B7 + // Offset: 0x00000000 Length: 0x00000393 } .mresource public FSharpOptimizationData.TestFunction20 { - // Offset: 0x000003C0 Length: 0x00000100 + // Offset: 0x00000398 Length: 0x00000100 } .module TestFunction20.exe -// MVID: {4F20E3B1-A643-44FB-A745-0383B1E3204F} +// MVID: {5775B1A6-A643-44FB-A745-0383A6B17557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x000000D869DA0000 +// Image base: 0x00C70000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,7 +66,7 @@ .locals init ([0] int32 z, [1] int32 w) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 8,9 + .line 4,4 : 8,9 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction20.fs' IL_0000: ldarg.0 IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() IL_0006: ldarg.0 @@ -75,25 +75,25 @@ IL_0009: ldarg.0 IL_000a: ldarg.1 IL_000b: stfld int32 TestFunction20/D::x - .line 4,4 : 14,15 + .line 4,4 : 14,15 IL_0010: ldarg.0 IL_0011: ldarg.2 IL_0012: stfld int32 TestFunction20/D::y - .line 5,5 : 5,18 + .line 5,5 : 5,18 IL_0017: ldarg.0 IL_0018: ldfld int32 TestFunction20/D::x IL_001d: ldarg.0 IL_001e: ldfld int32 TestFunction20/D::y IL_0023: add IL_0024: stloc.0 - .line 7,7 : 5,20 + .line 7,7 : 5,20 IL_0025: ldarg.0 IL_0026: ldloc.0 IL_0027: callvirt instance int32 TestFunction20/D::f(int32) IL_002c: ldloc.0 IL_002d: add IL_002e: stloc.1 - .line 4,4 : 6,7 + .line 4,4 : 6,7 IL_002f: ret } // end of method D::.ctor @@ -102,7 +102,7 @@ { // Code size 8 (0x8) .maxstack 8 - .line 8,8 : 21,22 + .line 8,8 : 21,22 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld int32 TestFunction20/D::x @@ -114,7 +114,7 @@ { // Code size 8 (0x8) .maxstack 8 - .line 9,9 : 21,22 + .line 9,9 : 21,22 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld int32 TestFunction20/D::y @@ -127,7 +127,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 10 (0xa) .maxstack 8 - .line 6,6 : 15,20 + .line 6,6 : 15,20 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld int32 TestFunction20/D::x @@ -156,6 +156,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 clo2) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -171,7 +173,7 @@ { // Code size 16 (0x10) .maxstack 8 - .line 14,14 : 5,31 + .line 14,14 : 5,31 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 TestFunction20/'TestFunction20@14-1'::clo2 @@ -193,6 +195,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> clo1) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -209,7 +213,7 @@ // Code size 21 (0x15) .maxstack 6 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_0) - .line 14,14 : 5,31 + .line 14,14 : 5,31 IL_0000: ldarg.0 IL_0001: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> TestFunction20/TestFunction20@14::clo1 IL_0006: ldarg.1 @@ -230,14 +234,14 @@ .locals init ([0] class TestFunction20/D d1, [1] class TestFunction20/D d2, [2] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> V_2) - .line 12,12 : 5,24 + .line 12,12 : 5,24 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.0 IL_0003: newobj instance void TestFunction20/D::.ctor(int32, int32) IL_0008: stloc.0 - .line 13,13 : 5,24 + .line 13,13 : 5,24 IL_0009: ldarg.0 IL_000a: ldarg.0 IL_000b: newobj instance void TestFunction20/D::.ctor(int32, @@ -247,7 +251,7 @@ IL_0016: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5>,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [mscorlib]System.Tuple`2>::.ctor(string) IL_001b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0020: stloc.2 - .line 14,14 : 5,37 + .line 14,14 : 5,37 IL_0021: ldloc.2 IL_0022: newobj instance void TestFunction20/TestFunction20@14::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) IL_0027: ldloc.0 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction21.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction21.il.netfx4.bsl index d387f38504c..a0971f6f7fc 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction21.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction21.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17376 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly TestFunction21 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.TestFunction21 { - // Offset: 0x00000000 Length: 0x000006A1 + // Offset: 0x00000000 Length: 0x00000685 } .mresource public FSharpOptimizationData.TestFunction21 { - // Offset: 0x000006A8 Length: 0x000001CD + // Offset: 0x00000690 Length: 0x000001CD } .module TestFunction21.exe -// MVID: {4F20E3B4-A643-45E6-A745-0383B4E3204F} +// MVID: {5775B1A9-A643-45E6-A745-0383A9B17557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00000002FA420000 +// Image base: 0x014B0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -293,7 +293,7 @@ // Code size 14 (0xe) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 6,7 + .line 4,4 : 6,7 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction21.fs' IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -319,7 +319,7 @@ [7] class [mscorlib]System.Collections.IComparer V_7, [8] int32 V_8, [9] int32 V_9) - .line 4,4 : 6,7 + .line 4,4 : 6,7 IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any TestFunction21/U @@ -333,7 +333,7 @@ IL_0010: br IL_0092 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0015: ldarg.1 IL_0016: unbox.any TestFunction21/U IL_001b: ldnull @@ -344,10 +344,10 @@ IL_0022: br IL_0090 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0027: ldarg.0 IL_0028: pop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0029: ldarg.0 IL_002a: stloc.1 IL_002b: ldloc.0 @@ -368,19 +368,19 @@ IL_0048: br.s IL_004e - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004a: ldc.i4.m1 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004b: nop IL_004c: br.s IL_0055 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_004e: ldloc.s V_5 IL_0050: ldloc.s V_6 IL_0052: cgt - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0054: nop - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0055: stloc.3 IL_0056: ldloc.3 IL_0057: ldc.i4.0 @@ -390,11 +390,11 @@ IL_005c: br.s IL_0060 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_005e: ldloc.3 IL_005f: ret - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0060: ldloc.3 IL_0061: ldc.i4.0 IL_0062: ble.s IL_0066 @@ -403,11 +403,11 @@ IL_0066: br.s IL_006a - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0068: ldloc.3 IL_0069: ret - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_006a: ldarg.2 IL_006b: stloc.s V_7 IL_006d: ldloc.1 @@ -424,21 +424,21 @@ IL_0085: br.s IL_0089 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0087: ldc.i4.m1 IL_0088: ret - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0089: ldloc.s V_8 IL_008b: ldloc.s V_9 IL_008d: cgt IL_008f: ret - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0090: ldc.i4.1 IL_0091: ret - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_0092: ldarg.1 IL_0093: unbox.any TestFunction21/U IL_0098: ldnull @@ -449,11 +449,11 @@ IL_009f: br.s IL_00a3 - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_00a1: ldc.i4.m1 IL_00a2: ret - .line 100001,100001 : 0,0 + .line 100001,100001 : 0,0 IL_00a3: ldc.i4.0 IL_00a4: ret } // end of method U::CompareTo @@ -529,7 +529,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 4,4 : 6,7 + .line 4,4 : 6,7 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -742,6 +742,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 clo2) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -757,7 +759,7 @@ { // Code size 16 (0x10) .maxstack 8 - .line 7,7 : 5,29 + .line 7,7 : 5,29 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 TestFunction21/'TestFunction21@7-1'::clo2 @@ -779,6 +781,8 @@ .method assembly specialname rtspecialname instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> clo1) cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: ldarg.0 @@ -795,7 +799,7 @@ // Code size 21 (0x15) .maxstack 6 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_0) - .line 7,7 : 5,29 + .line 7,7 : 5,29 IL_0000: ldarg.0 IL_0001: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> TestFunction21/TestFunction21@7::clo1 IL_0006: ldarg.1 @@ -817,7 +821,7 @@ [1] int32 b, [2] int32 a, [3] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> V_3) - .line 7,7 : 5,33 + .line 7,7 : 5,33 IL_0000: ldarg.0 IL_0001: stloc.0 IL_0002: ldloc.0 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction23.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction23.il.netfx4.bsl index d1422d18107..83902ff1404 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction23.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction23.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17376 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly TestFunction23 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.TestFunction23 { - // Offset: 0x00000000 Length: 0x0000036A + // Offset: 0x00000000 Length: 0x00000346 } .mresource public FSharpOptimizationData.TestFunction23 { - // Offset: 0x00000370 Length: 0x000000E3 + // Offset: 0x00000350 Length: 0x000000E3 } .module TestFunction23.exe -// MVID: {4F20E3B8-A643-451C-A745-0383B8E3204F} +// MVID: {5775B1AC-A643-451C-A745-0383ACB17557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000008C477A0000 +// Image base: 0x00CD0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -63,7 +63,7 @@ // Code size 32 (0x20) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 6,6 : 5,38 + .line 6,6 : 5,38 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction23.fs' IL_0000: ldarg.0 IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() IL_0006: ldarg.0 @@ -72,11 +72,11 @@ IL_0009: ldarg.0 IL_000a: call string [mscorlib]System.Console::ReadLine() IL_000f: stfld string TestFunction23/C::x - .line 8,8 : 5,38 + .line 8,8 : 5,38 IL_0014: ldarg.0 IL_0015: call string [mscorlib]System.Console::ReadLine() IL_001a: stfld string TestFunction23/C::x@8 - .line 5,5 : 6,7 + .line 5,5 : 6,7 IL_001f: ret } // end of method C::.ctor @@ -85,7 +85,7 @@ { // Code size 19 (0x13) .maxstack 8 - .line 9,9 : 23,30 + .line 9,9 : 23,30 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld string TestFunction23/C::x@8 @@ -102,7 +102,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 8 (0x8) .maxstack 8 - .line 7,7 : 15,16 + .line 7,7 : 15,16 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld string TestFunction23/C::x @@ -117,6 +117,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -129,13 +131,13 @@ { // Code size 35 (0x23) .maxstack 8 - .line 13,13 : 9,24 + .line 13,13 : 9,24 IL_0000: nop IL_0001: ldstr "Hello" IL_0006: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0010: pop - .line 14,14 : 9,24 + .line 14,14 : 9,24 IL_0011: ldstr "Hello" IL_0016: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_001b: tail. @@ -151,11 +153,11 @@ // Code size 27 (0x1b) .maxstack 5 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 g) - .line 12,12 : 9,12 + .line 15,15 : 5,13 IL_0000: nop IL_0001: newobj instance void TestFunction23/g@13::.ctor() IL_0006: stloc.0 - .line 15,15 : 5,13 + .line 15,15 : 5,13 IL_0007: ldloc.0 IL_0008: ldnull IL_0009: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction24.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction24.il.netfx4.bsl index 244989e3132..514333240ed 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction24.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction24.il.netfx4.bsl @@ -277,7 +277,7 @@ [6] class [mscorlib]System.Collections.IComparer V_6, [7] int32 V_7, [8] int32 V_8) - .line 4,4 : 6,11 '' + .line 4,4 : 6,11 IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any TestFunction24/Point @@ -293,7 +293,7 @@ IL_0012: br IL_008d - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_0017: ldarg.1 IL_0018: unbox.any TestFunction24/Point IL_001d: ldnull @@ -304,7 +304,7 @@ IL_0024: br IL_008b - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_0029: ldarg.2 IL_002a: stloc.3 IL_002b: ldarg.0 @@ -321,19 +321,19 @@ IL_0043: br.s IL_0049 - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_0045: ldc.i4.m1 - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_0046: nop IL_0047: br.s IL_0050 - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_0049: ldloc.s V_4 IL_004b: ldloc.s V_5 IL_004d: cgt - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_004f: nop - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_0050: stloc.2 IL_0051: ldloc.2 IL_0052: ldc.i4.0 @@ -343,11 +343,11 @@ IL_0057: br.s IL_005b - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_0059: ldloc.2 IL_005a: ret - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_005b: ldloc.2 IL_005c: ldc.i4.0 IL_005d: ble.s IL_0061 @@ -356,11 +356,11 @@ IL_0061: br.s IL_0065 - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_0063: ldloc.2 IL_0064: ret - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_0065: ldarg.2 IL_0066: stloc.s V_6 IL_0068: ldarg.0 @@ -377,21 +377,21 @@ IL_0080: br.s IL_0084 - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_0082: ldc.i4.m1 IL_0083: ret - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_0084: ldloc.s V_7 IL_0086: ldloc.s V_8 IL_0088: cgt IL_008a: ret - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_008b: ldc.i4.1 IL_008c: ret - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_008d: ldarg.1 IL_008e: unbox.any TestFunction24/Point IL_0093: ldnull @@ -402,11 +402,11 @@ IL_009a: br.s IL_009e - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_009c: ldc.i4.m1 IL_009d: ret - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_009e: ldc.i4.0 IL_009f: ret } // end of method Point::CompareTo @@ -475,7 +475,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 4,4 : 6,11 '' + .line 4,4 : 6,11 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -662,21 +662,21 @@ [4] int32 V_4, [5] native int V_5, [6] int32 V_6) - .line 7,7 : 5,33 '' + .line 7,7 : 5,33 IL_0000: nop IL_0001: ldc.i4.1 IL_0002: ldc.i4.2 IL_0003: newobj instance void TestFunction24/Point::.ctor(int32, int32) IL_0008: stloc.0 - .line 8,8 : 5,28 '' + .line 8,8 : 5,28 IL_0009: ldloc.0 IL_000a: ldflda int32 TestFunction24/Point::x@ IL_000f: stloc.2 IL_0010: ldloc.2 IL_0011: conv.i IL_0012: stloc.1 - .line 9,9 : 5,44 '' + .line 9,9 : 5,44 IL_0013: ldloc.1 IL_0014: stloc.3 IL_0015: ldc.i4.0 @@ -710,19 +710,19 @@ .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 point, [1] native int p1, [2] int32& pinned V_2) - .line 12,12 : 5,23 '' + .line 12,12 : 5,23 IL_0000: nop IL_0001: ldc.i4.s 17 IL_0003: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) IL_0008: stloc.0 - .line 13,13 : 5,35 '' + .line 13,13 : 5,35 IL_0009: ldloc.0 IL_000a: ldflda !0 class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1::contents@ IL_000f: stloc.2 IL_0010: ldloc.2 IL_0011: conv.i IL_0012: stloc.1 - .line 14,14 : 5,42 '' + .line 14,14 : 5,42 IL_0013: ldloc.1 IL_0014: ldobj [mscorlib]System.Int32 IL_0019: ldloc.1 @@ -743,7 +743,7 @@ [5] int32 V_5, [6] native int V_6, [7] int32 V_7) - .line 17,17 : 5,49 '' + .line 17,17 : 5,49 IL_0000: nop IL_0001: ldc.i4.6 IL_0002: newarr [mscorlib]System.Double @@ -772,7 +772,7 @@ IL_0059: ldc.r8 5.9000000000000004 IL_0062: stelem [mscorlib]System.Double IL_0067: stloc.0 - .line 18,18 : 5,23 '' + .line 18,18 : 5,23 IL_0068: ldloc.0 IL_0069: stloc.2 IL_006a: ldloc.2 @@ -782,7 +782,7 @@ IL_006f: br.s IL_008f - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_0071: ldloc.2 IL_0072: call int32 [FSharp.Core]Microsoft.FSharp.Collections.ArrayModule::Length(!!0[]) IL_0077: brfalse.s IL_007b @@ -791,32 +791,32 @@ IL_007b: br.s IL_008a - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_007d: ldloc.2 IL_007e: ldc.i4.0 IL_007f: ldelema [mscorlib]System.Double IL_0084: stloc.3 IL_0085: ldloc.3 IL_0086: conv.i - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_0087: nop IL_0088: br.s IL_0092 - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_008a: ldc.i4.0 IL_008b: conv.i - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_008c: nop IL_008d: br.s IL_0092 - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_008f: ldc.i4.0 IL_0090: conv.i - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_0091: nop - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_0092: stloc.1 - .line 19,19 : 5,44 '' + .line 19,19 : 5,44 IL_0093: ldloc.1 IL_0094: stloc.s V_4 IL_0096: ldc.i4.0 @@ -854,7 +854,7 @@ [4] int32 V_4, [5] native int V_5, [6] int32 V_6) - .line 22,22 : 5,49 '' + .line 22,22 : 5,49 IL_0000: nop IL_0001: ldc.i4.6 IL_0002: newarr [mscorlib]System.Double @@ -883,7 +883,7 @@ IL_0059: ldc.r8 5.9000000000000004 IL_0062: stelem [mscorlib]System.Double IL_0067: stloc.0 - .line 24,24 : 5,27 '' + .line 24,24 : 5,27 IL_0068: ldloc.0 IL_0069: ldc.i4.0 IL_006a: ldelema [mscorlib]System.Double @@ -891,7 +891,7 @@ IL_0070: ldloc.2 IL_0071: conv.i IL_0072: stloc.1 - .line 25,25 : 5,42 '' + .line 25,25 : 5,42 IL_0073: ldloc.1 IL_0074: stloc.3 IL_0075: ldc.i4.0 @@ -930,11 +930,11 @@ [4] int32 V_4, [5] native int V_5, [6] int32 V_6) - .line 28,28 : 5,28 '' + .line 28,28 : 5,28 IL_0000: nop IL_0001: ldstr "Hello World" IL_0006: stloc.0 - .line 30,30 : 5,26 '' + .line 30,30 : 5,26 IL_0007: ldloc.0 IL_0008: stloc.2 IL_0009: ldloc.2 @@ -944,22 +944,22 @@ IL_000e: br.s IL_001b - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_0010: ldloc.2 IL_0011: conv.i IL_0012: call int32 [mscorlib]System.Runtime.CompilerServices.RuntimeHelpers::get_OffsetToStringData() IL_0017: add - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_0018: nop IL_0019: br.s IL_001d - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_001b: ldloc.2 - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_001c: nop - .line 16707566,16707566 : 0,0 '' + .line 16707566,16707566 : 0,0 IL_001d: stloc.1 - .line 31,31 : 5,50 '' + .line 31,31 : 5,50 IL_001e: ldloc.1 IL_001f: stloc.3 IL_0020: ldc.i4.0 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3.il.netfx4.bsl index 355aed3bee6..8a073bd0d14 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3.il.netfx4.bsl @@ -62,12 +62,12 @@ IL_0006: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0010: pop - .line 6,6 : 5,20 '' + .line 6,6 : 5,20 IL_0011: ldstr "World" IL_0016: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_001b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0020: pop - .line 7,7 : 5,8 '' + .line 7,7 : 5,8 IL_0021: ldc.i4.3 IL_0022: ldc.i4.4 IL_0023: add @@ -81,35 +81,35 @@ .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_0, [1] int32 x, [2] class [mscorlib]System.Exception V_2) - .line 10,10 : 5,8 '' + .line 10,10 : 5,8 IL_0000: nop .try { IL_0001: nop - .line 11,11 : 8,31 '' + .line 11,11 : 8,31 IL_0002: call int32 TestFunction3::TestFunction1() IL_0007: stloc.1 - .line 12,12 : 8,23 '' + .line 12,12 : 8,23 IL_0008: ldstr "Hello" IL_000d: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_0012: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0017: stloc.0 IL_0018: leave.s IL_0032 - .line 13,13 : 5,9 '' + .line 13,13 : 5,9 } // end .try catch [mscorlib]System.Object { IL_001a: castclass [mscorlib]System.Exception IL_001f: stloc.2 - .line 14,14 : 8,23 '' + .line 14,14 : 8,23 IL_0020: ldstr "World" IL_0025: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_002a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_002f: stloc.0 IL_0030: leave.s IL_0032 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler IL_0032: ldloc.0 IL_0033: pop diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3b.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3b.il.netfx4.bsl index 08e21867c7a..3db99081499 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3b.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3b.il.netfx4.bsl @@ -62,12 +62,12 @@ IL_0006: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0010: pop - .line 6,6 : 5,20 '' + .line 6,6 : 5,20 IL_0011: ldstr "World" IL_0016: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_001b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0020: pop - .line 7,7 : 5,8 '' + .line 7,7 : 5,8 IL_0021: ldc.i4.3 IL_0022: ldc.i4.4 IL_0023: add @@ -82,21 +82,21 @@ [1] int32 x, [2] class [mscorlib]System.Exception V_2, [3] class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 V_3) - .line 10,10 : 5,8 '' + .line 10,10 : 5,8 IL_0000: nop .try { IL_0001: nop - .line 11,11 : 8,31 '' + .line 11,11 : 8,31 IL_0002: call int32 TestFunction3b::TestFunction1() IL_0007: stloc.1 - .line 12,12 : 8,24 '' + .line 12,12 : 8,24 IL_0008: ldstr "hello" IL_000d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::FailWith(string) IL_0012: stloc.0 IL_0013: leave.s IL_0046 - .line 13,13 : 5,9 '' + .line 13,13 : 5,9 } // end .try catch [mscorlib]System.Object { @@ -112,21 +112,21 @@ IL_0027: br.s IL_003b - .line 14,14 : 8,23 '' + .line 14,14 : 8,23 IL_0029: ldstr "World" IL_002e: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_0033: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0038: stloc.0 IL_0039: leave.s IL_0046 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_003b: rethrow IL_003d: ldnull IL_003e: unbox.any [FSharp.Core]Microsoft.FSharp.Core.Unit IL_0043: stloc.0 IL_0044: leave.s IL_0046 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler IL_0046: ldloc.0 IL_0047: pop diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3c.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3c.il.netfx4.bsl index f9abc1cc34b..adf63c46501 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3c.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3c.il.netfx4.bsl @@ -62,12 +62,12 @@ IL_0006: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0010: pop - .line 6,6 : 5,20 '' + .line 6,6 : 5,20 IL_0011: ldstr "World" IL_0016: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_001b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0020: pop - .line 7,7 : 5,8 '' + .line 7,7 : 5,8 IL_0021: ldc.i4.3 IL_0022: ldc.i4.4 IL_0023: add @@ -84,21 +84,21 @@ [3] class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 V_3, [4] string msg, [5] string V_5) - .line 10,10 : 5,8 '' + .line 10,10 : 5,8 IL_0000: nop .try { IL_0001: nop - .line 11,11 : 8,31 '' + .line 11,11 : 8,31 IL_0002: call int32 TestFunction3c::TestFunction1() IL_0007: stloc.1 - .line 12,12 : 8,24 '' + .line 12,12 : 8,24 IL_0008: ldstr "hello" IL_000d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::FailWith(string) IL_0012: stloc.0 IL_0013: leave.s IL_0064 - .line 13,13 : 5,9 '' + .line 13,13 : 5,9 } // end .try catch [mscorlib]System.Object { @@ -126,21 +126,21 @@ IL_003f: ldloc.3 IL_0040: call instance !0 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::get_Value() IL_0045: stloc.s V_5 - .line 14,14 : 8,23 '' + .line 14,14 : 8,23 IL_0047: ldstr "World" IL_004c: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_0051: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0056: stloc.0 IL_0057: leave.s IL_0064 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0059: rethrow IL_005b: ldnull IL_005c: unbox.any [FSharp.Core]Microsoft.FSharp.Core.Unit IL_0061: stloc.0 IL_0062: leave.s IL_0064 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler IL_0064: ldloc.0 IL_0065: pop diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction14.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction14.il.bsl deleted file mode 100644 index e40953a029c..00000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction14.il.bsl +++ /dev/null @@ -1,149 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly TestFunction14 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.TestFunction14 -{ - // Offset: 0x00000000 Length: 0x000001FE -} -.mresource public FSharpOptimizationData.TestFunction14 -{ - // Offset: 0x00000208 Length: 0x00000072 -} -.module TestFunction14.exe -// MVID: {4BEB2941-A624-4587-A745-03834129EB4B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x00460000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed TestFunction14 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto ansi serializable nested assembly beforefieldinit TestFunction14@5 - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,int32> - { - .method assembly specialname rtspecialname - instance void .ctor() cil managed - { - // Code size 7 (0x7) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,int32>::.ctor() - IL_0006: ret - } // end of method TestFunction14@5::.ctor - - .method public strict virtual instance int32 - Invoke(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 f) cil managed - { - // Code size 11 (0xb) - .maxstack 6 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 24,27 - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: ldc.i4.2 - IL_0003: tail. - IL_0005: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) - IL_000a: ret - } // end of method TestFunction14@5::Invoke - - } // end of class TestFunction14@5 - - .class auto ansi serializable nested assembly beforefieldinit 'TestFunction14@5-1' - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 - { - .method assembly specialname rtspecialname - instance void .ctor() cil managed - { - // Code size 7 (0x7) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::.ctor() - IL_0006: ret - } // end of method 'TestFunction14@5-1'::.ctor - - .method public strict virtual instance int32 - Invoke(int32 x) cil managed - { - // Code size 5 (0x5) - .maxstack 6 - .line 5,5 : 40,45 - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: ldc.i4.1 - IL_0003: add - IL_0004: ret - } // end of method 'TestFunction14@5-1'::Invoke - - } // end of class 'TestFunction14@5-1' - - .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 - TestFunction14() cil managed - { - // Code size 29 (0x1d) - .maxstack 5 - .line 5,5 : 5,47 - IL_0000: nop - IL_0001: newobj instance void TestFunction14/TestFunction14@5::.ctor() - IL_0006: newobj instance void TestFunction14/'TestFunction14@5-1'::.ctor() - IL_000b: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1>::get_Empty() - IL_0010: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1>::Cons(!0, - class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1) - IL_0015: tail. - IL_0017: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.ListModule::Map,int32>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, - class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1) - IL_001c: ret - } // end of method TestFunction14::TestFunction14 - -} // end of class TestFunction14 - -.class private abstract auto ansi sealed ''.$TestFunction14 - extends [mscorlib]System.Object -{ - .method public static void main@() cil managed - { - .entrypoint - // Code size 2 (0x2) - .maxstack 2 - IL_0000: nop - IL_0001: ret - } // end of method $TestFunction14::main@ - -} // end of class ''.$TestFunction14 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction15.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction15.il.bsl index 3752b7fc50b..62baddcbebb 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction15.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction15.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16774 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction15 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.TestFunction15 { - // Offset: 0x00000000 Length: 0x0000020E + // Offset: 0x00000000 Length: 0x000001EA } .mresource public FSharpOptimizationData.TestFunction15 { - // Offset: 0x00000218 Length: 0x00000072 + // Offset: 0x000001F0 Length: 0x00000072 } .module TestFunction15.exe -// MVID: {4DAC30EC-A624-4662-A745-0383EC30AC4D} +// MVID: {5775BAD5-A624-4662-A745-0383D5BA7557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000270000 +// Image base: 0x00980000 // =============== CLASS MEMBERS DECLARATION =================== @@ -57,6 +57,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -70,7 +72,7 @@ // Code size 5 (0x5) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 6,6 : 35,40 + .line 6,6 : 35,40 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction15.fs' IL_0000: nop IL_0001: ldarg.1 IL_0002: ldc.i4.1 @@ -86,13 +88,13 @@ // Code size 41 (0x29) .maxstack 7 .locals init ([0] int32 x) - .line 5,5 : 5,18 + .line 5,5 : 5,18 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldc.i4.1 IL_0003: add IL_0004: stloc.0 - .line 6,6 : 5,41 + .line 6,6 : 5,41 IL_0005: newobj instance void TestFunction15/TestFunction15@6::.ctor() IL_000a: ldc.i4.1 IL_000b: ldc.i4.2 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction19.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction19.il.bsl deleted file mode 100644 index 519a47149ef..00000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction19.il.bsl +++ /dev/null @@ -1,250 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly TestFunction19 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.TestFunction19 -{ - // Offset: 0x00000000 Length: 0x00000366 -} -.mresource public FSharpOptimizationData.TestFunction19 -{ - // Offset: 0x00000370 Length: 0x00000100 -} -.module TestFunction19.exe -// MVID: {4BEB28F6-A624-46AE-A745-0383F628EB4B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x00360000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed TestFunction19 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto ansi serializable nested public C - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 03 00 00 00 00 00 ) - .field assembly int32 y - .field assembly int32 x - .method public specialname rtspecialname - instance void .ctor(int32 x, - int32 y) cil managed - { - // Code size 24 (0x18) - .maxstack 4 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 8,9 - IL_0000: ldarg.0 - IL_0001: call instance void [mscorlib]System.Object::.ctor() - IL_0006: ldarg.0 - IL_0007: pop - IL_0008: nop - IL_0009: ldarg.0 - IL_000a: ldarg.1 - IL_000b: stfld int32 TestFunction19/C::x - .line 4,4 : 14,15 - IL_0010: ldarg.0 - IL_0011: ldarg.2 - IL_0012: stfld int32 TestFunction19/C::y - .line 4,4 : 6,7 - IL_0017: ret - } // end of method C::.ctor - - .method public specialname instance int32 - get_X() cil managed - { - // Code size 8 (0x8) - .maxstack 3 - .line 5,5 : 21,22 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldfld int32 TestFunction19/C::x - IL_0007: ret - } // end of method C::get_X - - .method public specialname instance int32 - get_Y() cil managed - { - // Code size 8 (0x8) - .maxstack 3 - .line 6,6 : 21,22 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldfld int32 TestFunction19/C::y - IL_0007: ret - } // end of method C::get_Y - - .property instance int32 X() - { - .get instance int32 TestFunction19/C::get_X() - } // end of property C::X - .property instance int32 Y() - { - .get instance int32 TestFunction19/C::get_Y() - } // end of property C::Y - } // end of class C - - .class auto ansi serializable nested assembly beforefieldinit 'TestFunction19@11-1' - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 - { - .field public class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 clo2 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method assembly specialname rtspecialname - instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 clo2) cil managed - { - // Code size 14 (0xe) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 TestFunction19/'TestFunction19@11-1'::clo2 - IL_000d: ret - } // end of method 'TestFunction19@11-1'::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Core.Unit - Invoke(class TestFunction19/C arg20) cil managed - { - // Code size 16 (0x10) - .maxstack 6 - .line 11,11 : 5,31 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 TestFunction19/'TestFunction19@11-1'::clo2 - IL_0007: ldarg.1 - IL_0008: tail. - IL_000a: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) - IL_000f: ret - } // end of method 'TestFunction19@11-1'::Invoke - - } // end of class 'TestFunction19@11-1' - - .class auto ansi serializable nested assembly beforefieldinit TestFunction19@11 - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> - { - .field public class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> clo1 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method assembly specialname rtspecialname - instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> clo1) cil managed - { - // Code size 14 (0xe) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> TestFunction19/TestFunction19@11::clo1 - IL_000d: ret - } // end of method TestFunction19@11::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 - Invoke(class TestFunction19/C arg10) cil managed - { - // Code size 21 (0x15) - .maxstack 6 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_0) - .line 11,11 : 5,31 - IL_0000: ldarg.0 - IL_0001: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> TestFunction19/TestFunction19@11::clo1 - IL_0006: ldarg.1 - IL_0007: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::Invoke(!0) - IL_000c: stloc.0 - IL_000d: nop - IL_000e: ldloc.0 - IL_000f: newobj instance void TestFunction19/'TestFunction19@11-1'::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_0014: ret - } // end of method TestFunction19@11::Invoke - - } // end of class TestFunction19@11 - - .method public static void TestFunction19(int32 inp) cil managed - { - // Code size 48 (0x30) - .maxstack 5 - .locals init ([0] class TestFunction19/C c1, - [1] class TestFunction19/C c2, - [2] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> V_2) - .line 9,9 : 5,24 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldarg.0 - IL_0003: newobj instance void TestFunction19/C::.ctor(int32, - int32) - IL_0008: stloc.0 - .line 10,10 : 5,24 - IL_0009: ldarg.0 - IL_000a: ldarg.0 - IL_000b: newobj instance void TestFunction19/C::.ctor(int32, - int32) - IL_0010: stloc.1 - IL_0011: ldstr "c1 = %A, c2 = %A" - IL_0016: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5>,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [mscorlib]System.Tuple`2>::.ctor(string) - IL_001b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0020: stloc.2 - .line 11,11 : 5,37 - IL_0021: ldloc.2 - IL_0022: newobj instance void TestFunction19/TestFunction19@11::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0027: ldloc.0 - IL_0028: ldloc.1 - IL_0029: call !!0 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::InvokeFast(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>, - !0, - !1) - IL_002e: pop - IL_002f: ret - } // end of method TestFunction19::TestFunction19 - -} // end of class TestFunction19 - -.class private abstract auto ansi sealed ''.$TestFunction19 - extends [mscorlib]System.Object -{ - .method public static void main@() cil managed - { - .entrypoint - // Code size 2 (0x2) - .maxstack 2 - IL_0000: nop - IL_0001: ret - } // end of method $TestFunction19::main@ - -} // end of class ''.$TestFunction19 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction20.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction20.il.bsl deleted file mode 100644 index 925fedca63f..00000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction20.il.bsl +++ /dev/null @@ -1,280 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly TestFunction20 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.TestFunction20 -{ - // Offset: 0x00000000 Length: 0x000003A7 -} -.mresource public FSharpOptimizationData.TestFunction20 -{ - // Offset: 0x000003B0 Length: 0x00000100 -} -.module TestFunction20.exe -// MVID: {4BEB28FC-A643-44FB-A745-0383FC28EB4B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x01ED0000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed TestFunction20 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto ansi serializable nested public D - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 03 00 00 00 00 00 ) - .field assembly int32 y - .field assembly int32 x - .method public specialname rtspecialname - instance void .ctor(int32 x, - int32 y) cil managed - { - // Code size 48 (0x30) - .maxstack 4 - .locals init ([0] int32 z, - [1] int32 w) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 8,9 - IL_0000: ldarg.0 - IL_0001: call instance void [mscorlib]System.Object::.ctor() - IL_0006: ldarg.0 - IL_0007: pop - IL_0008: nop - IL_0009: ldarg.0 - IL_000a: ldarg.1 - IL_000b: stfld int32 TestFunction20/D::x - .line 4,4 : 14,15 - IL_0010: ldarg.0 - IL_0011: ldarg.2 - IL_0012: stfld int32 TestFunction20/D::y - .line 5,5 : 5,18 - IL_0017: ldarg.0 - IL_0018: ldfld int32 TestFunction20/D::x - IL_001d: ldarg.0 - IL_001e: ldfld int32 TestFunction20/D::y - IL_0023: add - IL_0024: stloc.0 - .line 7,7 : 5,20 - IL_0025: ldarg.0 - IL_0026: ldloc.0 - IL_0027: call instance int32 TestFunction20/D::f(int32) - IL_002c: ldloc.0 - IL_002d: add - IL_002e: stloc.1 - .line 4,4 : 6,7 - IL_002f: ret - } // end of method D::.ctor - - .method public specialname instance int32 - get_X() cil managed - { - // Code size 8 (0x8) - .maxstack 3 - .line 8,8 : 21,22 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldfld int32 TestFunction20/D::x - IL_0007: ret - } // end of method D::get_X - - .method public specialname instance int32 - get_Y() cil managed - { - // Code size 8 (0x8) - .maxstack 3 - .line 9,9 : 21,22 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldfld int32 TestFunction20/D::y - IL_0007: ret - } // end of method D::get_Y - - .method assembly instance int32 f(int32 a) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 10 (0xa) - .maxstack 4 - .line 6,6 : 15,20 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldfld int32 TestFunction20/D::x - IL_0007: ldarg.1 - IL_0008: add - IL_0009: ret - } // end of method D::f - - .property instance int32 X() - { - .get instance int32 TestFunction20/D::get_X() - } // end of property D::X - .property instance int32 Y() - { - .get instance int32 TestFunction20/D::get_Y() - } // end of property D::Y - } // end of class D - - .class auto ansi serializable nested assembly beforefieldinit 'TestFunction20@14-1' - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 - { - .field public class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 clo2 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method assembly specialname rtspecialname - instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 clo2) cil managed - { - // Code size 14 (0xe) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 TestFunction20/'TestFunction20@14-1'::clo2 - IL_000d: ret - } // end of method 'TestFunction20@14-1'::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Core.Unit - Invoke(class TestFunction20/D arg20) cil managed - { - // Code size 16 (0x10) - .maxstack 6 - .line 14,14 : 5,31 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 TestFunction20/'TestFunction20@14-1'::clo2 - IL_0007: ldarg.1 - IL_0008: tail. - IL_000a: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) - IL_000f: ret - } // end of method 'TestFunction20@14-1'::Invoke - - } // end of class 'TestFunction20@14-1' - - .class auto ansi serializable nested assembly beforefieldinit TestFunction20@14 - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> - { - .field public class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> clo1 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method assembly specialname rtspecialname - instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> clo1) cil managed - { - // Code size 14 (0xe) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> TestFunction20/TestFunction20@14::clo1 - IL_000d: ret - } // end of method TestFunction20@14::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 - Invoke(class TestFunction20/D arg10) cil managed - { - // Code size 21 (0x15) - .maxstack 6 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_0) - .line 14,14 : 5,31 - IL_0000: ldarg.0 - IL_0001: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> TestFunction20/TestFunction20@14::clo1 - IL_0006: ldarg.1 - IL_0007: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::Invoke(!0) - IL_000c: stloc.0 - IL_000d: nop - IL_000e: ldloc.0 - IL_000f: newobj instance void TestFunction20/'TestFunction20@14-1'::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_0014: ret - } // end of method TestFunction20@14::Invoke - - } // end of class TestFunction20@14 - - .method public static void TestFunction20(int32 inp) cil managed - { - // Code size 48 (0x30) - .maxstack 5 - .locals init ([0] class TestFunction20/D d1, - [1] class TestFunction20/D d2, - [2] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> V_2) - .line 12,12 : 5,24 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldarg.0 - IL_0003: newobj instance void TestFunction20/D::.ctor(int32, - int32) - IL_0008: stloc.0 - .line 13,13 : 5,24 - IL_0009: ldarg.0 - IL_000a: ldarg.0 - IL_000b: newobj instance void TestFunction20/D::.ctor(int32, - int32) - IL_0010: stloc.1 - IL_0011: ldstr "d1 = %A, d2 = %A" - IL_0016: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5>,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [mscorlib]System.Tuple`2>::.ctor(string) - IL_001b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0020: stloc.2 - .line 14,14 : 5,37 - IL_0021: ldloc.2 - IL_0022: newobj instance void TestFunction20/TestFunction20@14::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0027: ldloc.0 - IL_0028: ldloc.1 - IL_0029: call !!0 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::InvokeFast(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>, - !0, - !1) - IL_002e: pop - IL_002f: ret - } // end of method TestFunction20::TestFunction20 - -} // end of class TestFunction20 - -.class private abstract auto ansi sealed ''.$TestFunction20 - extends [mscorlib]System.Object -{ - .method public static void main@() cil managed - { - .entrypoint - // Code size 2 (0x2) - .maxstack 2 - IL_0000: nop - IL_0001: ret - } // end of method $TestFunction20::main@ - -} // end of class ''.$TestFunction20 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction21.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction21.il.bsl deleted file mode 100644 index 57d967cb9e5..00000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction21.il.bsl +++ /dev/null @@ -1,861 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly TestFunction21 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.TestFunction21 -{ - // Offset: 0x00000000 Length: 0x00000691 -} -.mresource public FSharpOptimizationData.TestFunction21 -{ - // Offset: 0x00000698 Length: 0x000001CD -} -.module TestFunction21.exe -// MVID: {4BEB2902-A643-45E6-A745-03830229EB4B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x001E0000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed TestFunction21 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto autochar serializable nested public beforefieldinit U - extends [mscorlib]System.Object - implements class [mscorlib]System.IEquatable`1, - [mscorlib]System.Collections.IStructuralEquatable, - class [mscorlib]System.IComparable`1, - [mscorlib]System.IComparable, - [mscorlib]System.Collections.IStructuralComparable - { - .custom instance void [mscorlib]System.Diagnostics.DebuggerDisplayAttribute::.ctor(string) = ( 01 00 15 7B 5F 5F 44 65 62 75 67 44 69 73 70 6C // ...{__DebugDispl - 61 79 28 29 2C 6E 71 7D 00 00 ) // ay(),nq}.. - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 01 00 00 00 00 00 ) - .field assembly initonly int32 item1 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .field assembly initonly int32 item2 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method public static class TestFunction21/U - NewU(int32 item1, - int32 item2) cil managed - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32) = ( 01 00 08 00 00 00 00 00 00 00 00 00 ) - // Code size 8 (0x8) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldarg.1 - IL_0002: newobj instance void TestFunction21/U::.ctor(int32, - int32) - IL_0007: ret - } // end of method U::NewU - - .method assembly specialname rtspecialname - instance void .ctor(int32 item1, - int32 item2) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 21 (0x15) - .maxstack 2 - IL_0000: ldarg.0 - IL_0001: call instance void [mscorlib]System.Object::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld int32 TestFunction21/U::item1 - IL_000d: ldarg.0 - IL_000e: ldarg.2 - IL_000f: stfld int32 TestFunction21/U::item2 - IL_0014: ret - } // end of method U::.ctor - - .method public instance int32 get_Item1() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 7 (0x7) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldfld int32 TestFunction21/U::item1 - IL_0006: ret - } // end of method U::get_Item1 - - .method public instance int32 get_Item2() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 7 (0x7) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldfld int32 TestFunction21/U::item2 - IL_0006: ret - } // end of method U::get_Item2 - - .method public instance int32 get_Tag() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 4 (0x4) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: pop - IL_0002: ldc.i4.0 - IL_0003: ret - } // end of method U::get_Tag - - .method assembly specialname instance object - __DebugDisplay() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 22 (0x16) - .maxstack 4 - IL_0000: ldstr "%+0.8A" - IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,string>::.ctor(string) - IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_000f: ldarg.0 - IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) - IL_0015: ret - } // end of method U::__DebugDisplay - - .method public hidebysig virtual final - instance int32 CompareTo(class TestFunction21/U obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 155 (0x9b) - .maxstack 4 - .locals init (class TestFunction21/U V_0, - class TestFunction21/U V_1, - int32 V_2, - class [mscorlib]System.Collections.IComparer V_3, - int32 V_4, - int32 V_5, - class [mscorlib]System.Collections.IComparer V_6, - int32 V_7, - int32 V_8) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_0009 - - IL_0007: br.s IL_000e - - IL_0009: br IL_008d - - IL_000e: ldarg.1 - IL_000f: ldnull - IL_0010: cgt.un - IL_0012: brfalse.s IL_0016 - - IL_0014: br.s IL_001b - - IL_0016: br IL_008b - - IL_001b: ldarg.0 - IL_001c: pop - IL_001d: ldarg.0 - IL_001e: stloc.0 - IL_001f: ldarg.1 - IL_0020: stloc.1 - IL_0021: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0026: stloc.3 - IL_0027: ldloc.0 - IL_0028: ldfld int32 TestFunction21/U::item1 - IL_002d: stloc.s V_4 - IL_002f: ldloc.1 - IL_0030: ldfld int32 TestFunction21/U::item1 - IL_0035: stloc.s V_5 - IL_0037: ldloc.s V_4 - IL_0039: ldloc.s V_5 - IL_003b: bge.s IL_003f - - IL_003d: br.s IL_0041 - - IL_003f: br.s IL_0045 - - IL_0041: ldc.i4.m1 - IL_0042: nop - IL_0043: br.s IL_004c - - IL_0045: ldloc.s V_4 - IL_0047: ldloc.s V_5 - IL_0049: cgt - IL_004b: nop - IL_004c: stloc.2 - IL_004d: ldloc.2 - IL_004e: ldc.i4.0 - IL_004f: bge.s IL_0053 - - IL_0051: br.s IL_0055 - - IL_0053: br.s IL_0057 - - IL_0055: ldloc.2 - IL_0056: ret - - IL_0057: ldloc.2 - IL_0058: ldc.i4.0 - IL_0059: ble.s IL_005d - - IL_005b: br.s IL_005f - - IL_005d: br.s IL_0061 - - IL_005f: ldloc.2 - IL_0060: ret - - IL_0061: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0066: stloc.s V_6 - IL_0068: ldloc.0 - IL_0069: ldfld int32 TestFunction21/U::item2 - IL_006e: stloc.s V_7 - IL_0070: ldloc.1 - IL_0071: ldfld int32 TestFunction21/U::item2 - IL_0076: stloc.s V_8 - IL_0078: ldloc.s V_7 - IL_007a: ldloc.s V_8 - IL_007c: bge.s IL_0080 - - IL_007e: br.s IL_0082 - - IL_0080: br.s IL_0084 - - IL_0082: ldc.i4.m1 - IL_0083: ret - - IL_0084: ldloc.s V_7 - IL_0086: ldloc.s V_8 - IL_0088: cgt - IL_008a: ret - - IL_008b: ldc.i4.1 - IL_008c: ret - - IL_008d: ldarg.1 - IL_008e: ldnull - IL_008f: cgt.un - IL_0091: brfalse.s IL_0095 - - IL_0093: br.s IL_0097 - - IL_0095: br.s IL_0099 - - IL_0097: ldc.i4.m1 - IL_0098: ret - - IL_0099: ldc.i4.0 - IL_009a: ret - } // end of method U::CompareTo - - .method public hidebysig virtual final - instance int32 CompareTo(object obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 14 (0xe) - .maxstack 4 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 6,7 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldarg.1 - IL_0003: unbox.any TestFunction21/U - IL_0008: call instance int32 TestFunction21/U::CompareTo(class TestFunction21/U) - IL_000d: ret - } // end of method U::CompareTo - - .method public hidebysig virtual final - instance int32 CompareTo(object obj, - class [mscorlib]System.Collections.IComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 165 (0xa5) - .maxstack 4 - .locals init ([0] class TestFunction21/U V_0, - [1] class TestFunction21/U V_1, - [2] class TestFunction21/U V_2, - [3] int32 V_3, - [4] class [mscorlib]System.Collections.IComparer V_4, - [5] int32 V_5, - [6] int32 V_6, - [7] class [mscorlib]System.Collections.IComparer V_7, - [8] int32 V_8, - [9] int32 V_9) - .line 4,4 : 6,7 - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: unbox.any TestFunction21/U - IL_0007: stloc.0 - IL_0008: ldarg.0 - IL_0009: ldnull - IL_000a: cgt.un - IL_000c: brfalse.s IL_0010 - - IL_000e: br.s IL_0015 - - IL_0010: br IL_0092 - - .line 100001,100001 : 0,0 - IL_0015: ldarg.1 - IL_0016: unbox.any TestFunction21/U - IL_001b: ldnull - IL_001c: cgt.un - IL_001e: brfalse.s IL_0022 - - IL_0020: br.s IL_0027 - - IL_0022: br IL_0090 - - .line 100001,100001 : 0,0 - IL_0027: ldarg.0 - IL_0028: pop - .line 100001,100001 : 0,0 - IL_0029: ldarg.0 - IL_002a: stloc.1 - IL_002b: ldloc.0 - IL_002c: stloc.2 - IL_002d: ldarg.2 - IL_002e: stloc.s V_4 - IL_0030: ldloc.1 - IL_0031: ldfld int32 TestFunction21/U::item1 - IL_0036: stloc.s V_5 - IL_0038: ldloc.2 - IL_0039: ldfld int32 TestFunction21/U::item1 - IL_003e: stloc.s V_6 - IL_0040: ldloc.s V_5 - IL_0042: ldloc.s V_6 - IL_0044: bge.s IL_0048 - - IL_0046: br.s IL_004a - - IL_0048: br.s IL_004e - - .line 100001,100001 : 0,0 - IL_004a: ldc.i4.m1 - .line 100001,100001 : 0,0 - IL_004b: nop - IL_004c: br.s IL_0055 - - .line 100001,100001 : 0,0 - IL_004e: ldloc.s V_5 - IL_0050: ldloc.s V_6 - IL_0052: cgt - .line 100001,100001 : 0,0 - IL_0054: nop - .line 100001,100001 : 0,0 - IL_0055: stloc.3 - IL_0056: ldloc.3 - IL_0057: ldc.i4.0 - IL_0058: bge.s IL_005c - - IL_005a: br.s IL_005e - - IL_005c: br.s IL_0060 - - .line 100001,100001 : 0,0 - IL_005e: ldloc.3 - IL_005f: ret - - .line 100001,100001 : 0,0 - IL_0060: ldloc.3 - IL_0061: ldc.i4.0 - IL_0062: ble.s IL_0066 - - IL_0064: br.s IL_0068 - - IL_0066: br.s IL_006a - - .line 100001,100001 : 0,0 - IL_0068: ldloc.3 - IL_0069: ret - - .line 100001,100001 : 0,0 - IL_006a: ldarg.2 - IL_006b: stloc.s V_7 - IL_006d: ldloc.1 - IL_006e: ldfld int32 TestFunction21/U::item2 - IL_0073: stloc.s V_8 - IL_0075: ldloc.2 - IL_0076: ldfld int32 TestFunction21/U::item2 - IL_007b: stloc.s V_9 - IL_007d: ldloc.s V_8 - IL_007f: ldloc.s V_9 - IL_0081: bge.s IL_0085 - - IL_0083: br.s IL_0087 - - IL_0085: br.s IL_0089 - - .line 100001,100001 : 0,0 - IL_0087: ldc.i4.m1 - IL_0088: ret - - .line 100001,100001 : 0,0 - IL_0089: ldloc.s V_8 - IL_008b: ldloc.s V_9 - IL_008d: cgt - IL_008f: ret - - .line 100001,100001 : 0,0 - IL_0090: ldc.i4.1 - IL_0091: ret - - .line 100001,100001 : 0,0 - IL_0092: ldarg.1 - IL_0093: unbox.any TestFunction21/U - IL_0098: ldnull - IL_0099: cgt.un - IL_009b: brfalse.s IL_009f - - IL_009d: br.s IL_00a1 - - IL_009f: br.s IL_00a3 - - .line 100001,100001 : 0,0 - IL_00a1: ldc.i4.m1 - IL_00a2: ret - - .line 100001,100001 : 0,0 - IL_00a3: ldc.i4.0 - IL_00a4: ret - } // end of method U::CompareTo - - .method public hidebysig virtual final - instance int32 GetHashCode(class [mscorlib]System.Collections.IEqualityComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 69 (0x45) - .maxstack 7 - .locals init (int32 V_0, - class TestFunction21/U V_1, - class [mscorlib]System.Collections.IEqualityComparer V_2, - class [mscorlib]System.Collections.IEqualityComparer V_3) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_0009 - - IL_0007: br.s IL_000b - - IL_0009: br.s IL_0043 - - IL_000b: ldc.i4.0 - IL_000c: stloc.0 - IL_000d: ldarg.0 - IL_000e: pop - IL_000f: ldarg.0 - IL_0010: stloc.1 - IL_0011: ldc.i4.0 - IL_0012: stloc.0 - IL_0013: ldc.i4 0x9e3779b9 - IL_0018: ldarg.1 - IL_0019: stloc.2 - IL_001a: ldloc.1 - IL_001b: ldfld int32 TestFunction21/U::item2 - IL_0020: ldloc.0 - IL_0021: ldc.i4.6 - IL_0022: shl - IL_0023: ldloc.0 - IL_0024: ldc.i4.2 - IL_0025: shr - IL_0026: add - IL_0027: add - IL_0028: add - IL_0029: stloc.0 - IL_002a: ldc.i4 0x9e3779b9 - IL_002f: ldarg.1 - IL_0030: stloc.3 - IL_0031: ldloc.1 - IL_0032: ldfld int32 TestFunction21/U::item1 - IL_0037: ldloc.0 - IL_0038: ldc.i4.6 - IL_0039: shl - IL_003a: ldloc.0 - IL_003b: ldc.i4.2 - IL_003c: shr - IL_003d: add - IL_003e: add - IL_003f: add - IL_0040: stloc.0 - IL_0041: ldloc.0 - IL_0042: ret - - IL_0043: ldc.i4.0 - IL_0044: ret - } // end of method U::GetHashCode - - .method public hidebysig virtual final - instance int32 GetHashCode() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 13 (0xd) - .maxstack 4 - .line 4,4 : 6,7 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() - IL_0007: call instance int32 TestFunction21/U::GetHashCode(class [mscorlib]System.Collections.IEqualityComparer) - IL_000c: ret - } // end of method U::GetHashCode - - .method public hidebysig virtual final - instance bool Equals(object obj, - class [mscorlib]System.Collections.IEqualityComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 86 (0x56) - .maxstack 4 - .locals init (class TestFunction21/U V_0, - class TestFunction21/U V_1, - class TestFunction21/U V_2, - class TestFunction21/U V_3, - class [mscorlib]System.Collections.IEqualityComparer V_4, - class [mscorlib]System.Collections.IEqualityComparer V_5) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_0009 - - IL_0007: br.s IL_000b - - IL_0009: br.s IL_004e - - IL_000b: ldarg.1 - IL_000c: isinst TestFunction21/U - IL_0011: stloc.0 - IL_0012: ldloc.0 - IL_0013: brfalse.s IL_0017 - - IL_0015: br.s IL_0019 - - IL_0017: br.s IL_004c - - IL_0019: ldloc.0 - IL_001a: stloc.1 - IL_001b: ldarg.0 - IL_001c: pop - IL_001d: ldarg.0 - IL_001e: stloc.2 - IL_001f: ldloc.1 - IL_0020: stloc.3 - IL_0021: ldarg.2 - IL_0022: stloc.s V_4 - IL_0024: ldloc.2 - IL_0025: ldfld int32 TestFunction21/U::item1 - IL_002a: ldloc.3 - IL_002b: ldfld int32 TestFunction21/U::item1 - IL_0030: ceq - IL_0032: brfalse.s IL_0036 - - IL_0034: br.s IL_0038 - - IL_0036: br.s IL_004a - - IL_0038: ldarg.2 - IL_0039: stloc.s V_5 - IL_003b: ldloc.2 - IL_003c: ldfld int32 TestFunction21/U::item2 - IL_0041: ldloc.3 - IL_0042: ldfld int32 TestFunction21/U::item2 - IL_0047: ceq - IL_0049: ret - - IL_004a: ldc.i4.0 - IL_004b: ret - - IL_004c: ldc.i4.0 - IL_004d: ret - - IL_004e: ldarg.1 - IL_004f: ldnull - IL_0050: cgt.un - IL_0052: ldc.i4.0 - IL_0053: ceq - IL_0055: ret - } // end of method U::Equals - - .method public hidebysig virtual final - instance bool Equals(class TestFunction21/U obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 72 (0x48) - .maxstack 4 - .locals init (class TestFunction21/U V_0, - class TestFunction21/U V_1) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_0009 - - IL_0007: br.s IL_000b - - IL_0009: br.s IL_0040 - - IL_000b: ldarg.1 - IL_000c: ldnull - IL_000d: cgt.un - IL_000f: brfalse.s IL_0013 - - IL_0011: br.s IL_0015 - - IL_0013: br.s IL_003e - - IL_0015: ldarg.0 - IL_0016: pop - IL_0017: ldarg.0 - IL_0018: stloc.0 - IL_0019: ldarg.1 - IL_001a: stloc.1 - IL_001b: ldloc.0 - IL_001c: ldfld int32 TestFunction21/U::item1 - IL_0021: ldloc.1 - IL_0022: ldfld int32 TestFunction21/U::item1 - IL_0027: bne.un.s IL_002b - - IL_0029: br.s IL_002d - - IL_002b: br.s IL_003c - - IL_002d: ldloc.0 - IL_002e: ldfld int32 TestFunction21/U::item2 - IL_0033: ldloc.1 - IL_0034: ldfld int32 TestFunction21/U::item2 - IL_0039: ceq - IL_003b: ret - - IL_003c: ldc.i4.0 - IL_003d: ret - - IL_003e: ldc.i4.0 - IL_003f: ret - - IL_0040: ldarg.1 - IL_0041: ldnull - IL_0042: cgt.un - IL_0044: ldc.i4.0 - IL_0045: ceq - IL_0047: ret - } // end of method U::Equals - - .method public hidebysig virtual final - instance bool Equals(object obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 25 (0x19) - .maxstack 4 - .locals init (class TestFunction21/U V_0) - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: isinst TestFunction21/U - IL_0007: stloc.0 - IL_0008: ldloc.0 - IL_0009: brfalse.s IL_000d - - IL_000b: br.s IL_000f - - IL_000d: br.s IL_0017 - - IL_000f: ldarg.0 - IL_0010: ldloc.0 - IL_0011: call instance bool TestFunction21/U::Equals(class TestFunction21/U) - IL_0016: ret - - IL_0017: ldc.i4.0 - IL_0018: ret - } // end of method U::Equals - - .property instance int32 Tag() - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .get instance int32 TestFunction21/U::get_Tag() - } // end of property U::Tag - .property instance int32 Item1() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32, - int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .get instance int32 TestFunction21/U::get_Item1() - } // end of property U::Item1 - .property instance int32 Item2() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32, - int32) = ( 01 00 04 00 00 00 00 00 00 00 01 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .get instance int32 TestFunction21/U::get_Item2() - } // end of property U::Item2 - } // end of class U - - .class auto ansi serializable nested assembly beforefieldinit 'TestFunction21@7-1' - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 - { - .field public class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 clo2 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method assembly specialname rtspecialname - instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 clo2) cil managed - { - // Code size 14 (0xe) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 TestFunction21/'TestFunction21@7-1'::clo2 - IL_000d: ret - } // end of method 'TestFunction21@7-1'::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Core.Unit - Invoke(int32 arg20) cil managed - { - // Code size 16 (0x10) - .maxstack 6 - .line 7,7 : 5,29 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 TestFunction21/'TestFunction21@7-1'::clo2 - IL_0007: ldarg.1 - IL_0008: tail. - IL_000a: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) - IL_000f: ret - } // end of method 'TestFunction21@7-1'::Invoke - - } // end of class 'TestFunction21@7-1' - - .class auto ansi serializable nested assembly beforefieldinit TestFunction21@7 - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> - { - .field public class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> clo1 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method assembly specialname rtspecialname - instance void .ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> clo1) cil managed - { - // Code size 14 (0xe) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> TestFunction21/TestFunction21@7::clo1 - IL_000d: ret - } // end of method TestFunction21@7::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 - Invoke(int32 arg10) cil managed - { - // Code size 21 (0x15) - .maxstack 6 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_0) - .line 7,7 : 5,29 - IL_0000: ldarg.0 - IL_0001: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> TestFunction21/TestFunction21@7::clo1 - IL_0006: ldarg.1 - IL_0007: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>::Invoke(!0) - IL_000c: stloc.0 - IL_000d: nop - IL_000e: ldloc.0 - IL_000f: newobj instance void TestFunction21/'TestFunction21@7-1'::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_0014: ret - } // end of method TestFunction21@7::Invoke - - } // end of class TestFunction21@7 - - .method public static void TestFunction21(class TestFunction21/U _arg5) cil managed - { - // Code size 48 (0x30) - .maxstack 5 - .locals init ([0] class TestFunction21/U V_0, - [1] int32 b, - [2] int32 a, - [3] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2> V_3) - .line 7,7 : 5,33 - IL_0000: ldarg.0 - IL_0001: stloc.0 - IL_0002: ldloc.0 - IL_0003: ldfld int32 TestFunction21/U::item2 - IL_0008: stloc.1 - IL_0009: ldloc.0 - IL_000a: ldfld int32 TestFunction21/U::item1 - IL_000f: stloc.2 - IL_0010: ldstr "a = %A, a = %A" - IL_0015: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5>,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [mscorlib]System.Tuple`2>::.ctor(string) - IL_001a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_001f: stloc.3 - IL_0020: nop - IL_0021: ldloc.3 - IL_0022: newobj instance void TestFunction21/TestFunction21@7::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0027: ldloc.2 - IL_0028: ldloc.1 - IL_0029: call !!0 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::InvokeFast(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>, - !0, - !1) - IL_002e: pop - IL_002f: ret - } // end of method TestFunction21::TestFunction21 - -} // end of class TestFunction21 - -.class private abstract auto ansi sealed ''.$TestFunction21 - extends [mscorlib]System.Object -{ - .method public static void main@() cil managed - { - .entrypoint - // Code size 2 (0x2) - .maxstack 2 - IL_0000: nop - IL_0001: ret - } // end of method $TestFunction21::main@ - -} // end of class ''.$TestFunction21 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction23.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction23.il.bsl deleted file mode 100644 index 7de47f8a92e..00000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction23.il.bsl +++ /dev/null @@ -1,187 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly TestFunction23 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.TestFunction23 -{ - // Offset: 0x00000000 Length: 0x0000035A -} -.mresource public FSharpOptimizationData.TestFunction23 -{ - // Offset: 0x00000360 Length: 0x000000E3 -} -.module TestFunction23.exe -// MVID: {4BEB2908-A643-451C-A745-03830829EB4B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x00300000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed TestFunction23 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto ansi serializable nested public C - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 03 00 00 00 00 00 ) - .field assembly string x - .field assembly string x@8 - .method public specialname rtspecialname - instance void .ctor() cil managed - { - // Code size 32 (0x20) - .maxstack 4 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 6,6 : 5,38 - IL_0000: ldarg.0 - IL_0001: call instance void [mscorlib]System.Object::.ctor() - IL_0006: ldarg.0 - IL_0007: pop - IL_0008: nop - IL_0009: ldarg.0 - IL_000a: call string [mscorlib]System.Console::ReadLine() - IL_000f: stfld string TestFunction23/C::x - .line 8,8 : 5,38 - IL_0014: ldarg.0 - IL_0015: call string [mscorlib]System.Console::ReadLine() - IL_001a: stfld string TestFunction23/C::x@8 - .line 5,5 : 6,7 - IL_001f: ret - } // end of method C::.ctor - - .method public instance string M() cil managed - { - // Code size 19 (0x13) - .maxstack 4 - .line 9,9 : 23,30 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldfld string TestFunction23/C::x@8 - IL_0007: ldarg.0 - IL_0008: call instance string TestFunction23/C::g() - IL_000d: call string [mscorlib]System.String::Concat(string, - string) - IL_0012: ret - } // end of method C::M - - .method assembly instance string g() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 8 (0x8) - .maxstack 3 - .line 7,7 : 15,16 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldfld string TestFunction23/C::x - IL_0007: ret - } // end of method C::g - - } // end of class C - - .class auto ansi serializable nested assembly beforefieldinit g@13 - extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 - { - .method assembly specialname rtspecialname - instance void .ctor() cil managed - { - // Code size 7 (0x7) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::.ctor() - IL_0006: ret - } // end of method g@13::.ctor - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Core.Unit - Invoke(class [FSharp.Core]Microsoft.FSharp.Core.Unit unitVar0) cil managed - { - // Code size 35 (0x23) - .maxstack 5 - .line 13,13 : 9,24 - IL_0000: nop - IL_0001: ldstr "Hello" - IL_0006: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_000b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0010: pop - .line 14,14 : 9,24 - IL_0011: ldstr "Hello" - IL_0016: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_001b: tail. - IL_001d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0022: ret - } // end of method g@13::Invoke - - } // end of class g@13 - - .method public static class [mscorlib]System.Tuple`2 - f(!!a x) cil managed - { - // Code size 27 (0x1b) - .maxstack 5 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 g) - .line 12,12 : 9,12 - IL_0000: nop - IL_0001: newobj instance void TestFunction23/g@13::.ctor() - IL_0006: stloc.0 - .line 15,15 : 5,13 - IL_0007: ldloc.0 - IL_0008: ldnull - IL_0009: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) - IL_000e: ldloc.0 - IL_000f: ldnull - IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) - IL_0015: newobj instance void class [mscorlib]System.Tuple`2::.ctor(!0, - !1) - IL_001a: ret - } // end of method TestFunction23::f - -} // end of class TestFunction23 - -.class private abstract auto ansi sealed ''.$TestFunction23 - extends [mscorlib]System.Object -{ - .method public static void main@() cil managed - { - .entrypoint - // Code size 2 (0x2) - .maxstack 2 - IL_0000: nop - IL_0001: ret - } // end of method $TestFunction23::main@ - -} // end of class ''.$TestFunction23 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction3.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction3.il.bsl index 355aed3bee6..8a073bd0d14 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction3.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction3.il.bsl @@ -62,12 +62,12 @@ IL_0006: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0010: pop - .line 6,6 : 5,20 '' + .line 6,6 : 5,20 IL_0011: ldstr "World" IL_0016: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_001b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0020: pop - .line 7,7 : 5,8 '' + .line 7,7 : 5,8 IL_0021: ldc.i4.3 IL_0022: ldc.i4.4 IL_0023: add @@ -81,35 +81,35 @@ .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_0, [1] int32 x, [2] class [mscorlib]System.Exception V_2) - .line 10,10 : 5,8 '' + .line 10,10 : 5,8 IL_0000: nop .try { IL_0001: nop - .line 11,11 : 8,31 '' + .line 11,11 : 8,31 IL_0002: call int32 TestFunction3::TestFunction1() IL_0007: stloc.1 - .line 12,12 : 8,23 '' + .line 12,12 : 8,23 IL_0008: ldstr "Hello" IL_000d: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_0012: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0017: stloc.0 IL_0018: leave.s IL_0032 - .line 13,13 : 5,9 '' + .line 13,13 : 5,9 } // end .try catch [mscorlib]System.Object { IL_001a: castclass [mscorlib]System.Exception IL_001f: stloc.2 - .line 14,14 : 8,23 '' + .line 14,14 : 8,23 IL_0020: ldstr "World" IL_0025: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_002a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_002f: stloc.0 IL_0030: leave.s IL_0032 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler IL_0032: ldloc.0 IL_0033: pop diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction3b.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction3b.il.bsl index 08e21867c7a..3db99081499 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction3b.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction3b.il.bsl @@ -62,12 +62,12 @@ IL_0006: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0010: pop - .line 6,6 : 5,20 '' + .line 6,6 : 5,20 IL_0011: ldstr "World" IL_0016: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_001b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0020: pop - .line 7,7 : 5,8 '' + .line 7,7 : 5,8 IL_0021: ldc.i4.3 IL_0022: ldc.i4.4 IL_0023: add @@ -82,21 +82,21 @@ [1] int32 x, [2] class [mscorlib]System.Exception V_2, [3] class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 V_3) - .line 10,10 : 5,8 '' + .line 10,10 : 5,8 IL_0000: nop .try { IL_0001: nop - .line 11,11 : 8,31 '' + .line 11,11 : 8,31 IL_0002: call int32 TestFunction3b::TestFunction1() IL_0007: stloc.1 - .line 12,12 : 8,24 '' + .line 12,12 : 8,24 IL_0008: ldstr "hello" IL_000d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::FailWith(string) IL_0012: stloc.0 IL_0013: leave.s IL_0046 - .line 13,13 : 5,9 '' + .line 13,13 : 5,9 } // end .try catch [mscorlib]System.Object { @@ -112,21 +112,21 @@ IL_0027: br.s IL_003b - .line 14,14 : 8,23 '' + .line 14,14 : 8,23 IL_0029: ldstr "World" IL_002e: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_0033: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0038: stloc.0 IL_0039: leave.s IL_0046 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_003b: rethrow IL_003d: ldnull IL_003e: unbox.any [FSharp.Core]Microsoft.FSharp.Core.Unit IL_0043: stloc.0 IL_0044: leave.s IL_0046 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler IL_0046: ldloc.0 IL_0047: pop diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction3c.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction3c.il.bsl index f9abc1cc34b..adf63c46501 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction3c.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction3c.il.bsl @@ -62,12 +62,12 @@ IL_0006: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0010: pop - .line 6,6 : 5,20 '' + .line 6,6 : 5,20 IL_0011: ldstr "World" IL_0016: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_001b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0020: pop - .line 7,7 : 5,8 '' + .line 7,7 : 5,8 IL_0021: ldc.i4.3 IL_0022: ldc.i4.4 IL_0023: add @@ -84,21 +84,21 @@ [3] class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 V_3, [4] string msg, [5] string V_5) - .line 10,10 : 5,8 '' + .line 10,10 : 5,8 IL_0000: nop .try { IL_0001: nop - .line 11,11 : 8,31 '' + .line 11,11 : 8,31 IL_0002: call int32 TestFunction3c::TestFunction1() IL_0007: stloc.1 - .line 12,12 : 8,24 '' + .line 12,12 : 8,24 IL_0008: ldstr "hello" IL_000d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::FailWith(string) IL_0012: stloc.0 IL_0013: leave.s IL_0064 - .line 13,13 : 5,9 '' + .line 13,13 : 5,9 } // end .try catch [mscorlib]System.Object { @@ -126,21 +126,21 @@ IL_003f: ldloc.3 IL_0040: call instance !0 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::get_Value() IL_0045: stloc.s V_5 - .line 14,14 : 8,23 '' + .line 14,14 : 8,23 IL_0047: ldstr "World" IL_004c: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_0051: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0056: stloc.0 IL_0057: leave.s IL_0064 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 IL_0059: rethrow IL_005b: ldnull IL_005c: unbox.any [FSharp.Core]Microsoft.FSharp.Core.Unit IL_0061: stloc.0 IL_0062: leave.s IL_0064 - .line 100001,100001 : 0,0 '' + .line 100001,100001 : 0,0 } // end handler IL_0064: ldloc.0 IL_0065: pop diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction5.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction5.il.bsl index aefd03100d5..7989d425973 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction5.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction5.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16774 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction5 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.TestFunction5 { - // Offset: 0x00000000 Length: 0x00000221 + // Offset: 0x00000000 Length: 0x000001FD } .mresource public FSharpOptimizationData.TestFunction5 { - // Offset: 0x00000228 Length: 0x00000088 + // Offset: 0x00000208 Length: 0x00000088 } .module TestFunction5.exe -// MVID: {4DAC30D0-6570-8929-A745-0383D030AC4D} +// MVID: {5775B1C1-6570-8929-A745-0383C1B17557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000170000 +// Image base: 0x00FB0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -56,18 +56,18 @@ // Code size 37 (0x25) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,20 + .line 5,5 : 5,20 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction5.fs' IL_0000: nop IL_0001: ldstr "Hello" IL_0006: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0010: pop - .line 6,6 : 5,20 + .line 6,6 : 5,20 IL_0011: ldstr "World" IL_0016: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_001b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0020: pop - .line 7,7 : 5,8 + .line 7,7 : 5,8 IL_0021: ldc.i4.3 IL_0022: ldc.i4.4 IL_0023: add @@ -76,31 +76,29 @@ .method public static int32 TestFunction5() cil managed { - // Code size 32 (0x20) + // Code size 31 (0x1f) .maxstack 4 .locals init ([0] int32 x, [1] int32 y) - .line 10,10 : 9,10 + .line 11,11 : 8,31 IL_0000: nop - IL_0001: nop - .line 11,11 : 8,31 - IL_0002: call int32 TestFunction5::TestFunction1() - IL_0007: stloc.1 - .line 12,12 : 8,23 - IL_0008: ldstr "Hello" - IL_000d: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0012: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0017: pop - .line 13,13 : 8,13 + IL_0001: call int32 TestFunction5::TestFunction1() + IL_0006: stloc.1 + .line 12,12 : 8,23 + IL_0007: ldstr "Hello" + IL_000c: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_0011: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_0016: pop + .line 13,13 : 8,13 + IL_0017: ldloc.1 IL_0018: ldloc.1 - IL_0019: ldloc.1 - IL_001a: add - IL_001b: stloc.0 - .line 14,14 : 5,10 + IL_0019: add + IL_001a: stloc.0 + .line 14,14 : 5,10 + IL_001b: ldloc.0 IL_001c: ldloc.0 - IL_001d: ldloc.0 - IL_001e: add - IL_001f: ret + IL_001d: add + IL_001e: ret } // end of method TestFunction5::TestFunction5 } // end of class TestFunction5 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction6.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction6.il.bsl index 06b303ba8f5..038e34253f8 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction6.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction6.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16774 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.81.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction6 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 00 01 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.TestFunction6 { - // Offset: 0x00000000 Length: 0x00000221 + // Offset: 0x00000000 Length: 0x000001FD } .mresource public FSharpOptimizationData.TestFunction6 { - // Offset: 0x00000228 Length: 0x00000088 + // Offset: 0x00000208 Length: 0x00000088 } .module TestFunction6.exe -// MVID: {4DAC30D2-6591-8929-A745-0383D230AC4D} +// MVID: {5775B1C4-6591-8929-A745-0383C4B17557} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000360000 +// Image base: 0x00440000 // =============== CLASS MEMBERS DECLARATION =================== @@ -57,6 +57,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -71,16 +73,16 @@ .maxstack 6 .locals init ([0] int32 y) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 11,11 : 8,31 + .line 11,11 : 8,31 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction6.fs' IL_0000: nop IL_0001: call int32 TestFunction6::TestFunction1() IL_0006: stloc.0 - .line 12,12 : 8,23 + .line 12,12 : 8,23 IL_0007: ldstr "Hello" IL_000c: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_0011: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0016: pop - .line 13,13 : 8,13 + .line 13,13 : 8,13 IL_0017: ldloc.0 IL_0018: ldloc.0 IL_0019: add @@ -93,18 +95,18 @@ { // Code size 37 (0x25) .maxstack 8 - .line 5,5 : 5,20 + .line 5,5 : 5,20 IL_0000: nop IL_0001: ldstr "Hello" IL_0006: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0010: pop - .line 6,6 : 5,20 + .line 6,6 : 5,20 IL_0011: ldstr "World" IL_0016: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_001b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) IL_0020: pop - .line 7,7 : 5,8 + .line 7,7 : 5,8 IL_0021: ldc.i4.3 IL_0022: ldc.i4.4 IL_0023: add @@ -116,11 +118,11 @@ // Code size 23 (0x17) .maxstack 5 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 f) - .line 10,10 : 9,12 + .line 14,14 : 5,14 IL_0000: nop IL_0001: newobj instance void TestFunction6/f@11::.ctor() IL_0006: stloc.0 - .line 14,14 : 5,14 + .line 14,14 : 5,14 IL_0007: ldloc.0 IL_0008: ldnull IL_0009: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/TupleElimination.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/TupleElimination.il.netfx4.bsl index a054ce133d6..eb986720cb2 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/TupleElimination.il.netfx4.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/TupleElimination.il.netfx4.bsl @@ -57,7 +57,7 @@ .maxstack 4 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit> V_0) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 15,27 '' + .line 5,5 : 15,27 IL_0000: nop IL_0001: ldstr "%A" IL_0006: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,!!a>::.ctor(string) @@ -86,11 +86,11 @@ [5] bool V_5, [6] int64 V_6, [7] class [mscorlib]System.Tuple`2 t) - .line 7,7 : 5,64 '' + .line 7,7 : 5,64 IL_0000: nop IL_0001: newobj instance void class [mscorlib]System.Collections.Generic.Dictionary`2::.ctor() IL_0006: stloc.0 - .line 9,9 : 31,48 '' + .line 9,9 : 31,48 IL_0007: ldc.i4.0 IL_0008: stloc.1 IL_0009: ldloc.0 @@ -101,15 +101,15 @@ IL_0012: stloc.2 IL_0013: ldloc.1 IL_0014: stloc.3 - .line 10,10 : 5,6 '' + .line 10,10 : 5,6 IL_0015: ldloc.2 IL_0016: call void TupleElimination::p@5(!!0) IL_001b: nop - .line 11,11 : 5,6 '' + .line 11,11 : 5,6 IL_001c: ldloc.3 IL_001d: call void TupleElimination::p@5(!!0) IL_0022: nop - .line 14,14 : 38,65 '' + .line 14,14 : 38,65 IL_0023: ldc.i8 0x0 IL_002c: stloc.s V_4 IL_002e: ldstr "123" @@ -119,25 +119,25 @@ IL_003a: stloc.s V_5 IL_003c: ldloc.s V_4 IL_003e: stloc.s V_6 - .line 14,14 : 5,65 '' + .line 14,14 : 5,65 IL_0040: ldloc.s V_5 IL_0042: ldloc.s V_6 IL_0044: newobj instance void class [mscorlib]System.Tuple`2::.ctor(!0, !1) IL_0049: stloc.s t - .line 15,15 : 5,6 '' + .line 15,15 : 5,6 IL_004b: ldloc.s V_5 IL_004d: call void TupleElimination::p@5(!!0) IL_0052: nop - .line 16,16 : 5,6 '' + .line 16,16 : 5,6 IL_0053: ldloc.s V_6 IL_0055: call void TupleElimination::p@5(!!0) IL_005a: nop - .line 21,21 : 5,6 '' + .line 21,21 : 5,6 IL_005b: ldloc.s t IL_005d: call void TupleElimination::p@5>(!!0) IL_0062: nop - .line 23,23 : 5,6 '' + .line 23,23 : 5,6 IL_0063: ldc.i4.0 IL_0064: ret } // end of method TupleElimination::main diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/help/help20.437.1033.bsl b/tests/fsharpqa/Source/CompilerOptions/fsc/help/help20.437.1033.bsl deleted file mode 100644 index ab95ad0aca7..00000000000 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/help/help20.437.1033.bsl +++ /dev/null @@ -1,94 +0,0 @@ -Microsoft (R) F# 2.0 Compiler build 2.0.50727.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 ---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 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 - - - - INPUT FILES - ---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]] - - - - CODE GENERATION - ---debug[+|-] Emit debug information (Short form: -g) ---debug:{full|pdbonly} Specify debugging type: full, pdbonly. ('full' - is the default and enables attaching a debugger - to a running program). ---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) ---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 mono rules rather than MSBuild - resolution (Default=false except when running - fsc.exe under mono) 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 b9cdeedccad..227de6e5682 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/help/help40.437.1033.bsl +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/help/help40.437.1033.bsl @@ -50,9 +50,10 @@ Copyright (c) Microsoft Corporation. All Rights Reserved. - CODE GENERATION - --debug[+|-] Emit debug information (Short form: -g) --debug:{full|pdbonly|portable} Specify debugging type: full, portable, pdbonly. - ('full' is the default and enables attaching a - debugger to a running program. 'portable' is a - cross-platform format). + ('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 diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/highentropyva/CheckHighEntropyASLR.bat b/tests/fsharpqa/Source/CompilerOptions/fsc/highentropyva/CheckHighEntropyASLR.bat index 1cca91b1f2b..230392ba312 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/highentropyva/CheckHighEntropyASLR.bat +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/highentropyva/CheckHighEntropyASLR.bat @@ -2,7 +2,8 @@ REM Search for the Linker REM Use VS2015 or fall back to VS2014 -SET LINK_EXE="%VS150COMNTOOLS%\..\..\VC\bin\link.exe" +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 diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/subsystemversion/CheckSubsystemVersion.bat b/tests/fsharpqa/Source/CompilerOptions/fsc/subsystemversion/CheckSubsystemVersion.bat index 2740255f362..60afc827ace 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/subsystemversion/CheckSubsystemVersion.bat +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/subsystemversion/CheckSubsystemVersion.bat @@ -2,7 +2,8 @@ REM Search for the Linker REM Use VS2015 or fall back to VS2014 -SET LINK_EXE="%VS150COMNTOOLS%\..\..\VC\bin\link.exe" +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 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 a18d704a47a..3aaba1fffc8 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/exename/help40.437.1033.bsl +++ b/tests/fsharpqa/Source/CompilerOptions/fsi/exename/help40.437.1033.bsl @@ -13,9 +13,10 @@ Usage: fsharpi [script.fsx []] - CODE GENERATION - --debug[+|-] Emit debug information (Short form: -g) --debug:{full|pdbonly|portable} Specify debugging type: full, portable, pdbonly. - ('full' is the default and enables attaching a - debugger to a running program. 'portable' is a - cross-platform format). + ('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 diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help-nologo.437.1033.bsl b/tests/fsharpqa/Source/CompilerOptions/fsi/help/help-nologo.437.1033.bsl index fef422e77b2..272f7d9eb65 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help-nologo.437.1033.bsl +++ b/tests/fsharpqa/Source/CompilerOptions/fsi/help/help-nologo.437.1033.bsl @@ -13,9 +13,10 @@ Usage: fsi.exe [script.fsx []] - CODE GENERATION - --debug[+|-] Emit debug information (Short form: -g) --debug:{full|pdbonly|portable} Specify debugging type: full, portable, pdbonly. - ('full' is the default and enables attaching a - debugger to a running program. 'portable' is a - cross-platform format). + ('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 diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help.437.1033.bsl b/tests/fsharpqa/Source/CompilerOptions/fsi/help/help.437.1033.bsl index 19560e30d6e..5afc1c8249d 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help.437.1033.bsl +++ b/tests/fsharpqa/Source/CompilerOptions/fsi/help/help.437.1033.bsl @@ -15,9 +15,10 @@ Usage: fsi.exe [script.fsx []] - CODE GENERATION - --debug[+|-] Emit debug information (Short form: -g) --debug:{full|pdbonly|portable} Specify debugging type: full, portable, pdbonly. - ('full' is the default and enables attaching a - debugger to a running program. 'portable' is a - cross-platform format). + ('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 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 1f3c40955f3..3ffd8e94bdf 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 @@ -13,9 +13,10 @@ Usage: Fsi.exe [script.fsx []] - CODE GENERATION - --debug[+|-] Emit debug information (Short form: -g) --debug:{full|pdbonly|portable} Specify debugging type: full, portable, pdbonly. - ('full' is the default and enables attaching a - debugger to a running program. 'portable' is a - cross-platform format). + ('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 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 7863c44e924..722596ffd71 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40.437.1033.bsl +++ b/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40.437.1033.bsl @@ -15,9 +15,10 @@ Usage: Fsi.exe [script.fsx []] - CODE GENERATION - --debug[+|-] Emit debug information (Short form: -g) --debug:{full|pdbonly|portable} Specify debugging type: full, portable, pdbonly. - ('full' is the default and enables attaching a - debugger to a running program. 'portable' is a - cross-platform format). + ('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 diff --git a/tests/fsharpqa/Source/Conformance/BasicTypeAndModuleDefinitions/RecordTypes/E_RecordCloning01.fs b/tests/fsharpqa/Source/Conformance/BasicTypeAndModuleDefinitions/RecordTypes/E_RecordCloning01.fs index aa2172850b0..16e53eca0a5 100644 --- a/tests/fsharpqa/Source/Conformance/BasicTypeAndModuleDefinitions/RecordTypes/E_RecordCloning01.fs +++ b/tests/fsharpqa/Source/Conformance/BasicTypeAndModuleDefinitions/RecordTypes/E_RecordCloning01.fs @@ -1,6 +1,6 @@ // #Regression #Conformance #TypesAndModules #Records // Verify error when trying to clone a non-record type -//The type 'int \[\]' does not contain a field 'B'$ +//This expression was expected to have type type RecType = { A : int; B : string } diff --git a/tests/fsharpqa/Source/Conformance/DeclarationElements/AccessibilityAnnotations/basic/E_BaseIFaceLessAccessible01.fs b/tests/fsharpqa/Source/Conformance/DeclarationElements/AccessibilityAnnotations/basic/E_BaseIFaceLessAccessible01.fs index 8bbb57ab4c0..88744aba13b 100644 --- a/tests/fsharpqa/Source/Conformance/DeclarationElements/AccessibilityAnnotations/basic/E_BaseIFaceLessAccessible01.fs +++ b/tests/fsharpqa/Source/Conformance/DeclarationElements/AccessibilityAnnotations/basic/E_BaseIFaceLessAccessible01.fs @@ -1,7 +1,7 @@ // #Regression #Conformance #DeclarationElements #Accessibility // Regression test for FSHARP1.0:5265 // It is *ok* to implement internalized interfaces -//The type 'I1' is less accessible than the value, member or type 'IAmAnInterface1' it is used in$ +//The type 'I1' is less accessible than the value, member or type 'IAmAnInterface1' it is used in.$ module N.M // Interface inheritance: diff --git a/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/MethodsAndProperties/E_SettersMustHaveUnit01.fs b/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/MethodsAndProperties/E_SettersMustHaveUnit01.fs index 131df38108f..7097557c72d 100644 --- a/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/MethodsAndProperties/E_SettersMustHaveUnit01.fs +++ b/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/MethodsAndProperties/E_SettersMustHaveUnit01.fs @@ -1,6 +1,6 @@ // #Regression #Conformance #DeclarationElements #MemberDefinitions #MethodsAndProperties // Verify property setters must have type unit -//The type 'unit' does not contain a field 'immutStr' +//This expression was expected to have type type immut = { diff --git a/tests/fsharpqa/Source/Conformance/Expressions/ApplicationExpressions/Assertion/Assert_true.fs b/tests/fsharpqa/Source/Conformance/Expressions/ApplicationExpressions/Assertion/Assert_true.fs index e6a81c526ef..79dc5fc59f8 100644 --- a/tests/fsharpqa/Source/Conformance/Expressions/ApplicationExpressions/Assertion/Assert_true.fs +++ b/tests/fsharpqa/Source/Conformance/Expressions/ApplicationExpressions/Assertion/Assert_true.fs @@ -2,6 +2,7 @@ // Assert expressions // Special cases: // - assert(true) ==> should not throw +// #light assert(true) diff --git a/tests/fsharpqa/Source/Conformance/Expressions/DataExpressions/ObjectExpressions/E_MembersMustBeVirtual01.fs b/tests/fsharpqa/Source/Conformance/Expressions/DataExpressions/ObjectExpressions/E_MembersMustBeVirtual01.fs index 5950ee0ed00..41badad221f 100644 --- a/tests/fsharpqa/Source/Conformance/Expressions/DataExpressions/ObjectExpressions/E_MembersMustBeVirtual01.fs +++ b/tests/fsharpqa/Source/Conformance/Expressions/DataExpressions/ObjectExpressions/E_MembersMustBeVirtual01.fs @@ -1,7 +1,7 @@ // #Regression #Conformance #DataExpressions #ObjectConstructors // FSB 1683, dispatch slot checking in object expression manages to match non-virtual member -//The member 'MyX' does not correspond to any abstract or virtual method available to override or implement$ +//The type Foo contains the member 'MyX' but it is not a virtual or abstract method that is available to override or implement. //The member 'MyX : unit -> int' does not have the correct type to override any given virtual method$ //At least one override did not correctly implement its corresponding abstract member$ diff --git a/tests/fsharpqa/Source/Conformance/Expressions/SyntacticSugar/E_Slices01.fs b/tests/fsharpqa/Source/Conformance/Expressions/SyntacticSugar/E_Slices01.fs index ce029cd083b..72e00c534e7 100644 --- a/tests/fsharpqa/Source/Conformance/Expressions/SyntacticSugar/E_Slices01.fs +++ b/tests/fsharpqa/Source/Conformance/Expressions/SyntacticSugar/E_Slices01.fs @@ -7,8 +7,8 @@ //A unique overload for method 'GetSlice' could not be determined based on type information prior to this program point\. A type annotation may be needed\. Candidates: member Foo\.GetSlice : x1:float option \* x2:int option \* y:int -> unit, member Foo\.GetSlice : x1:int option \* x2:int option \* y:int -> unit //A unique overload for method 'GetSlice' could not be determined based on type information prior to this program point\. A type annotation may be needed\. Candidates: member Foo\.GetSlice : x1:float option \* x2:int option \* y:int -> unit, member Foo\.GetSlice : x1:int option \* x2:int option \* y:int -> unit //The field, constructor or member 'Item' is not defined -//The member or object constructor 'GetSlice' taking 3 arguments are not accessible from this code location\. All accessible versions of method 'GetSlice' take 3 arguments\. -//The member or object constructor 'GetSlice' taking 3 arguments are not accessible from this code location\. All accessible versions of method 'GetSlice' take 3 arguments\. +//A member or object constructor 'GetSlice' taking 4 arguments is not accessible from this code location\. All accessible versions of method 'GetSlice' take 3 arguments\. +//A member or object constructor 'GetSlice' taking 5 arguments is not accessible from this code location\. All accessible versions of method 'GetSlice' take 3 arguments\. type Foo<'a>() = member this.GetSlice(x : int, y1 : int option, y2 : int option) = () diff --git a/tests/fsharpqa/Source/Conformance/InferenceProcedures/ByrefSafetyAnalysis/E_SetFieldToByref04.fs b/tests/fsharpqa/Source/Conformance/InferenceProcedures/ByrefSafetyAnalysis/E_SetFieldToByref04.fs index f192ad47c26..af9e70f512b 100644 --- a/tests/fsharpqa/Source/Conformance/InferenceProcedures/ByrefSafetyAnalysis/E_SetFieldToByref04.fs +++ b/tests/fsharpqa/Source/Conformance/InferenceProcedures/ByrefSafetyAnalysis/E_SetFieldToByref04.fs @@ -2,7 +2,7 @@ // Verify appropriate error if attempting to assign a ByRef value to an // object field. (Disallowed by the CLR.) -//A type instantiation involves a byref type\. This is not permitted by the rules of Common IL\.$ + //The address of the variable 'x' cannot be used at this point$ //A type instantiation involves a byref type\. This is not permitted by the rules of Common IL\.$ let mutable mutableObjectField : obj = null diff --git a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/AutoProperties/E_PrivateProperty01.fs b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/AutoProperties/E_PrivateProperty01.fs index 5881a66256f..d99c71b9bff 100644 --- a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/AutoProperties/E_PrivateProperty01.fs +++ b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/AutoProperties/E_PrivateProperty01.fs @@ -1,5 +1,5 @@ // #Conformance #ObjectOrientedTypes #Classes #MethodsAndProperties #Accessibility -//The type 'X' is less accessible than the value, member or type 'member XX\.PublicProperty : X' it is used in$ +//The type 'X' is less accessible than the value, member or type 'member XX\.PublicProperty : X' it is used in.$ type private X() = class end type XX() = diff --git a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/TypeExtensions/basic/E_ExtensionInNamespace01.fs b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/TypeExtensions/basic/E_ExtensionInNamespace01.fs index 9ac297509b4..642ce3025fa 100644 --- a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/TypeExtensions/basic/E_ExtensionInNamespace01.fs +++ b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/TypeExtensions/basic/E_ExtensionInNamespace01.fs @@ -2,7 +2,7 @@ // Verify error associated with placing type extensions // inside namespaces. (They must only be placed in modules.) -//Namespaces cannot contain extension members except in the same file and namespace where the type is defined\. Consider using a module to hold declarations of extension members\.$ +//Namespaces cannot contain extension members except in the same file and namespace declaration group where the type is defined\. Consider using a module to hold declarations of extension members\.$ namespace System diff --git a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/TypeExtensions/optional/E_NotInModule.fs b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/TypeExtensions/optional/E_NotInModule.fs index bbaef6165b4..b8301f534b2 100644 --- a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/TypeExtensions/optional/E_NotInModule.fs +++ b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/TypeExtensions/optional/E_NotInModule.fs @@ -1,6 +1,6 @@ // #Regression #Conformance #ObjectOrientedTypes #TypeExtensions // Verify that optional extension must be inside a module -//Namespaces cannot contain extension members except in the same file and namespace where the type is defined\. Consider using a module to hold declarations of extension members\.$ +//Namespaces cannot contain extension members except in the same file and namespace declaration group where the type is defined\. Consider using a module to hold declarations of extension members\.$ namespace NS type Lib with diff --git a/tests/fsharpqa/Source/Diagnostics/General/E_NullableOperators01.fs b/tests/fsharpqa/Source/Diagnostics/General/E_NullableOperators01.fs index 7b5c7b39e8e..fbe1aab5902 100644 --- a/tests/fsharpqa/Source/Diagnostics/General/E_NullableOperators01.fs +++ b/tests/fsharpqa/Source/Diagnostics/General/E_NullableOperators01.fs @@ -25,39 +25,21 @@ let _ = iq ? iq -//None of the types 'System\.Nullable, int' support the operator '\?>='\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ //None of the types 'System\.Nullable, int' support the operator '\?>='\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ -//The type 'System\.Nullable' does not support the operator '\?>'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ //The type 'System\.Nullable' does not support the operator '\?>'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ -//The type 'System\.Nullable' does not support the operator '\?<='\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ //The type 'System\.Nullable' does not support the operator '\?<='\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ -//The type 'System\.Nullable' does not support the operator '\?<'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ //The type 'System\.Nullable' does not support the operator '\?<'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ -//The type 'System\.Nullable' does not support the operator '\?='\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ //The type 'System\.Nullable' does not support the operator '\?='\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ -//The type 'System\.Nullable' does not support the operator '\?<>'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ //The type 'System\.Nullable' does not support the operator '\?<>'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ -//The type 'System\.Nullable' does not support the operator '\?>=\?'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ //The type 'System\.Nullable' does not support the operator '\?>=\?'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ -//The type 'System\.Nullable' does not support the operator '\?>\?'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ //The type 'System\.Nullable' does not support the operator '\?>\?'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ -//The type 'System\.Nullable' does not support the operator '\?<=\?'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ //The type 'System\.Nullable' does not support the operator '\?<=\?'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ -//The type 'System\.Nullable' does not support the operator '\?<\?'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ //The type 'System\.Nullable' does not support the operator '\?<\?'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ -//The type 'System\.Nullable' does not support the operator '\?=\?'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ //The type 'System\.Nullable' does not support the operator '\?=\?'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ -//The type 'System\.Nullable' does not support the operator '\?<>\?'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ //The type 'System\.Nullable' does not support the operator '\?<>\?'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ -//The type 'System\.Nullable' does not support the operator '>=\?'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ //The type 'System\.Nullable' does not support the operator '>=\?'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ -//The type 'System\.Nullable' does not support the operator '>\?'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ //The type 'System\.Nullable' does not support the operator '>\?'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ -//The type 'System\.Nullable' does not support the operator '<=\?'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ //The type 'System\.Nullable' does not support the operator '<=\?'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ -//The type 'System\.Nullable' does not support the operator '<\?'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ //The type 'System\.Nullable' does not support the operator '<\?'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ -//The type 'System\.Nullable' does not support the operator '=\?'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ //The type 'System\.Nullable' does not support the operator '=\?'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ -//The type 'System\.Nullable' does not support the operator '<>\?'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ //The type 'System\.Nullable' does not support the operator '<>\?'\. Consider opening the module 'Microsoft\.FSharp\.Linq\.NullableOperators'\.$ diff --git a/tests/fsharpqa/Source/Diagnostics/General/E_ObjectConstructorAndTry01.fs b/tests/fsharpqa/Source/Diagnostics/General/E_ObjectConstructorAndTry01.fs index 391af10e0ca..320443ac115 100644 --- a/tests/fsharpqa/Source/Diagnostics/General/E_ObjectConstructorAndTry01.fs +++ b/tests/fsharpqa/Source/Diagnostics/General/E_ObjectConstructorAndTry01.fs @@ -1,6 +1,6 @@ // #Regression #Diagnostics // Regression test for FSHARP1.0:1980 -//Object constructors cannot directly use try/with and try/finally prior to the initialization of the object\. This includes constructs such as 'for x in \.\.\.' that may elaborate to uses of these constructs\. This is a limitation imposed by Common IL\.$ +//Object constructors cannot directly use try/with and try/finally prior to the initialization of the object\. This includes constructs such as 'for x in \.\.\.' that may elaborate to uses of these constructs\. This is a limitation imposed by Common IL\.$ #light type X = class diff --git a/tests/fsharpqa/Source/Diagnostics/General/E_ObjectConstructorAndTry02.fs b/tests/fsharpqa/Source/Diagnostics/General/E_ObjectConstructorAndTry02.fs index b76411c1dbd..5ceda234e90 100644 --- a/tests/fsharpqa/Source/Diagnostics/General/E_ObjectConstructorAndTry02.fs +++ b/tests/fsharpqa/Source/Diagnostics/General/E_ObjectConstructorAndTry02.fs @@ -1,6 +1,6 @@ // #Regression #Diagnostics // Regression test for FSHARP1.0:1980 -//Object constructors cannot directly use try/with and try/finally prior to the initialization of the object\. This includes constructs such as 'for x in \.\.\.' that may elaborate to uses of these constructs\. This is a limitation imposed by Common IL\.$ +//Object constructors cannot directly use try/with and try/finally prior to the initialization of the object\. This includes constructs such as 'for x in \.\.\.' that may elaborate to uses of these constructs\. This is a limitation imposed by Common IL\.$ #light type X = struct diff --git a/tests/fsharpqa/Source/Misc/LongSourceFile01.fs b/tests/fsharpqa/Source/Misc/LongSourceFile01.fs index 3c2a5c96c7d..970a5f77ff6 100644 --- a/tests/fsharpqa/Source/Misc/LongSourceFile01.fs +++ b/tests/fsharpqa/Source/Misc/LongSourceFile01.fs @@ -2475,6 +2475,13 @@ Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object get_ Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.String ToString() Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Type GetType() Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Void .ctor() +Microsoft.FSharp.Core.ResultModule: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ResultModule: Int32 GetHashCode() +Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[T,TResult] MapError[TError,TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TError,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Bind[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpResult`2[TResult,TError]], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Map[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.ResultModule: System.String ToString() +Microsoft.FSharp.Core.ResultModule: System.Type GetType() Microsoft.FSharp.Core.SealedAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.SealedAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.SealedAttribute: Boolean Match(System.Object) diff --git a/tests/fsharpqa/Source/Optimizations/AssemblyBoundary/keep.lst b/tests/fsharpqa/Source/Optimizations/AssemblyBoundary/keep.lst new file mode 100644 index 00000000000..f59ec20aabf --- /dev/null +++ b/tests/fsharpqa/Source/Optimizations/AssemblyBoundary/keep.lst @@ -0,0 +1 @@ +* \ No newline at end of file diff --git a/tests/fsharpqa/Source/Optimizations/ForLoop/ForEachOnArray01.il.bsl b/tests/fsharpqa/Source/Optimizations/ForLoop/ForEachOnArray01.il.bsl index a7db7b818a4..206edb0cb6a 100644 --- a/tests/fsharpqa/Source/Optimizations/ForLoop/ForEachOnArray01.il.bsl +++ b/tests/fsharpqa/Source/Optimizations/ForLoop/ForEachOnArray01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly ForEachOnArray01 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.ForEachOnArray01 { - // Offset: 0x00000000 Length: 0x000001F4 + // Offset: 0x00000000 Length: 0x000001E0 } .mresource public FSharpOptimizationData.ForEachOnArray01 { - // Offset: 0x000001F8 Length: 0x0000007C + // Offset: 0x000001E8 Length: 0x0000007C } .module ForEachOnArray01.dll -// MVID: {4BEB29B3-7E2E-D3AE-A745-0383B329EB4B} +// MVID: {5772F60B-7E2E-D3AE-A745-03830BF67257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00670000 +// Image base: 0x006C0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -59,16 +59,16 @@ [1] int32 V_1, [2] int32 x) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 6,6 : 6,23 + .line 6,6 : 6,23 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\ForLoop\\ForEachOnArray01.fs' IL_0000: nop IL_0001: ldc.i4.0 IL_0002: stloc.0 - .line 7,7 : 6,21 + .line 7,7 : 6,21 '' IL_0003: ldc.i4.0 IL_0004: stloc.1 IL_0005: br.s IL_0017 - .line 7,8 : 6,20 + .line 7,7 : 6,21 '' IL_0007: ldarg.0 IL_0008: ldloc.1 IL_0009: ldelem [mscorlib]System.Int32 @@ -81,7 +81,7 @@ IL_0014: ldc.i4.1 IL_0015: add IL_0016: stloc.1 - .line 7,8 : 6,20 + .line 7,7 : 6,21 '' IL_0017: ldloc.1 IL_0018: ldarg.0 IL_0019: ldlen diff --git a/tests/fsharpqa/Source/Optimizations/ForLoop/ForEachOnList01.il.bsl b/tests/fsharpqa/Source/Optimizations/ForLoop/ForEachOnList01.il.bsl index 1a2e55c6157..0629c440fc6 100644 --- a/tests/fsharpqa/Source/Optimizations/ForLoop/ForEachOnList01.il.bsl +++ b/tests/fsharpqa/Source/Optimizations/ForLoop/ForEachOnList01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.33440 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.ForEachOnList01 { - // Offset: 0x00000000 Length: 0x000002EB + // Offset: 0x00000000 Length: 0x000002ED } .mresource public FSharpOptimizationData.ForEachOnList01 { - // Offset: 0x000002F0 Length: 0x000000DB + // Offset: 0x000002F8 Length: 0x000000DB } .module ForEachOnList01.dll -// MVID: {54D54537-56DF-F74F-A745-03833745D554} +// MVID: {5772F60E-56DF-F74F-A745-03830EF67257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x014C0000 +// Image base: 0x00F10000 // =============== CLASS MEMBERS DECLARATION =================== @@ -57,6 +57,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -70,7 +72,7 @@ // Code size 5 (0x5) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 39,39 : 21,26 '' + .line 39,39 : 21,26 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\ForLoop\\ForEachOnList01.fs' IL_0000: nop IL_0001: ldarg.1 IL_0002: ldc.i4.1 @@ -86,6 +88,8 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 @@ -98,7 +102,7 @@ { // Code size 5 (0x5) .maxstack 8 - .line 48,48 : 21,26 '' + .line 48,48 : 21,26 IL_0000: nop IL_0001: ldarg.1 IL_0002: ldc.i4.1 @@ -116,23 +120,24 @@ [1] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_1, [2] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_2, [3] int32 x) - .line 8,8 : 6,23 '' + .line 8,8 : 6,23 IL_0000: nop IL_0001: ldc.i4.0 IL_0002: stloc.0 - .line 9,9 : 15,18 '' + .line 9,9 : 6,21 '' IL_0003: ldarg.0 IL_0004: stloc.1 + .line 9,9 : 6,21 '' IL_0005: ldloc.1 IL_0006: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_000b: stloc.2 - .line 9,9 : 6,21 '' + .line 9,9 : 6,21 IL_000c: ldloc.2 IL_000d: ldnull IL_000e: cgt.un IL_0010: brfalse.s IL_0029 - .line 9,9 : 15,18 '' + .line 9,9 : 6,21 '' IL_0012: ldloc.1 IL_0013: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() IL_0018: stloc.3 @@ -159,11 +164,11 @@ [1] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_1, [2] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_2, [3] int32 x) - .line 13,13 : 6,23 '' + .line 13,13 : 6,23 IL_0000: nop IL_0001: ldc.i4.0 IL_0002: stloc.0 - .line 14,14 : 15,22 '' + .line 14,14 : 6,25 '' IL_0003: ldc.i4.1 IL_0004: ldc.i4.2 IL_0005: ldc.i4.3 @@ -175,16 +180,17 @@ IL_0015: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1) IL_001a: stloc.1 + .line 14,14 : 6,25 '' IL_001b: ldloc.1 IL_001c: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_0021: stloc.2 - .line 14,14 : 6,25 '' + .line 14,14 : 6,25 IL_0022: ldloc.2 IL_0023: ldnull IL_0024: cgt.un IL_0026: brfalse.s IL_003f - .line 14,14 : 15,22 '' + .line 14,14 : 6,25 '' IL_0028: ldloc.1 IL_0029: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() IL_002e: stloc.3 @@ -212,7 +218,7 @@ [2] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_2, [3] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_3, [4] int32 x) - .line 18,18 : 6,22 '' + .line 18,18 : 6,22 IL_0000: nop IL_0001: ldc.i4.1 IL_0002: ldc.i4.2 @@ -225,22 +231,23 @@ IL_0013: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1) IL_0018: stloc.0 - .line 19,19 : 6,23 '' + .line 19,19 : 6,23 IL_0019: ldc.i4.0 IL_001a: stloc.1 - .line 20,20 : 15,17 '' + .line 20,20 : 6,20 '' IL_001b: ldloc.0 IL_001c: stloc.2 + .line 20,20 : 6,20 '' IL_001d: ldloc.2 IL_001e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_0023: stloc.3 - .line 20,20 : 6,20 '' + .line 20,20 : 6,20 IL_0024: ldloc.3 IL_0025: ldnull IL_0026: cgt.un IL_0028: brfalse.s IL_0043 - .line 20,20 : 15,17 '' + .line 20,20 : 6,20 '' IL_002a: ldloc.2 IL_002b: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() IL_0030: stloc.s x @@ -268,11 +275,11 @@ [2] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_2, [3] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_3, [4] int32 x) - .line 24,24 : 6,23 '' + .line 24,24 : 6,23 IL_0000: nop IL_0001: ldc.i4.0 IL_0002: stloc.0 - .line 25,25 : 6,22 '' + .line 25,25 : 6,22 IL_0003: ldc.i4.1 IL_0004: ldc.i4.2 IL_0005: ldc.i4.3 @@ -284,19 +291,20 @@ IL_0015: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1) IL_001a: stloc.1 - .line 26,26 : 15,17 '' + .line 26,26 : 6,20 '' IL_001b: ldloc.1 IL_001c: stloc.2 + .line 26,26 : 6,20 '' IL_001d: ldloc.2 IL_001e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_0023: stloc.3 - .line 26,26 : 6,20 '' + .line 26,26 : 6,20 IL_0024: ldloc.3 IL_0025: ldnull IL_0026: cgt.un IL_0028: brfalse.s IL_0043 - .line 26,26 : 15,17 '' + .line 26,26 : 6,20 '' IL_002a: ldloc.2 IL_002b: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() IL_0030: stloc.s x @@ -324,7 +332,7 @@ [2] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_2, [3] int32 x, [4] class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit> V_4) - .line 30,30 : 6,22 '' + .line 30,30 : 6,22 IL_0000: nop IL_0001: ldc.i4.1 IL_0002: ldc.i4.2 @@ -337,19 +345,20 @@ IL_0013: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1) IL_0018: stloc.0 - .line 31,31 : 15,17 '' + .line 31,31 : 6,20 '' IL_0019: ldloc.0 IL_001a: stloc.1 + .line 31,31 : 6,20 '' IL_001b: ldloc.1 IL_001c: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_0021: stloc.2 - .line 31,31 : 6,20 '' + .line 31,31 : 6,20 IL_0022: ldloc.2 IL_0023: ldnull IL_0024: cgt.un IL_0026: brfalse.s IL_005a - .line 31,31 : 15,17 '' + .line 31,31 : 6,20 '' IL_0028: ldloc.1 IL_0029: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() IL_002e: stloc.3 @@ -382,7 +391,7 @@ [1] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_1, [2] int32 i, [3] class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit> V_3) - .line 37,39 : 17,27 '' + .line 36,40 : 5,21 '' IL_0000: nop IL_0001: newobj instance void ForEachOnList01/test6@38::.ctor() IL_0006: ldc.i4.1 @@ -401,16 +410,17 @@ IL_0023: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.ListModule::Map(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1) IL_0028: stloc.0 + .line 36,40 : 5,21 '' IL_0029: ldloc.0 IL_002a: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_002f: stloc.1 - .line 36,40 : 5,21 '' + .line 36,40 : 5,21 IL_0030: ldloc.1 IL_0031: ldnull IL_0032: cgt.un IL_0034: brfalse.s IL_0066 - .line 37,39 : 17,27 '' + .line 36,40 : 5,21 '' IL_0036: ldloc.0 IL_0037: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() IL_003c: stloc.2 @@ -444,7 +454,7 @@ [2] int32 i, [3] int32 tmp, [4] class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit> V_4) - .line 46,48 : 17,27 '' + .line 45,49 : 5,21 '' IL_0000: nop IL_0001: newobj instance void ForEachOnList01/test7@47::.ctor() IL_0006: ldc.i4.1 @@ -463,25 +473,26 @@ IL_0023: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.ListModule::Map(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1) IL_0028: stloc.0 + .line 45,49 : 5,21 '' IL_0029: ldloc.0 IL_002a: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_002f: stloc.1 - .line 45,49 : 5,21 '' + .line 45,49 : 5,21 IL_0030: ldloc.1 IL_0031: ldnull IL_0032: cgt.un IL_0034: brfalse.s IL_006c - .line 46,48 : 17,27 '' + .line 45,49 : 5,21 '' IL_0036: ldloc.0 IL_0037: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() IL_003c: stloc.2 - .line 50,50 : 9,24 '' + .line 50,50 : 9,24 IL_003d: ldloc.2 IL_003e: ldc.i4.1 IL_003f: add IL_0040: stloc.3 - .line 51,51 : 9,21 '' + .line 51,51 : 9,21 IL_0041: ldstr "%O" IL_0046: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,int32>::.ctor(string) IL_004b: stloc.s V_4 diff --git a/tests/fsharpqa/Source/Optimizations/ForLoop/ForEachOnString01.il.bsl b/tests/fsharpqa/Source/Optimizations/ForLoop/ForEachOnString01.il.bsl index d434691c34d..f65f4c02c53 100644 --- a/tests/fsharpqa/Source/Optimizations/ForLoop/ForEachOnString01.il.bsl +++ b/tests/fsharpqa/Source/Optimizations/ForLoop/ForEachOnString01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -21,28 +21,28 @@ int32, int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - // - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) + // --- The following custom attribute is added automatically, do not uncomment ------- + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.ForEachOnString01 { - // Offset: 0x00000000 Length: 0x0000036E + // Offset: 0x00000000 Length: 0x00000354 } .mresource public FSharpOptimizationData.ForEachOnString01 { - // Offset: 0x00000378 Length: 0x000000FF + // Offset: 0x00000358 Length: 0x000000FF } .module ForEachOnString01.dll -// MVID: {547FB1E9-105C-852B-A745-0383E9B17F54} +// MVID: {578C9941-105C-852B-A745-038341998C57} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x029A0000 +// Image base: 0x004A0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -57,7 +57,9 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { - // + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::.ctor() @@ -67,10 +69,10 @@ .method public strict virtual instance char Invoke(char x) cil managed { - // + // Code size 7 (0x7) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 55,55 : 21,39 'C:\\Users\\latkin\\Source\\Repos\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\ForLoop\\ForEachOnString01.fs' + .line 55,55 : 21,39 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\ForLoop\\ForEachOnString01.fs' IL_0000: nop IL_0001: ldarg.1 IL_0002: conv.i4 @@ -88,7 +90,9 @@ .method assembly specialname rtspecialname instance void .ctor() cil managed { - // + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 IL_0001: call instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::.ctor() @@ -98,7 +102,7 @@ .method public strict virtual instance char Invoke(char x) cil managed { - // + // Code size 7 (0x7) .maxstack 8 .line 64,64 : 21,39 '' IL_0000: nop @@ -114,7 +118,7 @@ .method public static void test1(string str) cil managed { - // + // Code size 42 (0x2a) .maxstack 5 .locals init ([0] int32 z, [1] int32 V_1, @@ -136,7 +140,7 @@ IL_000f: ldloc.2 IL_0010: blt.s IL_0029 - .line 10,10 : 10,26 '' + .line 9,9 : 6,21 '' IL_0012: ldarg.0 IL_0013: ldloc.2 IL_0014: callvirt instance char [mscorlib]System.String::get_Chars(int32) @@ -162,7 +166,7 @@ .method public static void test2() cil managed { - // + // Code size 50 (0x32) .maxstack 5 .locals init ([0] int32 z, [1] int32 V_1, @@ -184,7 +188,7 @@ IL_0013: ldloc.2 IL_0014: blt.s IL_0031 - .line 15,15 : 10,26 '' + .line 14,14 : 6,23 '' IL_0016: ldstr "123" IL_001b: ldloc.2 IL_001c: callvirt instance char [mscorlib]System.String::get_Chars(int32) @@ -210,7 +214,7 @@ .method public static void test3() cil managed { - // + // Code size 50 (0x32) .maxstack 5 .locals init ([0] int32 z, [1] int32 V_1, @@ -232,7 +236,7 @@ IL_0013: ldloc.2 IL_0014: blt.s IL_0031 - .line 21,21 : 10,26 '' + .line 20,20 : 6,20 '' IL_0016: ldstr "123" IL_001b: ldloc.2 IL_001c: callvirt instance char [mscorlib]System.String::get_Chars(int32) @@ -258,7 +262,7 @@ .method public static void test4() cil managed { - // + // Code size 50 (0x32) .maxstack 5 .locals init ([0] int32 z, [1] int32 V_1, @@ -280,7 +284,7 @@ IL_0013: ldloc.2 IL_0014: blt.s IL_0031 - .line 27,27 : 10,26 '' + .line 26,26 : 6,20 '' IL_0016: ldstr "123" IL_001b: ldloc.2 IL_001c: callvirt instance char [mscorlib]System.String::get_Chars(int32) @@ -306,7 +310,7 @@ .method public static void test5() cil managed { - // + // Code size 72 (0x48) .maxstack 5 .locals init ([0] int32 V_0, [1] int32 V_1, @@ -325,7 +329,7 @@ IL_0011: ldloc.1 IL_0012: blt.s IL_0047 - .line 32,32 : 10,24 '' + .line 31,31 : 6,20 '' IL_0014: ldstr "123" IL_0019: ldloc.1 IL_001a: callvirt instance char [mscorlib]System.String::get_Chars(int32) @@ -356,7 +360,7 @@ .method public static void test6(string str) cil managed { - // + // Code size 42 (0x2a) .maxstack 5 .locals init ([0] int32 z, [1] int32 V_1, @@ -378,7 +382,7 @@ IL_000f: ldloc.2 IL_0010: blt.s IL_0029 - .line 42,42 : 10,26 '' + .line 41,41 : 6,21 '' IL_0012: ldarg.0 IL_0013: ldloc.2 IL_0014: callvirt instance char [mscorlib]System.String::get_Chars(int32) @@ -404,7 +408,7 @@ .method public static void test7() cil managed { - // + // Code size 50 (0x32) .maxstack 5 .locals init ([0] int32 z, [1] int32 V_1, @@ -426,7 +430,7 @@ IL_0013: ldloc.2 IL_0014: blt.s IL_0031 - .line 48,48 : 10,26 '' + .line 47,47 : 6,20 '' IL_0016: ldstr "123" IL_001b: ldloc.2 IL_001c: callvirt instance char [mscorlib]System.String::get_Chars(int32) @@ -452,7 +456,7 @@ .method public static void test8() cil managed { - // + // Code size 82 (0x52) .maxstack 5 .locals init ([0] string V_0, [1] int32 V_1, @@ -478,7 +482,7 @@ IL_001d: ldloc.2 IL_001e: blt.s IL_0051 - .line 57,57 : 9,23 '' + .line 52,56 : 5,21 '' IL_0020: ldloc.0 IL_0021: ldloc.2 IL_0022: callvirt instance char [mscorlib]System.String::get_Chars(int32) @@ -509,7 +513,7 @@ .method public static void test9() cil managed { - // + // Code size 101 (0x65) .maxstack 5 .locals init ([0] string V_0, [1] int32 V_1, @@ -536,7 +540,7 @@ IL_001d: ldloc.2 IL_001e: blt.s IL_0064 - .line 66,66 : 13,16 '' + .line 61,65 : 5,21 '' IL_0020: ldloc.0 IL_0021: ldloc.2 IL_0022: callvirt instance char [mscorlib]System.String::get_Chars(int32) @@ -583,4 +587,4 @@ // ============================================================= -// +// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/Optimizations/ForLoop/NoAllocationOfTuple01.il.bsl b/tests/fsharpqa/Source/Optimizations/ForLoop/NoAllocationOfTuple01.il.bsl index c19baaa4d26..1f22c806de8 100644 --- a/tests/fsharpqa/Source/Optimizations/ForLoop/NoAllocationOfTuple01.il.bsl +++ b/tests/fsharpqa/Source/Optimizations/ForLoop/NoAllocationOfTuple01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly NoAllocationOfTuple01 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.NoAllocationOfTuple01 { - // Offset: 0x00000000 Length: 0x000001F4 + // Offset: 0x00000000 Length: 0x000001E0 } .mresource public FSharpOptimizationData.NoAllocationOfTuple01 { - // Offset: 0x000001F8 Length: 0x00000085 + // Offset: 0x000001E8 Length: 0x00000085 } .module NoAllocationOfTuple01.dll -// MVID: {4BEB29B1-13B5-F699-A745-0383B129EB4B} +// MVID: {5772F609-13B5-F699-A745-038309F67257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00790000 +// Image base: 0x02300000 // =============== CLASS MEMBERS DECLARATION =================== @@ -60,15 +60,15 @@ [2] int32 V_2, [3] int32 j) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 6,6 : 5,31 + .line 6,6 : 5,31 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\ForLoop\\NoAllocationOfTuple01.fs' IL_0000: nop IL_0001: ldarg.0 IL_0002: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.ArrayModule::ZeroCreate(int32) IL_0007: stloc.0 - .line 7,7 : 5,23 + .line 7,7 : 5,23 '' IL_0008: ldc.i4.m1 IL_0009: stloc.1 - .line 8,8 : 5,22 + .line 8,8 : 5,22 '' IL_000a: ldc.i4.1 IL_000b: stloc.3 IL_000c: ldarg.0 @@ -77,12 +77,12 @@ IL_000f: ldloc.3 IL_0010: blt.s IL_0028 - .line 9,9 : 7,17 + .line 9,9 : 7,17 '' IL_0012: ldloc.1 IL_0013: ldc.i4.1 IL_0014: add IL_0015: stloc.1 - .line 10,10 : 7,19 + .line 10,10 : 7,19 '' IL_0016: ldloc.0 IL_0017: ldloc.1 IL_0018: ldloc.3 @@ -91,14 +91,14 @@ IL_001f: ldc.i4.1 IL_0020: add IL_0021: stloc.3 - .line 8,8 : 18,19 + .line 8,8 : 5,22 '' IL_0022: ldloc.3 IL_0023: ldloc.2 IL_0024: ldc.i4.1 IL_0025: add IL_0026: bne.un.s IL_0012 - .line 11,11 : 5,6 + .line 11,11 : 5,6 '' IL_0028: ldloc.0 IL_0029: ret } // end of method NoAllocationOfTuple01::loop diff --git a/tests/fsharpqa/Source/Optimizations/ForLoop/NoIEnumerable01.il.bsl b/tests/fsharpqa/Source/Optimizations/ForLoop/NoIEnumerable01.il.bsl index 556c89cbb45..7648b3b9c8d 100644 --- a/tests/fsharpqa/Source/Optimizations/ForLoop/NoIEnumerable01.il.bsl +++ b/tests/fsharpqa/Source/Optimizations/ForLoop/NoIEnumerable01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly NoIEnumerable01 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.NoIEnumerable01 { - // Offset: 0x00000000 Length: 0x000001E5 + // Offset: 0x00000000 Length: 0x000001D1 } .mresource public FSharpOptimizationData.NoIEnumerable01 { - // Offset: 0x000001F0 Length: 0x0000006C + // Offset: 0x000001D8 Length: 0x0000006C } .module NoIEnumerable01.dll -// MVID: {4BEB29BA-31A1-8DCB-A745-0383BA29EB4B} +// MVID: {5772F616-31A1-8DCB-A745-038316F67257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x008D0000 +// Image base: 0x00D30000 // =============== CLASS MEMBERS DECLARATION =================== @@ -59,7 +59,7 @@ [1] int32 i, [2] class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4 V_2) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 7,7 : 4,22 + .line 7,7 : 4,22 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\ForLoop\\NoIEnumerable01.fsx' IL_0000: nop IL_0001: ldc.i4.1 IL_0002: stloc.1 @@ -69,7 +69,7 @@ IL_0006: ldloc.1 IL_0007: blt.s IL_002a - .line 8,8 : 7,20 + .line 8,8 : 7,20 '' IL_0009: ldstr "aaa" IL_000e: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_0013: stloc.2 @@ -82,7 +82,7 @@ IL_0021: ldc.i4.1 IL_0022: add IL_0023: stloc.1 - .line 7,7 : 18,19 + .line 7,7 : 4,22 '' IL_0024: ldloc.1 IL_0025: ldloc.0 IL_0026: ldc.i4.1 diff --git a/tests/fsharpqa/Source/Optimizations/ForLoop/NoIEnumerable02.il.bsl b/tests/fsharpqa/Source/Optimizations/ForLoop/NoIEnumerable02.il.bsl index a1ec0083403..8d2930cfaa9 100644 --- a/tests/fsharpqa/Source/Optimizations/ForLoop/NoIEnumerable02.il.bsl +++ b/tests/fsharpqa/Source/Optimizations/ForLoop/NoIEnumerable02.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly NoIEnumerable02 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.NoIEnumerable02 { - // Offset: 0x00000000 Length: 0x000001E5 + // Offset: 0x00000000 Length: 0x000001D1 } .mresource public FSharpOptimizationData.NoIEnumerable02 { - // Offset: 0x000001F0 Length: 0x0000006C + // Offset: 0x000001D8 Length: 0x0000006C } .module NoIEnumerable02.dll -// MVID: {4BEB29BD-5066-4012-A745-0383BD29EB4B} +// MVID: {5772F618-5066-4012-A745-038318F67257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00450000 +// Image base: 0x026B0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -59,7 +59,7 @@ [1] int32 i, [2] class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4 V_2) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 7,7 : 4,24 + .line 7,7 : 4,24 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\ForLoop\\NoIEnumerable02.fsx' IL_0000: nop IL_0001: ldc.i4.s 100 IL_0003: stloc.1 @@ -69,7 +69,7 @@ IL_0007: ldloc.1 IL_0008: blt.s IL_002b - .line 8,8 : 7,20 + .line 8,8 : 7,20 '' IL_000a: ldstr "aaa" IL_000f: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_0014: stloc.2 @@ -82,7 +82,7 @@ IL_0022: ldc.i4.1 IL_0023: add IL_0024: stloc.1 - .line 7,7 : 20,21 + .line 7,7 : 4,24 '' IL_0025: ldloc.1 IL_0026: ldloc.0 IL_0027: ldc.i4.1 diff --git a/tests/fsharpqa/Source/Optimizations/ForLoop/NoIEnumerable03.il.bsl b/tests/fsharpqa/Source/Optimizations/ForLoop/NoIEnumerable03.il.bsl index f95a853d16d..5a7022fdcdc 100644 --- a/tests/fsharpqa/Source/Optimizations/ForLoop/NoIEnumerable03.il.bsl +++ b/tests/fsharpqa/Source/Optimizations/ForLoop/NoIEnumerable03.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17014 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,36 +13,36 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly NoIEnumerable03 { .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.NoIEnumerable03 { - // Offset: 0x00000000 Length: 0x00000203 + // Offset: 0x00000000 Length: 0x000001DF } .mresource public FSharpOptimizationData.NoIEnumerable03 { - // Offset: 0x00000208 Length: 0x0000006C + // Offset: 0x000001E8 Length: 0x0000006C } .module NoIEnumerable03.dll -// MVID: {4E1B9C7F-7903-6020-A745-03837F9C1B4E} +// MVID: {5772F61A-7903-6020-A745-03831AF67257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000860000 +// Image base: 0x00E90000 // =============== CLASS MEMBERS DECLARATION =================== @@ -50,18 +50,18 @@ .class public abstract auto ansi sealed M extends [mscorlib]System.Object { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) .method public static void loop3(int32 a, int32 N) cil managed { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationArgumentCountsAttribute::.ctor(int32[]) = ( 01 00 02 00 00 00 01 00 00 00 01 00 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationArgumentCountsAttribute::.ctor(int32[]) = ( 01 00 02 00 00 00 01 00 00 00 01 00 00 00 00 00 ) // Code size 43 (0x2b) .maxstack 5 .locals init ([0] int32 V_0, [1] int32 i, [2] class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4 V_2) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 7,7 : 4,22 + .line 7,7 : 4,22 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\ForLoop\\NoIEnumerable03.fsx' IL_0000: nop IL_0001: ldarg.0 IL_0002: stloc.1 @@ -71,7 +71,7 @@ IL_0006: ldloc.1 IL_0007: blt.s IL_002a - .line 8,8 : 7,20 + .line 8,8 : 7,20 '' IL_0009: ldstr "aaa" IL_000e: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_0013: stloc.2 @@ -84,7 +84,7 @@ IL_0021: ldc.i4.1 IL_0022: add IL_0023: stloc.1 - .line 7,7 : 18,19 + .line 7,7 : 4,22 '' IL_0024: ldloc.1 IL_0025: ldloc.0 IL_0026: ldc.i4.1 diff --git a/tests/fsharpqa/Source/Optimizations/ForLoop/ZeroToArrLength01.il.bsl b/tests/fsharpqa/Source/Optimizations/ForLoop/ZeroToArrLength01.il.bsl index 24876e80835..7e0a00db69b 100644 --- a/tests/fsharpqa/Source/Optimizations/ForLoop/ZeroToArrLength01.il.bsl +++ b/tests/fsharpqa/Source/Optimizations/ForLoop/ZeroToArrLength01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly ZeroToArrLength01 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.ZeroToArrLength01 { - // Offset: 0x00000000 Length: 0x000001F4 + // Offset: 0x00000000 Length: 0x000001E0 } .mresource public FSharpOptimizationData.ZeroToArrLength01 { - // Offset: 0x000001F8 Length: 0x0000007B + // Offset: 0x000001E8 Length: 0x0000007B } .module ZeroToArrLength01.dll -// MVID: {4BEB29B6-A3D0-03A7-A745-0383B629EB4B} +// MVID: {5772F612-A3D0-03A7-A745-038312F67257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x002F0000 +// Image base: 0x01180000 // =============== CLASS MEMBERS DECLARATION =================== @@ -57,13 +57,13 @@ .maxstack 5 .locals init ([0] int32 i) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 6,6 : 5,35 + .line 6,6 : 5,35 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\ForLoop\\ZeroToArrLength01.fs' IL_0000: nop IL_0001: ldc.i4.0 IL_0002: stloc.0 IL_0003: br.s IL_0011 - .line 7,7 : 9,21 + .line 7,7 : 9,21 '' IL_0005: ldarg.0 IL_0006: ldloc.0 IL_0007: ldloc.0 @@ -72,7 +72,7 @@ IL_000e: ldc.i4.1 IL_000f: add IL_0010: stloc.0 - .line 6,6 : 18,32 + .line 6,6 : 5,35 '' IL_0011: ldloc.0 IL_0012: ldarg.0 IL_0013: ldlen diff --git a/tests/fsharpqa/Source/Optimizations/ForLoop/ZeroToArrLength02.il.bsl b/tests/fsharpqa/Source/Optimizations/ForLoop/ZeroToArrLength02.il.bsl index 094abfacb8f..e93a4e90c56 100644 --- a/tests/fsharpqa/Source/Optimizations/ForLoop/ZeroToArrLength02.il.bsl +++ b/tests/fsharpqa/Source/Optimizations/ForLoop/ZeroToArrLength02.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly ZeroToArrLength02 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.ZeroToArrLength02 { - // Offset: 0x00000000 Length: 0x000001F4 + // Offset: 0x00000000 Length: 0x000001E0 } .mresource public FSharpOptimizationData.ZeroToArrLength02 { - // Offset: 0x000001F8 Length: 0x0000007B + // Offset: 0x000001E8 Length: 0x0000007B } .module ZeroToArrLength02.dll -// MVID: {4BEB29B8-A36B-03A7-A745-0383B829EB4B} +// MVID: {5772F614-A36B-03A7-A745-038314F67257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00580000 +// Image base: 0x00A40000 // =============== CLASS MEMBERS DECLARATION =================== @@ -57,13 +57,13 @@ .maxstack 5 .locals init ([0] int32 i) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 6,6 : 5,41 + .line 6,6 : 5,41 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\ForLoop\\ZeroToArrLength02.fs' IL_0000: nop IL_0001: ldc.i4.0 IL_0002: stloc.0 IL_0003: br.s IL_0011 - .line 7,7 : 9,21 + .line 7,7 : 9,21 '' IL_0005: ldarg.0 IL_0006: ldloc.0 IL_0007: ldloc.0 @@ -72,7 +72,7 @@ IL_000e: ldc.i4.1 IL_000f: add IL_0010: stloc.0 - .line 6,6 : 18,38 + .line 6,6 : 5,41 '' IL_0011: ldloc.0 IL_0012: ldarg.0 IL_0013: ldlen diff --git a/tests/fsharpqa/Source/Optimizations/ForLoop/keep.lst b/tests/fsharpqa/Source/Optimizations/ForLoop/keep.lst new file mode 100644 index 00000000000..f59ec20aabf --- /dev/null +++ b/tests/fsharpqa/Source/Optimizations/ForLoop/keep.lst @@ -0,0 +1 @@ +* \ No newline at end of file diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare01.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare01.il.bsl deleted file mode 100644 index 834762d0425..00000000000 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare01.il.bsl +++ /dev/null @@ -1,114 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:1:0 -} -.assembly Compare01 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.Compare01 -{ - // Offset: 0x00000000 Length: 0x0000023F -} -.mresource public FSharpOptimizationData.Compare01 -{ - // Offset: 0x00000248 Length: 0x000000B2 -} -.module Compare01.dll -// MVID: {54400E31-04A0-F88E-A745-0383310E4054} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x00AE0000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed Compare01 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class abstract auto ansi sealed nested public CompareMicroPerfAndCodeGenerationTests - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .method public static void f4() cil managed - { - // - .maxstack 4 - .locals init ([0] int32 x, - [1] int32 i, - [2] int32 V_2) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 8,25 'C:\\Users\\latkin\\Source\\Repos\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Compare01.fsx' - IL_0000: nop - IL_0001: ldc.i4.1 - IL_0002: stloc.0 - .line 9,9 : 8,32 '' - IL_0003: ldc.i4.0 - IL_0004: stloc.1 - IL_0005: br.s IL_001a - - .line 10,10 : 12,30 '' - IL_0007: ldc.i4.1 - IL_0008: ldc.i4.1 - IL_0009: cgt - IL_000b: stloc.2 - IL_000c: ldloc.2 - IL_000d: brfalse.s IL_0013 - - IL_000f: ldloc.2 - IL_0010: nop - IL_0011: br.s IL_0015 - - IL_0013: ldc.i4.m1 - IL_0014: nop - IL_0015: stloc.0 - IL_0016: ldloc.1 - IL_0017: ldc.i4.1 - IL_0018: add - IL_0019: stloc.1 - .line 9,9 : 21,29 '' - IL_001a: ldloc.1 - IL_001b: ldc.i4 0x989681 - IL_0020: blt.s IL_0007 - - IL_0022: ret - } // end of method CompareMicroPerfAndCodeGenerationTests::f4 - - } // end of class CompareMicroPerfAndCodeGenerationTests - -} // end of class Compare01 - -.class private abstract auto ansi sealed ''.$Compare01$fsx - extends [mscorlib]System.Object -{ -} // end of class ''.$Compare01$fsx - - -// ============================================================= - -// diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare01.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare01.il.netfx4.bsl index 834762d0425..7b1c3ddc9cd 100644 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare01.il.netfx4.bsl +++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare01.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -21,28 +21,28 @@ int32, int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - // - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) + // --- The following custom attribute is added automatically, do not uncomment ------- + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Compare01 { - // Offset: 0x00000000 Length: 0x0000023F + // Offset: 0x00000000 Length: 0x00000225 } .mresource public FSharpOptimizationData.Compare01 { - // Offset: 0x00000248 Length: 0x000000B2 + // Offset: 0x00000230 Length: 0x000000B2 } .module Compare01.dll -// MVID: {54400E31-04A0-F88E-A745-0383310E4054} +// MVID: {5772F63A-04A0-F88E-A745-03833AF67257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00AE0000 +// Image base: 0x01000000 // =============== CLASS MEMBERS DECLARATION =================== @@ -57,22 +57,22 @@ .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) .method public static void f4() cil managed { - // + // Code size 35 (0x23) .maxstack 4 .locals init ([0] int32 x, [1] int32 i, [2] int32 V_2) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 8,25 'C:\\Users\\latkin\\Source\\Repos\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Compare01.fsx' + .line 5,5 : 8,25 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Compare01.fsx' IL_0000: nop IL_0001: ldc.i4.1 IL_0002: stloc.0 - .line 9,9 : 8,32 '' + .line 9,9 : 8,32 IL_0003: ldc.i4.0 IL_0004: stloc.1 IL_0005: br.s IL_001a - .line 10,10 : 12,30 '' + .line 10,10 : 12,30 IL_0007: ldc.i4.1 IL_0008: ldc.i4.1 IL_0009: cgt @@ -91,7 +91,7 @@ IL_0017: ldc.i4.1 IL_0018: add IL_0019: stloc.1 - .line 9,9 : 21,29 '' + .line 9,9 : 8,32 '' IL_001a: ldloc.1 IL_001b: ldc.i4 0x989681 IL_0020: blt.s IL_0007 @@ -111,4 +111,4 @@ // ============================================================= -// +// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare02.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare02.il.bsl deleted file mode 100644 index dfb3c980db3..00000000000 Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare02.il.bsl and /dev/null differ diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare02.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare02.il.netfx4.bsl index dfb3c980db3..9d2b04fa81e 100644 Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare02.il.netfx4.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare02.il.netfx4.bsl differ diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare03.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare03.il.bsl deleted file mode 100644 index b2cec4ef4d8..00000000000 Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare03.il.bsl and /dev/null differ diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare03.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare03.il.netfx4.bsl index 28bafa1cfdb..92b85e55888 100644 Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare03.il.netfx4.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare03.il.netfx4.bsl differ diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare04.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare04.il.bsl deleted file mode 100644 index f022e19daf8..00000000000 Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare04.il.bsl and /dev/null differ diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare04.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare04.il.netfx4.bsl index 994852d3132..1ea3c3178df 100644 Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare04.il.netfx4.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare04.il.netfx4.bsl differ diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare05.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare05.il.bsl deleted file mode 100644 index 2ebcac02111..00000000000 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare05.il.bsl +++ /dev/null @@ -1,663 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly Compare05 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.Compare05 -{ - // Offset: 0x00000000 Length: 0x000006F8 -} -.mresource public FSharpOptimizationData.Compare05 -{ - // Offset: 0x00000700 Length: 0x000003BA -} -.module Compare05.dll -// MVID: {4BEB29E9-051C-F88E-A745-0383E929EB4B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x00350000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed Compare05 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class abstract auto ansi sealed nested public CompareMicroPerfAndCodeGenerationTests - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto autochar serializable sealed nested public beforefieldinit Key - extends [mscorlib]System.Object - implements class [mscorlib]System.IEquatable`1, - [mscorlib]System.Collections.IStructuralEquatable, - class [mscorlib]System.IComparable`1, - [mscorlib]System.IComparable, - [mscorlib]System.Collections.IStructuralComparable - { - .custom instance void [mscorlib]System.Diagnostics.DebuggerDisplayAttribute::.ctor(string) = ( 01 00 15 7B 5F 5F 44 65 62 75 67 44 69 73 70 6C // ...{__DebugDispl - 61 79 28 29 2C 6E 71 7D 00 00 ) // ay(),nq}.. - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 01 00 00 00 00 00 ) - .field assembly initonly int32 item1 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .field assembly initonly int32 item2 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method public static class Compare05/CompareMicroPerfAndCodeGenerationTests/Key - NewKey(int32 item1, - int32 item2) cil managed - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32) = ( 01 00 08 00 00 00 00 00 00 00 00 00 ) - // Code size 8 (0x8) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldarg.1 - IL_0002: newobj instance void Compare05/CompareMicroPerfAndCodeGenerationTests/Key::.ctor(int32, - int32) - IL_0007: ret - } // end of method Key::NewKey - - .method assembly specialname rtspecialname - instance void .ctor(int32 item1, - int32 item2) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 21 (0x15) - .maxstack 2 - IL_0000: ldarg.0 - IL_0001: call instance void [mscorlib]System.Object::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::item1 - IL_000d: ldarg.0 - IL_000e: ldarg.2 - IL_000f: stfld int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::item2 - IL_0014: ret - } // end of method Key::.ctor - - .method public instance int32 get_Item1() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 7 (0x7) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldfld int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::item1 - IL_0006: ret - } // end of method Key::get_Item1 - - .method public instance int32 get_Item2() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 7 (0x7) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldfld int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::item2 - IL_0006: ret - } // end of method Key::get_Item2 - - .method public instance int32 get_Tag() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 4 (0x4) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: pop - IL_0002: ldc.i4.0 - IL_0003: ret - } // end of method Key::get_Tag - - .method assembly specialname instance object - __DebugDisplay() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 22 (0x16) - .maxstack 4 - IL_0000: ldstr "%+0.8A" - IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,string>::.ctor(string) - IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_000f: ldarg.0 - IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) - IL_0015: ret - } // end of method Key::__DebugDisplay - - .method public hidebysig virtual final - instance int32 CompareTo(class Compare05/CompareMicroPerfAndCodeGenerationTests/Key obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 120 (0x78) - .maxstack 4 - .locals init (class Compare05/CompareMicroPerfAndCodeGenerationTests/Key V_0, - class Compare05/CompareMicroPerfAndCodeGenerationTests/Key V_1, - int32 V_2, - class [mscorlib]System.Collections.IComparer V_3, - int32 V_4, - int32 V_5) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_006e - - IL_0007: ldarg.1 - IL_0008: ldnull - IL_0009: cgt.un - IL_000b: brfalse.s IL_006c - - IL_000d: ldarg.0 - IL_000e: pop - IL_000f: ldarg.0 - IL_0010: stloc.0 - IL_0011: ldarg.1 - IL_0012: stloc.1 - IL_0013: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0018: stloc.3 - IL_0019: ldloc.0 - IL_001a: ldfld int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::item1 - IL_001f: stloc.s V_4 - IL_0021: ldloc.1 - IL_0022: ldfld int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::item1 - IL_0027: stloc.s V_5 - IL_0029: ldloc.s V_4 - IL_002b: ldloc.s V_5 - IL_002d: bge.s IL_0033 - - IL_002f: ldc.i4.m1 - IL_0030: nop - IL_0031: br.s IL_003a - - IL_0033: ldloc.s V_4 - IL_0035: ldloc.s V_5 - IL_0037: cgt - IL_0039: nop - IL_003a: stloc.2 - IL_003b: ldloc.2 - IL_003c: ldc.i4.0 - IL_003d: bge.s IL_0041 - - IL_003f: ldloc.2 - IL_0040: ret - - IL_0041: ldloc.2 - IL_0042: ldc.i4.0 - IL_0043: ble.s IL_0047 - - IL_0045: ldloc.2 - IL_0046: ret - - IL_0047: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_004c: stloc.3 - IL_004d: ldloc.0 - IL_004e: ldfld int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::item2 - IL_0053: stloc.s V_4 - IL_0055: ldloc.1 - IL_0056: ldfld int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::item2 - IL_005b: stloc.s V_5 - IL_005d: ldloc.s V_4 - IL_005f: ldloc.s V_5 - IL_0061: bge.s IL_0065 - - IL_0063: ldc.i4.m1 - IL_0064: ret - - IL_0065: ldloc.s V_4 - IL_0067: ldloc.s V_5 - IL_0069: cgt - IL_006b: ret - - IL_006c: ldc.i4.1 - IL_006d: ret - - IL_006e: ldarg.1 - IL_006f: ldnull - IL_0070: cgt.un - IL_0072: brfalse.s IL_0076 - - IL_0074: ldc.i4.m1 - IL_0075: ret - - IL_0076: ldc.i4.0 - IL_0077: ret - } // end of method Key::CompareTo - - .method public hidebysig virtual final - instance int32 CompareTo(object obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 14 (0xe) - .maxstack 4 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 10,13 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldarg.1 - IL_0003: unbox.any Compare05/CompareMicroPerfAndCodeGenerationTests/Key - IL_0008: call instance int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::CompareTo(class Compare05/CompareMicroPerfAndCodeGenerationTests/Key) - IL_000d: ret - } // end of method Key::CompareTo - - .method public hidebysig virtual final - instance int32 CompareTo(object obj, - class [mscorlib]System.Collections.IComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 125 (0x7d) - .maxstack 4 - .locals init ([0] class Compare05/CompareMicroPerfAndCodeGenerationTests/Key V_0, - [1] class Compare05/CompareMicroPerfAndCodeGenerationTests/Key V_1, - [2] class Compare05/CompareMicroPerfAndCodeGenerationTests/Key V_2, - [3] int32 V_3, - [4] int32 V_4, - [5] int32 V_5) - .line 4,4 : 10,13 - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: unbox.any Compare05/CompareMicroPerfAndCodeGenerationTests/Key - IL_0007: stloc.0 - IL_0008: ldarg.0 - IL_0009: ldnull - IL_000a: cgt.un - IL_000c: brfalse.s IL_006e - - IL_000e: ldarg.1 - IL_000f: unbox.any Compare05/CompareMicroPerfAndCodeGenerationTests/Key - IL_0014: ldnull - IL_0015: cgt.un - IL_0017: brfalse.s IL_006c - - IL_0019: ldarg.0 - IL_001a: pop - IL_001b: ldarg.0 - IL_001c: stloc.1 - IL_001d: ldloc.0 - IL_001e: stloc.2 - IL_001f: ldloc.1 - IL_0020: ldfld int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::item1 - IL_0025: stloc.s V_4 - IL_0027: ldloc.2 - IL_0028: ldfld int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::item1 - IL_002d: stloc.s V_5 - IL_002f: ldloc.s V_4 - IL_0031: ldloc.s V_5 - IL_0033: bge.s IL_0039 - - IL_0035: ldc.i4.m1 - IL_0036: nop - IL_0037: br.s IL_0040 - - IL_0039: ldloc.s V_4 - IL_003b: ldloc.s V_5 - IL_003d: cgt - IL_003f: nop - IL_0040: stloc.3 - IL_0041: ldloc.3 - IL_0042: ldc.i4.0 - IL_0043: bge.s IL_0047 - - IL_0045: ldloc.3 - IL_0046: ret - - IL_0047: ldloc.3 - IL_0048: ldc.i4.0 - IL_0049: ble.s IL_004d - - IL_004b: ldloc.3 - IL_004c: ret - - IL_004d: ldloc.1 - IL_004e: ldfld int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::item2 - IL_0053: stloc.s V_4 - IL_0055: ldloc.2 - IL_0056: ldfld int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::item2 - IL_005b: stloc.s V_5 - IL_005d: ldloc.s V_4 - IL_005f: ldloc.s V_5 - IL_0061: bge.s IL_0065 - - IL_0063: ldc.i4.m1 - IL_0064: ret - - IL_0065: ldloc.s V_4 - IL_0067: ldloc.s V_5 - IL_0069: cgt - IL_006b: ret - - IL_006c: ldc.i4.1 - IL_006d: ret - - IL_006e: ldarg.1 - IL_006f: unbox.any Compare05/CompareMicroPerfAndCodeGenerationTests/Key - IL_0074: ldnull - IL_0075: cgt.un - IL_0077: brfalse.s IL_007b - - IL_0079: ldc.i4.m1 - IL_007a: ret - - IL_007b: ldc.i4.0 - IL_007c: ret - } // end of method Key::CompareTo - - .method public hidebysig virtual final - instance int32 GetHashCode(class [mscorlib]System.Collections.IEqualityComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 61 (0x3d) - .maxstack 7 - .locals init (int32 V_0, - class Compare05/CompareMicroPerfAndCodeGenerationTests/Key V_1) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_003b - - IL_0007: ldc.i4.0 - IL_0008: stloc.0 - IL_0009: ldarg.0 - IL_000a: pop - IL_000b: ldarg.0 - IL_000c: stloc.1 - IL_000d: ldc.i4.0 - IL_000e: stloc.0 - IL_000f: ldc.i4 0x9e3779b9 - IL_0014: ldloc.1 - IL_0015: ldfld int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::item2 - IL_001a: ldloc.0 - IL_001b: ldc.i4.6 - IL_001c: shl - IL_001d: ldloc.0 - IL_001e: ldc.i4.2 - IL_001f: shr - IL_0020: add - IL_0021: add - IL_0022: add - IL_0023: stloc.0 - IL_0024: ldc.i4 0x9e3779b9 - IL_0029: ldloc.1 - IL_002a: ldfld int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::item1 - IL_002f: ldloc.0 - IL_0030: ldc.i4.6 - IL_0031: shl - IL_0032: ldloc.0 - IL_0033: ldc.i4.2 - IL_0034: shr - IL_0035: add - IL_0036: add - IL_0037: add - IL_0038: stloc.0 - IL_0039: ldloc.0 - IL_003a: ret - - IL_003b: ldc.i4.0 - IL_003c: ret - } // end of method Key::GetHashCode - - .method public hidebysig virtual final - instance int32 GetHashCode() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 13 (0xd) - .maxstack 4 - .line 4,4 : 10,13 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() - IL_0007: call instance int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::GetHashCode(class [mscorlib]System.Collections.IEqualityComparer) - IL_000c: ret - } // end of method Key::GetHashCode - - .method public hidebysig virtual final - instance bool Equals(object obj, - class [mscorlib]System.Collections.IEqualityComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 64 (0x40) - .maxstack 4 - .locals init (class Compare05/CompareMicroPerfAndCodeGenerationTests/Key V_0, - class Compare05/CompareMicroPerfAndCodeGenerationTests/Key V_1, - class Compare05/CompareMicroPerfAndCodeGenerationTests/Key V_2) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_0038 - - IL_0007: ldarg.1 - IL_0008: isinst Compare05/CompareMicroPerfAndCodeGenerationTests/Key - IL_000d: stloc.0 - IL_000e: ldloc.0 - IL_000f: brfalse.s IL_0036 - - IL_0011: ldarg.0 - IL_0012: pop - IL_0013: ldarg.0 - IL_0014: stloc.1 - IL_0015: ldloc.0 - IL_0016: stloc.2 - IL_0017: ldloc.1 - IL_0018: ldfld int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::item1 - IL_001d: ldloc.2 - IL_001e: ldfld int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::item1 - IL_0023: bne.un.s IL_0034 - - IL_0025: ldloc.1 - IL_0026: ldfld int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::item2 - IL_002b: ldloc.2 - IL_002c: ldfld int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::item2 - IL_0031: ceq - IL_0033: ret - - IL_0034: ldc.i4.0 - IL_0035: ret - - IL_0036: ldc.i4.0 - IL_0037: ret - - IL_0038: ldarg.1 - IL_0039: ldnull - IL_003a: cgt.un - IL_003c: ldc.i4.0 - IL_003d: ceq - IL_003f: ret - } // end of method Key::Equals - - .method public hidebysig virtual final - instance bool Equals(class Compare05/CompareMicroPerfAndCodeGenerationTests/Key obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 60 (0x3c) - .maxstack 4 - .locals init (class Compare05/CompareMicroPerfAndCodeGenerationTests/Key V_0, - class Compare05/CompareMicroPerfAndCodeGenerationTests/Key V_1) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_0034 - - IL_0007: ldarg.1 - IL_0008: ldnull - IL_0009: cgt.un - IL_000b: brfalse.s IL_0032 - - IL_000d: ldarg.0 - IL_000e: pop - IL_000f: ldarg.0 - IL_0010: stloc.0 - IL_0011: ldarg.1 - IL_0012: stloc.1 - IL_0013: ldloc.0 - IL_0014: ldfld int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::item1 - IL_0019: ldloc.1 - IL_001a: ldfld int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::item1 - IL_001f: bne.un.s IL_0030 - - IL_0021: ldloc.0 - IL_0022: ldfld int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::item2 - IL_0027: ldloc.1 - IL_0028: ldfld int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::item2 - IL_002d: ceq - IL_002f: ret - - IL_0030: ldc.i4.0 - IL_0031: ret - - IL_0032: ldc.i4.0 - IL_0033: ret - - IL_0034: ldarg.1 - IL_0035: ldnull - IL_0036: cgt.un - IL_0038: ldc.i4.0 - IL_0039: ceq - IL_003b: ret - } // end of method Key::Equals - - .method public hidebysig virtual final - instance bool Equals(object obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 21 (0x15) - .maxstack 4 - .locals init (class Compare05/CompareMicroPerfAndCodeGenerationTests/Key V_0) - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: isinst Compare05/CompareMicroPerfAndCodeGenerationTests/Key - IL_0007: stloc.0 - IL_0008: ldloc.0 - IL_0009: brfalse.s IL_0013 - - IL_000b: ldarg.0 - IL_000c: ldloc.0 - IL_000d: call instance bool Compare05/CompareMicroPerfAndCodeGenerationTests/Key::Equals(class Compare05/CompareMicroPerfAndCodeGenerationTests/Key) - IL_0012: ret - - IL_0013: ldc.i4.0 - IL_0014: ret - } // end of method Key::Equals - - .property instance int32 Tag() - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .get instance int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::get_Tag() - } // end of property Key::Tag - .property instance int32 Item1() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32, - int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .get instance int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::get_Item1() - } // end of property Key::Item1 - .property instance int32 Item2() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32, - int32) = ( 01 00 04 00 00 00 00 00 00 00 01 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .get instance int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::get_Item2() - } // end of property Key::Item2 - } // end of class Key - - .method public static int32 f5() cil managed - { - // Code size 45 (0x2d) - .maxstack 4 - .locals init ([0] int32 x, - [1] class Compare05/CompareMicroPerfAndCodeGenerationTests/Key t1, - [2] class Compare05/CompareMicroPerfAndCodeGenerationTests/Key t2, - [3] int32 i) - .line 6,6 : 8,25 - IL_0000: nop - IL_0001: ldc.i4.1 - IL_0002: stloc.0 - .line 7,7 : 8,25 - IL_0003: ldc.i4.1 - IL_0004: ldc.i4.2 - IL_0005: call class Compare05/CompareMicroPerfAndCodeGenerationTests/Key Compare05/CompareMicroPerfAndCodeGenerationTests/Key::NewKey(int32, - int32) - IL_000a: stloc.1 - .line 8,8 : 8,25 - IL_000b: ldc.i4.1 - IL_000c: ldc.i4.3 - IL_000d: call class Compare05/CompareMicroPerfAndCodeGenerationTests/Key Compare05/CompareMicroPerfAndCodeGenerationTests/Key::NewKey(int32, - int32) - IL_0012: stloc.2 - .line 9,9 : 8,32 - IL_0013: ldc.i4.0 - IL_0014: stloc.3 - IL_0015: br.s IL_0023 - - .line 10,10 : 12,30 - IL_0017: ldloc.1 - IL_0018: ldloc.2 - IL_0019: call instance int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::CompareTo(class Compare05/CompareMicroPerfAndCodeGenerationTests/Key) - IL_001e: stloc.0 - IL_001f: ldloc.3 - IL_0020: ldc.i4.1 - IL_0021: add - IL_0022: stloc.3 - .line 9,9 : 21,29 - IL_0023: ldloc.3 - IL_0024: ldc.i4 0x989681 - IL_0029: blt.s IL_0017 - - .line 11,11 : 8,9 - IL_002b: ldloc.0 - IL_002c: ret - } // end of method CompareMicroPerfAndCodeGenerationTests::f5 - - } // end of class CompareMicroPerfAndCodeGenerationTests - -} // end of class Compare05 - -.class private abstract auto ansi sealed ''.$Compare05$fsx - extends [mscorlib]System.Object -{ -} // end of class ''.$Compare05$fsx - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare05.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare05.il.netfx4.bsl index eb67a265a4a..8f0ea608726 100644 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare05.il.netfx4.bsl +++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare05.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17376 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly Compare05 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Compare05 { - // Offset: 0x00000000 Length: 0x00000708 + // Offset: 0x00000000 Length: 0x000006EC } .mresource public FSharpOptimizationData.Compare05 { - // Offset: 0x00000710 Length: 0x000003BA + // Offset: 0x000006F0 Length: 0x000003BA } .module Compare05.dll -// MVID: {4F20E446-051C-F88E-A745-038346E4204F} +// MVID: {5772F643-051C-F88E-A745-038343F67257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00000036AB270000 +// Image base: 0x00DA0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -266,7 +266,7 @@ // Code size 14 (0xe) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 10,13 + .line 4,4 : 10,13 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Compare05.fsx' IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -288,7 +288,7 @@ [3] int32 V_3, [4] int32 V_4, [5] int32 V_5) - .line 4,4 : 10,13 + .line 4,4 : 10,13 '' IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any Compare05/CompareMicroPerfAndCodeGenerationTests/Key @@ -438,7 +438,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 4,4 : 10,13 + .line 4,4 : 10,13 '' IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -611,28 +611,28 @@ [1] class Compare05/CompareMicroPerfAndCodeGenerationTests/Key t1, [2] class Compare05/CompareMicroPerfAndCodeGenerationTests/Key t2, [3] int32 i) - .line 6,6 : 8,25 + .line 6,6 : 8,25 '' IL_0000: nop IL_0001: ldc.i4.1 IL_0002: stloc.0 - .line 7,7 : 8,25 + .line 7,7 : 8,25 '' IL_0003: ldc.i4.1 IL_0004: ldc.i4.2 IL_0005: call class Compare05/CompareMicroPerfAndCodeGenerationTests/Key Compare05/CompareMicroPerfAndCodeGenerationTests/Key::NewKey(int32, int32) IL_000a: stloc.1 - .line 8,8 : 8,25 + .line 8,8 : 8,25 '' IL_000b: ldc.i4.1 IL_000c: ldc.i4.3 IL_000d: call class Compare05/CompareMicroPerfAndCodeGenerationTests/Key Compare05/CompareMicroPerfAndCodeGenerationTests/Key::NewKey(int32, int32) IL_0012: stloc.2 - .line 9,9 : 8,32 + .line 9,9 : 8,32 '' IL_0013: ldc.i4.0 IL_0014: stloc.3 IL_0015: br.s IL_0023 - .line 10,10 : 12,30 + .line 10,10 : 12,30 '' IL_0017: ldloc.1 IL_0018: ldloc.2 IL_0019: callvirt instance int32 Compare05/CompareMicroPerfAndCodeGenerationTests/Key::CompareTo(class Compare05/CompareMicroPerfAndCodeGenerationTests/Key) @@ -641,12 +641,12 @@ IL_0020: ldc.i4.1 IL_0021: add IL_0022: stloc.3 - .line 9,9 : 21,29 + .line 9,9 : 8,32 '' IL_0023: ldloc.3 IL_0024: ldc.i4 0x989681 IL_0029: blt.s IL_0017 - .line 11,11 : 8,9 + .line 11,11 : 8,9 '' IL_002b: ldloc.0 IL_002c: ret } // end of method CompareMicroPerfAndCodeGenerationTests::f5 diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare06.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare06.il.bsl deleted file mode 100644 index 4ed78a461fe..00000000000 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare06.il.bsl +++ /dev/null @@ -1,557 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly Compare06 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.Compare06 -{ - // Offset: 0x00000000 Length: 0x000006EB -} -.mresource public FSharpOptimizationData.Compare06 -{ - // Offset: 0x000006F0 Length: 0x000003BC -} -.module Compare06.dll -// MVID: {4BEB29EC-04FD-F88E-A745-0383EC29EB4B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x02030000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed Compare06 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class abstract auto ansi sealed nested public CompareMicroPerfAndCodeGenerationTests - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto ansi serializable sealed nested public KeyR - extends [mscorlib]System.Object - implements class [mscorlib]System.IEquatable`1, - [mscorlib]System.Collections.IStructuralEquatable, - class [mscorlib]System.IComparable`1, - [mscorlib]System.IComparable, - [mscorlib]System.Collections.IStructuralComparable - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) - .field assembly int32 key1@ - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .field assembly int32 key2@ - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .method public specialname instance int32 - get_key1() cil managed - { - // Code size 7 (0x7) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldfld int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_0006: ret - } // end of method KeyR::get_key1 - - .method public specialname instance int32 - get_key2() cil managed - { - // Code size 7 (0x7) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldfld int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_0006: ret - } // end of method KeyR::get_key2 - - .method public specialname rtspecialname - instance void .ctor(int32 key1, - int32 key2) cil managed - { - // Code size 21 (0x15) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: call instance void [mscorlib]System.Object::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_000d: ldarg.0 - IL_000e: ldarg.2 - IL_000f: stfld int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_0014: ret - } // end of method KeyR::.ctor - - .method public hidebysig virtual final - instance int32 CompareTo(class Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 102 (0x66) - .maxstack 4 - .locals init (int32 V_0, - class [mscorlib]System.Collections.IComparer V_1, - int32 V_2, - int32 V_3) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_005c - - IL_0007: ldarg.1 - IL_0008: ldnull - IL_0009: cgt.un - IL_000b: brfalse.s IL_005a - - IL_000d: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0012: stloc.1 - IL_0013: ldarg.0 - IL_0014: ldfld int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_0019: stloc.2 - IL_001a: ldarg.1 - IL_001b: ldfld int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_0020: stloc.3 - IL_0021: ldloc.2 - IL_0022: ldloc.3 - IL_0023: bge.s IL_0029 - - IL_0025: ldc.i4.m1 - IL_0026: nop - IL_0027: br.s IL_002e - - IL_0029: ldloc.2 - IL_002a: ldloc.3 - IL_002b: cgt - IL_002d: nop - IL_002e: stloc.0 - IL_002f: ldloc.0 - IL_0030: ldc.i4.0 - IL_0031: bge.s IL_0035 - - IL_0033: ldloc.0 - IL_0034: ret - - IL_0035: ldloc.0 - IL_0036: ldc.i4.0 - IL_0037: ble.s IL_003b - - IL_0039: ldloc.0 - IL_003a: ret - - IL_003b: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0040: stloc.1 - IL_0041: ldarg.0 - IL_0042: ldfld int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_0047: stloc.2 - IL_0048: ldarg.1 - IL_0049: ldfld int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_004e: stloc.3 - IL_004f: ldloc.2 - IL_0050: ldloc.3 - IL_0051: bge.s IL_0055 - - IL_0053: ldc.i4.m1 - IL_0054: ret - - IL_0055: ldloc.2 - IL_0056: ldloc.3 - IL_0057: cgt - IL_0059: ret - - IL_005a: ldc.i4.1 - IL_005b: ret - - IL_005c: ldarg.1 - IL_005d: ldnull - IL_005e: cgt.un - IL_0060: brfalse.s IL_0064 - - IL_0062: ldc.i4.m1 - IL_0063: ret - - IL_0064: ldc.i4.0 - IL_0065: ret - } // end of method KeyR::CompareTo - - .method public hidebysig virtual final - instance int32 CompareTo(object obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 14 (0xe) - .maxstack 4 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 10,14 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldarg.1 - IL_0003: unbox.any Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR - IL_0008: call instance int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::CompareTo(class Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR) - IL_000d: ret - } // end of method KeyR::CompareTo - - .method public hidebysig virtual final - instance int32 CompareTo(object obj, - class [mscorlib]System.Collections.IComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 107 (0x6b) - .maxstack 4 - .locals init ([0] class Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR V_0, - [1] int32 V_1, - [2] int32 V_2, - [3] int32 V_3) - .line 4,4 : 10,14 - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: unbox.any Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR - IL_0007: stloc.0 - IL_0008: ldarg.0 - IL_0009: ldnull - IL_000a: cgt.un - IL_000c: brfalse.s IL_005c - - IL_000e: ldarg.1 - IL_000f: unbox.any Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR - IL_0014: ldnull - IL_0015: cgt.un - IL_0017: brfalse.s IL_005a - - IL_0019: ldarg.0 - IL_001a: ldfld int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_001f: stloc.2 - IL_0020: ldloc.0 - IL_0021: ldfld int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_0026: stloc.3 - IL_0027: ldloc.2 - IL_0028: ldloc.3 - IL_0029: bge.s IL_002f - - IL_002b: ldc.i4.m1 - IL_002c: nop - IL_002d: br.s IL_0034 - - IL_002f: ldloc.2 - IL_0030: ldloc.3 - IL_0031: cgt - IL_0033: nop - IL_0034: stloc.1 - IL_0035: ldloc.1 - IL_0036: ldc.i4.0 - IL_0037: bge.s IL_003b - - IL_0039: ldloc.1 - IL_003a: ret - - IL_003b: ldloc.1 - IL_003c: ldc.i4.0 - IL_003d: ble.s IL_0041 - - IL_003f: ldloc.1 - IL_0040: ret - - IL_0041: ldarg.0 - IL_0042: ldfld int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_0047: stloc.2 - IL_0048: ldloc.0 - IL_0049: ldfld int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_004e: stloc.3 - IL_004f: ldloc.2 - IL_0050: ldloc.3 - IL_0051: bge.s IL_0055 - - IL_0053: ldc.i4.m1 - IL_0054: ret - - IL_0055: ldloc.2 - IL_0056: ldloc.3 - IL_0057: cgt - IL_0059: ret - - IL_005a: ldc.i4.1 - IL_005b: ret - - IL_005c: ldarg.1 - IL_005d: unbox.any Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR - IL_0062: ldnull - IL_0063: cgt.un - IL_0065: brfalse.s IL_0069 - - IL_0067: ldc.i4.m1 - IL_0068: ret - - IL_0069: ldc.i4.0 - IL_006a: ret - } // end of method KeyR::CompareTo - - .method public hidebysig virtual final - instance int32 GetHashCode(class [mscorlib]System.Collections.IEqualityComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 55 (0x37) - .maxstack 7 - .locals init (int32 V_0) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_0035 - - IL_0007: ldc.i4.0 - IL_0008: stloc.0 - IL_0009: ldc.i4 0x9e3779b9 - IL_000e: ldarg.0 - IL_000f: ldfld int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_0014: ldloc.0 - IL_0015: ldc.i4.6 - IL_0016: shl - IL_0017: ldloc.0 - IL_0018: ldc.i4.2 - IL_0019: shr - IL_001a: add - IL_001b: add - IL_001c: add - IL_001d: stloc.0 - IL_001e: ldc.i4 0x9e3779b9 - IL_0023: ldarg.0 - IL_0024: ldfld int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_0029: ldloc.0 - IL_002a: ldc.i4.6 - IL_002b: shl - IL_002c: ldloc.0 - IL_002d: ldc.i4.2 - IL_002e: shr - IL_002f: add - IL_0030: add - IL_0031: add - IL_0032: stloc.0 - IL_0033: ldloc.0 - IL_0034: ret - - IL_0035: ldc.i4.0 - IL_0036: ret - } // end of method KeyR::GetHashCode - - .method public hidebysig virtual final - instance int32 GetHashCode() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 13 (0xd) - .maxstack 4 - .line 4,4 : 10,14 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() - IL_0007: call instance int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::GetHashCode(class [mscorlib]System.Collections.IEqualityComparer) - IL_000c: ret - } // end of method KeyR::GetHashCode - - .method public hidebysig virtual final - instance bool Equals(object obj, - class [mscorlib]System.Collections.IEqualityComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 58 (0x3a) - .maxstack 4 - .locals init (class Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR V_0) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_0032 - - IL_0007: ldarg.1 - IL_0008: isinst Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR - IL_000d: stloc.0 - IL_000e: ldloc.0 - IL_000f: brfalse.s IL_0030 - - IL_0011: ldarg.0 - IL_0012: ldfld int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_0017: ldloc.0 - IL_0018: ldfld int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_001d: bne.un.s IL_002e - - IL_001f: ldarg.0 - IL_0020: ldfld int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_0025: ldloc.0 - IL_0026: ldfld int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_002b: ceq - IL_002d: ret - - IL_002e: ldc.i4.0 - IL_002f: ret - - IL_0030: ldc.i4.0 - IL_0031: ret - - IL_0032: ldarg.1 - IL_0033: ldnull - IL_0034: cgt.un - IL_0036: ldc.i4.0 - IL_0037: ceq - IL_0039: ret - } // end of method KeyR::Equals - - .method public hidebysig virtual final - instance bool Equals(class Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 54 (0x36) - .maxstack 4 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_002e - - IL_0007: ldarg.1 - IL_0008: ldnull - IL_0009: cgt.un - IL_000b: brfalse.s IL_002c - - IL_000d: ldarg.0 - IL_000e: ldfld int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_0013: ldarg.1 - IL_0014: ldfld int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_0019: bne.un.s IL_002a - - IL_001b: ldarg.0 - IL_001c: ldfld int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_0021: ldarg.1 - IL_0022: ldfld int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_0027: ceq - IL_0029: ret - - IL_002a: ldc.i4.0 - IL_002b: ret - - IL_002c: ldc.i4.0 - IL_002d: ret - - IL_002e: ldarg.1 - IL_002f: ldnull - IL_0030: cgt.un - IL_0032: ldc.i4.0 - IL_0033: ceq - IL_0035: ret - } // end of method KeyR::Equals - - .method public hidebysig virtual final - instance bool Equals(object obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 21 (0x15) - .maxstack 4 - .locals init (class Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR V_0) - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: isinst Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR - IL_0007: stloc.0 - IL_0008: ldloc.0 - IL_0009: brfalse.s IL_0013 - - IL_000b: ldarg.0 - IL_000c: ldloc.0 - IL_000d: call instance bool Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::Equals(class Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR) - IL_0012: ret - - IL_0013: ldc.i4.0 - IL_0014: ret - } // end of method KeyR::Equals - - .property instance int32 key1() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) - .get instance int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::get_key1() - } // end of property KeyR::key1 - .property instance int32 key2() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) - .get instance int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::get_key2() - } // end of property KeyR::key2 - } // end of class KeyR - - .method public static void f5c() cil managed - { - // Code size 44 (0x2c) - .maxstack 4 - .locals init ([0] int32 x, - [1] class Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR t1, - [2] class Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR t2, - [3] int32 i) - .line 6,6 : 8,25 - IL_0000: nop - IL_0001: ldc.i4.1 - IL_0002: stloc.0 - .line 7,7 : 8,39 - IL_0003: ldc.i4.1 - IL_0004: ldc.i4.2 - IL_0005: newobj instance void Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::.ctor(int32, - int32) - IL_000a: stloc.1 - .line 8,8 : 8,39 - IL_000b: ldc.i4.1 - IL_000c: ldc.i4.3 - IL_000d: newobj instance void Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::.ctor(int32, - int32) - IL_0012: stloc.2 - .line 9,9 : 8,32 - IL_0013: ldc.i4.0 - IL_0014: stloc.3 - IL_0015: br.s IL_0023 - - .line 10,10 : 12,30 - IL_0017: ldloc.1 - IL_0018: ldloc.2 - IL_0019: call instance int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::CompareTo(class Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR) - IL_001e: stloc.0 - IL_001f: ldloc.3 - IL_0020: ldc.i4.1 - IL_0021: add - IL_0022: stloc.3 - .line 9,9 : 21,29 - IL_0023: ldloc.3 - IL_0024: ldc.i4 0x989681 - IL_0029: blt.s IL_0017 - - IL_002b: ret - } // end of method CompareMicroPerfAndCodeGenerationTests::f5c - - } // end of class CompareMicroPerfAndCodeGenerationTests - -} // end of class Compare06 - -.class private abstract auto ansi sealed ''.$Compare06$fsx - extends [mscorlib]System.Object -{ -} // end of class ''.$Compare06$fsx - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare06.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare06.il.netfx4.bsl index acbba6855d1..17550345691 100644 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare06.il.netfx4.bsl +++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare06.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17376 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly Compare06 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Compare06 { - // Offset: 0x00000000 Length: 0x000006FB + // Offset: 0x00000000 Length: 0x000006DF } .mresource public FSharpOptimizationData.Compare06 { - // Offset: 0x00000700 Length: 0x000003BC + // Offset: 0x000006E8 Length: 0x000003BC } .module Compare06.dll -// MVID: {4F20E44A-04FD-F88E-A745-03834AE4204F} +// MVID: {5772F646-04FD-F88E-A745-038346F67257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x000000D37CAE0000 +// Image base: 0x01420000 // =============== CLASS MEMBERS DECLARATION =================== @@ -203,7 +203,7 @@ // Code size 14 (0xe) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 10,14 + .line 4,4 : 10,14 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Compare06.fsx' IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -223,7 +223,7 @@ [1] int32 V_1, [2] int32 V_2, [3] int32 V_3) - .line 4,4 : 10,14 + .line 4,4 : 10,14 '' IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR @@ -360,7 +360,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 4,4 : 10,14 + .line 4,4 : 10,14 '' IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -504,28 +504,28 @@ [1] class Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR t1, [2] class Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR t2, [3] int32 i) - .line 6,6 : 8,25 + .line 6,6 : 8,25 '' IL_0000: nop IL_0001: ldc.i4.1 IL_0002: stloc.0 - .line 7,7 : 8,39 + .line 7,7 : 8,39 '' IL_0003: ldc.i4.1 IL_0004: ldc.i4.2 IL_0005: newobj instance void Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::.ctor(int32, int32) IL_000a: stloc.1 - .line 8,8 : 8,39 + .line 8,8 : 8,39 '' IL_000b: ldc.i4.1 IL_000c: ldc.i4.3 IL_000d: newobj instance void Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::.ctor(int32, int32) IL_0012: stloc.2 - .line 9,9 : 8,32 + .line 9,9 : 8,32 '' IL_0013: ldc.i4.0 IL_0014: stloc.3 IL_0015: br.s IL_0023 - .line 10,10 : 12,30 + .line 10,10 : 12,30 '' IL_0017: ldloc.1 IL_0018: ldloc.2 IL_0019: callvirt instance int32 Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR::CompareTo(class Compare06/CompareMicroPerfAndCodeGenerationTests/KeyR) @@ -534,7 +534,7 @@ IL_0020: ldc.i4.1 IL_0021: add IL_0022: stloc.3 - .line 9,9 : 21,29 + .line 9,9 : 8,32 '' IL_0023: ldloc.3 IL_0024: ldc.i4 0x989681 IL_0029: blt.s IL_0017 diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare07.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare07.il.bsl deleted file mode 100644 index 095a8ea8996..00000000000 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare07.il.bsl +++ /dev/null @@ -1,690 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly Compare07 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.Compare07 -{ - // Offset: 0x00000000 Length: 0x000008A6 -} -.mresource public FSharpOptimizationData.Compare07 -{ - // Offset: 0x000008B0 Length: 0x0000069C -} -.module Compare07.dll -// MVID: {4BEB29EF-05DE-F88E-A745-0383EF29EB4B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x006A0000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed Compare07 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class abstract auto ansi sealed nested public CompareMicroPerfAndCodeGenerationTests - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto autochar serializable sealed nested public beforefieldinit GenericKey`1 - extends [mscorlib]System.Object - implements class [mscorlib]System.IEquatable`1>, - [mscorlib]System.Collections.IStructuralEquatable, - class [mscorlib]System.IComparable`1>, - [mscorlib]System.IComparable, - [mscorlib]System.Collections.IStructuralComparable - { - .custom instance void [mscorlib]System.Diagnostics.DebuggerDisplayAttribute::.ctor(string) = ( 01 00 15 7B 5F 5F 44 65 62 75 67 44 69 73 70 6C // ...{__DebugDispl - 61 79 28 29 2C 6E 71 7D 00 00 ) // ay(),nq}.. - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 01 00 00 00 00 00 ) - .field assembly initonly !a item1 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .field assembly initonly !a item2 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method public static class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 - NewGenericKey(!a item1, - !a item2) cil managed - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32) = ( 01 00 08 00 00 00 00 00 00 00 00 00 ) - // Code size 8 (0x8) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldarg.1 - IL_0002: newobj instance void class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::.ctor(!0, - !0) - IL_0007: ret - } // end of method GenericKey`1::NewGenericKey - - .method assembly specialname rtspecialname - instance void .ctor(!a item1, - !a item2) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 21 (0x15) - .maxstack 2 - IL_0000: ldarg.0 - IL_0001: call instance void [mscorlib]System.Object::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld !0 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_000d: ldarg.0 - IL_000e: ldarg.2 - IL_000f: stfld !0 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_0014: ret - } // end of method GenericKey`1::.ctor - - .method public instance !a get_Item1() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 7 (0x7) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldfld !0 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_0006: ret - } // end of method GenericKey`1::get_Item1 - - .method public instance !a get_Item2() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 7 (0x7) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldfld !0 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_0006: ret - } // end of method GenericKey`1::get_Item2 - - .method public instance int32 get_Tag() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 4 (0x4) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: pop - IL_0002: ldc.i4.0 - IL_0003: ret - } // end of method GenericKey`1::get_Tag - - .method assembly specialname instance object - __DebugDisplay() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 22 (0x16) - .maxstack 4 - IL_0000: ldstr "%+0.8A" - IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,string>::.ctor(string) - IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_000f: ldarg.0 - IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,string>::Invoke(!0) - IL_0015: ret - } // end of method GenericKey`1::__DebugDisplay - - .method public hidebysig virtual final - instance int32 CompareTo(class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 111 (0x6f) - .maxstack 5 - .locals init (class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 V_0, - class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 V_1, - int32 V_2, - class [mscorlib]System.Collections.IComparer V_3, - !a V_4, - !a V_5) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_0065 - - IL_0007: ldarg.1 - IL_0008: ldnull - IL_0009: cgt.un - IL_000b: brfalse.s IL_0063 - - IL_000d: ldarg.0 - IL_000e: pop - IL_000f: ldarg.0 - IL_0010: stloc.0 - IL_0011: ldarg.1 - IL_0012: stloc.1 - IL_0013: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0018: stloc.3 - IL_0019: ldloc.0 - IL_001a: ldfld !0 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_001f: stloc.s V_4 - IL_0021: ldloc.1 - IL_0022: ldfld !0 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_0027: stloc.s V_5 - IL_0029: ldloc.3 - IL_002a: ldloc.s V_4 - IL_002c: ldloc.s V_5 - IL_002e: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericComparisonWithComparerIntrinsic(class [mscorlib]System.Collections.IComparer, - !!0, - !!0) - IL_0033: stloc.2 - IL_0034: ldloc.2 - IL_0035: ldc.i4.0 - IL_0036: bge.s IL_003a - - IL_0038: ldloc.2 - IL_0039: ret - - IL_003a: ldloc.2 - IL_003b: ldc.i4.0 - IL_003c: ble.s IL_0040 - - IL_003e: ldloc.2 - IL_003f: ret - - IL_0040: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0045: stloc.3 - IL_0046: ldloc.0 - IL_0047: ldfld !0 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_004c: stloc.s V_4 - IL_004e: ldloc.1 - IL_004f: ldfld !0 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_0054: stloc.s V_5 - IL_0056: ldloc.3 - IL_0057: ldloc.s V_4 - IL_0059: ldloc.s V_5 - IL_005b: tail. - IL_005d: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericComparisonWithComparerIntrinsic(class [mscorlib]System.Collections.IComparer, - !!0, - !!0) - IL_0062: ret - - IL_0063: ldc.i4.1 - IL_0064: ret - - IL_0065: ldarg.1 - IL_0066: ldnull - IL_0067: cgt.un - IL_0069: brfalse.s IL_006d - - IL_006b: ldc.i4.m1 - IL_006c: ret - - IL_006d: ldc.i4.0 - IL_006e: ret - } // end of method GenericKey`1::CompareTo - - .method public hidebysig virtual final - instance int32 CompareTo(object obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 16 (0x10) - .maxstack 4 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 10,20 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldarg.1 - IL_0003: unbox.any class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 - IL_0008: tail. - IL_000a: call instance int32 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::CompareTo(class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1) - IL_000f: ret - } // end of method GenericKey`1::CompareTo - - .method public hidebysig virtual final - instance int32 CompareTo(object obj, - class [mscorlib]System.Collections.IComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 116 (0x74) - .maxstack 5 - .locals init ([0] class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 V_0, - [1] class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 V_1, - [2] class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 V_2, - [3] int32 V_3, - [4] !a V_4, - [5] !a V_5) - .line 4,4 : 10,20 - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: unbox.any class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 - IL_0007: stloc.0 - IL_0008: ldarg.0 - IL_0009: ldnull - IL_000a: cgt.un - IL_000c: brfalse.s IL_0065 - - IL_000e: ldarg.1 - IL_000f: unbox.any class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 - IL_0014: ldnull - IL_0015: cgt.un - IL_0017: brfalse.s IL_0063 - - IL_0019: ldarg.0 - IL_001a: pop - IL_001b: ldarg.0 - IL_001c: stloc.1 - IL_001d: ldloc.0 - IL_001e: stloc.2 - IL_001f: ldloc.1 - IL_0020: ldfld !0 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_0025: stloc.s V_4 - IL_0027: ldloc.2 - IL_0028: ldfld !0 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_002d: stloc.s V_5 - IL_002f: ldarg.2 - IL_0030: ldloc.s V_4 - IL_0032: ldloc.s V_5 - IL_0034: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericComparisonWithComparerIntrinsic(class [mscorlib]System.Collections.IComparer, - !!0, - !!0) - IL_0039: stloc.3 - IL_003a: ldloc.3 - IL_003b: ldc.i4.0 - IL_003c: bge.s IL_0040 - - IL_003e: ldloc.3 - IL_003f: ret - - IL_0040: ldloc.3 - IL_0041: ldc.i4.0 - IL_0042: ble.s IL_0046 - - IL_0044: ldloc.3 - IL_0045: ret - - IL_0046: ldloc.1 - IL_0047: ldfld !0 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_004c: stloc.s V_4 - IL_004e: ldloc.2 - IL_004f: ldfld !0 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_0054: stloc.s V_5 - IL_0056: ldarg.2 - IL_0057: ldloc.s V_4 - IL_0059: ldloc.s V_5 - IL_005b: tail. - IL_005d: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericComparisonWithComparerIntrinsic(class [mscorlib]System.Collections.IComparer, - !!0, - !!0) - IL_0062: ret - - IL_0063: ldc.i4.1 - IL_0064: ret - - IL_0065: ldarg.1 - IL_0066: unbox.any class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 - IL_006b: ldnull - IL_006c: cgt.un - IL_006e: brfalse.s IL_0072 - - IL_0070: ldc.i4.m1 - IL_0071: ret - - IL_0072: ldc.i4.0 - IL_0073: ret - } // end of method GenericKey`1::CompareTo - - .method public hidebysig virtual final - instance int32 GetHashCode(class [mscorlib]System.Collections.IEqualityComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 77 (0x4d) - .maxstack 7 - .locals init (int32 V_0, - class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 V_1, - !a V_2) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_004b - - IL_0007: ldc.i4.0 - IL_0008: stloc.0 - IL_0009: ldarg.0 - IL_000a: pop - IL_000b: ldarg.0 - IL_000c: stloc.1 - IL_000d: ldc.i4.0 - IL_000e: stloc.0 - IL_000f: ldc.i4 0x9e3779b9 - IL_0014: ldloc.1 - IL_0015: ldfld !0 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_001a: stloc.2 - IL_001b: ldarg.1 - IL_001c: ldloc.2 - IL_001d: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericHashWithComparerIntrinsic(class [mscorlib]System.Collections.IEqualityComparer, - !!0) - IL_0022: ldloc.0 - IL_0023: ldc.i4.6 - IL_0024: shl - IL_0025: ldloc.0 - IL_0026: ldc.i4.2 - IL_0027: shr - IL_0028: add - IL_0029: add - IL_002a: add - IL_002b: stloc.0 - IL_002c: ldc.i4 0x9e3779b9 - IL_0031: ldloc.1 - IL_0032: ldfld !0 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_0037: stloc.2 - IL_0038: ldarg.1 - IL_0039: ldloc.2 - IL_003a: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericHashWithComparerIntrinsic(class [mscorlib]System.Collections.IEqualityComparer, - !!0) - IL_003f: ldloc.0 - IL_0040: ldc.i4.6 - IL_0041: shl - IL_0042: ldloc.0 - IL_0043: ldc.i4.2 - IL_0044: shr - IL_0045: add - IL_0046: add - IL_0047: add - IL_0048: stloc.0 - IL_0049: ldloc.0 - IL_004a: ret - - IL_004b: ldc.i4.0 - IL_004c: ret - } // end of method GenericKey`1::GetHashCode - - .method public hidebysig virtual final - instance int32 GetHashCode() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 13 (0xd) - .maxstack 4 - .line 4,4 : 10,20 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() - IL_0007: call instance int32 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::GetHashCode(class [mscorlib]System.Collections.IEqualityComparer) - IL_000c: ret - } // end of method GenericKey`1::GetHashCode - - .method public hidebysig virtual final - instance bool Equals(object obj, - class [mscorlib]System.Collections.IEqualityComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 88 (0x58) - .maxstack 5 - .locals init (class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 V_0, - class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 V_1, - class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 V_2, - !a V_3, - !a V_4) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_0050 - - IL_0007: ldarg.1 - IL_0008: isinst class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 - IL_000d: stloc.0 - IL_000e: ldloc.0 - IL_000f: brfalse.s IL_004e - - IL_0011: ldarg.0 - IL_0012: pop - IL_0013: ldarg.0 - IL_0014: stloc.1 - IL_0015: ldloc.0 - IL_0016: stloc.2 - IL_0017: ldloc.1 - IL_0018: ldfld !0 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_001d: stloc.3 - IL_001e: ldloc.2 - IL_001f: ldfld !0 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_0024: stloc.s V_4 - IL_0026: ldarg.2 - IL_0027: ldloc.3 - IL_0028: ldloc.s V_4 - IL_002a: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericEqualityWithComparerIntrinsic(class [mscorlib]System.Collections.IEqualityComparer, - !!0, - !!0) - IL_002f: brfalse.s IL_004c - - IL_0031: ldloc.1 - IL_0032: ldfld !0 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_0037: stloc.3 - IL_0038: ldloc.2 - IL_0039: ldfld !0 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_003e: stloc.s V_4 - IL_0040: ldarg.2 - IL_0041: ldloc.3 - IL_0042: ldloc.s V_4 - IL_0044: tail. - IL_0046: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericEqualityWithComparerIntrinsic(class [mscorlib]System.Collections.IEqualityComparer, - !!0, - !!0) - IL_004b: ret - - IL_004c: ldc.i4.0 - IL_004d: ret - - IL_004e: ldc.i4.0 - IL_004f: ret - - IL_0050: ldarg.1 - IL_0051: ldnull - IL_0052: cgt.un - IL_0054: ldc.i4.0 - IL_0055: ceq - IL_0057: ret - } // end of method GenericKey`1::Equals - - .method public hidebysig virtual final - instance bool Equals(class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 78 (0x4e) - .maxstack 4 - .locals init (class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 V_0, - class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 V_1, - !a V_2, - !a V_3) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_0046 - - IL_0007: ldarg.1 - IL_0008: ldnull - IL_0009: cgt.un - IL_000b: brfalse.s IL_0044 - - IL_000d: ldarg.0 - IL_000e: pop - IL_000f: ldarg.0 - IL_0010: stloc.0 - IL_0011: ldarg.1 - IL_0012: stloc.1 - IL_0013: ldloc.0 - IL_0014: ldfld !0 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_0019: stloc.2 - IL_001a: ldloc.1 - IL_001b: ldfld !0 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_0020: stloc.3 - IL_0021: ldloc.2 - IL_0022: ldloc.3 - IL_0023: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericEqualityERIntrinsic(!!0, - !!0) - IL_0028: brfalse.s IL_0042 - - IL_002a: ldloc.0 - IL_002b: ldfld !0 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_0030: stloc.2 - IL_0031: ldloc.1 - IL_0032: ldfld !0 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_0037: stloc.3 - IL_0038: ldloc.2 - IL_0039: ldloc.3 - IL_003a: tail. - IL_003c: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericEqualityERIntrinsic(!!0, - !!0) - IL_0041: ret - - IL_0042: ldc.i4.0 - IL_0043: ret - - IL_0044: ldc.i4.0 - IL_0045: ret - - IL_0046: ldarg.1 - IL_0047: ldnull - IL_0048: cgt.un - IL_004a: ldc.i4.0 - IL_004b: ceq - IL_004d: ret - } // end of method GenericKey`1::Equals - - .method public hidebysig virtual final - instance bool Equals(object obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 23 (0x17) - .maxstack 4 - .locals init (class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 V_0) - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: isinst class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 - IL_0007: stloc.0 - IL_0008: ldloc.0 - IL_0009: brfalse.s IL_0015 - - IL_000b: ldarg.0 - IL_000c: ldloc.0 - IL_000d: tail. - IL_000f: call instance bool class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::Equals(class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1) - IL_0014: ret - - IL_0015: ldc.i4.0 - IL_0016: ret - } // end of method GenericKey`1::Equals - - .property instance int32 Tag() - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .get instance int32 Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::get_Tag() - } // end of property GenericKey`1::Tag - .property instance !a Item1() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32, - int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .get instance !a Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::get_Item1() - } // end of property GenericKey`1::Item1 - .property instance !a Item2() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32, - int32) = ( 01 00 04 00 00 00 00 00 00 00 01 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .get instance !a Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::get_Item2() - } // end of property GenericKey`1::Item2 - } // end of class GenericKey`1 - - .method public static int32 f6() cil managed - { - // Code size 45 (0x2d) - .maxstack 4 - .locals init ([0] int32 x, - [1] class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 t1, - [2] class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 t2, - [3] int32 i) - .line 6,6 : 8,25 - IL_0000: nop - IL_0001: ldc.i4.1 - IL_0002: stloc.0 - .line 7,7 : 8,32 - IL_0003: ldc.i4.1 - IL_0004: ldc.i4.2 - IL_0005: call class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::NewGenericKey(!0, - !0) - IL_000a: stloc.1 - .line 8,8 : 8,32 - IL_000b: ldc.i4.1 - IL_000c: ldc.i4.3 - IL_000d: call class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::NewGenericKey(!0, - !0) - IL_0012: stloc.2 - .line 9,9 : 8,32 - IL_0013: ldc.i4.0 - IL_0014: stloc.3 - IL_0015: br.s IL_0023 - - .line 10,10 : 12,30 - IL_0017: ldloc.1 - IL_0018: ldloc.2 - IL_0019: call instance int32 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::CompareTo(class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1) - IL_001e: stloc.0 - IL_001f: ldloc.3 - IL_0020: ldc.i4.1 - IL_0021: add - IL_0022: stloc.3 - .line 9,9 : 21,29 - IL_0023: ldloc.3 - IL_0024: ldc.i4 0x989681 - IL_0029: blt.s IL_0017 - - .line 11,11 : 8,9 - IL_002b: ldloc.0 - IL_002c: ret - } // end of method CompareMicroPerfAndCodeGenerationTests::f6 - - } // end of class CompareMicroPerfAndCodeGenerationTests - -} // end of class Compare07 - -.class private abstract auto ansi sealed ''.$Compare07$fsx - extends [mscorlib]System.Object -{ -} // end of class ''.$Compare07$fsx - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare07.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare07.il.netfx4.bsl index 923cb3503e2..05cbe2692ca 100644 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare07.il.netfx4.bsl +++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare07.il.netfx4.bsl @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Compare07 { - // Offset: 0x00000000 Length: 0x000008A2 + // Offset: 0x00000000 Length: 0x0000089A } .mresource public FSharpOptimizationData.Compare07 { - // Offset: 0x000008A8 Length: 0x00000698 + // Offset: 0x000008A0 Length: 0x00000692 } .module Compare07.dll -// MVID: {56DD235D-05DE-F88E-A745-03835D23DD56} +// MVID: {5772F649-05DE-F88E-A745-038349F67257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00D80000 +// Image base: 0x027F0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -257,7 +257,7 @@ // Code size 16 (0x10) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 10,20 'E:\\Documents\\GitHub\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Compare07.fsx' + .line 4,4 : 10,20 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Compare07.fsx' IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -280,7 +280,7 @@ [3] int32 V_3, [4] !a V_4, [5] !a V_5) - .line 4,4 : 10,20 '' + .line 4,4 : 10,20 IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 @@ -432,7 +432,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 4,4 : 10,20 '' + .line 4,4 : 10,20 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -638,28 +638,28 @@ [1] class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 t1, [2] class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 t2, [3] int32 i) - .line 6,6 : 8,25 '' + .line 6,6 : 8,25 IL_0000: nop IL_0001: ldc.i4.1 IL_0002: stloc.0 - .line 7,7 : 8,32 '' + .line 7,7 : 8,32 IL_0003: ldc.i4.1 IL_0004: ldc.i4.2 IL_0005: call class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::NewGenericKey(!0, !0) IL_000a: stloc.1 - .line 8,8 : 8,32 '' + .line 8,8 : 8,32 IL_000b: ldc.i4.1 IL_000c: ldc.i4.3 IL_000d: call class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::NewGenericKey(!0, !0) IL_0012: stloc.2 - .line 9,9 : 8,32 '' + .line 9,9 : 8,32 IL_0013: ldc.i4.0 IL_0014: stloc.3 IL_0015: br.s IL_0023 - .line 10,10 : 12,30 '' + .line 10,10 : 12,30 IL_0017: ldloc.1 IL_0018: ldloc.2 IL_0019: callvirt instance int32 class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1::CompareTo(class Compare07/CompareMicroPerfAndCodeGenerationTests/GenericKey`1) @@ -668,12 +668,12 @@ IL_0020: ldc.i4.1 IL_0021: add IL_0022: stloc.3 - .line 9,9 : 21,29 '' + .line 9,9 : 8,32 '' IL_0023: ldloc.3 IL_0024: ldc.i4 0x989681 IL_0029: blt.s IL_0017 - .line 11,11 : 8,9 '' + .line 11,11 : 8,9 IL_002b: ldloc.0 IL_002c: ret } // end of method CompareMicroPerfAndCodeGenerationTests::f6 diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare08.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare08.il.bsl index 8334c4d2c7b..64620f7639d 100644 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare08.il.bsl +++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare08.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16774 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly Compare08 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Compare08 { - // Offset: 0x00000000 Length: 0x00000254 + // Offset: 0x00000000 Length: 0x00000230 } .mresource public FSharpOptimizationData.Compare08 { - // Offset: 0x00000258 Length: 0x000000B2 + // Offset: 0x00000238 Length: 0x000000B2 } .module Compare08.dll -// MVID: {4DAC3A23-03E7-F88E-A745-0383233AAC4D} +// MVID: {5772F62F-03E7-F88E-A745-03832FF67257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00000000003F0000 +// Image base: 0x02D70000 // =============== CLASS MEMBERS DECLARATION =================== @@ -64,11 +64,11 @@ [2] uint8[] t2, [3] int32 i) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 8,25 + .line 5,5 : 8,25 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Compare08.fsx' IL_0000: nop IL_0001: ldc.i4.1 IL_0002: stloc.0 - .line 6,6 : 8,35 + .line 6,6 : 8,35 '' IL_0003: ldc.i4.0 IL_0004: ldc.i4.1 IL_0005: ldc.i4.s 100 @@ -78,7 +78,7 @@ IL_000c: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::CreateSequence(class [mscorlib]System.Collections.Generic.IEnumerable`1) IL_0011: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray(class [mscorlib]System.Collections.Generic.IEnumerable`1) IL_0016: stloc.1 - .line 7,7 : 8,35 + .line 7,7 : 8,35 '' IL_0017: ldc.i4.0 IL_0018: ldc.i4.1 IL_0019: ldc.i4.s 100 @@ -88,12 +88,12 @@ IL_0020: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::CreateSequence(class [mscorlib]System.Collections.Generic.IEnumerable`1) IL_0025: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray(class [mscorlib]System.Collections.Generic.IEnumerable`1) IL_002a: stloc.2 - .line 8,8 : 8,32 + .line 8,8 : 8,32 '' IL_002b: ldc.i4.0 IL_002c: stloc.3 IL_002d: br.s IL_003b - .line 9,9 : 12,30 + .line 9,9 : 12,30 '' IL_002f: ldloc.1 IL_0030: ldloc.2 IL_0031: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericComparisonIntrinsic(!!0, @@ -103,12 +103,12 @@ IL_0038: ldc.i4.1 IL_0039: add IL_003a: stloc.3 - .line 8,8 : 21,29 + .line 8,8 : 8,32 '' IL_003b: ldloc.3 IL_003c: ldc.i4 0x989681 IL_0041: blt.s IL_002f - .line 10,10 : 8,9 + .line 10,10 : 8,9 '' IL_0043: ldloc.0 IL_0044: ret } // end of method CompareMicroPerfAndCodeGenerationTests::f7 diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare09.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare09.il.bsl index a639180cd43..4ce651b963b 100644 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare09.il.bsl +++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare09.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16774 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly Compare09 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Compare09 { - // Offset: 0x00000000 Length: 0x00000254 + // Offset: 0x00000000 Length: 0x00000230 } .mresource public FSharpOptimizationData.Compare09 { - // Offset: 0x00000258 Length: 0x000000B2 + // Offset: 0x00000238 Length: 0x000000B2 } .module Compare09.dll -// MVID: {4DAC3A25-03C8-F88E-A745-0383253AAC4D} +// MVID: {5772F631-03C8-F88E-A745-038331F67257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00000000003E0000 +// Image base: 0x00F90000 // =============== CLASS MEMBERS DECLARATION =================== @@ -64,11 +64,11 @@ [2] int32[] t2, [3] int32 i) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 8,25 + .line 5,5 : 8,25 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Compare09.fsx' IL_0000: nop IL_0001: ldc.i4.1 IL_0002: stloc.0 - .line 6,6 : 8,31 + .line 6,6 : 8,31 '' IL_0003: ldc.i4.0 IL_0004: ldc.i4.1 IL_0005: ldc.i4.s 100 @@ -78,7 +78,7 @@ IL_000c: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::CreateSequence(class [mscorlib]System.Collections.Generic.IEnumerable`1) IL_0011: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray(class [mscorlib]System.Collections.Generic.IEnumerable`1) IL_0016: stloc.1 - .line 7,7 : 8,31 + .line 7,7 : 8,31 '' IL_0017: ldc.i4.0 IL_0018: ldc.i4.1 IL_0019: ldc.i4.s 100 @@ -88,12 +88,12 @@ IL_0020: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::CreateSequence(class [mscorlib]System.Collections.Generic.IEnumerable`1) IL_0025: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray(class [mscorlib]System.Collections.Generic.IEnumerable`1) IL_002a: stloc.2 - .line 8,8 : 8,30 + .line 8,8 : 8,30 '' IL_002b: ldc.i4.0 IL_002c: stloc.3 IL_002d: br.s IL_003b - .line 9,9 : 12,30 + .line 9,9 : 12,30 '' IL_002f: ldloc.1 IL_0030: ldloc.2 IL_0031: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericComparisonIntrinsic(!!0, @@ -103,12 +103,12 @@ IL_0038: ldc.i4.1 IL_0039: add IL_003a: stloc.3 - .line 8,8 : 21,27 + .line 8,8 : 8,30 '' IL_003b: ldloc.3 IL_003c: ldc.i4 0x186a1 IL_0041: blt.s IL_002f - .line 10,10 : 8,9 + .line 10,10 : 8,9 '' IL_0043: ldloc.0 IL_0044: ret } // end of method CompareMicroPerfAndCodeGenerationTests::f8 diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare10.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare10.il.bsl deleted file mode 100644 index 76a7b7f33f6..00000000000 Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare10.il.bsl and /dev/null differ diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare10.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare10.il.netfx4.bsl index cf81ba0386e..d48be040d65 100644 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare10.il.netfx4.bsl +++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare10.il.netfx4.bsl @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Compare10 { - // Offset: 0x00000000 Length: 0x00000AAC + // Offset: 0x00000000 Length: 0x00000AA4 } .mresource public FSharpOptimizationData.Compare10 { - // Offset: 0x00000AB0 Length: 0x00000592 + // Offset: 0x00000AA8 Length: 0x0000058E } .module Compare10.dll -// MVID: {56DD2366-04BF-1753-A745-03836623DD56} +// MVID: {5772F64C-04BF-1753-A745-03834CF67257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00E00000 +// Image base: 0x02030000 // =============== CLASS MEMBERS DECLARATION =================== @@ -266,7 +266,7 @@ // Code size 14 (0xe) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 10,13 'E:\\Documents\\GitHub\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Compare10.fsx' + .line 4,4 : 10,13 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Compare10.fsx' IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -288,7 +288,7 @@ [3] int32 V_3, [4] int32 V_4, [5] int32 V_5) - .line 4,4 : 10,13 '' + .line 4,4 : 10,13 IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any Compare10/CompareMicroPerfAndCodeGenerationTests/Key @@ -438,7 +438,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 4,4 : 10,13 '' + .line 4,4 : 10,13 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -830,7 +830,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 - .line 5,5 : 10,26 '' + .line 5,5 : 10,26 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -857,7 +857,7 @@ [8] class Compare10/CompareMicroPerfAndCodeGenerationTests/Key V_8, [9] class Compare10/CompareMicroPerfAndCodeGenerationTests/Key V_9, [10] int32 V_10) - .line 5,5 : 10,26 '' + .line 5,5 : 10,26 IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any Compare10/CompareMicroPerfAndCodeGenerationTests/KeyWithInnerKeys @@ -1045,7 +1045,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 5,5 : 10,26 '' + .line 5,5 : 10,26 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -1265,11 +1265,11 @@ [1] class Compare10/CompareMicroPerfAndCodeGenerationTests/KeyWithInnerKeys key1, [2] class Compare10/CompareMicroPerfAndCodeGenerationTests/KeyWithInnerKeys key2, [3] int32 i) - .line 7,7 : 8,25 '' + .line 7,7 : 8,25 IL_0000: nop IL_0001: ldc.i4.1 IL_0002: stloc.0 - .line 8,8 : 8,65 '' + .line 8,8 : 8,65 IL_0003: ldc.i4.1 IL_0004: ldc.i4.2 IL_0005: call class Compare10/CompareMicroPerfAndCodeGenerationTests/Key Compare10/CompareMicroPerfAndCodeGenerationTests/Key::NewKey(int32, @@ -1287,7 +1287,7 @@ IL_001d: call class Compare10/CompareMicroPerfAndCodeGenerationTests/KeyWithInnerKeys Compare10/CompareMicroPerfAndCodeGenerationTests/KeyWithInnerKeys::NewKeyWithInnerKeys(class Compare10/CompareMicroPerfAndCodeGenerationTests/Key, class [mscorlib]System.Tuple`2) IL_0022: stloc.1 - .line 9,9 : 8,65 '' + .line 9,9 : 8,65 IL_0023: ldc.i4.1 IL_0024: ldc.i4.2 IL_0025: call class Compare10/CompareMicroPerfAndCodeGenerationTests/Key Compare10/CompareMicroPerfAndCodeGenerationTests/Key::NewKey(int32, @@ -1305,12 +1305,12 @@ IL_003d: call class Compare10/CompareMicroPerfAndCodeGenerationTests/KeyWithInnerKeys Compare10/CompareMicroPerfAndCodeGenerationTests/KeyWithInnerKeys::NewKeyWithInnerKeys(class Compare10/CompareMicroPerfAndCodeGenerationTests/Key, class [mscorlib]System.Tuple`2) IL_0042: stloc.2 - .line 10,10 : 8,32 '' + .line 10,10 : 8,32 IL_0043: ldc.i4.0 IL_0044: stloc.3 IL_0045: br.s IL_0053 - .line 11,11 : 12,34 '' + .line 11,11 : 12,34 IL_0047: ldloc.1 IL_0048: ldloc.2 IL_0049: callvirt instance int32 Compare10/CompareMicroPerfAndCodeGenerationTests/KeyWithInnerKeys::CompareTo(class Compare10/CompareMicroPerfAndCodeGenerationTests/KeyWithInnerKeys) @@ -1319,7 +1319,7 @@ IL_0050: ldc.i4.1 IL_0051: add IL_0052: stloc.3 - .line 10,10 : 21,29 '' + .line 10,10 : 8,32 '' IL_0053: ldloc.3 IL_0054: ldc.i4 0x989681 IL_0059: blt.s IL_0047 diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare11.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare11.il.bsl deleted file mode 100644 index c6a33d0841f..00000000000 Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare11.il.bsl and /dev/null differ diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare11.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare11.il.netfx4.bsl index 57308f65fca..297b91af515 100644 Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare11.il.netfx4.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare11.il.netfx4.bsl differ diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals01.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals01.il.bsl deleted file mode 100644 index acbd34b86fd..00000000000 Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals01.il.bsl and /dev/null differ diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals01.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals01.il.netfx4.bsl index 628dd237728..a0f33bcb934 100644 Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals01.il.netfx4.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals01.il.netfx4.bsl differ diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals02.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals02.il.bsl deleted file mode 100644 index 1a2fc51674b..00000000000 Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals02.il.bsl and /dev/null differ diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals02.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals02.il.netfx4.bsl index e09b26f4b44..376836aa30c 100644 Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals02.il.netfx4.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals02.il.netfx4.bsl differ diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals03.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals03.il.bsl deleted file mode 100644 index 396e8281947..00000000000 Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals03.il.bsl and /dev/null differ diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals03.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals03.il.netfx4.bsl index 4642e61f889..aebd3d6de48 100644 Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals03.il.netfx4.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals03.il.netfx4.bsl differ diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals04.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals04.il.bsl deleted file mode 100644 index 3e750cdac18..00000000000 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals04.il.bsl +++ /dev/null @@ -1,665 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly Equals04 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.Equals04 -{ - // Offset: 0x00000000 Length: 0x000006F4 -} -.mresource public FSharpOptimizationData.Equals04 -{ - // Offset: 0x000006F8 Length: 0x000003B7 -} -.module Equals04.dll -// MVID: {4BEB2A00-0759-EA8A-A745-0383002AEB4B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x00220000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed Equals04 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class abstract auto ansi sealed nested public EqualsMicroPerfAndCodeGenerationTests - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto autochar serializable sealed nested public beforefieldinit Key - extends [mscorlib]System.Object - implements class [mscorlib]System.IEquatable`1, - [mscorlib]System.Collections.IStructuralEquatable, - class [mscorlib]System.IComparable`1, - [mscorlib]System.IComparable, - [mscorlib]System.Collections.IStructuralComparable - { - .custom instance void [mscorlib]System.Diagnostics.DebuggerDisplayAttribute::.ctor(string) = ( 01 00 15 7B 5F 5F 44 65 62 75 67 44 69 73 70 6C // ...{__DebugDispl - 61 79 28 29 2C 6E 71 7D 00 00 ) // ay(),nq}.. - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 01 00 00 00 00 00 ) - .field assembly initonly int32 item1 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .field assembly initonly int32 item2 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method public static class Equals04/EqualsMicroPerfAndCodeGenerationTests/Key - NewKey(int32 item1, - int32 item2) cil managed - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32) = ( 01 00 08 00 00 00 00 00 00 00 00 00 ) - // Code size 8 (0x8) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldarg.1 - IL_0002: newobj instance void Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::.ctor(int32, - int32) - IL_0007: ret - } // end of method Key::NewKey - - .method assembly specialname rtspecialname - instance void .ctor(int32 item1, - int32 item2) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 21 (0x15) - .maxstack 2 - IL_0000: ldarg.0 - IL_0001: call instance void [mscorlib]System.Object::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld int32 Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::item1 - IL_000d: ldarg.0 - IL_000e: ldarg.2 - IL_000f: stfld int32 Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::item2 - IL_0014: ret - } // end of method Key::.ctor - - .method public instance int32 get_Item1() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 7 (0x7) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldfld int32 Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::item1 - IL_0006: ret - } // end of method Key::get_Item1 - - .method public instance int32 get_Item2() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 7 (0x7) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldfld int32 Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::item2 - IL_0006: ret - } // end of method Key::get_Item2 - - .method public instance int32 get_Tag() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 4 (0x4) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: pop - IL_0002: ldc.i4.0 - IL_0003: ret - } // end of method Key::get_Tag - - .method assembly specialname instance object - __DebugDisplay() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 22 (0x16) - .maxstack 4 - IL_0000: ldstr "%+0.8A" - IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,string>::.ctor(string) - IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_000f: ldarg.0 - IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) - IL_0015: ret - } // end of method Key::__DebugDisplay - - .method public hidebysig virtual final - instance int32 CompareTo(class Equals04/EqualsMicroPerfAndCodeGenerationTests/Key obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 120 (0x78) - .maxstack 4 - .locals init (class Equals04/EqualsMicroPerfAndCodeGenerationTests/Key V_0, - class Equals04/EqualsMicroPerfAndCodeGenerationTests/Key V_1, - int32 V_2, - class [mscorlib]System.Collections.IComparer V_3, - int32 V_4, - int32 V_5) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_006e - - IL_0007: ldarg.1 - IL_0008: ldnull - IL_0009: cgt.un - IL_000b: brfalse.s IL_006c - - IL_000d: ldarg.0 - IL_000e: pop - IL_000f: ldarg.0 - IL_0010: stloc.0 - IL_0011: ldarg.1 - IL_0012: stloc.1 - IL_0013: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0018: stloc.3 - IL_0019: ldloc.0 - IL_001a: ldfld int32 Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::item1 - IL_001f: stloc.s V_4 - IL_0021: ldloc.1 - IL_0022: ldfld int32 Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::item1 - IL_0027: stloc.s V_5 - IL_0029: ldloc.s V_4 - IL_002b: ldloc.s V_5 - IL_002d: bge.s IL_0033 - - IL_002f: ldc.i4.m1 - IL_0030: nop - IL_0031: br.s IL_003a - - IL_0033: ldloc.s V_4 - IL_0035: ldloc.s V_5 - IL_0037: cgt - IL_0039: nop - IL_003a: stloc.2 - IL_003b: ldloc.2 - IL_003c: ldc.i4.0 - IL_003d: bge.s IL_0041 - - IL_003f: ldloc.2 - IL_0040: ret - - IL_0041: ldloc.2 - IL_0042: ldc.i4.0 - IL_0043: ble.s IL_0047 - - IL_0045: ldloc.2 - IL_0046: ret - - IL_0047: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_004c: stloc.3 - IL_004d: ldloc.0 - IL_004e: ldfld int32 Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::item2 - IL_0053: stloc.s V_4 - IL_0055: ldloc.1 - IL_0056: ldfld int32 Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::item2 - IL_005b: stloc.s V_5 - IL_005d: ldloc.s V_4 - IL_005f: ldloc.s V_5 - IL_0061: bge.s IL_0065 - - IL_0063: ldc.i4.m1 - IL_0064: ret - - IL_0065: ldloc.s V_4 - IL_0067: ldloc.s V_5 - IL_0069: cgt - IL_006b: ret - - IL_006c: ldc.i4.1 - IL_006d: ret - - IL_006e: ldarg.1 - IL_006f: ldnull - IL_0070: cgt.un - IL_0072: brfalse.s IL_0076 - - IL_0074: ldc.i4.m1 - IL_0075: ret - - IL_0076: ldc.i4.0 - IL_0077: ret - } // end of method Key::CompareTo - - .method public hidebysig virtual final - instance int32 CompareTo(object obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 14 (0xe) - .maxstack 4 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 10,13 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldarg.1 - IL_0003: unbox.any Equals04/EqualsMicroPerfAndCodeGenerationTests/Key - IL_0008: call instance int32 Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::CompareTo(class Equals04/EqualsMicroPerfAndCodeGenerationTests/Key) - IL_000d: ret - } // end of method Key::CompareTo - - .method public hidebysig virtual final - instance int32 CompareTo(object obj, - class [mscorlib]System.Collections.IComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 125 (0x7d) - .maxstack 4 - .locals init ([0] class Equals04/EqualsMicroPerfAndCodeGenerationTests/Key V_0, - [1] class Equals04/EqualsMicroPerfAndCodeGenerationTests/Key V_1, - [2] class Equals04/EqualsMicroPerfAndCodeGenerationTests/Key V_2, - [3] int32 V_3, - [4] int32 V_4, - [5] int32 V_5) - .line 4,4 : 10,13 - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: unbox.any Equals04/EqualsMicroPerfAndCodeGenerationTests/Key - IL_0007: stloc.0 - IL_0008: ldarg.0 - IL_0009: ldnull - IL_000a: cgt.un - IL_000c: brfalse.s IL_006e - - IL_000e: ldarg.1 - IL_000f: unbox.any Equals04/EqualsMicroPerfAndCodeGenerationTests/Key - IL_0014: ldnull - IL_0015: cgt.un - IL_0017: brfalse.s IL_006c - - IL_0019: ldarg.0 - IL_001a: pop - IL_001b: ldarg.0 - IL_001c: stloc.1 - IL_001d: ldloc.0 - IL_001e: stloc.2 - IL_001f: ldloc.1 - IL_0020: ldfld int32 Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::item1 - IL_0025: stloc.s V_4 - IL_0027: ldloc.2 - IL_0028: ldfld int32 Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::item1 - IL_002d: stloc.s V_5 - IL_002f: ldloc.s V_4 - IL_0031: ldloc.s V_5 - IL_0033: bge.s IL_0039 - - IL_0035: ldc.i4.m1 - IL_0036: nop - IL_0037: br.s IL_0040 - - IL_0039: ldloc.s V_4 - IL_003b: ldloc.s V_5 - IL_003d: cgt - IL_003f: nop - IL_0040: stloc.3 - IL_0041: ldloc.3 - IL_0042: ldc.i4.0 - IL_0043: bge.s IL_0047 - - IL_0045: ldloc.3 - IL_0046: ret - - IL_0047: ldloc.3 - IL_0048: ldc.i4.0 - IL_0049: ble.s IL_004d - - IL_004b: ldloc.3 - IL_004c: ret - - IL_004d: ldloc.1 - IL_004e: ldfld int32 Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::item2 - IL_0053: stloc.s V_4 - IL_0055: ldloc.2 - IL_0056: ldfld int32 Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::item2 - IL_005b: stloc.s V_5 - IL_005d: ldloc.s V_4 - IL_005f: ldloc.s V_5 - IL_0061: bge.s IL_0065 - - IL_0063: ldc.i4.m1 - IL_0064: ret - - IL_0065: ldloc.s V_4 - IL_0067: ldloc.s V_5 - IL_0069: cgt - IL_006b: ret - - IL_006c: ldc.i4.1 - IL_006d: ret - - IL_006e: ldarg.1 - IL_006f: unbox.any Equals04/EqualsMicroPerfAndCodeGenerationTests/Key - IL_0074: ldnull - IL_0075: cgt.un - IL_0077: brfalse.s IL_007b - - IL_0079: ldc.i4.m1 - IL_007a: ret - - IL_007b: ldc.i4.0 - IL_007c: ret - } // end of method Key::CompareTo - - .method public hidebysig virtual final - instance int32 GetHashCode(class [mscorlib]System.Collections.IEqualityComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 61 (0x3d) - .maxstack 7 - .locals init (int32 V_0, - class Equals04/EqualsMicroPerfAndCodeGenerationTests/Key V_1) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_003b - - IL_0007: ldc.i4.0 - IL_0008: stloc.0 - IL_0009: ldarg.0 - IL_000a: pop - IL_000b: ldarg.0 - IL_000c: stloc.1 - IL_000d: ldc.i4.0 - IL_000e: stloc.0 - IL_000f: ldc.i4 0x9e3779b9 - IL_0014: ldloc.1 - IL_0015: ldfld int32 Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::item2 - IL_001a: ldloc.0 - IL_001b: ldc.i4.6 - IL_001c: shl - IL_001d: ldloc.0 - IL_001e: ldc.i4.2 - IL_001f: shr - IL_0020: add - IL_0021: add - IL_0022: add - IL_0023: stloc.0 - IL_0024: ldc.i4 0x9e3779b9 - IL_0029: ldloc.1 - IL_002a: ldfld int32 Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::item1 - IL_002f: ldloc.0 - IL_0030: ldc.i4.6 - IL_0031: shl - IL_0032: ldloc.0 - IL_0033: ldc.i4.2 - IL_0034: shr - IL_0035: add - IL_0036: add - IL_0037: add - IL_0038: stloc.0 - IL_0039: ldloc.0 - IL_003a: ret - - IL_003b: ldc.i4.0 - IL_003c: ret - } // end of method Key::GetHashCode - - .method public hidebysig virtual final - instance int32 GetHashCode() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 13 (0xd) - .maxstack 4 - .line 4,4 : 10,13 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() - IL_0007: call instance int32 Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::GetHashCode(class [mscorlib]System.Collections.IEqualityComparer) - IL_000c: ret - } // end of method Key::GetHashCode - - .method public hidebysig virtual final - instance bool Equals(object obj, - class [mscorlib]System.Collections.IEqualityComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 64 (0x40) - .maxstack 4 - .locals init (class Equals04/EqualsMicroPerfAndCodeGenerationTests/Key V_0, - class Equals04/EqualsMicroPerfAndCodeGenerationTests/Key V_1, - class Equals04/EqualsMicroPerfAndCodeGenerationTests/Key V_2) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_0038 - - IL_0007: ldarg.1 - IL_0008: isinst Equals04/EqualsMicroPerfAndCodeGenerationTests/Key - IL_000d: stloc.0 - IL_000e: ldloc.0 - IL_000f: brfalse.s IL_0036 - - IL_0011: ldarg.0 - IL_0012: pop - IL_0013: ldarg.0 - IL_0014: stloc.1 - IL_0015: ldloc.0 - IL_0016: stloc.2 - IL_0017: ldloc.1 - IL_0018: ldfld int32 Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::item1 - IL_001d: ldloc.2 - IL_001e: ldfld int32 Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::item1 - IL_0023: bne.un.s IL_0034 - - IL_0025: ldloc.1 - IL_0026: ldfld int32 Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::item2 - IL_002b: ldloc.2 - IL_002c: ldfld int32 Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::item2 - IL_0031: ceq - IL_0033: ret - - IL_0034: ldc.i4.0 - IL_0035: ret - - IL_0036: ldc.i4.0 - IL_0037: ret - - IL_0038: ldarg.1 - IL_0039: ldnull - IL_003a: cgt.un - IL_003c: ldc.i4.0 - IL_003d: ceq - IL_003f: ret - } // end of method Key::Equals - - .method public hidebysig virtual final - instance bool Equals(class Equals04/EqualsMicroPerfAndCodeGenerationTests/Key obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 60 (0x3c) - .maxstack 4 - .locals init (class Equals04/EqualsMicroPerfAndCodeGenerationTests/Key V_0, - class Equals04/EqualsMicroPerfAndCodeGenerationTests/Key V_1) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_0034 - - IL_0007: ldarg.1 - IL_0008: ldnull - IL_0009: cgt.un - IL_000b: brfalse.s IL_0032 - - IL_000d: ldarg.0 - IL_000e: pop - IL_000f: ldarg.0 - IL_0010: stloc.0 - IL_0011: ldarg.1 - IL_0012: stloc.1 - IL_0013: ldloc.0 - IL_0014: ldfld int32 Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::item1 - IL_0019: ldloc.1 - IL_001a: ldfld int32 Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::item1 - IL_001f: bne.un.s IL_0030 - - IL_0021: ldloc.0 - IL_0022: ldfld int32 Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::item2 - IL_0027: ldloc.1 - IL_0028: ldfld int32 Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::item2 - IL_002d: ceq - IL_002f: ret - - IL_0030: ldc.i4.0 - IL_0031: ret - - IL_0032: ldc.i4.0 - IL_0033: ret - - IL_0034: ldarg.1 - IL_0035: ldnull - IL_0036: cgt.un - IL_0038: ldc.i4.0 - IL_0039: ceq - IL_003b: ret - } // end of method Key::Equals - - .method public hidebysig virtual final - instance bool Equals(object obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 21 (0x15) - .maxstack 4 - .locals init (class Equals04/EqualsMicroPerfAndCodeGenerationTests/Key V_0) - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: isinst Equals04/EqualsMicroPerfAndCodeGenerationTests/Key - IL_0007: stloc.0 - IL_0008: ldloc.0 - IL_0009: brfalse.s IL_0013 - - IL_000b: ldarg.0 - IL_000c: ldloc.0 - IL_000d: call instance bool Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::Equals(class Equals04/EqualsMicroPerfAndCodeGenerationTests/Key) - IL_0012: ret - - IL_0013: ldc.i4.0 - IL_0014: ret - } // end of method Key::Equals - - .property instance int32 Tag() - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .get instance int32 Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::get_Tag() - } // end of property Key::Tag - .property instance int32 Item1() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32, - int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .get instance int32 Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::get_Item1() - } // end of property Key::Item1 - .property instance int32 Item2() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32, - int32) = ( 01 00 04 00 00 00 00 00 00 00 01 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .get instance int32 Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::get_Item2() - } // end of property Key::Item2 - } // end of class Key - - .method public static bool f5() cil managed - { - // Code size 50 (0x32) - .maxstack 5 - .locals init ([0] bool x, - [1] class Equals04/EqualsMicroPerfAndCodeGenerationTests/Key t1, - [2] class Equals04/EqualsMicroPerfAndCodeGenerationTests/Key t2, - [3] int32 i) - .line 6,6 : 8,29 - IL_0000: nop - IL_0001: ldc.i4.0 - IL_0002: stloc.0 - .line 7,7 : 8,25 - IL_0003: ldc.i4.1 - IL_0004: ldc.i4.2 - IL_0005: call class Equals04/EqualsMicroPerfAndCodeGenerationTests/Key Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::NewKey(int32, - int32) - IL_000a: stloc.1 - .line 8,8 : 8,25 - IL_000b: ldc.i4.1 - IL_000c: ldc.i4.3 - IL_000d: call class Equals04/EqualsMicroPerfAndCodeGenerationTests/Key Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::NewKey(int32, - int32) - IL_0012: stloc.2 - .line 9,9 : 8,32 - IL_0013: ldc.i4.0 - IL_0014: stloc.3 - IL_0015: br.s IL_0028 - - .line 10,10 : 12,26 - IL_0017: ldloc.1 - IL_0018: ldloc.2 - IL_0019: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() - IL_001e: call instance bool Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::Equals(object, - class [mscorlib]System.Collections.IEqualityComparer) - IL_0023: stloc.0 - IL_0024: ldloc.3 - IL_0025: ldc.i4.1 - IL_0026: add - IL_0027: stloc.3 - .line 9,9 : 21,29 - IL_0028: ldloc.3 - IL_0029: ldc.i4 0x989681 - IL_002e: blt.s IL_0017 - - .line 11,11 : 8,9 - IL_0030: ldloc.0 - IL_0031: ret - } // end of method EqualsMicroPerfAndCodeGenerationTests::f5 - - } // end of class EqualsMicroPerfAndCodeGenerationTests - -} // end of class Equals04 - -.class private abstract auto ansi sealed ''.$Equals04$fsx - extends [mscorlib]System.Object -{ -} // end of class ''.$Equals04$fsx - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals04.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals04.il.netfx4.bsl index 897868f7839..cb5e36f2913 100644 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals04.il.netfx4.bsl +++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals04.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17376 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly Equals04 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Equals04 { - // Offset: 0x00000000 Length: 0x00000704 + // Offset: 0x00000000 Length: 0x000006E8 } .mresource public FSharpOptimizationData.Equals04 { - // Offset: 0x00000708 Length: 0x000003B7 + // Offset: 0x000006F0 Length: 0x000003B7 } .module Equals04.dll -// MVID: {4F20E456-0759-EA8A-A745-038356E4204F} +// MVID: {5772F65A-0759-EA8A-A745-03835AF67257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000002E3AA70000 +// Image base: 0x00E00000 // =============== CLASS MEMBERS DECLARATION =================== @@ -266,7 +266,7 @@ // Code size 14 (0xe) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 10,13 + .line 4,4 : 10,13 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Equals04.fsx' IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -288,7 +288,7 @@ [3] int32 V_3, [4] int32 V_4, [5] int32 V_5) - .line 4,4 : 10,13 + .line 4,4 : 10,13 '' IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any Equals04/EqualsMicroPerfAndCodeGenerationTests/Key @@ -438,7 +438,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 4,4 : 10,13 + .line 4,4 : 10,13 '' IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -611,28 +611,28 @@ [1] class Equals04/EqualsMicroPerfAndCodeGenerationTests/Key t1, [2] class Equals04/EqualsMicroPerfAndCodeGenerationTests/Key t2, [3] int32 i) - .line 6,6 : 8,29 + .line 6,6 : 8,29 '' IL_0000: nop IL_0001: ldc.i4.0 IL_0002: stloc.0 - .line 7,7 : 8,25 + .line 7,7 : 8,25 '' IL_0003: ldc.i4.1 IL_0004: ldc.i4.2 IL_0005: call class Equals04/EqualsMicroPerfAndCodeGenerationTests/Key Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::NewKey(int32, int32) IL_000a: stloc.1 - .line 8,8 : 8,25 + .line 8,8 : 8,25 '' IL_000b: ldc.i4.1 IL_000c: ldc.i4.3 IL_000d: call class Equals04/EqualsMicroPerfAndCodeGenerationTests/Key Equals04/EqualsMicroPerfAndCodeGenerationTests/Key::NewKey(int32, int32) IL_0012: stloc.2 - .line 9,9 : 8,32 + .line 9,9 : 8,32 '' IL_0013: ldc.i4.0 IL_0014: stloc.3 IL_0015: br.s IL_0028 - .line 10,10 : 12,26 + .line 10,10 : 12,26 '' IL_0017: ldloc.1 IL_0018: ldloc.2 IL_0019: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -643,12 +643,12 @@ IL_0025: ldc.i4.1 IL_0026: add IL_0027: stloc.3 - .line 9,9 : 21,29 + .line 9,9 : 8,32 '' IL_0028: ldloc.3 IL_0029: ldc.i4 0x989681 IL_002e: blt.s IL_0017 - .line 11,11 : 8,9 + .line 11,11 : 8,9 '' IL_0030: ldloc.0 IL_0031: ret } // end of method EqualsMicroPerfAndCodeGenerationTests::f5 diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals05.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals05.il.bsl deleted file mode 100644 index 86ea4df4c0c..00000000000 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals05.il.bsl +++ /dev/null @@ -1,559 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly Equals05 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.Equals05 -{ - // Offset: 0x00000000 Length: 0x000006E7 -} -.mresource public FSharpOptimizationData.Equals05 -{ - // Offset: 0x000006F0 Length: 0x000003B9 -} -.module Equals05.dll -// MVID: {4BEB2A03-0759-CBC5-A745-0383032AEB4B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x003C0000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed Equals05 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class abstract auto ansi sealed nested public EqualsMicroPerfAndCodeGenerationTests - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto ansi serializable sealed nested public KeyR - extends [mscorlib]System.Object - implements class [mscorlib]System.IEquatable`1, - [mscorlib]System.Collections.IStructuralEquatable, - class [mscorlib]System.IComparable`1, - [mscorlib]System.IComparable, - [mscorlib]System.Collections.IStructuralComparable - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) - .field assembly int32 key1@ - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .field assembly int32 key2@ - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .method public specialname instance int32 - get_key1() cil managed - { - // Code size 7 (0x7) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldfld int32 Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_0006: ret - } // end of method KeyR::get_key1 - - .method public specialname instance int32 - get_key2() cil managed - { - // Code size 7 (0x7) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldfld int32 Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_0006: ret - } // end of method KeyR::get_key2 - - .method public specialname rtspecialname - instance void .ctor(int32 key1, - int32 key2) cil managed - { - // Code size 21 (0x15) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: call instance void [mscorlib]System.Object::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld int32 Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_000d: ldarg.0 - IL_000e: ldarg.2 - IL_000f: stfld int32 Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_0014: ret - } // end of method KeyR::.ctor - - .method public hidebysig virtual final - instance int32 CompareTo(class Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 102 (0x66) - .maxstack 4 - .locals init (int32 V_0, - class [mscorlib]System.Collections.IComparer V_1, - int32 V_2, - int32 V_3) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_005c - - IL_0007: ldarg.1 - IL_0008: ldnull - IL_0009: cgt.un - IL_000b: brfalse.s IL_005a - - IL_000d: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0012: stloc.1 - IL_0013: ldarg.0 - IL_0014: ldfld int32 Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_0019: stloc.2 - IL_001a: ldarg.1 - IL_001b: ldfld int32 Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_0020: stloc.3 - IL_0021: ldloc.2 - IL_0022: ldloc.3 - IL_0023: bge.s IL_0029 - - IL_0025: ldc.i4.m1 - IL_0026: nop - IL_0027: br.s IL_002e - - IL_0029: ldloc.2 - IL_002a: ldloc.3 - IL_002b: cgt - IL_002d: nop - IL_002e: stloc.0 - IL_002f: ldloc.0 - IL_0030: ldc.i4.0 - IL_0031: bge.s IL_0035 - - IL_0033: ldloc.0 - IL_0034: ret - - IL_0035: ldloc.0 - IL_0036: ldc.i4.0 - IL_0037: ble.s IL_003b - - IL_0039: ldloc.0 - IL_003a: ret - - IL_003b: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0040: stloc.1 - IL_0041: ldarg.0 - IL_0042: ldfld int32 Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_0047: stloc.2 - IL_0048: ldarg.1 - IL_0049: ldfld int32 Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_004e: stloc.3 - IL_004f: ldloc.2 - IL_0050: ldloc.3 - IL_0051: bge.s IL_0055 - - IL_0053: ldc.i4.m1 - IL_0054: ret - - IL_0055: ldloc.2 - IL_0056: ldloc.3 - IL_0057: cgt - IL_0059: ret - - IL_005a: ldc.i4.1 - IL_005b: ret - - IL_005c: ldarg.1 - IL_005d: ldnull - IL_005e: cgt.un - IL_0060: brfalse.s IL_0064 - - IL_0062: ldc.i4.m1 - IL_0063: ret - - IL_0064: ldc.i4.0 - IL_0065: ret - } // end of method KeyR::CompareTo - - .method public hidebysig virtual final - instance int32 CompareTo(object obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 14 (0xe) - .maxstack 4 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 10,14 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldarg.1 - IL_0003: unbox.any Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR - IL_0008: call instance int32 Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::CompareTo(class Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR) - IL_000d: ret - } // end of method KeyR::CompareTo - - .method public hidebysig virtual final - instance int32 CompareTo(object obj, - class [mscorlib]System.Collections.IComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 107 (0x6b) - .maxstack 4 - .locals init ([0] class Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR V_0, - [1] int32 V_1, - [2] int32 V_2, - [3] int32 V_3) - .line 4,4 : 10,14 - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: unbox.any Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR - IL_0007: stloc.0 - IL_0008: ldarg.0 - IL_0009: ldnull - IL_000a: cgt.un - IL_000c: brfalse.s IL_005c - - IL_000e: ldarg.1 - IL_000f: unbox.any Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR - IL_0014: ldnull - IL_0015: cgt.un - IL_0017: brfalse.s IL_005a - - IL_0019: ldarg.0 - IL_001a: ldfld int32 Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_001f: stloc.2 - IL_0020: ldloc.0 - IL_0021: ldfld int32 Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_0026: stloc.3 - IL_0027: ldloc.2 - IL_0028: ldloc.3 - IL_0029: bge.s IL_002f - - IL_002b: ldc.i4.m1 - IL_002c: nop - IL_002d: br.s IL_0034 - - IL_002f: ldloc.2 - IL_0030: ldloc.3 - IL_0031: cgt - IL_0033: nop - IL_0034: stloc.1 - IL_0035: ldloc.1 - IL_0036: ldc.i4.0 - IL_0037: bge.s IL_003b - - IL_0039: ldloc.1 - IL_003a: ret - - IL_003b: ldloc.1 - IL_003c: ldc.i4.0 - IL_003d: ble.s IL_0041 - - IL_003f: ldloc.1 - IL_0040: ret - - IL_0041: ldarg.0 - IL_0042: ldfld int32 Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_0047: stloc.2 - IL_0048: ldloc.0 - IL_0049: ldfld int32 Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_004e: stloc.3 - IL_004f: ldloc.2 - IL_0050: ldloc.3 - IL_0051: bge.s IL_0055 - - IL_0053: ldc.i4.m1 - IL_0054: ret - - IL_0055: ldloc.2 - IL_0056: ldloc.3 - IL_0057: cgt - IL_0059: ret - - IL_005a: ldc.i4.1 - IL_005b: ret - - IL_005c: ldarg.1 - IL_005d: unbox.any Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR - IL_0062: ldnull - IL_0063: cgt.un - IL_0065: brfalse.s IL_0069 - - IL_0067: ldc.i4.m1 - IL_0068: ret - - IL_0069: ldc.i4.0 - IL_006a: ret - } // end of method KeyR::CompareTo - - .method public hidebysig virtual final - instance int32 GetHashCode(class [mscorlib]System.Collections.IEqualityComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 55 (0x37) - .maxstack 7 - .locals init (int32 V_0) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_0035 - - IL_0007: ldc.i4.0 - IL_0008: stloc.0 - IL_0009: ldc.i4 0x9e3779b9 - IL_000e: ldarg.0 - IL_000f: ldfld int32 Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_0014: ldloc.0 - IL_0015: ldc.i4.6 - IL_0016: shl - IL_0017: ldloc.0 - IL_0018: ldc.i4.2 - IL_0019: shr - IL_001a: add - IL_001b: add - IL_001c: add - IL_001d: stloc.0 - IL_001e: ldc.i4 0x9e3779b9 - IL_0023: ldarg.0 - IL_0024: ldfld int32 Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_0029: ldloc.0 - IL_002a: ldc.i4.6 - IL_002b: shl - IL_002c: ldloc.0 - IL_002d: ldc.i4.2 - IL_002e: shr - IL_002f: add - IL_0030: add - IL_0031: add - IL_0032: stloc.0 - IL_0033: ldloc.0 - IL_0034: ret - - IL_0035: ldc.i4.0 - IL_0036: ret - } // end of method KeyR::GetHashCode - - .method public hidebysig virtual final - instance int32 GetHashCode() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 13 (0xd) - .maxstack 4 - .line 4,4 : 10,14 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() - IL_0007: call instance int32 Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::GetHashCode(class [mscorlib]System.Collections.IEqualityComparer) - IL_000c: ret - } // end of method KeyR::GetHashCode - - .method public hidebysig virtual final - instance bool Equals(object obj, - class [mscorlib]System.Collections.IEqualityComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 58 (0x3a) - .maxstack 4 - .locals init (class Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR V_0) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_0032 - - IL_0007: ldarg.1 - IL_0008: isinst Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR - IL_000d: stloc.0 - IL_000e: ldloc.0 - IL_000f: brfalse.s IL_0030 - - IL_0011: ldarg.0 - IL_0012: ldfld int32 Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_0017: ldloc.0 - IL_0018: ldfld int32 Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_001d: bne.un.s IL_002e - - IL_001f: ldarg.0 - IL_0020: ldfld int32 Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_0025: ldloc.0 - IL_0026: ldfld int32 Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_002b: ceq - IL_002d: ret - - IL_002e: ldc.i4.0 - IL_002f: ret - - IL_0030: ldc.i4.0 - IL_0031: ret - - IL_0032: ldarg.1 - IL_0033: ldnull - IL_0034: cgt.un - IL_0036: ldc.i4.0 - IL_0037: ceq - IL_0039: ret - } // end of method KeyR::Equals - - .method public hidebysig virtual final - instance bool Equals(class Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 54 (0x36) - .maxstack 4 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_002e - - IL_0007: ldarg.1 - IL_0008: ldnull - IL_0009: cgt.un - IL_000b: brfalse.s IL_002c - - IL_000d: ldarg.0 - IL_000e: ldfld int32 Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_0013: ldarg.1 - IL_0014: ldfld int32 Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_0019: bne.un.s IL_002a - - IL_001b: ldarg.0 - IL_001c: ldfld int32 Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_0021: ldarg.1 - IL_0022: ldfld int32 Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_0027: ceq - IL_0029: ret - - IL_002a: ldc.i4.0 - IL_002b: ret - - IL_002c: ldc.i4.0 - IL_002d: ret - - IL_002e: ldarg.1 - IL_002f: ldnull - IL_0030: cgt.un - IL_0032: ldc.i4.0 - IL_0033: ceq - IL_0035: ret - } // end of method KeyR::Equals - - .method public hidebysig virtual final - instance bool Equals(object obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 21 (0x15) - .maxstack 4 - .locals init (class Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR V_0) - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: isinst Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR - IL_0007: stloc.0 - IL_0008: ldloc.0 - IL_0009: brfalse.s IL_0013 - - IL_000b: ldarg.0 - IL_000c: ldloc.0 - IL_000d: call instance bool Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::Equals(class Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR) - IL_0012: ret - - IL_0013: ldc.i4.0 - IL_0014: ret - } // end of method KeyR::Equals - - .property instance int32 key1() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) - .get instance int32 Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::get_key1() - } // end of property KeyR::key1 - .property instance int32 key2() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) - .get instance int32 Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::get_key2() - } // end of property KeyR::key2 - } // end of class KeyR - - .method public static void f5c() cil managed - { - // Code size 49 (0x31) - .maxstack 5 - .locals init ([0] bool x, - [1] class Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR t1, - [2] class Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR t2, - [3] int32 i) - .line 6,6 : 8,29 - IL_0000: nop - IL_0001: ldc.i4.0 - IL_0002: stloc.0 - .line 7,7 : 8,39 - IL_0003: ldc.i4.1 - IL_0004: ldc.i4.2 - IL_0005: newobj instance void Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::.ctor(int32, - int32) - IL_000a: stloc.1 - .line 8,8 : 8,39 - IL_000b: ldc.i4.1 - IL_000c: ldc.i4.3 - IL_000d: newobj instance void Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::.ctor(int32, - int32) - IL_0012: stloc.2 - .line 9,9 : 8,32 - IL_0013: ldc.i4.0 - IL_0014: stloc.3 - IL_0015: br.s IL_0028 - - .line 10,10 : 12,26 - IL_0017: ldloc.1 - IL_0018: ldloc.2 - IL_0019: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() - IL_001e: call instance bool Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::Equals(object, - class [mscorlib]System.Collections.IEqualityComparer) - IL_0023: stloc.0 - IL_0024: ldloc.3 - IL_0025: ldc.i4.1 - IL_0026: add - IL_0027: stloc.3 - .line 9,9 : 21,29 - IL_0028: ldloc.3 - IL_0029: ldc.i4 0x989681 - IL_002e: blt.s IL_0017 - - IL_0030: ret - } // end of method EqualsMicroPerfAndCodeGenerationTests::f5c - - } // end of class EqualsMicroPerfAndCodeGenerationTests - -} // end of class Equals05 - -.class private abstract auto ansi sealed ''.$Equals05$fsx - extends [mscorlib]System.Object -{ -} // end of class ''.$Equals05$fsx - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals05.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals05.il.netfx4.bsl index c006b56c489..50d1acbd6aa 100644 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals05.il.netfx4.bsl +++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals05.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17376 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly Equals05 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Equals05 { - // Offset: 0x00000000 Length: 0x000006F7 + // Offset: 0x00000000 Length: 0x000006DB } .mresource public FSharpOptimizationData.Equals05 { - // Offset: 0x00000700 Length: 0x000003B9 + // Offset: 0x000006E0 Length: 0x000003B9 } .module Equals05.dll -// MVID: {4F20E459-0759-CBC5-A745-038359E4204F} +// MVID: {5772F65D-0759-CBC5-A745-03835DF67257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000009B35580000 +// Image base: 0x01030000 // =============== CLASS MEMBERS DECLARATION =================== @@ -203,7 +203,7 @@ // Code size 14 (0xe) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 10,14 + .line 4,4 : 10,14 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Equals05.fsx' IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -223,7 +223,7 @@ [1] int32 V_1, [2] int32 V_2, [3] int32 V_3) - .line 4,4 : 10,14 + .line 4,4 : 10,14 '' IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR @@ -360,7 +360,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 4,4 : 10,14 + .line 4,4 : 10,14 '' IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -504,28 +504,28 @@ [1] class Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR t1, [2] class Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR t2, [3] int32 i) - .line 6,6 : 8,29 + .line 6,6 : 8,29 '' IL_0000: nop IL_0001: ldc.i4.0 IL_0002: stloc.0 - .line 7,7 : 8,39 + .line 7,7 : 8,39 '' IL_0003: ldc.i4.1 IL_0004: ldc.i4.2 IL_0005: newobj instance void Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::.ctor(int32, int32) IL_000a: stloc.1 - .line 8,8 : 8,39 + .line 8,8 : 8,39 '' IL_000b: ldc.i4.1 IL_000c: ldc.i4.3 IL_000d: newobj instance void Equals05/EqualsMicroPerfAndCodeGenerationTests/KeyR::.ctor(int32, int32) IL_0012: stloc.2 - .line 9,9 : 8,32 + .line 9,9 : 8,32 '' IL_0013: ldc.i4.0 IL_0014: stloc.3 IL_0015: br.s IL_0028 - .line 10,10 : 12,26 + .line 10,10 : 12,26 '' IL_0017: ldloc.1 IL_0018: ldloc.2 IL_0019: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -536,7 +536,7 @@ IL_0025: ldc.i4.1 IL_0026: add IL_0027: stloc.3 - .line 9,9 : 21,29 + .line 9,9 : 8,32 '' IL_0028: ldloc.3 IL_0029: ldc.i4 0x989681 IL_002e: blt.s IL_0017 diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals06.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals06.il.bsl deleted file mode 100644 index 5c33b7d6841..00000000000 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals06.il.bsl +++ /dev/null @@ -1,692 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly Equals06 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.Equals06 -{ - // Offset: 0x00000000 Length: 0x000008A2 -} -.mresource public FSharpOptimizationData.Equals06 -{ - // Offset: 0x000008A8 Length: 0x00000698 -} -.module Equals06.dll -// MVID: {4BEB2A06-0759-31EC-A745-0383062AEB4B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x003F0000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed Equals06 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class abstract auto ansi sealed nested public EqualsMicroPerfAndCodeGenerationTests - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto autochar serializable sealed nested public beforefieldinit GenericKey`1 - extends [mscorlib]System.Object - implements class [mscorlib]System.IEquatable`1>, - [mscorlib]System.Collections.IStructuralEquatable, - class [mscorlib]System.IComparable`1>, - [mscorlib]System.IComparable, - [mscorlib]System.Collections.IStructuralComparable - { - .custom instance void [mscorlib]System.Diagnostics.DebuggerDisplayAttribute::.ctor(string) = ( 01 00 15 7B 5F 5F 44 65 62 75 67 44 69 73 70 6C // ...{__DebugDispl - 61 79 28 29 2C 6E 71 7D 00 00 ) // ay(),nq}.. - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 01 00 00 00 00 00 ) - .field assembly initonly !a item1 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .field assembly initonly !a item2 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method public static class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 - NewGenericKey(!a item1, - !a item2) cil managed - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32) = ( 01 00 08 00 00 00 00 00 00 00 00 00 ) - // Code size 8 (0x8) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldarg.1 - IL_0002: newobj instance void class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::.ctor(!0, - !0) - IL_0007: ret - } // end of method GenericKey`1::NewGenericKey - - .method assembly specialname rtspecialname - instance void .ctor(!a item1, - !a item2) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 21 (0x15) - .maxstack 2 - IL_0000: ldarg.0 - IL_0001: call instance void [mscorlib]System.Object::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld !0 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_000d: ldarg.0 - IL_000e: ldarg.2 - IL_000f: stfld !0 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_0014: ret - } // end of method GenericKey`1::.ctor - - .method public instance !a get_Item1() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 7 (0x7) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldfld !0 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_0006: ret - } // end of method GenericKey`1::get_Item1 - - .method public instance !a get_Item2() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 7 (0x7) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldfld !0 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_0006: ret - } // end of method GenericKey`1::get_Item2 - - .method public instance int32 get_Tag() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 4 (0x4) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: pop - IL_0002: ldc.i4.0 - IL_0003: ret - } // end of method GenericKey`1::get_Tag - - .method assembly specialname instance object - __DebugDisplay() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 22 (0x16) - .maxstack 4 - IL_0000: ldstr "%+0.8A" - IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,string>::.ctor(string) - IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_000f: ldarg.0 - IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,string>::Invoke(!0) - IL_0015: ret - } // end of method GenericKey`1::__DebugDisplay - - .method public hidebysig virtual final - instance int32 CompareTo(class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 111 (0x6f) - .maxstack 5 - .locals init (class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 V_0, - class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 V_1, - int32 V_2, - class [mscorlib]System.Collections.IComparer V_3, - !a V_4, - !a V_5) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_0065 - - IL_0007: ldarg.1 - IL_0008: ldnull - IL_0009: cgt.un - IL_000b: brfalse.s IL_0063 - - IL_000d: ldarg.0 - IL_000e: pop - IL_000f: ldarg.0 - IL_0010: stloc.0 - IL_0011: ldarg.1 - IL_0012: stloc.1 - IL_0013: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0018: stloc.3 - IL_0019: ldloc.0 - IL_001a: ldfld !0 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_001f: stloc.s V_4 - IL_0021: ldloc.1 - IL_0022: ldfld !0 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_0027: stloc.s V_5 - IL_0029: ldloc.3 - IL_002a: ldloc.s V_4 - IL_002c: ldloc.s V_5 - IL_002e: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericComparisonWithComparerIntrinsic(class [mscorlib]System.Collections.IComparer, - !!0, - !!0) - IL_0033: stloc.2 - IL_0034: ldloc.2 - IL_0035: ldc.i4.0 - IL_0036: bge.s IL_003a - - IL_0038: ldloc.2 - IL_0039: ret - - IL_003a: ldloc.2 - IL_003b: ldc.i4.0 - IL_003c: ble.s IL_0040 - - IL_003e: ldloc.2 - IL_003f: ret - - IL_0040: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0045: stloc.3 - IL_0046: ldloc.0 - IL_0047: ldfld !0 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_004c: stloc.s V_4 - IL_004e: ldloc.1 - IL_004f: ldfld !0 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_0054: stloc.s V_5 - IL_0056: ldloc.3 - IL_0057: ldloc.s V_4 - IL_0059: ldloc.s V_5 - IL_005b: tail. - IL_005d: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericComparisonWithComparerIntrinsic(class [mscorlib]System.Collections.IComparer, - !!0, - !!0) - IL_0062: ret - - IL_0063: ldc.i4.1 - IL_0064: ret - - IL_0065: ldarg.1 - IL_0066: ldnull - IL_0067: cgt.un - IL_0069: brfalse.s IL_006d - - IL_006b: ldc.i4.m1 - IL_006c: ret - - IL_006d: ldc.i4.0 - IL_006e: ret - } // end of method GenericKey`1::CompareTo - - .method public hidebysig virtual final - instance int32 CompareTo(object obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 16 (0x10) - .maxstack 4 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 10,20 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldarg.1 - IL_0003: unbox.any class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 - IL_0008: tail. - IL_000a: call instance int32 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::CompareTo(class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1) - IL_000f: ret - } // end of method GenericKey`1::CompareTo - - .method public hidebysig virtual final - instance int32 CompareTo(object obj, - class [mscorlib]System.Collections.IComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 116 (0x74) - .maxstack 5 - .locals init ([0] class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 V_0, - [1] class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 V_1, - [2] class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 V_2, - [3] int32 V_3, - [4] !a V_4, - [5] !a V_5) - .line 4,4 : 10,20 - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: unbox.any class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 - IL_0007: stloc.0 - IL_0008: ldarg.0 - IL_0009: ldnull - IL_000a: cgt.un - IL_000c: brfalse.s IL_0065 - - IL_000e: ldarg.1 - IL_000f: unbox.any class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 - IL_0014: ldnull - IL_0015: cgt.un - IL_0017: brfalse.s IL_0063 - - IL_0019: ldarg.0 - IL_001a: pop - IL_001b: ldarg.0 - IL_001c: stloc.1 - IL_001d: ldloc.0 - IL_001e: stloc.2 - IL_001f: ldloc.1 - IL_0020: ldfld !0 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_0025: stloc.s V_4 - IL_0027: ldloc.2 - IL_0028: ldfld !0 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_002d: stloc.s V_5 - IL_002f: ldarg.2 - IL_0030: ldloc.s V_4 - IL_0032: ldloc.s V_5 - IL_0034: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericComparisonWithComparerIntrinsic(class [mscorlib]System.Collections.IComparer, - !!0, - !!0) - IL_0039: stloc.3 - IL_003a: ldloc.3 - IL_003b: ldc.i4.0 - IL_003c: bge.s IL_0040 - - IL_003e: ldloc.3 - IL_003f: ret - - IL_0040: ldloc.3 - IL_0041: ldc.i4.0 - IL_0042: ble.s IL_0046 - - IL_0044: ldloc.3 - IL_0045: ret - - IL_0046: ldloc.1 - IL_0047: ldfld !0 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_004c: stloc.s V_4 - IL_004e: ldloc.2 - IL_004f: ldfld !0 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_0054: stloc.s V_5 - IL_0056: ldarg.2 - IL_0057: ldloc.s V_4 - IL_0059: ldloc.s V_5 - IL_005b: tail. - IL_005d: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericComparisonWithComparerIntrinsic(class [mscorlib]System.Collections.IComparer, - !!0, - !!0) - IL_0062: ret - - IL_0063: ldc.i4.1 - IL_0064: ret - - IL_0065: ldarg.1 - IL_0066: unbox.any class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 - IL_006b: ldnull - IL_006c: cgt.un - IL_006e: brfalse.s IL_0072 - - IL_0070: ldc.i4.m1 - IL_0071: ret - - IL_0072: ldc.i4.0 - IL_0073: ret - } // end of method GenericKey`1::CompareTo - - .method public hidebysig virtual final - instance int32 GetHashCode(class [mscorlib]System.Collections.IEqualityComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 77 (0x4d) - .maxstack 7 - .locals init (int32 V_0, - class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 V_1, - !a V_2) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_004b - - IL_0007: ldc.i4.0 - IL_0008: stloc.0 - IL_0009: ldarg.0 - IL_000a: pop - IL_000b: ldarg.0 - IL_000c: stloc.1 - IL_000d: ldc.i4.0 - IL_000e: stloc.0 - IL_000f: ldc.i4 0x9e3779b9 - IL_0014: ldloc.1 - IL_0015: ldfld !0 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_001a: stloc.2 - IL_001b: ldarg.1 - IL_001c: ldloc.2 - IL_001d: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericHashWithComparerIntrinsic(class [mscorlib]System.Collections.IEqualityComparer, - !!0) - IL_0022: ldloc.0 - IL_0023: ldc.i4.6 - IL_0024: shl - IL_0025: ldloc.0 - IL_0026: ldc.i4.2 - IL_0027: shr - IL_0028: add - IL_0029: add - IL_002a: add - IL_002b: stloc.0 - IL_002c: ldc.i4 0x9e3779b9 - IL_0031: ldloc.1 - IL_0032: ldfld !0 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_0037: stloc.2 - IL_0038: ldarg.1 - IL_0039: ldloc.2 - IL_003a: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericHashWithComparerIntrinsic(class [mscorlib]System.Collections.IEqualityComparer, - !!0) - IL_003f: ldloc.0 - IL_0040: ldc.i4.6 - IL_0041: shl - IL_0042: ldloc.0 - IL_0043: ldc.i4.2 - IL_0044: shr - IL_0045: add - IL_0046: add - IL_0047: add - IL_0048: stloc.0 - IL_0049: ldloc.0 - IL_004a: ret - - IL_004b: ldc.i4.0 - IL_004c: ret - } // end of method GenericKey`1::GetHashCode - - .method public hidebysig virtual final - instance int32 GetHashCode() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 13 (0xd) - .maxstack 4 - .line 4,4 : 10,20 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() - IL_0007: call instance int32 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::GetHashCode(class [mscorlib]System.Collections.IEqualityComparer) - IL_000c: ret - } // end of method GenericKey`1::GetHashCode - - .method public hidebysig virtual final - instance bool Equals(object obj, - class [mscorlib]System.Collections.IEqualityComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 88 (0x58) - .maxstack 5 - .locals init (class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 V_0, - class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 V_1, - class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 V_2, - !a V_3, - !a V_4) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_0050 - - IL_0007: ldarg.1 - IL_0008: isinst class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 - IL_000d: stloc.0 - IL_000e: ldloc.0 - IL_000f: brfalse.s IL_004e - - IL_0011: ldarg.0 - IL_0012: pop - IL_0013: ldarg.0 - IL_0014: stloc.1 - IL_0015: ldloc.0 - IL_0016: stloc.2 - IL_0017: ldloc.1 - IL_0018: ldfld !0 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_001d: stloc.3 - IL_001e: ldloc.2 - IL_001f: ldfld !0 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_0024: stloc.s V_4 - IL_0026: ldarg.2 - IL_0027: ldloc.3 - IL_0028: ldloc.s V_4 - IL_002a: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericEqualityWithComparerIntrinsic(class [mscorlib]System.Collections.IEqualityComparer, - !!0, - !!0) - IL_002f: brfalse.s IL_004c - - IL_0031: ldloc.1 - IL_0032: ldfld !0 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_0037: stloc.3 - IL_0038: ldloc.2 - IL_0039: ldfld !0 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_003e: stloc.s V_4 - IL_0040: ldarg.2 - IL_0041: ldloc.3 - IL_0042: ldloc.s V_4 - IL_0044: tail. - IL_0046: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericEqualityWithComparerIntrinsic(class [mscorlib]System.Collections.IEqualityComparer, - !!0, - !!0) - IL_004b: ret - - IL_004c: ldc.i4.0 - IL_004d: ret - - IL_004e: ldc.i4.0 - IL_004f: ret - - IL_0050: ldarg.1 - IL_0051: ldnull - IL_0052: cgt.un - IL_0054: ldc.i4.0 - IL_0055: ceq - IL_0057: ret - } // end of method GenericKey`1::Equals - - .method public hidebysig virtual final - instance bool Equals(class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 78 (0x4e) - .maxstack 4 - .locals init (class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 V_0, - class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 V_1, - !a V_2, - !a V_3) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_0046 - - IL_0007: ldarg.1 - IL_0008: ldnull - IL_0009: cgt.un - IL_000b: brfalse.s IL_0044 - - IL_000d: ldarg.0 - IL_000e: pop - IL_000f: ldarg.0 - IL_0010: stloc.0 - IL_0011: ldarg.1 - IL_0012: stloc.1 - IL_0013: ldloc.0 - IL_0014: ldfld !0 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_0019: stloc.2 - IL_001a: ldloc.1 - IL_001b: ldfld !0 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_0020: stloc.3 - IL_0021: ldloc.2 - IL_0022: ldloc.3 - IL_0023: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericEqualityERIntrinsic(!!0, - !!0) - IL_0028: brfalse.s IL_0042 - - IL_002a: ldloc.0 - IL_002b: ldfld !0 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_0030: stloc.2 - IL_0031: ldloc.1 - IL_0032: ldfld !0 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_0037: stloc.3 - IL_0038: ldloc.2 - IL_0039: ldloc.3 - IL_003a: tail. - IL_003c: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericEqualityERIntrinsic(!!0, - !!0) - IL_0041: ret - - IL_0042: ldc.i4.0 - IL_0043: ret - - IL_0044: ldc.i4.0 - IL_0045: ret - - IL_0046: ldarg.1 - IL_0047: ldnull - IL_0048: cgt.un - IL_004a: ldc.i4.0 - IL_004b: ceq - IL_004d: ret - } // end of method GenericKey`1::Equals - - .method public hidebysig virtual final - instance bool Equals(object obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 23 (0x17) - .maxstack 4 - .locals init (class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 V_0) - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: isinst class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 - IL_0007: stloc.0 - IL_0008: ldloc.0 - IL_0009: brfalse.s IL_0015 - - IL_000b: ldarg.0 - IL_000c: ldloc.0 - IL_000d: tail. - IL_000f: call instance bool class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::Equals(class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1) - IL_0014: ret - - IL_0015: ldc.i4.0 - IL_0016: ret - } // end of method GenericKey`1::Equals - - .property instance int32 Tag() - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .get instance int32 Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::get_Tag() - } // end of property GenericKey`1::Tag - .property instance !a Item1() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32, - int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .get instance !a Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::get_Item1() - } // end of property GenericKey`1::Item1 - .property instance !a Item2() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32, - int32) = ( 01 00 04 00 00 00 00 00 00 00 01 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .get instance !a Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::get_Item2() - } // end of property GenericKey`1::Item2 - } // end of class GenericKey`1 - - .method public static bool f6() cil managed - { - // Code size 50 (0x32) - .maxstack 5 - .locals init ([0] bool x, - [1] class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 t1, - [2] class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 t2, - [3] int32 i) - .line 6,6 : 8,29 - IL_0000: nop - IL_0001: ldc.i4.0 - IL_0002: stloc.0 - .line 7,7 : 8,32 - IL_0003: ldc.i4.1 - IL_0004: ldc.i4.2 - IL_0005: call class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::NewGenericKey(!0, - !0) - IL_000a: stloc.1 - .line 8,8 : 8,32 - IL_000b: ldc.i4.1 - IL_000c: ldc.i4.3 - IL_000d: call class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::NewGenericKey(!0, - !0) - IL_0012: stloc.2 - .line 9,9 : 8,32 - IL_0013: ldc.i4.0 - IL_0014: stloc.3 - IL_0015: br.s IL_0028 - - .line 10,10 : 12,26 - IL_0017: ldloc.1 - IL_0018: ldloc.2 - IL_0019: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() - IL_001e: call instance bool class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::Equals(object, - class [mscorlib]System.Collections.IEqualityComparer) - IL_0023: stloc.0 - IL_0024: ldloc.3 - IL_0025: ldc.i4.1 - IL_0026: add - IL_0027: stloc.3 - .line 9,9 : 21,29 - IL_0028: ldloc.3 - IL_0029: ldc.i4 0x989681 - IL_002e: blt.s IL_0017 - - .line 11,11 : 8,9 - IL_0030: ldloc.0 - IL_0031: ret - } // end of method EqualsMicroPerfAndCodeGenerationTests::f6 - - } // end of class EqualsMicroPerfAndCodeGenerationTests - -} // end of class Equals06 - -.class private abstract auto ansi sealed ''.$Equals06$fsx - extends [mscorlib]System.Object -{ -} // end of class ''.$Equals06$fsx - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals06.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals06.il.netfx4.bsl index a24b2266657..3c62a493a20 100644 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals06.il.netfx4.bsl +++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals06.il.netfx4.bsl @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Equals06 { - // Offset: 0x00000000 Length: 0x0000089E + // Offset: 0x00000000 Length: 0x00000896 } .mresource public FSharpOptimizationData.Equals06 { - // Offset: 0x000008A8 Length: 0x00000694 + // Offset: 0x000008A0 Length: 0x0000068E } .module Equals06.dll -// MVID: {56DD23B2-0759-31EC-A745-0383B223DD56} +// MVID: {5772F65F-0759-31EC-A745-03835FF67257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00AC0000 +// Image base: 0x00840000 // =============== CLASS MEMBERS DECLARATION =================== @@ -257,7 +257,7 @@ // Code size 16 (0x10) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 10,20 'E:\\Documents\\GitHub\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Equals06.fsx' + .line 4,4 : 10,20 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Equals06.fsx' IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -280,7 +280,7 @@ [3] int32 V_3, [4] !a V_4, [5] !a V_5) - .line 4,4 : 10,20 '' + .line 4,4 : 10,20 IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 @@ -432,7 +432,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 4,4 : 10,20 '' + .line 4,4 : 10,20 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -638,28 +638,28 @@ [1] class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 t1, [2] class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 t2, [3] int32 i) - .line 6,6 : 8,29 '' + .line 6,6 : 8,29 IL_0000: nop IL_0001: ldc.i4.0 IL_0002: stloc.0 - .line 7,7 : 8,32 '' + .line 7,7 : 8,32 IL_0003: ldc.i4.1 IL_0004: ldc.i4.2 IL_0005: call class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::NewGenericKey(!0, !0) IL_000a: stloc.1 - .line 8,8 : 8,32 '' + .line 8,8 : 8,32 IL_000b: ldc.i4.1 IL_000c: ldc.i4.3 IL_000d: call class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1 class Equals06/EqualsMicroPerfAndCodeGenerationTests/GenericKey`1::NewGenericKey(!0, !0) IL_0012: stloc.2 - .line 9,9 : 8,32 '' + .line 9,9 : 8,32 IL_0013: ldc.i4.0 IL_0014: stloc.3 IL_0015: br.s IL_0028 - .line 10,10 : 12,26 '' + .line 10,10 : 12,26 IL_0017: ldloc.1 IL_0018: ldloc.2 IL_0019: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -670,12 +670,12 @@ IL_0025: ldc.i4.1 IL_0026: add IL_0027: stloc.3 - .line 9,9 : 21,29 '' + .line 9,9 : 8,32 '' IL_0028: ldloc.3 IL_0029: ldc.i4 0x989681 IL_002e: blt.s IL_0017 - .line 11,11 : 8,9 '' + .line 11,11 : 8,9 IL_0030: ldloc.0 IL_0031: ret } // end of method EqualsMicroPerfAndCodeGenerationTests::f6 diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals07.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals07.il.bsl deleted file mode 100644 index 45a786600f3..00000000000 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals07.il.bsl +++ /dev/null @@ -1,128 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly Equals07 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.Equals07 -{ - // Offset: 0x00000000 Length: 0x00000241 -} -.mresource public FSharpOptimizationData.Equals07 -{ - // Offset: 0x00000248 Length: 0x000000AF -} -.module Equals07.dll -// MVID: {4BEB2A09-0759-AE27-A745-0383092AEB4B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x00300000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed Equals07 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class abstract auto ansi sealed nested public EqualsMicroPerfAndCodeGenerationTests - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .method public static bool f7() cil managed - { - // Code size 69 (0x45) - .maxstack 5 - .locals init ([0] bool x, - [1] uint8[] t1, - [2] uint8[] t2, - [3] int32 i) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 8,29 - IL_0000: nop - IL_0001: ldc.i4.0 - IL_0002: stloc.0 - .line 6,6 : 8,35 - IL_0003: ldc.i4.0 - IL_0004: ldc.i4.1 - IL_0005: ldc.i4.s 100 - IL_0007: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators/OperatorIntrinsics::RangeByte(uint8, - uint8, - uint8) - IL_000c: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::CreateSequence(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0011: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0016: stloc.1 - .line 7,7 : 8,35 - IL_0017: ldc.i4.0 - IL_0018: ldc.i4.1 - IL_0019: ldc.i4.s 100 - IL_001b: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators/OperatorIntrinsics::RangeByte(uint8, - uint8, - uint8) - IL_0020: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::CreateSequence(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0025: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_002a: stloc.2 - .line 8,8 : 8,32 - IL_002b: ldc.i4.0 - IL_002c: stloc.3 - IL_002d: br.s IL_003b - - .line 9,9 : 12,26 - IL_002f: ldloc.1 - IL_0030: ldloc.2 - IL_0031: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericEqualityIntrinsic(!!0, - !!0) - IL_0036: stloc.0 - IL_0037: ldloc.3 - IL_0038: ldc.i4.1 - IL_0039: add - IL_003a: stloc.3 - .line 8,8 : 21,29 - IL_003b: ldloc.3 - IL_003c: ldc.i4 0x989681 - IL_0041: blt.s IL_002f - - .line 10,10 : 8,9 - IL_0043: ldloc.0 - IL_0044: ret - } // end of method EqualsMicroPerfAndCodeGenerationTests::f7 - - } // end of class EqualsMicroPerfAndCodeGenerationTests - -} // end of class Equals07 - -.class private abstract auto ansi sealed ''.$Equals07$fsx - extends [mscorlib]System.Object -{ -} // end of class ''.$Equals07$fsx - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals07.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals07.il.netfx4.bsl index c63f1a0b602..2e9340a8682 100644 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals07.il.netfx4.bsl +++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals07.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16774 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly Equals07 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Equals07 { - // Offset: 0x00000000 Length: 0x00000251 + // Offset: 0x00000000 Length: 0x0000022D } .mresource public FSharpOptimizationData.Equals07 { - // Offset: 0x00000258 Length: 0x000000AF + // Offset: 0x00000238 Length: 0x000000AF } .module Equals07.dll -// MVID: {4DAC3A4F-0759-AE27-A745-03834F3AAC4D} +// MVID: {5772F662-0759-AE27-A745-038362F67257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000000000170000 +// Image base: 0x012A0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -64,11 +64,11 @@ [2] uint8[] t2, [3] int32 i) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 8,29 + .line 5,5 : 8,29 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Equals07.fsx' IL_0000: nop IL_0001: ldc.i4.0 IL_0002: stloc.0 - .line 6,6 : 8,35 + .line 6,6 : 8,35 '' IL_0003: ldc.i4.0 IL_0004: ldc.i4.1 IL_0005: ldc.i4.s 100 @@ -78,7 +78,7 @@ IL_000c: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::CreateSequence(class [mscorlib]System.Collections.Generic.IEnumerable`1) IL_0011: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray(class [mscorlib]System.Collections.Generic.IEnumerable`1) IL_0016: stloc.1 - .line 7,7 : 8,35 + .line 7,7 : 8,35 '' IL_0017: ldc.i4.0 IL_0018: ldc.i4.1 IL_0019: ldc.i4.s 100 @@ -88,12 +88,12 @@ IL_0020: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::CreateSequence(class [mscorlib]System.Collections.Generic.IEnumerable`1) IL_0025: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray(class [mscorlib]System.Collections.Generic.IEnumerable`1) IL_002a: stloc.2 - .line 8,8 : 8,32 + .line 8,8 : 8,32 '' IL_002b: ldc.i4.0 IL_002c: stloc.3 IL_002d: br.s IL_003b - .line 9,9 : 12,26 + .line 9,9 : 12,26 '' IL_002f: ldloc.1 IL_0030: ldloc.2 IL_0031: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericEqualityIntrinsic(!!0, @@ -103,12 +103,12 @@ IL_0038: ldc.i4.1 IL_0039: add IL_003a: stloc.3 - .line 8,8 : 21,29 + .line 8,8 : 8,32 '' IL_003b: ldloc.3 IL_003c: ldc.i4 0x989681 IL_0041: blt.s IL_002f - .line 10,10 : 8,9 + .line 10,10 : 8,9 '' IL_0043: ldloc.0 IL_0044: ret } // end of method EqualsMicroPerfAndCodeGenerationTests::f7 diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals08.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals08.il.bsl deleted file mode 100644 index bc08b246cfb..00000000000 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals08.il.bsl +++ /dev/null @@ -1,128 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly Equals08 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.Equals08 -{ - // Offset: 0x00000000 Length: 0x00000241 -} -.mresource public FSharpOptimizationData.Equals08 -{ - // Offset: 0x00000248 Length: 0x000000AF -} -.module Equals08.dll -// MVID: {4BEB2A0C-0759-659E-A745-03830C2AEB4B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x00200000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed Equals08 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class abstract auto ansi sealed nested public EqualsMicroPerfAndCodeGenerationTests - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .method public static bool f8() cil managed - { - // Code size 69 (0x45) - .maxstack 5 - .locals init ([0] bool x, - [1] int32[] t1, - [2] int32[] t2, - [3] int32 i) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 8,29 - IL_0000: nop - IL_0001: ldc.i4.0 - IL_0002: stloc.0 - .line 6,6 : 8,31 - IL_0003: ldc.i4.0 - IL_0004: ldc.i4.1 - IL_0005: ldc.i4.s 100 - IL_0007: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators/OperatorIntrinsics::RangeInt32(int32, - int32, - int32) - IL_000c: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::CreateSequence(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0011: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0016: stloc.1 - .line 7,7 : 8,31 - IL_0017: ldc.i4.0 - IL_0018: ldc.i4.1 - IL_0019: ldc.i4.s 100 - IL_001b: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators/OperatorIntrinsics::RangeInt32(int32, - int32, - int32) - IL_0020: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::CreateSequence(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0025: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_002a: stloc.2 - .line 8,8 : 8,32 - IL_002b: ldc.i4.0 - IL_002c: stloc.3 - IL_002d: br.s IL_003b - - .line 9,9 : 12,26 - IL_002f: ldloc.1 - IL_0030: ldloc.2 - IL_0031: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericEqualityIntrinsic(!!0, - !!0) - IL_0036: stloc.0 - IL_0037: ldloc.3 - IL_0038: ldc.i4.1 - IL_0039: add - IL_003a: stloc.3 - .line 8,8 : 21,29 - IL_003b: ldloc.3 - IL_003c: ldc.i4 0x989681 - IL_0041: blt.s IL_002f - - .line 10,10 : 8,9 - IL_0043: ldloc.0 - IL_0044: ret - } // end of method EqualsMicroPerfAndCodeGenerationTests::f8 - - } // end of class EqualsMicroPerfAndCodeGenerationTests - -} // end of class Equals08 - -.class private abstract auto ansi sealed ''.$Equals08$fsx - extends [mscorlib]System.Object -{ -} // end of class ''.$Equals08$fsx - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals08.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals08.il.netfx4.bsl index dad9bda5c82..eca3bb064a3 100644 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals08.il.netfx4.bsl +++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals08.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.16774 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 + .ver 4:4:1:0 } .assembly Equals08 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Equals08 { - // Offset: 0x00000000 Length: 0x00000251 + // Offset: 0x00000000 Length: 0x0000022D } .mresource public FSharpOptimizationData.Equals08 { - // Offset: 0x00000258 Length: 0x000000AF + // Offset: 0x00000238 Length: 0x000000AF } .module Equals08.dll -// MVID: {4DAC3A51-0759-659E-A745-0383513AAC4D} +// MVID: {5772F665-0759-659E-A745-038365F67257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00000000004D0000 +// Image base: 0x01F90000 // =============== CLASS MEMBERS DECLARATION =================== @@ -64,11 +64,11 @@ [2] int32[] t2, [3] int32 i) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 8,29 + .line 5,5 : 8,29 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Equals08.fsx' IL_0000: nop IL_0001: ldc.i4.0 IL_0002: stloc.0 - .line 6,6 : 8,31 + .line 6,6 : 8,31 '' IL_0003: ldc.i4.0 IL_0004: ldc.i4.1 IL_0005: ldc.i4.s 100 @@ -78,7 +78,7 @@ IL_000c: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::CreateSequence(class [mscorlib]System.Collections.Generic.IEnumerable`1) IL_0011: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray(class [mscorlib]System.Collections.Generic.IEnumerable`1) IL_0016: stloc.1 - .line 7,7 : 8,31 + .line 7,7 : 8,31 '' IL_0017: ldc.i4.0 IL_0018: ldc.i4.1 IL_0019: ldc.i4.s 100 @@ -88,12 +88,12 @@ IL_0020: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::CreateSequence(class [mscorlib]System.Collections.Generic.IEnumerable`1) IL_0025: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray(class [mscorlib]System.Collections.Generic.IEnumerable`1) IL_002a: stloc.2 - .line 8,8 : 8,32 + .line 8,8 : 8,32 '' IL_002b: ldc.i4.0 IL_002c: stloc.3 IL_002d: br.s IL_003b - .line 9,9 : 12,26 + .line 9,9 : 12,26 '' IL_002f: ldloc.1 IL_0030: ldloc.2 IL_0031: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericEqualityIntrinsic(!!0, @@ -103,12 +103,12 @@ IL_0038: ldc.i4.1 IL_0039: add IL_003a: stloc.3 - .line 8,8 : 21,29 + .line 8,8 : 8,32 '' IL_003b: ldloc.3 IL_003c: ldc.i4 0x989681 IL_0041: blt.s IL_002f - .line 10,10 : 8,9 + .line 10,10 : 8,9 '' IL_0043: ldloc.0 IL_0044: ret } // end of method EqualsMicroPerfAndCodeGenerationTests::f8 diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals09.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals09.il.bsl deleted file mode 100644 index b151b8f21cc..00000000000 Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals09.il.bsl and /dev/null differ diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals09.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals09.il.netfx4.bsl index 69b88c9b9a8..2ffd130c8b1 100644 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals09.il.netfx4.bsl +++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals09.il.netfx4.bsl @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Equals09 { - // Offset: 0x00000000 Length: 0x00000AA8 + // Offset: 0x00000000 Length: 0x00000AA0 } .mresource public FSharpOptimizationData.Equals09 { - // Offset: 0x00000AB0 Length: 0x0000058F + // Offset: 0x00000AA8 Length: 0x0000058B } .module Equals09.dll -// MVID: {56DD23D1-0759-46D9-A745-0383D123DD56} +// MVID: {5772F667-0759-46D9-A745-038367F67257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00DE0000 +// Image base: 0x00FD0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -266,7 +266,7 @@ // Code size 14 (0xe) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 10,13 'E:\\Documents\\GitHub\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Equals09.fsx' + .line 4,4 : 10,13 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Equals09.fsx' IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -288,7 +288,7 @@ [3] int32 V_3, [4] int32 V_4, [5] int32 V_5) - .line 4,4 : 10,13 '' + .line 4,4 : 10,13 IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any Equals09/EqualsMicroPerfAndCodeGenerationTests/Key @@ -438,7 +438,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 4,4 : 10,13 '' + .line 4,4 : 10,13 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -830,7 +830,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 - .line 5,5 : 10,26 '' + .line 5,5 : 10,26 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -857,7 +857,7 @@ [8] class Equals09/EqualsMicroPerfAndCodeGenerationTests/Key V_8, [9] class Equals09/EqualsMicroPerfAndCodeGenerationTests/Key V_9, [10] int32 V_10) - .line 5,5 : 10,26 '' + .line 5,5 : 10,26 IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any Equals09/EqualsMicroPerfAndCodeGenerationTests/KeyWithInnerKeys @@ -1045,7 +1045,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 5,5 : 10,26 '' + .line 5,5 : 10,26 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -1265,11 +1265,11 @@ [1] class Equals09/EqualsMicroPerfAndCodeGenerationTests/KeyWithInnerKeys key1, [2] class Equals09/EqualsMicroPerfAndCodeGenerationTests/KeyWithInnerKeys key2, [3] int32 i) - .line 7,7 : 8,29 '' + .line 7,7 : 8,29 IL_0000: nop IL_0001: ldc.i4.0 IL_0002: stloc.0 - .line 8,8 : 8,65 '' + .line 8,8 : 8,65 IL_0003: ldc.i4.1 IL_0004: ldc.i4.2 IL_0005: call class Equals09/EqualsMicroPerfAndCodeGenerationTests/Key Equals09/EqualsMicroPerfAndCodeGenerationTests/Key::NewKey(int32, @@ -1287,7 +1287,7 @@ IL_001d: call class Equals09/EqualsMicroPerfAndCodeGenerationTests/KeyWithInnerKeys Equals09/EqualsMicroPerfAndCodeGenerationTests/KeyWithInnerKeys::NewKeyWithInnerKeys(class Equals09/EqualsMicroPerfAndCodeGenerationTests/Key, class [mscorlib]System.Tuple`2) IL_0022: stloc.1 - .line 9,9 : 8,65 '' + .line 9,9 : 8,65 IL_0023: ldc.i4.1 IL_0024: ldc.i4.2 IL_0025: call class Equals09/EqualsMicroPerfAndCodeGenerationTests/Key Equals09/EqualsMicroPerfAndCodeGenerationTests/Key::NewKey(int32, @@ -1305,12 +1305,12 @@ IL_003d: call class Equals09/EqualsMicroPerfAndCodeGenerationTests/KeyWithInnerKeys Equals09/EqualsMicroPerfAndCodeGenerationTests/KeyWithInnerKeys::NewKeyWithInnerKeys(class Equals09/EqualsMicroPerfAndCodeGenerationTests/Key, class [mscorlib]System.Tuple`2) IL_0042: stloc.2 - .line 10,10 : 8,32 '' + .line 10,10 : 8,32 IL_0043: ldc.i4.0 IL_0044: stloc.3 IL_0045: br.s IL_0058 - .line 11,11 : 12,30 '' + .line 11,11 : 12,30 IL_0047: ldloc.1 IL_0048: ldloc.2 IL_0049: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -1321,7 +1321,7 @@ IL_0055: ldc.i4.1 IL_0056: add IL_0057: stloc.3 - .line 10,10 : 21,29 '' + .line 10,10 : 8,32 '' IL_0058: ldloc.3 IL_0059: ldc.i4 0x989681 IL_005e: blt.s IL_0047 diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash01.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash01.il.bsl deleted file mode 100644 index fcb12c0e793..00000000000 Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash01.il.bsl and /dev/null differ diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash01.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash01.il.netfx4.bsl index 3ffc00ec766..b202ba27c68 100644 Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash01.il.netfx4.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash01.il.netfx4.bsl differ diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash03.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash03.il.bsl deleted file mode 100644 index ac4c6672a2b..00000000000 Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash03.il.bsl and /dev/null differ diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash03.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash03.il.netfx4.bsl index 7d8cb513f39..54f4875a05a 100644 Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash03.il.netfx4.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash03.il.netfx4.bsl differ diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash04.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash04.il.bsl deleted file mode 100644 index 53d18fd6229..00000000000 Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash04.il.bsl and /dev/null differ diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash04.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash04.il.netfx4.bsl index e361e204375..6664d403e1d 100644 Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash04.il.netfx4.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash04.il.netfx4.bsl differ diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash05.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash05.il.bsl deleted file mode 100644 index 0374b8f1a77..00000000000 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash05.il.bsl +++ /dev/null @@ -1,647 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly Hash05 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.Hash05 -{ - // Offset: 0x00000000 Length: 0x000006EC -} -.mresource public FSharpOptimizationData.Hash05 -{ - // Offset: 0x000006F0 Length: 0x000003B1 -} -.module Hash05.dll -// MVID: {4BEB2A1C-9642-7857-A745-03831C2AEB4B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x00570000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed Hash05 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class abstract auto ansi sealed nested public HashMicroPerfAndCodeGenerationTests - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto autochar serializable sealed nested public beforefieldinit Key - extends [mscorlib]System.Object - implements class [mscorlib]System.IEquatable`1, - [mscorlib]System.Collections.IStructuralEquatable, - class [mscorlib]System.IComparable`1, - [mscorlib]System.IComparable, - [mscorlib]System.Collections.IStructuralComparable - { - .custom instance void [mscorlib]System.Diagnostics.DebuggerDisplayAttribute::.ctor(string) = ( 01 00 15 7B 5F 5F 44 65 62 75 67 44 69 73 70 6C // ...{__DebugDispl - 61 79 28 29 2C 6E 71 7D 00 00 ) // ay(),nq}.. - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 01 00 00 00 00 00 ) - .field assembly initonly int32 item1 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .field assembly initonly int32 item2 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method public static class Hash05/HashMicroPerfAndCodeGenerationTests/Key - NewKey(int32 item1, - int32 item2) cil managed - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32) = ( 01 00 08 00 00 00 00 00 00 00 00 00 ) - // Code size 8 (0x8) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldarg.1 - IL_0002: newobj instance void Hash05/HashMicroPerfAndCodeGenerationTests/Key::.ctor(int32, - int32) - IL_0007: ret - } // end of method Key::NewKey - - .method assembly specialname rtspecialname - instance void .ctor(int32 item1, - int32 item2) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 21 (0x15) - .maxstack 2 - IL_0000: ldarg.0 - IL_0001: call instance void [mscorlib]System.Object::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::item1 - IL_000d: ldarg.0 - IL_000e: ldarg.2 - IL_000f: stfld int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::item2 - IL_0014: ret - } // end of method Key::.ctor - - .method public instance int32 get_Item1() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 7 (0x7) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldfld int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::item1 - IL_0006: ret - } // end of method Key::get_Item1 - - .method public instance int32 get_Item2() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 7 (0x7) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldfld int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::item2 - IL_0006: ret - } // end of method Key::get_Item2 - - .method public instance int32 get_Tag() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 4 (0x4) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: pop - IL_0002: ldc.i4.0 - IL_0003: ret - } // end of method Key::get_Tag - - .method assembly specialname instance object - __DebugDisplay() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 22 (0x16) - .maxstack 4 - IL_0000: ldstr "%+0.8A" - IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,string>::.ctor(string) - IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_000f: ldarg.0 - IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) - IL_0015: ret - } // end of method Key::__DebugDisplay - - .method public hidebysig virtual final - instance int32 CompareTo(class Hash05/HashMicroPerfAndCodeGenerationTests/Key obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 120 (0x78) - .maxstack 4 - .locals init (class Hash05/HashMicroPerfAndCodeGenerationTests/Key V_0, - class Hash05/HashMicroPerfAndCodeGenerationTests/Key V_1, - int32 V_2, - class [mscorlib]System.Collections.IComparer V_3, - int32 V_4, - int32 V_5) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_006e - - IL_0007: ldarg.1 - IL_0008: ldnull - IL_0009: cgt.un - IL_000b: brfalse.s IL_006c - - IL_000d: ldarg.0 - IL_000e: pop - IL_000f: ldarg.0 - IL_0010: stloc.0 - IL_0011: ldarg.1 - IL_0012: stloc.1 - IL_0013: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0018: stloc.3 - IL_0019: ldloc.0 - IL_001a: ldfld int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::item1 - IL_001f: stloc.s V_4 - IL_0021: ldloc.1 - IL_0022: ldfld int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::item1 - IL_0027: stloc.s V_5 - IL_0029: ldloc.s V_4 - IL_002b: ldloc.s V_5 - IL_002d: bge.s IL_0033 - - IL_002f: ldc.i4.m1 - IL_0030: nop - IL_0031: br.s IL_003a - - IL_0033: ldloc.s V_4 - IL_0035: ldloc.s V_5 - IL_0037: cgt - IL_0039: nop - IL_003a: stloc.2 - IL_003b: ldloc.2 - IL_003c: ldc.i4.0 - IL_003d: bge.s IL_0041 - - IL_003f: ldloc.2 - IL_0040: ret - - IL_0041: ldloc.2 - IL_0042: ldc.i4.0 - IL_0043: ble.s IL_0047 - - IL_0045: ldloc.2 - IL_0046: ret - - IL_0047: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_004c: stloc.3 - IL_004d: ldloc.0 - IL_004e: ldfld int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::item2 - IL_0053: stloc.s V_4 - IL_0055: ldloc.1 - IL_0056: ldfld int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::item2 - IL_005b: stloc.s V_5 - IL_005d: ldloc.s V_4 - IL_005f: ldloc.s V_5 - IL_0061: bge.s IL_0065 - - IL_0063: ldc.i4.m1 - IL_0064: ret - - IL_0065: ldloc.s V_4 - IL_0067: ldloc.s V_5 - IL_0069: cgt - IL_006b: ret - - IL_006c: ldc.i4.1 - IL_006d: ret - - IL_006e: ldarg.1 - IL_006f: ldnull - IL_0070: cgt.un - IL_0072: brfalse.s IL_0076 - - IL_0074: ldc.i4.m1 - IL_0075: ret - - IL_0076: ldc.i4.0 - IL_0077: ret - } // end of method Key::CompareTo - - .method public hidebysig virtual final - instance int32 CompareTo(object obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 14 (0xe) - .maxstack 4 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 10,13 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldarg.1 - IL_0003: unbox.any Hash05/HashMicroPerfAndCodeGenerationTests/Key - IL_0008: call instance int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::CompareTo(class Hash05/HashMicroPerfAndCodeGenerationTests/Key) - IL_000d: ret - } // end of method Key::CompareTo - - .method public hidebysig virtual final - instance int32 CompareTo(object obj, - class [mscorlib]System.Collections.IComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 125 (0x7d) - .maxstack 4 - .locals init ([0] class Hash05/HashMicroPerfAndCodeGenerationTests/Key V_0, - [1] class Hash05/HashMicroPerfAndCodeGenerationTests/Key V_1, - [2] class Hash05/HashMicroPerfAndCodeGenerationTests/Key V_2, - [3] int32 V_3, - [4] int32 V_4, - [5] int32 V_5) - .line 5,5 : 10,13 - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: unbox.any Hash05/HashMicroPerfAndCodeGenerationTests/Key - IL_0007: stloc.0 - IL_0008: ldarg.0 - IL_0009: ldnull - IL_000a: cgt.un - IL_000c: brfalse.s IL_006e - - IL_000e: ldarg.1 - IL_000f: unbox.any Hash05/HashMicroPerfAndCodeGenerationTests/Key - IL_0014: ldnull - IL_0015: cgt.un - IL_0017: brfalse.s IL_006c - - IL_0019: ldarg.0 - IL_001a: pop - IL_001b: ldarg.0 - IL_001c: stloc.1 - IL_001d: ldloc.0 - IL_001e: stloc.2 - IL_001f: ldloc.1 - IL_0020: ldfld int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::item1 - IL_0025: stloc.s V_4 - IL_0027: ldloc.2 - IL_0028: ldfld int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::item1 - IL_002d: stloc.s V_5 - IL_002f: ldloc.s V_4 - IL_0031: ldloc.s V_5 - IL_0033: bge.s IL_0039 - - IL_0035: ldc.i4.m1 - IL_0036: nop - IL_0037: br.s IL_0040 - - IL_0039: ldloc.s V_4 - IL_003b: ldloc.s V_5 - IL_003d: cgt - IL_003f: nop - IL_0040: stloc.3 - IL_0041: ldloc.3 - IL_0042: ldc.i4.0 - IL_0043: bge.s IL_0047 - - IL_0045: ldloc.3 - IL_0046: ret - - IL_0047: ldloc.3 - IL_0048: ldc.i4.0 - IL_0049: ble.s IL_004d - - IL_004b: ldloc.3 - IL_004c: ret - - IL_004d: ldloc.1 - IL_004e: ldfld int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::item2 - IL_0053: stloc.s V_4 - IL_0055: ldloc.2 - IL_0056: ldfld int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::item2 - IL_005b: stloc.s V_5 - IL_005d: ldloc.s V_4 - IL_005f: ldloc.s V_5 - IL_0061: bge.s IL_0065 - - IL_0063: ldc.i4.m1 - IL_0064: ret - - IL_0065: ldloc.s V_4 - IL_0067: ldloc.s V_5 - IL_0069: cgt - IL_006b: ret - - IL_006c: ldc.i4.1 - IL_006d: ret - - IL_006e: ldarg.1 - IL_006f: unbox.any Hash05/HashMicroPerfAndCodeGenerationTests/Key - IL_0074: ldnull - IL_0075: cgt.un - IL_0077: brfalse.s IL_007b - - IL_0079: ldc.i4.m1 - IL_007a: ret - - IL_007b: ldc.i4.0 - IL_007c: ret - } // end of method Key::CompareTo - - .method public hidebysig virtual final - instance int32 GetHashCode(class [mscorlib]System.Collections.IEqualityComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 61 (0x3d) - .maxstack 7 - .locals init (int32 V_0, - class Hash05/HashMicroPerfAndCodeGenerationTests/Key V_1) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_003b - - IL_0007: ldc.i4.0 - IL_0008: stloc.0 - IL_0009: ldarg.0 - IL_000a: pop - IL_000b: ldarg.0 - IL_000c: stloc.1 - IL_000d: ldc.i4.0 - IL_000e: stloc.0 - IL_000f: ldc.i4 0x9e3779b9 - IL_0014: ldloc.1 - IL_0015: ldfld int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::item2 - IL_001a: ldloc.0 - IL_001b: ldc.i4.6 - IL_001c: shl - IL_001d: ldloc.0 - IL_001e: ldc.i4.2 - IL_001f: shr - IL_0020: add - IL_0021: add - IL_0022: add - IL_0023: stloc.0 - IL_0024: ldc.i4 0x9e3779b9 - IL_0029: ldloc.1 - IL_002a: ldfld int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::item1 - IL_002f: ldloc.0 - IL_0030: ldc.i4.6 - IL_0031: shl - IL_0032: ldloc.0 - IL_0033: ldc.i4.2 - IL_0034: shr - IL_0035: add - IL_0036: add - IL_0037: add - IL_0038: stloc.0 - IL_0039: ldloc.0 - IL_003a: ret - - IL_003b: ldc.i4.0 - IL_003c: ret - } // end of method Key::GetHashCode - - .method public hidebysig virtual final - instance int32 GetHashCode() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 13 (0xd) - .maxstack 4 - .line 5,5 : 10,13 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() - IL_0007: call instance int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::GetHashCode(class [mscorlib]System.Collections.IEqualityComparer) - IL_000c: ret - } // end of method Key::GetHashCode - - .method public hidebysig virtual final - instance bool Equals(object obj, - class [mscorlib]System.Collections.IEqualityComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 64 (0x40) - .maxstack 4 - .locals init (class Hash05/HashMicroPerfAndCodeGenerationTests/Key V_0, - class Hash05/HashMicroPerfAndCodeGenerationTests/Key V_1, - class Hash05/HashMicroPerfAndCodeGenerationTests/Key V_2) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_0038 - - IL_0007: ldarg.1 - IL_0008: isinst Hash05/HashMicroPerfAndCodeGenerationTests/Key - IL_000d: stloc.0 - IL_000e: ldloc.0 - IL_000f: brfalse.s IL_0036 - - IL_0011: ldarg.0 - IL_0012: pop - IL_0013: ldarg.0 - IL_0014: stloc.1 - IL_0015: ldloc.0 - IL_0016: stloc.2 - IL_0017: ldloc.1 - IL_0018: ldfld int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::item1 - IL_001d: ldloc.2 - IL_001e: ldfld int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::item1 - IL_0023: bne.un.s IL_0034 - - IL_0025: ldloc.1 - IL_0026: ldfld int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::item2 - IL_002b: ldloc.2 - IL_002c: ldfld int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::item2 - IL_0031: ceq - IL_0033: ret - - IL_0034: ldc.i4.0 - IL_0035: ret - - IL_0036: ldc.i4.0 - IL_0037: ret - - IL_0038: ldarg.1 - IL_0039: ldnull - IL_003a: cgt.un - IL_003c: ldc.i4.0 - IL_003d: ceq - IL_003f: ret - } // end of method Key::Equals - - .method public hidebysig virtual final - instance bool Equals(class Hash05/HashMicroPerfAndCodeGenerationTests/Key obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 60 (0x3c) - .maxstack 4 - .locals init (class Hash05/HashMicroPerfAndCodeGenerationTests/Key V_0, - class Hash05/HashMicroPerfAndCodeGenerationTests/Key V_1) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_0034 - - IL_0007: ldarg.1 - IL_0008: ldnull - IL_0009: cgt.un - IL_000b: brfalse.s IL_0032 - - IL_000d: ldarg.0 - IL_000e: pop - IL_000f: ldarg.0 - IL_0010: stloc.0 - IL_0011: ldarg.1 - IL_0012: stloc.1 - IL_0013: ldloc.0 - IL_0014: ldfld int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::item1 - IL_0019: ldloc.1 - IL_001a: ldfld int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::item1 - IL_001f: bne.un.s IL_0030 - - IL_0021: ldloc.0 - IL_0022: ldfld int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::item2 - IL_0027: ldloc.1 - IL_0028: ldfld int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::item2 - IL_002d: ceq - IL_002f: ret - - IL_0030: ldc.i4.0 - IL_0031: ret - - IL_0032: ldc.i4.0 - IL_0033: ret - - IL_0034: ldarg.1 - IL_0035: ldnull - IL_0036: cgt.un - IL_0038: ldc.i4.0 - IL_0039: ceq - IL_003b: ret - } // end of method Key::Equals - - .method public hidebysig virtual final - instance bool Equals(object obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 21 (0x15) - .maxstack 4 - .locals init (class Hash05/HashMicroPerfAndCodeGenerationTests/Key V_0) - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: isinst Hash05/HashMicroPerfAndCodeGenerationTests/Key - IL_0007: stloc.0 - IL_0008: ldloc.0 - IL_0009: brfalse.s IL_0013 - - IL_000b: ldarg.0 - IL_000c: ldloc.0 - IL_000d: call instance bool Hash05/HashMicroPerfAndCodeGenerationTests/Key::Equals(class Hash05/HashMicroPerfAndCodeGenerationTests/Key) - IL_0012: ret - - IL_0013: ldc.i4.0 - IL_0014: ret - } // end of method Key::Equals - - .property instance int32 Tag() - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .get instance int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::get_Tag() - } // end of property Key::Tag - .property instance int32 Item1() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32, - int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .get instance int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::get_Item1() - } // end of property Key::Item1 - .property instance int32 Item2() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32, - int32) = ( 01 00 04 00 00 00 00 00 00 00 01 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .get instance int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::get_Item2() - } // end of property Key::Item2 - } // end of class Key - - .method public static void f5() cil managed - { - // Code size 36 (0x24) - .maxstack 4 - .locals init ([0] int32 i, - [1] int32 V_1) - .line 8,8 : 8,32 - IL_0000: nop - IL_0001: ldc.i4.0 - IL_0002: stloc.0 - IL_0003: br.s IL_001b - - .line 9,9 : 12,37 - IL_0005: ldc.i4.1 - IL_0006: ldc.i4.2 - IL_0007: call class Hash05/HashMicroPerfAndCodeGenerationTests/Key Hash05/HashMicroPerfAndCodeGenerationTests/Key::NewKey(int32, - int32) - IL_000c: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityERComparer() - IL_0011: call instance int32 Hash05/HashMicroPerfAndCodeGenerationTests/Key::GetHashCode(class [mscorlib]System.Collections.IEqualityComparer) - IL_0016: stloc.1 - IL_0017: ldloc.0 - IL_0018: ldc.i4.1 - IL_0019: add - IL_001a: stloc.0 - .line 8,8 : 21,29 - IL_001b: ldloc.0 - IL_001c: ldc.i4 0x989681 - IL_0021: blt.s IL_0005 - - IL_0023: ret - } // end of method HashMicroPerfAndCodeGenerationTests::f5 - - } // end of class HashMicroPerfAndCodeGenerationTests - -} // end of class Hash05 - -.class private abstract auto ansi sealed ''.$Hash05$fsx - extends [mscorlib]System.Object -{ -} // end of class ''.$Hash05$fsx - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash05.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash05.il.netfx4.bsl index 7dd7f57d48a..4c3e0ca5a9e 100644 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash05.il.netfx4.bsl +++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash05.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17376 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly Hash05 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Hash05 { - // Offset: 0x00000000 Length: 0x000006FC + // Offset: 0x00000000 Length: 0x000006E0 } .mresource public FSharpOptimizationData.Hash05 { - // Offset: 0x00000700 Length: 0x000003B1 + // Offset: 0x000006E8 Length: 0x000003B1 } .module Hash05.dll -// MVID: {4F20E463-9642-7857-A745-038363E4204F} +// MVID: {5772F673-9642-7857-A745-038373F67257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000006297810000 +// Image base: 0x012C0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -266,7 +266,7 @@ // Code size 14 (0xe) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 10,13 + .line 5,5 : 10,13 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Hash05.fsx' IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -288,7 +288,7 @@ [3] int32 V_3, [4] int32 V_4, [5] int32 V_5) - .line 5,5 : 10,13 + .line 5,5 : 10,13 '' IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any Hash05/HashMicroPerfAndCodeGenerationTests/Key @@ -438,7 +438,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 5,5 : 10,13 + .line 5,5 : 10,13 '' IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -609,13 +609,13 @@ .maxstack 4 .locals init ([0] int32 i, [1] int32 V_1) - .line 8,8 : 8,32 + .line 8,8 : 8,32 '' IL_0000: nop IL_0001: ldc.i4.0 IL_0002: stloc.0 IL_0003: br.s IL_001b - .line 9,9 : 12,37 + .line 9,9 : 12,37 '' IL_0005: ldc.i4.1 IL_0006: ldc.i4.2 IL_0007: call class Hash05/HashMicroPerfAndCodeGenerationTests/Key Hash05/HashMicroPerfAndCodeGenerationTests/Key::NewKey(int32, @@ -627,7 +627,7 @@ IL_0018: ldc.i4.1 IL_0019: add IL_001a: stloc.0 - .line 8,8 : 21,29 + .line 8,8 : 8,32 '' IL_001b: ldloc.0 IL_001c: ldc.i4 0x989681 IL_0021: blt.s IL_0005 diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash06.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash06.il.bsl deleted file mode 100644 index d7b14a26e50..00000000000 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash06.il.bsl +++ /dev/null @@ -1,646 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly Hash06 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.Hash06 -{ - // Offset: 0x00000000 Length: 0x000006ED -} -.mresource public FSharpOptimizationData.Hash06 -{ - // Offset: 0x000006F8 Length: 0x000003B2 -} -.module Hash06.dll -// MVID: {4BEB2A1F-9642-78F2-A745-03831F2AEB4B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x002F0000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed Hash06 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class abstract auto ansi sealed nested public HashMicroPerfAndCodeGenerationTests - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto autochar serializable sealed nested public beforefieldinit Key - extends [mscorlib]System.Object - implements class [mscorlib]System.IEquatable`1, - [mscorlib]System.Collections.IStructuralEquatable, - class [mscorlib]System.IComparable`1, - [mscorlib]System.IComparable, - [mscorlib]System.Collections.IStructuralComparable - { - .custom instance void [mscorlib]System.Diagnostics.DebuggerDisplayAttribute::.ctor(string) = ( 01 00 15 7B 5F 5F 44 65 62 75 67 44 69 73 70 6C // ...{__DebugDispl - 61 79 28 29 2C 6E 71 7D 00 00 ) // ay(),nq}.. - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 01 00 00 00 00 00 ) - .field assembly initonly int32 item1 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .field assembly initonly int32 item2 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method public static class Hash06/HashMicroPerfAndCodeGenerationTests/Key - NewKey(int32 item1, - int32 item2) cil managed - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32) = ( 01 00 08 00 00 00 00 00 00 00 00 00 ) - // Code size 8 (0x8) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldarg.1 - IL_0002: newobj instance void Hash06/HashMicroPerfAndCodeGenerationTests/Key::.ctor(int32, - int32) - IL_0007: ret - } // end of method Key::NewKey - - .method assembly specialname rtspecialname - instance void .ctor(int32 item1, - int32 item2) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 21 (0x15) - .maxstack 2 - IL_0000: ldarg.0 - IL_0001: call instance void [mscorlib]System.Object::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld int32 Hash06/HashMicroPerfAndCodeGenerationTests/Key::item1 - IL_000d: ldarg.0 - IL_000e: ldarg.2 - IL_000f: stfld int32 Hash06/HashMicroPerfAndCodeGenerationTests/Key::item2 - IL_0014: ret - } // end of method Key::.ctor - - .method public instance int32 get_Item1() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 7 (0x7) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldfld int32 Hash06/HashMicroPerfAndCodeGenerationTests/Key::item1 - IL_0006: ret - } // end of method Key::get_Item1 - - .method public instance int32 get_Item2() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 7 (0x7) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldfld int32 Hash06/HashMicroPerfAndCodeGenerationTests/Key::item2 - IL_0006: ret - } // end of method Key::get_Item2 - - .method public instance int32 get_Tag() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 4 (0x4) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: pop - IL_0002: ldc.i4.0 - IL_0003: ret - } // end of method Key::get_Tag - - .method assembly specialname instance object - __DebugDisplay() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 22 (0x16) - .maxstack 4 - IL_0000: ldstr "%+0.8A" - IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,string>::.ctor(string) - IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_000f: ldarg.0 - IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) - IL_0015: ret - } // end of method Key::__DebugDisplay - - .method public hidebysig virtual final - instance int32 CompareTo(class Hash06/HashMicroPerfAndCodeGenerationTests/Key obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 120 (0x78) - .maxstack 4 - .locals init (class Hash06/HashMicroPerfAndCodeGenerationTests/Key V_0, - class Hash06/HashMicroPerfAndCodeGenerationTests/Key V_1, - int32 V_2, - class [mscorlib]System.Collections.IComparer V_3, - int32 V_4, - int32 V_5) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_006e - - IL_0007: ldarg.1 - IL_0008: ldnull - IL_0009: cgt.un - IL_000b: brfalse.s IL_006c - - IL_000d: ldarg.0 - IL_000e: pop - IL_000f: ldarg.0 - IL_0010: stloc.0 - IL_0011: ldarg.1 - IL_0012: stloc.1 - IL_0013: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0018: stloc.3 - IL_0019: ldloc.0 - IL_001a: ldfld int32 Hash06/HashMicroPerfAndCodeGenerationTests/Key::item1 - IL_001f: stloc.s V_4 - IL_0021: ldloc.1 - IL_0022: ldfld int32 Hash06/HashMicroPerfAndCodeGenerationTests/Key::item1 - IL_0027: stloc.s V_5 - IL_0029: ldloc.s V_4 - IL_002b: ldloc.s V_5 - IL_002d: bge.s IL_0033 - - IL_002f: ldc.i4.m1 - IL_0030: nop - IL_0031: br.s IL_003a - - IL_0033: ldloc.s V_4 - IL_0035: ldloc.s V_5 - IL_0037: cgt - IL_0039: nop - IL_003a: stloc.2 - IL_003b: ldloc.2 - IL_003c: ldc.i4.0 - IL_003d: bge.s IL_0041 - - IL_003f: ldloc.2 - IL_0040: ret - - IL_0041: ldloc.2 - IL_0042: ldc.i4.0 - IL_0043: ble.s IL_0047 - - IL_0045: ldloc.2 - IL_0046: ret - - IL_0047: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_004c: stloc.3 - IL_004d: ldloc.0 - IL_004e: ldfld int32 Hash06/HashMicroPerfAndCodeGenerationTests/Key::item2 - IL_0053: stloc.s V_4 - IL_0055: ldloc.1 - IL_0056: ldfld int32 Hash06/HashMicroPerfAndCodeGenerationTests/Key::item2 - IL_005b: stloc.s V_5 - IL_005d: ldloc.s V_4 - IL_005f: ldloc.s V_5 - IL_0061: bge.s IL_0065 - - IL_0063: ldc.i4.m1 - IL_0064: ret - - IL_0065: ldloc.s V_4 - IL_0067: ldloc.s V_5 - IL_0069: cgt - IL_006b: ret - - IL_006c: ldc.i4.1 - IL_006d: ret - - IL_006e: ldarg.1 - IL_006f: ldnull - IL_0070: cgt.un - IL_0072: brfalse.s IL_0076 - - IL_0074: ldc.i4.m1 - IL_0075: ret - - IL_0076: ldc.i4.0 - IL_0077: ret - } // end of method Key::CompareTo - - .method public hidebysig virtual final - instance int32 CompareTo(object obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 14 (0xe) - .maxstack 4 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 10,13 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldarg.1 - IL_0003: unbox.any Hash06/HashMicroPerfAndCodeGenerationTests/Key - IL_0008: call instance int32 Hash06/HashMicroPerfAndCodeGenerationTests/Key::CompareTo(class Hash06/HashMicroPerfAndCodeGenerationTests/Key) - IL_000d: ret - } // end of method Key::CompareTo - - .method public hidebysig virtual final - instance int32 CompareTo(object obj, - class [mscorlib]System.Collections.IComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 125 (0x7d) - .maxstack 4 - .locals init ([0] class Hash06/HashMicroPerfAndCodeGenerationTests/Key V_0, - [1] class Hash06/HashMicroPerfAndCodeGenerationTests/Key V_1, - [2] class Hash06/HashMicroPerfAndCodeGenerationTests/Key V_2, - [3] int32 V_3, - [4] int32 V_4, - [5] int32 V_5) - .line 4,4 : 10,13 - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: unbox.any Hash06/HashMicroPerfAndCodeGenerationTests/Key - IL_0007: stloc.0 - IL_0008: ldarg.0 - IL_0009: ldnull - IL_000a: cgt.un - IL_000c: brfalse.s IL_006e - - IL_000e: ldarg.1 - IL_000f: unbox.any Hash06/HashMicroPerfAndCodeGenerationTests/Key - IL_0014: ldnull - IL_0015: cgt.un - IL_0017: brfalse.s IL_006c - - IL_0019: ldarg.0 - IL_001a: pop - IL_001b: ldarg.0 - IL_001c: stloc.1 - IL_001d: ldloc.0 - IL_001e: stloc.2 - IL_001f: ldloc.1 - IL_0020: ldfld int32 Hash06/HashMicroPerfAndCodeGenerationTests/Key::item1 - IL_0025: stloc.s V_4 - IL_0027: ldloc.2 - IL_0028: ldfld int32 Hash06/HashMicroPerfAndCodeGenerationTests/Key::item1 - IL_002d: stloc.s V_5 - IL_002f: ldloc.s V_4 - IL_0031: ldloc.s V_5 - IL_0033: bge.s IL_0039 - - IL_0035: ldc.i4.m1 - IL_0036: nop - IL_0037: br.s IL_0040 - - IL_0039: ldloc.s V_4 - IL_003b: ldloc.s V_5 - IL_003d: cgt - IL_003f: nop - IL_0040: stloc.3 - IL_0041: ldloc.3 - IL_0042: ldc.i4.0 - IL_0043: bge.s IL_0047 - - IL_0045: ldloc.3 - IL_0046: ret - - IL_0047: ldloc.3 - IL_0048: ldc.i4.0 - IL_0049: ble.s IL_004d - - IL_004b: ldloc.3 - IL_004c: ret - - IL_004d: ldloc.1 - IL_004e: ldfld int32 Hash06/HashMicroPerfAndCodeGenerationTests/Key::item2 - IL_0053: stloc.s V_4 - IL_0055: ldloc.2 - IL_0056: ldfld int32 Hash06/HashMicroPerfAndCodeGenerationTests/Key::item2 - IL_005b: stloc.s V_5 - IL_005d: ldloc.s V_4 - IL_005f: ldloc.s V_5 - IL_0061: bge.s IL_0065 - - IL_0063: ldc.i4.m1 - IL_0064: ret - - IL_0065: ldloc.s V_4 - IL_0067: ldloc.s V_5 - IL_0069: cgt - IL_006b: ret - - IL_006c: ldc.i4.1 - IL_006d: ret - - IL_006e: ldarg.1 - IL_006f: unbox.any Hash06/HashMicroPerfAndCodeGenerationTests/Key - IL_0074: ldnull - IL_0075: cgt.un - IL_0077: brfalse.s IL_007b - - IL_0079: ldc.i4.m1 - IL_007a: ret - - IL_007b: ldc.i4.0 - IL_007c: ret - } // end of method Key::CompareTo - - .method public hidebysig virtual final - instance int32 GetHashCode(class [mscorlib]System.Collections.IEqualityComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 61 (0x3d) - .maxstack 7 - .locals init (int32 V_0, - class Hash06/HashMicroPerfAndCodeGenerationTests/Key V_1) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_003b - - IL_0007: ldc.i4.0 - IL_0008: stloc.0 - IL_0009: ldarg.0 - IL_000a: pop - IL_000b: ldarg.0 - IL_000c: stloc.1 - IL_000d: ldc.i4.0 - IL_000e: stloc.0 - IL_000f: ldc.i4 0x9e3779b9 - IL_0014: ldloc.1 - IL_0015: ldfld int32 Hash06/HashMicroPerfAndCodeGenerationTests/Key::item2 - IL_001a: ldloc.0 - IL_001b: ldc.i4.6 - IL_001c: shl - IL_001d: ldloc.0 - IL_001e: ldc.i4.2 - IL_001f: shr - IL_0020: add - IL_0021: add - IL_0022: add - IL_0023: stloc.0 - IL_0024: ldc.i4 0x9e3779b9 - IL_0029: ldloc.1 - IL_002a: ldfld int32 Hash06/HashMicroPerfAndCodeGenerationTests/Key::item1 - IL_002f: ldloc.0 - IL_0030: ldc.i4.6 - IL_0031: shl - IL_0032: ldloc.0 - IL_0033: ldc.i4.2 - IL_0034: shr - IL_0035: add - IL_0036: add - IL_0037: add - IL_0038: stloc.0 - IL_0039: ldloc.0 - IL_003a: ret - - IL_003b: ldc.i4.0 - IL_003c: ret - } // end of method Key::GetHashCode - - .method public hidebysig virtual final - instance int32 GetHashCode() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 13 (0xd) - .maxstack 4 - .line 4,4 : 10,13 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() - IL_0007: call instance int32 Hash06/HashMicroPerfAndCodeGenerationTests/Key::GetHashCode(class [mscorlib]System.Collections.IEqualityComparer) - IL_000c: ret - } // end of method Key::GetHashCode - - .method public hidebysig virtual final - instance bool Equals(object obj, - class [mscorlib]System.Collections.IEqualityComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 64 (0x40) - .maxstack 4 - .locals init (class Hash06/HashMicroPerfAndCodeGenerationTests/Key V_0, - class Hash06/HashMicroPerfAndCodeGenerationTests/Key V_1, - class Hash06/HashMicroPerfAndCodeGenerationTests/Key V_2) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_0038 - - IL_0007: ldarg.1 - IL_0008: isinst Hash06/HashMicroPerfAndCodeGenerationTests/Key - IL_000d: stloc.0 - IL_000e: ldloc.0 - IL_000f: brfalse.s IL_0036 - - IL_0011: ldarg.0 - IL_0012: pop - IL_0013: ldarg.0 - IL_0014: stloc.1 - IL_0015: ldloc.0 - IL_0016: stloc.2 - IL_0017: ldloc.1 - IL_0018: ldfld int32 Hash06/HashMicroPerfAndCodeGenerationTests/Key::item1 - IL_001d: ldloc.2 - IL_001e: ldfld int32 Hash06/HashMicroPerfAndCodeGenerationTests/Key::item1 - IL_0023: bne.un.s IL_0034 - - IL_0025: ldloc.1 - IL_0026: ldfld int32 Hash06/HashMicroPerfAndCodeGenerationTests/Key::item2 - IL_002b: ldloc.2 - IL_002c: ldfld int32 Hash06/HashMicroPerfAndCodeGenerationTests/Key::item2 - IL_0031: ceq - IL_0033: ret - - IL_0034: ldc.i4.0 - IL_0035: ret - - IL_0036: ldc.i4.0 - IL_0037: ret - - IL_0038: ldarg.1 - IL_0039: ldnull - IL_003a: cgt.un - IL_003c: ldc.i4.0 - IL_003d: ceq - IL_003f: ret - } // end of method Key::Equals - - .method public hidebysig virtual final - instance bool Equals(class Hash06/HashMicroPerfAndCodeGenerationTests/Key obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 60 (0x3c) - .maxstack 4 - .locals init (class Hash06/HashMicroPerfAndCodeGenerationTests/Key V_0, - class Hash06/HashMicroPerfAndCodeGenerationTests/Key V_1) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_0034 - - IL_0007: ldarg.1 - IL_0008: ldnull - IL_0009: cgt.un - IL_000b: brfalse.s IL_0032 - - IL_000d: ldarg.0 - IL_000e: pop - IL_000f: ldarg.0 - IL_0010: stloc.0 - IL_0011: ldarg.1 - IL_0012: stloc.1 - IL_0013: ldloc.0 - IL_0014: ldfld int32 Hash06/HashMicroPerfAndCodeGenerationTests/Key::item1 - IL_0019: ldloc.1 - IL_001a: ldfld int32 Hash06/HashMicroPerfAndCodeGenerationTests/Key::item1 - IL_001f: bne.un.s IL_0030 - - IL_0021: ldloc.0 - IL_0022: ldfld int32 Hash06/HashMicroPerfAndCodeGenerationTests/Key::item2 - IL_0027: ldloc.1 - IL_0028: ldfld int32 Hash06/HashMicroPerfAndCodeGenerationTests/Key::item2 - IL_002d: ceq - IL_002f: ret - - IL_0030: ldc.i4.0 - IL_0031: ret - - IL_0032: ldc.i4.0 - IL_0033: ret - - IL_0034: ldarg.1 - IL_0035: ldnull - IL_0036: cgt.un - IL_0038: ldc.i4.0 - IL_0039: ceq - IL_003b: ret - } // end of method Key::Equals - - .method public hidebysig virtual final - instance bool Equals(object obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 21 (0x15) - .maxstack 4 - .locals init (class Hash06/HashMicroPerfAndCodeGenerationTests/Key V_0) - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: isinst Hash06/HashMicroPerfAndCodeGenerationTests/Key - IL_0007: stloc.0 - IL_0008: ldloc.0 - IL_0009: brfalse.s IL_0013 - - IL_000b: ldarg.0 - IL_000c: ldloc.0 - IL_000d: call instance bool Hash06/HashMicroPerfAndCodeGenerationTests/Key::Equals(class Hash06/HashMicroPerfAndCodeGenerationTests/Key) - IL_0012: ret - - IL_0013: ldc.i4.0 - IL_0014: ret - } // end of method Key::Equals - - .property instance int32 Tag() - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .get instance int32 Hash06/HashMicroPerfAndCodeGenerationTests/Key::get_Tag() - } // end of property Key::Tag - .property instance int32 Item1() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32, - int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .get instance int32 Hash06/HashMicroPerfAndCodeGenerationTests/Key::get_Item1() - } // end of property Key::Item1 - .property instance int32 Item2() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32, - int32) = ( 01 00 04 00 00 00 00 00 00 00 01 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .get instance int32 Hash06/HashMicroPerfAndCodeGenerationTests/Key::get_Item2() - } // end of property Key::Item2 - } // end of class Key - - .method public static void f5a() cil managed - { - // Code size 31 (0x1f) - .maxstack 4 - .locals init ([0] int32 i, - [1] int32 V_1) - .line 7,7 : 8,32 - IL_0000: nop - IL_0001: ldc.i4.0 - IL_0002: stloc.0 - IL_0003: br.s IL_0016 - - .line 8,8 : 12,46 - IL_0005: ldc.i4.1 - IL_0006: ldc.i4.2 - IL_0007: call class Hash06/HashMicroPerfAndCodeGenerationTests/Key Hash06/HashMicroPerfAndCodeGenerationTests/Key::NewKey(int32, - int32) - IL_000c: callvirt instance int32 [mscorlib]System.Object::GetHashCode() - IL_0011: stloc.1 - IL_0012: ldloc.0 - IL_0013: ldc.i4.1 - IL_0014: add - IL_0015: stloc.0 - .line 7,7 : 21,29 - IL_0016: ldloc.0 - IL_0017: ldc.i4 0x989681 - IL_001c: blt.s IL_0005 - - IL_001e: ret - } // end of method HashMicroPerfAndCodeGenerationTests::f5a - - } // end of class HashMicroPerfAndCodeGenerationTests - -} // end of class Hash06 - -.class private abstract auto ansi sealed ''.$Hash06$fsx - extends [mscorlib]System.Object -{ -} // end of class ''.$Hash06$fsx - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash06.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash06.il.netfx4.bsl index 7dff8797881..66521cae353 100644 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash06.il.netfx4.bsl +++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash06.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17376 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly Hash06 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Hash06 { - // Offset: 0x00000000 Length: 0x000006FD + // Offset: 0x00000000 Length: 0x000006E1 } .mresource public FSharpOptimizationData.Hash06 { - // Offset: 0x00000708 Length: 0x000003B2 + // Offset: 0x000006E8 Length: 0x000003B2 } .module Hash06.dll -// MVID: {4F20E466-9642-78F2-A745-038366E4204F} +// MVID: {5772F676-9642-78F2-A745-038376F67257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x0000007376CC0000 +// Image base: 0x00C60000 // =============== CLASS MEMBERS DECLARATION =================== @@ -266,7 +266,7 @@ // Code size 14 (0xe) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 10,13 + .line 4,4 : 10,13 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Hash06.fsx' IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -288,7 +288,7 @@ [3] int32 V_3, [4] int32 V_4, [5] int32 V_5) - .line 4,4 : 10,13 + .line 4,4 : 10,13 '' IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any Hash06/HashMicroPerfAndCodeGenerationTests/Key @@ -438,7 +438,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 4,4 : 10,13 + .line 4,4 : 10,13 '' IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -609,13 +609,13 @@ .maxstack 4 .locals init ([0] int32 i, [1] int32 V_1) - .line 7,7 : 8,32 + .line 7,7 : 8,32 '' IL_0000: nop IL_0001: ldc.i4.0 IL_0002: stloc.0 IL_0003: br.s IL_0016 - .line 8,8 : 12,46 + .line 8,8 : 12,46 '' IL_0005: ldc.i4.1 IL_0006: ldc.i4.2 IL_0007: call class Hash06/HashMicroPerfAndCodeGenerationTests/Key Hash06/HashMicroPerfAndCodeGenerationTests/Key::NewKey(int32, @@ -626,7 +626,7 @@ IL_0013: ldc.i4.1 IL_0014: add IL_0015: stloc.0 - .line 7,7 : 21,29 + .line 7,7 : 8,32 '' IL_0016: ldloc.0 IL_0017: ldc.i4 0x989681 IL_001c: blt.s IL_0005 diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash07.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash07.il.bsl index 414cabf40d1..f872c6c9864 100644 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash07.il.bsl +++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash07.il.bsl @@ -82,7 +82,7 @@ IL_000e: ldc.i4.1 IL_000f: add IL_0010: stloc.1 - .line 6,6 : 21,29 + .line 6,6 : 8,32 IL_0011: ldloc.1 IL_0012: ldc.i4 0x989681 IL_0017: blt.s IL_0007 diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash08.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash08.il.bsl deleted file mode 100644 index 295d18911d9..00000000000 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash08.il.bsl +++ /dev/null @@ -1,543 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly Hash08 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.Hash08 -{ - // Offset: 0x00000000 Length: 0x000006DF -} -.mresource public FSharpOptimizationData.Hash08 -{ - // Offset: 0x000006E8 Length: 0x000003B3 -} -.module Hash08.dll -// MVID: {4BEB2A22-9642-77BC-A745-0383222AEB4B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x004F0000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed Hash08 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class abstract auto ansi sealed nested public HashMicroPerfAndCodeGenerationTests - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto ansi serializable sealed nested public KeyR - extends [mscorlib]System.Object - implements class [mscorlib]System.IEquatable`1, - [mscorlib]System.Collections.IStructuralEquatable, - class [mscorlib]System.IComparable`1, - [mscorlib]System.IComparable, - [mscorlib]System.Collections.IStructuralComparable - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) - .field assembly int32 key1@ - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .field assembly int32 key2@ - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .method public specialname instance int32 - get_key1() cil managed - { - // Code size 7 (0x7) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldfld int32 Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_0006: ret - } // end of method KeyR::get_key1 - - .method public specialname instance int32 - get_key2() cil managed - { - // Code size 7 (0x7) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldfld int32 Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_0006: ret - } // end of method KeyR::get_key2 - - .method public specialname rtspecialname - instance void .ctor(int32 key1, - int32 key2) cil managed - { - // Code size 21 (0x15) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: call instance void [mscorlib]System.Object::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld int32 Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_000d: ldarg.0 - IL_000e: ldarg.2 - IL_000f: stfld int32 Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_0014: ret - } // end of method KeyR::.ctor - - .method public hidebysig virtual final - instance int32 CompareTo(class Hash08/HashMicroPerfAndCodeGenerationTests/KeyR obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 102 (0x66) - .maxstack 4 - .locals init (int32 V_0, - class [mscorlib]System.Collections.IComparer V_1, - int32 V_2, - int32 V_3) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_005c - - IL_0007: ldarg.1 - IL_0008: ldnull - IL_0009: cgt.un - IL_000b: brfalse.s IL_005a - - IL_000d: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0012: stloc.1 - IL_0013: ldarg.0 - IL_0014: ldfld int32 Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_0019: stloc.2 - IL_001a: ldarg.1 - IL_001b: ldfld int32 Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_0020: stloc.3 - IL_0021: ldloc.2 - IL_0022: ldloc.3 - IL_0023: bge.s IL_0029 - - IL_0025: ldc.i4.m1 - IL_0026: nop - IL_0027: br.s IL_002e - - IL_0029: ldloc.2 - IL_002a: ldloc.3 - IL_002b: cgt - IL_002d: nop - IL_002e: stloc.0 - IL_002f: ldloc.0 - IL_0030: ldc.i4.0 - IL_0031: bge.s IL_0035 - - IL_0033: ldloc.0 - IL_0034: ret - - IL_0035: ldloc.0 - IL_0036: ldc.i4.0 - IL_0037: ble.s IL_003b - - IL_0039: ldloc.0 - IL_003a: ret - - IL_003b: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0040: stloc.1 - IL_0041: ldarg.0 - IL_0042: ldfld int32 Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_0047: stloc.2 - IL_0048: ldarg.1 - IL_0049: ldfld int32 Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_004e: stloc.3 - IL_004f: ldloc.2 - IL_0050: ldloc.3 - IL_0051: bge.s IL_0055 - - IL_0053: ldc.i4.m1 - IL_0054: ret - - IL_0055: ldloc.2 - IL_0056: ldloc.3 - IL_0057: cgt - IL_0059: ret - - IL_005a: ldc.i4.1 - IL_005b: ret - - IL_005c: ldarg.1 - IL_005d: ldnull - IL_005e: cgt.un - IL_0060: brfalse.s IL_0064 - - IL_0062: ldc.i4.m1 - IL_0063: ret - - IL_0064: ldc.i4.0 - IL_0065: ret - } // end of method KeyR::CompareTo - - .method public hidebysig virtual final - instance int32 CompareTo(object obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 14 (0xe) - .maxstack 4 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 10,14 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldarg.1 - IL_0003: unbox.any Hash08/HashMicroPerfAndCodeGenerationTests/KeyR - IL_0008: call instance int32 Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::CompareTo(class Hash08/HashMicroPerfAndCodeGenerationTests/KeyR) - IL_000d: ret - } // end of method KeyR::CompareTo - - .method public hidebysig virtual final - instance int32 CompareTo(object obj, - class [mscorlib]System.Collections.IComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 107 (0x6b) - .maxstack 4 - .locals init ([0] class Hash08/HashMicroPerfAndCodeGenerationTests/KeyR V_0, - [1] int32 V_1, - [2] int32 V_2, - [3] int32 V_3) - .line 4,4 : 10,14 - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: unbox.any Hash08/HashMicroPerfAndCodeGenerationTests/KeyR - IL_0007: stloc.0 - IL_0008: ldarg.0 - IL_0009: ldnull - IL_000a: cgt.un - IL_000c: brfalse.s IL_005c - - IL_000e: ldarg.1 - IL_000f: unbox.any Hash08/HashMicroPerfAndCodeGenerationTests/KeyR - IL_0014: ldnull - IL_0015: cgt.un - IL_0017: brfalse.s IL_005a - - IL_0019: ldarg.0 - IL_001a: ldfld int32 Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_001f: stloc.2 - IL_0020: ldloc.0 - IL_0021: ldfld int32 Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_0026: stloc.3 - IL_0027: ldloc.2 - IL_0028: ldloc.3 - IL_0029: bge.s IL_002f - - IL_002b: ldc.i4.m1 - IL_002c: nop - IL_002d: br.s IL_0034 - - IL_002f: ldloc.2 - IL_0030: ldloc.3 - IL_0031: cgt - IL_0033: nop - IL_0034: stloc.1 - IL_0035: ldloc.1 - IL_0036: ldc.i4.0 - IL_0037: bge.s IL_003b - - IL_0039: ldloc.1 - IL_003a: ret - - IL_003b: ldloc.1 - IL_003c: ldc.i4.0 - IL_003d: ble.s IL_0041 - - IL_003f: ldloc.1 - IL_0040: ret - - IL_0041: ldarg.0 - IL_0042: ldfld int32 Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_0047: stloc.2 - IL_0048: ldloc.0 - IL_0049: ldfld int32 Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_004e: stloc.3 - IL_004f: ldloc.2 - IL_0050: ldloc.3 - IL_0051: bge.s IL_0055 - - IL_0053: ldc.i4.m1 - IL_0054: ret - - IL_0055: ldloc.2 - IL_0056: ldloc.3 - IL_0057: cgt - IL_0059: ret - - IL_005a: ldc.i4.1 - IL_005b: ret - - IL_005c: ldarg.1 - IL_005d: unbox.any Hash08/HashMicroPerfAndCodeGenerationTests/KeyR - IL_0062: ldnull - IL_0063: cgt.un - IL_0065: brfalse.s IL_0069 - - IL_0067: ldc.i4.m1 - IL_0068: ret - - IL_0069: ldc.i4.0 - IL_006a: ret - } // end of method KeyR::CompareTo - - .method public hidebysig virtual final - instance int32 GetHashCode(class [mscorlib]System.Collections.IEqualityComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 55 (0x37) - .maxstack 7 - .locals init (int32 V_0) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_0035 - - IL_0007: ldc.i4.0 - IL_0008: stloc.0 - IL_0009: ldc.i4 0x9e3779b9 - IL_000e: ldarg.0 - IL_000f: ldfld int32 Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_0014: ldloc.0 - IL_0015: ldc.i4.6 - IL_0016: shl - IL_0017: ldloc.0 - IL_0018: ldc.i4.2 - IL_0019: shr - IL_001a: add - IL_001b: add - IL_001c: add - IL_001d: stloc.0 - IL_001e: ldc.i4 0x9e3779b9 - IL_0023: ldarg.0 - IL_0024: ldfld int32 Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_0029: ldloc.0 - IL_002a: ldc.i4.6 - IL_002b: shl - IL_002c: ldloc.0 - IL_002d: ldc.i4.2 - IL_002e: shr - IL_002f: add - IL_0030: add - IL_0031: add - IL_0032: stloc.0 - IL_0033: ldloc.0 - IL_0034: ret - - IL_0035: ldc.i4.0 - IL_0036: ret - } // end of method KeyR::GetHashCode - - .method public hidebysig virtual final - instance int32 GetHashCode() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 13 (0xd) - .maxstack 4 - .line 4,4 : 10,14 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() - IL_0007: call instance int32 Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::GetHashCode(class [mscorlib]System.Collections.IEqualityComparer) - IL_000c: ret - } // end of method KeyR::GetHashCode - - .method public hidebysig virtual final - instance bool Equals(object obj, - class [mscorlib]System.Collections.IEqualityComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 58 (0x3a) - .maxstack 4 - .locals init (class Hash08/HashMicroPerfAndCodeGenerationTests/KeyR V_0) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_0032 - - IL_0007: ldarg.1 - IL_0008: isinst Hash08/HashMicroPerfAndCodeGenerationTests/KeyR - IL_000d: stloc.0 - IL_000e: ldloc.0 - IL_000f: brfalse.s IL_0030 - - IL_0011: ldarg.0 - IL_0012: ldfld int32 Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_0017: ldloc.0 - IL_0018: ldfld int32 Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_001d: bne.un.s IL_002e - - IL_001f: ldarg.0 - IL_0020: ldfld int32 Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_0025: ldloc.0 - IL_0026: ldfld int32 Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_002b: ceq - IL_002d: ret - - IL_002e: ldc.i4.0 - IL_002f: ret - - IL_0030: ldc.i4.0 - IL_0031: ret - - IL_0032: ldarg.1 - IL_0033: ldnull - IL_0034: cgt.un - IL_0036: ldc.i4.0 - IL_0037: ceq - IL_0039: ret - } // end of method KeyR::Equals - - .method public hidebysig virtual final - instance bool Equals(class Hash08/HashMicroPerfAndCodeGenerationTests/KeyR obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 54 (0x36) - .maxstack 4 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_002e - - IL_0007: ldarg.1 - IL_0008: ldnull - IL_0009: cgt.un - IL_000b: brfalse.s IL_002c - - IL_000d: ldarg.0 - IL_000e: ldfld int32 Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_0013: ldarg.1 - IL_0014: ldfld int32 Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::key1@ - IL_0019: bne.un.s IL_002a - - IL_001b: ldarg.0 - IL_001c: ldfld int32 Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_0021: ldarg.1 - IL_0022: ldfld int32 Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::key2@ - IL_0027: ceq - IL_0029: ret - - IL_002a: ldc.i4.0 - IL_002b: ret - - IL_002c: ldc.i4.0 - IL_002d: ret - - IL_002e: ldarg.1 - IL_002f: ldnull - IL_0030: cgt.un - IL_0032: ldc.i4.0 - IL_0033: ceq - IL_0035: ret - } // end of method KeyR::Equals - - .method public hidebysig virtual final - instance bool Equals(object obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 21 (0x15) - .maxstack 4 - .locals init (class Hash08/HashMicroPerfAndCodeGenerationTests/KeyR V_0) - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: isinst Hash08/HashMicroPerfAndCodeGenerationTests/KeyR - IL_0007: stloc.0 - IL_0008: ldloc.0 - IL_0009: brfalse.s IL_0013 - - IL_000b: ldarg.0 - IL_000c: ldloc.0 - IL_000d: call instance bool Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::Equals(class Hash08/HashMicroPerfAndCodeGenerationTests/KeyR) - IL_0012: ret - - IL_0013: ldc.i4.0 - IL_0014: ret - } // end of method KeyR::Equals - - .property instance int32 key1() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) - .get instance int32 Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::get_key1() - } // end of property KeyR::key1 - .property instance int32 key2() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) - .get instance int32 Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::get_key2() - } // end of property KeyR::key2 - } // end of class KeyR - - .method public static void f5c() cil managed - { - // Code size 36 (0x24) - .maxstack 4 - .locals init ([0] int32 i, - [1] int32 V_1) - .line 7,7 : 8,32 - IL_0000: nop - IL_0001: ldc.i4.0 - IL_0002: stloc.0 - IL_0003: br.s IL_001b - - .line 8,8 : 12,49 - IL_0005: ldc.i4.1 - IL_0006: ldc.i4.2 - IL_0007: newobj instance void Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::.ctor(int32, - int32) - IL_000c: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityERComparer() - IL_0011: call instance int32 Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::GetHashCode(class [mscorlib]System.Collections.IEqualityComparer) - IL_0016: stloc.1 - IL_0017: ldloc.0 - IL_0018: ldc.i4.1 - IL_0019: add - IL_001a: stloc.0 - .line 7,7 : 21,29 - IL_001b: ldloc.0 - IL_001c: ldc.i4 0x989681 - IL_0021: blt.s IL_0005 - - IL_0023: ret - } // end of method HashMicroPerfAndCodeGenerationTests::f5c - - } // end of class HashMicroPerfAndCodeGenerationTests - -} // end of class Hash08 - -.class private abstract auto ansi sealed ''.$Hash08$fsx - extends [mscorlib]System.Object -{ -} // end of class ''.$Hash08$fsx - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash08.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash08.il.netfx4.bsl index 19389b1b533..8400b3e7606 100644 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash08.il.netfx4.bsl +++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash08.il.netfx4.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.17376 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:3:0:0 + .ver 4:4:1:0 } .assembly Hash08 { @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Hash08 { - // Offset: 0x00000000 Length: 0x000006EF + // Offset: 0x00000000 Length: 0x000006D3 } .mresource public FSharpOptimizationData.Hash08 { - // Offset: 0x000006F8 Length: 0x000003B3 + // Offset: 0x000006D8 Length: 0x000003B3 } .module Hash08.dll -// MVID: {4F20E46A-9642-77BC-A745-03836AE4204F} +// MVID: {5772F679-9642-77BC-A745-038379F67257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x000000C130600000 +// Image base: 0x011B0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -203,7 +203,7 @@ // Code size 14 (0xe) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 10,14 + .line 4,4 : 10,14 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Hash08.fsx' IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -223,7 +223,7 @@ [1] int32 V_1, [2] int32 V_2, [3] int32 V_3) - .line 4,4 : 10,14 + .line 4,4 : 10,14 '' IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any Hash08/HashMicroPerfAndCodeGenerationTests/KeyR @@ -360,7 +360,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 4,4 : 10,14 + .line 4,4 : 10,14 '' IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -502,13 +502,13 @@ .maxstack 4 .locals init ([0] int32 i, [1] int32 V_1) - .line 7,7 : 8,32 + .line 7,7 : 8,32 '' IL_0000: nop IL_0001: ldc.i4.0 IL_0002: stloc.0 IL_0003: br.s IL_001b - .line 8,8 : 12,49 + .line 8,8 : 12,49 '' IL_0005: ldc.i4.1 IL_0006: ldc.i4.2 IL_0007: newobj instance void Hash08/HashMicroPerfAndCodeGenerationTests/KeyR::.ctor(int32, @@ -520,7 +520,7 @@ IL_0018: ldc.i4.1 IL_0019: add IL_001a: stloc.0 - .line 7,7 : 21,29 + .line 7,7 : 8,32 '' IL_001b: ldloc.0 IL_001c: ldc.i4 0x989681 IL_0021: blt.s IL_0005 diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash09.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash09.il.bsl deleted file mode 100644 index 09b53dea9ce..00000000000 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash09.il.bsl +++ /dev/null @@ -1,674 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.1 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:0:0:0 -} -.assembly Hash09 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.Hash09 -{ - // Offset: 0x00000000 Length: 0x0000089A -} -.mresource public FSharpOptimizationData.Hash09 -{ - // Offset: 0x000008A0 Length: 0x00000690 -} -.module Hash09.dll -// MVID: {4BEB2A25-9642-77DB-A745-0383252AEB4B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x00330000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed Hash09 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class abstract auto ansi sealed nested public HashMicroPerfAndCodeGenerationTests - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto autochar serializable sealed nested public beforefieldinit GenericKey`1 - extends [mscorlib]System.Object - implements class [mscorlib]System.IEquatable`1>, - [mscorlib]System.Collections.IStructuralEquatable, - class [mscorlib]System.IComparable`1>, - [mscorlib]System.IComparable, - [mscorlib]System.Collections.IStructuralComparable - { - .custom instance void [mscorlib]System.Diagnostics.DebuggerDisplayAttribute::.ctor(string) = ( 01 00 15 7B 5F 5F 44 65 62 75 67 44 69 73 70 6C // ...{__DebugDispl - 61 79 28 29 2C 6E 71 7D 00 00 ) // ay(),nq}.. - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 01 00 00 00 00 00 ) - .field assembly initonly !a item1 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .field assembly initonly !a item2 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method public static class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1 - NewGenericKey(!a item1, - !a item2) cil managed - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32) = ( 01 00 08 00 00 00 00 00 00 00 00 00 ) - // Code size 8 (0x8) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldarg.1 - IL_0002: newobj instance void class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::.ctor(!0, - !0) - IL_0007: ret - } // end of method GenericKey`1::NewGenericKey - - .method assembly specialname rtspecialname - instance void .ctor(!a item1, - !a item2) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 21 (0x15) - .maxstack 2 - IL_0000: ldarg.0 - IL_0001: call instance void [mscorlib]System.Object::.ctor() - IL_0006: ldarg.0 - IL_0007: ldarg.1 - IL_0008: stfld !0 class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_000d: ldarg.0 - IL_000e: ldarg.2 - IL_000f: stfld !0 class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_0014: ret - } // end of method GenericKey`1::.ctor - - .method public instance !a get_Item1() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 7 (0x7) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldfld !0 class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_0006: ret - } // end of method GenericKey`1::get_Item1 - - .method public instance !a get_Item2() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 7 (0x7) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: ldfld !0 class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_0006: ret - } // end of method GenericKey`1::get_Item2 - - .method public instance int32 get_Tag() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 4 (0x4) - .maxstack 4 - IL_0000: ldarg.0 - IL_0001: pop - IL_0002: ldc.i4.0 - IL_0003: ret - } // end of method GenericKey`1::get_Tag - - .method assembly specialname instance object - __DebugDisplay() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 22 (0x16) - .maxstack 4 - IL_0000: ldstr "%+0.8A" - IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,string>::.ctor(string) - IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_000f: ldarg.0 - IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,string>::Invoke(!0) - IL_0015: ret - } // end of method GenericKey`1::__DebugDisplay - - .method public hidebysig virtual final - instance int32 CompareTo(class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1 obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 111 (0x6f) - .maxstack 5 - .locals init (class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1 V_0, - class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1 V_1, - int32 V_2, - class [mscorlib]System.Collections.IComparer V_3, - !a V_4, - !a V_5) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_0065 - - IL_0007: ldarg.1 - IL_0008: ldnull - IL_0009: cgt.un - IL_000b: brfalse.s IL_0063 - - IL_000d: ldarg.0 - IL_000e: pop - IL_000f: ldarg.0 - IL_0010: stloc.0 - IL_0011: ldarg.1 - IL_0012: stloc.1 - IL_0013: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0018: stloc.3 - IL_0019: ldloc.0 - IL_001a: ldfld !0 class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_001f: stloc.s V_4 - IL_0021: ldloc.1 - IL_0022: ldfld !0 class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_0027: stloc.s V_5 - IL_0029: ldloc.3 - IL_002a: ldloc.s V_4 - IL_002c: ldloc.s V_5 - IL_002e: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericComparisonWithComparerIntrinsic(class [mscorlib]System.Collections.IComparer, - !!0, - !!0) - IL_0033: stloc.2 - IL_0034: ldloc.2 - IL_0035: ldc.i4.0 - IL_0036: bge.s IL_003a - - IL_0038: ldloc.2 - IL_0039: ret - - IL_003a: ldloc.2 - IL_003b: ldc.i4.0 - IL_003c: ble.s IL_0040 - - IL_003e: ldloc.2 - IL_003f: ret - - IL_0040: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0045: stloc.3 - IL_0046: ldloc.0 - IL_0047: ldfld !0 class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_004c: stloc.s V_4 - IL_004e: ldloc.1 - IL_004f: ldfld !0 class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_0054: stloc.s V_5 - IL_0056: ldloc.3 - IL_0057: ldloc.s V_4 - IL_0059: ldloc.s V_5 - IL_005b: tail. - IL_005d: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericComparisonWithComparerIntrinsic(class [mscorlib]System.Collections.IComparer, - !!0, - !!0) - IL_0062: ret - - IL_0063: ldc.i4.1 - IL_0064: ret - - IL_0065: ldarg.1 - IL_0066: ldnull - IL_0067: cgt.un - IL_0069: brfalse.s IL_006d - - IL_006b: ldc.i4.m1 - IL_006c: ret - - IL_006d: ldc.i4.0 - IL_006e: ret - } // end of method GenericKey`1::CompareTo - - .method public hidebysig virtual final - instance int32 CompareTo(object obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 16 (0x10) - .maxstack 4 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 10,20 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldarg.1 - IL_0003: unbox.any class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1 - IL_0008: tail. - IL_000a: call instance int32 class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::CompareTo(class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1) - IL_000f: ret - } // end of method GenericKey`1::CompareTo - - .method public hidebysig virtual final - instance int32 CompareTo(object obj, - class [mscorlib]System.Collections.IComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 116 (0x74) - .maxstack 5 - .locals init ([0] class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1 V_0, - [1] class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1 V_1, - [2] class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1 V_2, - [3] int32 V_3, - [4] !a V_4, - [5] !a V_5) - .line 4,4 : 10,20 - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: unbox.any class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1 - IL_0007: stloc.0 - IL_0008: ldarg.0 - IL_0009: ldnull - IL_000a: cgt.un - IL_000c: brfalse.s IL_0065 - - IL_000e: ldarg.1 - IL_000f: unbox.any class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1 - IL_0014: ldnull - IL_0015: cgt.un - IL_0017: brfalse.s IL_0063 - - IL_0019: ldarg.0 - IL_001a: pop - IL_001b: ldarg.0 - IL_001c: stloc.1 - IL_001d: ldloc.0 - IL_001e: stloc.2 - IL_001f: ldloc.1 - IL_0020: ldfld !0 class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_0025: stloc.s V_4 - IL_0027: ldloc.2 - IL_0028: ldfld !0 class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_002d: stloc.s V_5 - IL_002f: ldarg.2 - IL_0030: ldloc.s V_4 - IL_0032: ldloc.s V_5 - IL_0034: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericComparisonWithComparerIntrinsic(class [mscorlib]System.Collections.IComparer, - !!0, - !!0) - IL_0039: stloc.3 - IL_003a: ldloc.3 - IL_003b: ldc.i4.0 - IL_003c: bge.s IL_0040 - - IL_003e: ldloc.3 - IL_003f: ret - - IL_0040: ldloc.3 - IL_0041: ldc.i4.0 - IL_0042: ble.s IL_0046 - - IL_0044: ldloc.3 - IL_0045: ret - - IL_0046: ldloc.1 - IL_0047: ldfld !0 class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_004c: stloc.s V_4 - IL_004e: ldloc.2 - IL_004f: ldfld !0 class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_0054: stloc.s V_5 - IL_0056: ldarg.2 - IL_0057: ldloc.s V_4 - IL_0059: ldloc.s V_5 - IL_005b: tail. - IL_005d: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericComparisonWithComparerIntrinsic(class [mscorlib]System.Collections.IComparer, - !!0, - !!0) - IL_0062: ret - - IL_0063: ldc.i4.1 - IL_0064: ret - - IL_0065: ldarg.1 - IL_0066: unbox.any class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1 - IL_006b: ldnull - IL_006c: cgt.un - IL_006e: brfalse.s IL_0072 - - IL_0070: ldc.i4.m1 - IL_0071: ret - - IL_0072: ldc.i4.0 - IL_0073: ret - } // end of method GenericKey`1::CompareTo - - .method public hidebysig virtual final - instance int32 GetHashCode(class [mscorlib]System.Collections.IEqualityComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 77 (0x4d) - .maxstack 7 - .locals init (int32 V_0, - class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1 V_1, - !a V_2) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_004b - - IL_0007: ldc.i4.0 - IL_0008: stloc.0 - IL_0009: ldarg.0 - IL_000a: pop - IL_000b: ldarg.0 - IL_000c: stloc.1 - IL_000d: ldc.i4.0 - IL_000e: stloc.0 - IL_000f: ldc.i4 0x9e3779b9 - IL_0014: ldloc.1 - IL_0015: ldfld !0 class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_001a: stloc.2 - IL_001b: ldarg.1 - IL_001c: ldloc.2 - IL_001d: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericHashWithComparerIntrinsic(class [mscorlib]System.Collections.IEqualityComparer, - !!0) - IL_0022: ldloc.0 - IL_0023: ldc.i4.6 - IL_0024: shl - IL_0025: ldloc.0 - IL_0026: ldc.i4.2 - IL_0027: shr - IL_0028: add - IL_0029: add - IL_002a: add - IL_002b: stloc.0 - IL_002c: ldc.i4 0x9e3779b9 - IL_0031: ldloc.1 - IL_0032: ldfld !0 class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_0037: stloc.2 - IL_0038: ldarg.1 - IL_0039: ldloc.2 - IL_003a: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericHashWithComparerIntrinsic(class [mscorlib]System.Collections.IEqualityComparer, - !!0) - IL_003f: ldloc.0 - IL_0040: ldc.i4.6 - IL_0041: shl - IL_0042: ldloc.0 - IL_0043: ldc.i4.2 - IL_0044: shr - IL_0045: add - IL_0046: add - IL_0047: add - IL_0048: stloc.0 - IL_0049: ldloc.0 - IL_004a: ret - - IL_004b: ldc.i4.0 - IL_004c: ret - } // end of method GenericKey`1::GetHashCode - - .method public hidebysig virtual final - instance int32 GetHashCode() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 13 (0xd) - .maxstack 4 - .line 4,4 : 10,20 - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() - IL_0007: call instance int32 class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::GetHashCode(class [mscorlib]System.Collections.IEqualityComparer) - IL_000c: ret - } // end of method GenericKey`1::GetHashCode - - .method public hidebysig virtual final - instance bool Equals(object obj, - class [mscorlib]System.Collections.IEqualityComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 88 (0x58) - .maxstack 5 - .locals init (class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1 V_0, - class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1 V_1, - class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1 V_2, - !a V_3, - !a V_4) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_0050 - - IL_0007: ldarg.1 - IL_0008: isinst class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1 - IL_000d: stloc.0 - IL_000e: ldloc.0 - IL_000f: brfalse.s IL_004e - - IL_0011: ldarg.0 - IL_0012: pop - IL_0013: ldarg.0 - IL_0014: stloc.1 - IL_0015: ldloc.0 - IL_0016: stloc.2 - IL_0017: ldloc.1 - IL_0018: ldfld !0 class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_001d: stloc.3 - IL_001e: ldloc.2 - IL_001f: ldfld !0 class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_0024: stloc.s V_4 - IL_0026: ldarg.2 - IL_0027: ldloc.3 - IL_0028: ldloc.s V_4 - IL_002a: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericEqualityWithComparerIntrinsic(class [mscorlib]System.Collections.IEqualityComparer, - !!0, - !!0) - IL_002f: brfalse.s IL_004c - - IL_0031: ldloc.1 - IL_0032: ldfld !0 class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_0037: stloc.3 - IL_0038: ldloc.2 - IL_0039: ldfld !0 class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_003e: stloc.s V_4 - IL_0040: ldarg.2 - IL_0041: ldloc.3 - IL_0042: ldloc.s V_4 - IL_0044: tail. - IL_0046: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericEqualityWithComparerIntrinsic(class [mscorlib]System.Collections.IEqualityComparer, - !!0, - !!0) - IL_004b: ret - - IL_004c: ldc.i4.0 - IL_004d: ret - - IL_004e: ldc.i4.0 - IL_004f: ret - - IL_0050: ldarg.1 - IL_0051: ldnull - IL_0052: cgt.un - IL_0054: ldc.i4.0 - IL_0055: ceq - IL_0057: ret - } // end of method GenericKey`1::Equals - - .method public hidebysig virtual final - instance bool Equals(class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1 obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 78 (0x4e) - .maxstack 4 - .locals init (class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1 V_0, - class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1 V_1, - !a V_2, - !a V_3) - IL_0000: nop - IL_0001: ldarg.0 - IL_0002: ldnull - IL_0003: cgt.un - IL_0005: brfalse.s IL_0046 - - IL_0007: ldarg.1 - IL_0008: ldnull - IL_0009: cgt.un - IL_000b: brfalse.s IL_0044 - - IL_000d: ldarg.0 - IL_000e: pop - IL_000f: ldarg.0 - IL_0010: stloc.0 - IL_0011: ldarg.1 - IL_0012: stloc.1 - IL_0013: ldloc.0 - IL_0014: ldfld !0 class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_0019: stloc.2 - IL_001a: ldloc.1 - IL_001b: ldfld !0 class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::item1 - IL_0020: stloc.3 - IL_0021: ldloc.2 - IL_0022: ldloc.3 - IL_0023: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericEqualityERIntrinsic(!!0, - !!0) - IL_0028: brfalse.s IL_0042 - - IL_002a: ldloc.0 - IL_002b: ldfld !0 class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_0030: stloc.2 - IL_0031: ldloc.1 - IL_0032: ldfld !0 class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::item2 - IL_0037: stloc.3 - IL_0038: ldloc.2 - IL_0039: ldloc.3 - IL_003a: tail. - IL_003c: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericEqualityERIntrinsic(!!0, - !!0) - IL_0041: ret - - IL_0042: ldc.i4.0 - IL_0043: ret - - IL_0044: ldc.i4.0 - IL_0045: ret - - IL_0046: ldarg.1 - IL_0047: ldnull - IL_0048: cgt.un - IL_004a: ldc.i4.0 - IL_004b: ceq - IL_004d: ret - } // end of method GenericKey`1::Equals - - .method public hidebysig virtual final - instance bool Equals(object obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 23 (0x17) - .maxstack 4 - .locals init (class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1 V_0) - IL_0000: nop - IL_0001: ldarg.1 - IL_0002: isinst class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1 - IL_0007: stloc.0 - IL_0008: ldloc.0 - IL_0009: brfalse.s IL_0015 - - IL_000b: ldarg.0 - IL_000c: ldloc.0 - IL_000d: tail. - IL_000f: call instance bool class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::Equals(class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1) - IL_0014: ret - - IL_0015: ldc.i4.0 - IL_0016: ret - } // end of method GenericKey`1::Equals - - .property instance int32 Tag() - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .get instance int32 Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::get_Tag() - } // end of property GenericKey`1::Tag - .property instance !a Item1() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32, - int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .get instance !a Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::get_Item1() - } // end of property GenericKey`1::Item1 - .property instance !a Item2() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, - int32, - int32) = ( 01 00 04 00 00 00 00 00 00 00 01 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .get instance !a Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::get_Item2() - } // end of property GenericKey`1::Item2 - } // end of class GenericKey`1 - - .method public static void f6() cil managed - { - // Code size 36 (0x24) - .maxstack 4 - .locals init ([0] int32 i, - [1] int32 V_1) - .line 7,7 : 8,32 - IL_0000: nop - IL_0001: ldc.i4.0 - IL_0002: stloc.0 - IL_0003: br.s IL_001b - - .line 8,8 : 12,44 - IL_0005: ldc.i4.1 - IL_0006: ldc.i4.2 - IL_0007: call class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1 class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::NewGenericKey(!0, - !0) - IL_000c: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityERComparer() - IL_0011: call instance int32 class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::GetHashCode(class [mscorlib]System.Collections.IEqualityComparer) - IL_0016: stloc.1 - IL_0017: ldloc.0 - IL_0018: ldc.i4.1 - IL_0019: add - IL_001a: stloc.0 - .line 7,7 : 21,29 - IL_001b: ldloc.0 - IL_001c: ldc.i4 0x989681 - IL_0021: blt.s IL_0005 - - IL_0023: ret - } // end of method HashMicroPerfAndCodeGenerationTests::f6 - - } // end of class HashMicroPerfAndCodeGenerationTests - -} // end of class Hash09 - -.class private abstract auto ansi sealed ''.$Hash09$fsx - extends [mscorlib]System.Object -{ -} // end of class ''.$Hash09$fsx - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash09.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash09.il.netfx4.bsl index efa9aa1c1db..b739df3af08 100644 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash09.il.netfx4.bsl +++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash09.il.netfx4.bsl @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Hash09 { - // Offset: 0x00000000 Length: 0x00000896 + // Offset: 0x00000000 Length: 0x0000088E } .mresource public FSharpOptimizationData.Hash09 { - // Offset: 0x000008A0 Length: 0x0000068C + // Offset: 0x00000898 Length: 0x00000686 } .module Hash09.dll -// MVID: {56DD2422-9642-77DB-A745-03832224DD56} +// MVID: {5772F67B-9642-77DB-A745-03837BF67257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00C80000 +// Image base: 0x00F80000 // =============== CLASS MEMBERS DECLARATION =================== @@ -257,7 +257,7 @@ // Code size 16 (0x10) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 10,20 'E:\\Documents\\GitHub\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Hash09.fsx' + .line 4,4 : 10,20 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Hash09.fsx' IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -280,7 +280,7 @@ [3] int32 V_3, [4] !a V_4, [5] !a V_5) - .line 4,4 : 10,20 '' + .line 4,4 : 10,20 IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1 @@ -432,7 +432,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 4,4 : 10,20 '' + .line 4,4 : 10,20 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -636,13 +636,13 @@ .maxstack 4 .locals init ([0] int32 i, [1] int32 V_1) - .line 7,7 : 8,32 '' + .line 7,7 : 8,32 IL_0000: nop IL_0001: ldc.i4.0 IL_0002: stloc.0 IL_0003: br.s IL_001b - .line 8,8 : 12,44 '' + .line 8,8 : 12,44 IL_0005: ldc.i4.1 IL_0006: ldc.i4.2 IL_0007: call class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1 class Hash09/HashMicroPerfAndCodeGenerationTests/GenericKey`1::NewGenericKey(!0, @@ -654,7 +654,7 @@ IL_0018: ldc.i4.1 IL_0019: add IL_001a: stloc.0 - .line 7,7 : 21,29 '' + .line 7,7 : 8,32 '' IL_001b: ldloc.0 IL_001c: ldc.i4 0x989681 IL_0021: blt.s IL_0005 diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash10.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash10.il.bsl index 2aa809a9560..921f7f3f58a 100644 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash10.il.bsl +++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash10.il.bsl @@ -87,7 +87,7 @@ IL_0021: ldc.i4.1 IL_0022: add IL_0023: stloc.1 - .line 7,7 : 21,29 + .line 7,7 : 8,32 IL_0024: ldloc.1 IL_0025: ldc.i4 0x989681 IL_002a: blt.s IL_0019 diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash11.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash11.il.bsl index 8c09e73d215..b6d26641e0c 100644 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash11.il.bsl +++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash11.il.bsl @@ -87,7 +87,7 @@ IL_0021: ldc.i4.1 IL_0022: add IL_0023: stloc.1 - .line 7,7 : 21,29 + .line 7,7 : 8,32 IL_0024: ldloc.1 IL_0025: ldc.i4 0x989681 IL_002a: blt.s IL_0019 diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash12.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash12.il.bsl deleted file mode 100644 index 740eacf4dbf..00000000000 Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash12.il.bsl and /dev/null differ diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash12.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash12.il.netfx4.bsl index 7b9a2abf33d..91efe492e5a 100644 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash12.il.netfx4.bsl +++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash12.il.netfx4.bsl @@ -22,27 +22,27 @@ int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .mresource public FSharpSignatureData.Hash12 { - // Offset: 0x00000000 Length: 0x00000AA0 + // Offset: 0x00000000 Length: 0x00000A98 } .mresource public FSharpOptimizationData.Hash12 { - // Offset: 0x00000AA8 Length: 0x00000589 + // Offset: 0x00000AA0 Length: 0x00000585 } .module Hash12.dll -// MVID: {56DD478C-9661-796E-A745-03838C47DD56} +// MVID: {5772F67E-9661-796E-A745-03837EF67257} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00BC0000 +// Image base: 0x00C10000 // =============== CLASS MEMBERS DECLARATION =================== @@ -266,7 +266,7 @@ // Code size 14 (0xe) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 10,13 'E:\\Documents\\GitHub\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Hash12.fsx' + .line 4,4 : 10,13 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Hash12.fsx' IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -288,7 +288,7 @@ [3] int32 V_3, [4] int32 V_4, [5] int32 V_5) - .line 4,4 : 10,13 '' + .line 4,4 : 10,13 IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any Hash12/HashMicroPerfAndCodeGenerationTests/Key @@ -438,7 +438,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 4,4 : 10,13 '' + .line 4,4 : 10,13 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -830,7 +830,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 - .line 5,5 : 10,26 '' + .line 5,5 : 10,26 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 @@ -857,7 +857,7 @@ [8] class Hash12/HashMicroPerfAndCodeGenerationTests/Key V_8, [9] class Hash12/HashMicroPerfAndCodeGenerationTests/Key V_9, [10] int32 V_10) - .line 5,5 : 10,26 '' + .line 5,5 : 10,26 IL_0000: nop IL_0001: ldarg.1 IL_0002: unbox.any Hash12/HashMicroPerfAndCodeGenerationTests/KeyWithInnerKeys @@ -1045,7 +1045,7 @@ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Code size 13 (0xd) .maxstack 8 - .line 5,5 : 10,26 '' + .line 5,5 : 10,26 IL_0000: nop IL_0001: ldarg.0 IL_0002: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() @@ -1264,7 +1264,7 @@ .locals init ([0] class Hash12/HashMicroPerfAndCodeGenerationTests/KeyWithInnerKeys key, [1] int32 i, [2] int32 V_2) - .line 8,8 : 8,64 '' + .line 8,8 : 8,64 IL_0000: nop IL_0001: ldc.i4.1 IL_0002: ldc.i4.2 @@ -1283,12 +1283,12 @@ IL_001b: call class Hash12/HashMicroPerfAndCodeGenerationTests/KeyWithInnerKeys Hash12/HashMicroPerfAndCodeGenerationTests/KeyWithInnerKeys::NewKeyWithInnerKeys(class Hash12/HashMicroPerfAndCodeGenerationTests/Key, class [mscorlib]System.Tuple`2) IL_0020: stloc.0 - .line 9,9 : 8,32 '' + .line 9,9 : 8,32 IL_0021: ldc.i4.0 IL_0022: stloc.1 IL_0023: br.s IL_0035 - .line 10,10 : 12,30 '' + .line 10,10 : 12,30 IL_0025: ldloc.0 IL_0026: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityERComparer() IL_002b: callvirt instance int32 Hash12/HashMicroPerfAndCodeGenerationTests/KeyWithInnerKeys::GetHashCode(class [mscorlib]System.Collections.IEqualityComparer) @@ -1297,7 +1297,7 @@ IL_0032: ldc.i4.1 IL_0033: add IL_0034: stloc.1 - .line 9,9 : 21,29 '' + .line 9,9 : 8,32 '' IL_0035: ldloc.1 IL_0036: ldc.i4 0x989681 IL_003b: blt.s IL_0025 diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/keep.lst b/tests/fsharpqa/Source/Optimizations/GenericComparison/keep.lst new file mode 100644 index 00000000000..f59ec20aabf --- /dev/null +++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/keep.lst @@ -0,0 +1 @@ +* \ No newline at end of file diff --git a/tests/fsharpqa/Source/Optimizations/Inlining/keep.lst b/tests/fsharpqa/Source/Optimizations/Inlining/keep.lst new file mode 100644 index 00000000000..f59ec20aabf --- /dev/null +++ b/tests/fsharpqa/Source/Optimizations/Inlining/keep.lst @@ -0,0 +1 @@ +* \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/AccessOfTypeAbbreviation.fs b/tests/fsharpqa/Source/Warnings/AccessOfTypeAbbreviation.fs new file mode 100644 index 00000000000..b72fdb7baae --- /dev/null +++ b/tests/fsharpqa/Source/Warnings/AccessOfTypeAbbreviation.fs @@ -0,0 +1,8 @@ +// #Warnings +//The type 'Hidden' is less accessible than the value, member or type 'Exported' it is used in + +module Library = + type private Hidden = Hidden of unit + type Exported = Hidden + +exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/AccessOfTypeAbbreviation2.fs b/tests/fsharpqa/Source/Warnings/AccessOfTypeAbbreviation2.fs new file mode 100644 index 00000000000..898e941523e --- /dev/null +++ b/tests/fsharpqa/Source/Warnings/AccessOfTypeAbbreviation2.fs @@ -0,0 +1,8 @@ +// #Warnings +// + +module Library = + type internal Hidden = Hidden of unit + type internal Exported = Hidden + +exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/AccessOfTypeAbbreviation3.fs b/tests/fsharpqa/Source/Warnings/AccessOfTypeAbbreviation3.fs new file mode 100644 index 00000000000..de1875bf576 --- /dev/null +++ b/tests/fsharpqa/Source/Warnings/AccessOfTypeAbbreviation3.fs @@ -0,0 +1,8 @@ +// #Warnings +//The type 'Hidden' is less accessible than the value, member or type 'Exported' it is used in + +module Library = + type internal Hidden = Hidden of unit + type Exported = Hidden + +exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/AccessOfTypeAbbreviation4.fs b/tests/fsharpqa/Source/Warnings/AccessOfTypeAbbreviation4.fs new file mode 100644 index 00000000000..728dc399bf2 --- /dev/null +++ b/tests/fsharpqa/Source/Warnings/AccessOfTypeAbbreviation4.fs @@ -0,0 +1,8 @@ +// #Warnings +//The type 'Hidden' is less accessible than the value, member or type 'Exported' it is used in + +module Library = + type private Hidden = Hidden of unit + type internal Exported = Hidden + +exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/AccessOfTypeAbbreviation5.fs b/tests/fsharpqa/Source/Warnings/AccessOfTypeAbbreviation5.fs new file mode 100644 index 00000000000..d0d3b251008 --- /dev/null +++ b/tests/fsharpqa/Source/Warnings/AccessOfTypeAbbreviation5.fs @@ -0,0 +1,8 @@ +// #Warnings +// + +module Library = + type private Hidden = Hidden of unit + type private Exported = Hidden + +exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/AccessOfTypeAbbreviation6.fs b/tests/fsharpqa/Source/Warnings/AccessOfTypeAbbreviation6.fs new file mode 100644 index 00000000000..d179e5f20e0 --- /dev/null +++ b/tests/fsharpqa/Source/Warnings/AccessOfTypeAbbreviation6.fs @@ -0,0 +1,8 @@ +// #Warnings +// + +module Library = + type Hidden = Hidden of unit + type Exported = Hidden + +exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/InvalidRecord.fs b/tests/fsharpqa/Source/Warnings/InvalidRecord.fs new file mode 100644 index 00000000000..f04f24e4576 --- /dev/null +++ b/tests/fsharpqa/Source/Warnings/InvalidRecord.fs @@ -0,0 +1,9 @@ +// #Warnings +//This expression was expected to have type + +type Record = {field1:int; field2:int} +let doSomething (xs) = List.map (fun {field1=x} -> x) xs + +doSomething {Record.field1=0; field2=0} + +exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/MatchingMethodWithSameNameIsNotAbstract.fs b/tests/fsharpqa/Source/Warnings/MatchingMethodWithSameNameIsNotAbstract.fs new file mode 100644 index 00000000000..36275ff0e92 --- /dev/null +++ b/tests/fsharpqa/Source/Warnings/MatchingMethodWithSameNameIsNotAbstract.fs @@ -0,0 +1,14 @@ +// #Warnings +//The type Foo contains the member 'MyX' but it is not a virtual or abstract method that is available to override or implement. +//ToString + +type Foo(x : int) = + member v.MyX() = x + +let foo = + { new Foo(3) + with + member v.MyX() = 4 } + + +exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/NoMatchingAbstractMethodWithSameName.fs b/tests/fsharpqa/Source/Warnings/NoMatchingAbstractMethodWithSameName.fs new file mode 100644 index 00000000000..a59f863a774 --- /dev/null +++ b/tests/fsharpqa/Source/Warnings/NoMatchingAbstractMethodWithSameName.fs @@ -0,0 +1,14 @@ +// #Warnings +//The member 'Function' does not correspond to any abstract or virtual method available to override or implement. +//MyFunction + +type IInterface = + abstract MyFunction : int32 * int32 -> unit + abstract SomeOtherFunction : int32 * int32 -> unit + +let x = + { new IInterface with + member this.Function (i, j) = () + } + +exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/SuggestFieldsInCtor.fs b/tests/fsharpqa/Source/Warnings/SuggestFieldsInCtor.fs new file mode 100644 index 00000000000..7d7e9860842 --- /dev/null +++ b/tests/fsharpqa/Source/Warnings/SuggestFieldsInCtor.fs @@ -0,0 +1,13 @@ +// #Warnings +//The object constructor 'MyClass' has no argument or settable return property 'Property'. +//Maybe you want one of the following: +//MyProperty + +type MyClass() = + member val MyProperty = "" with get, set + member val MyProperty2 = "" with get, set + member val ABigProperty = "" with get, set + +let c = MyClass(Property = "") + +exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/TupleInAbstractMethod.fs b/tests/fsharpqa/Source/Warnings/TupleInAbstractMethod.fs new file mode 100644 index 00000000000..0ed439073e3 --- /dev/null +++ b/tests/fsharpqa/Source/Warnings/TupleInAbstractMethod.fs @@ -0,0 +1,13 @@ +// #Warnings +//The member 'Function' does not accept the correct number of arguments. +//A tuple type is required for one or more arguments + +type IInterface = + abstract Function : (int32 * int32) -> unit + +let x = + { new IInterface with + member this.Function (i, j) = () + } + +exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/WrongArity.fs b/tests/fsharpqa/Source/Warnings/WrongArity.fs new file mode 100644 index 00000000000..459f9a5c7a4 --- /dev/null +++ b/tests/fsharpqa/Source/Warnings/WrongArity.fs @@ -0,0 +1,11 @@ +// #Warnings +//A member or object constructor 'MyMember' taking 3 + +type MyType() = + static member MyMember(arg1, arg2:int ) = () + static member MyMember(arg1, arg2:byte) = () + + +MyType.MyMember("", 0, 0) + +exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/env.lst b/tests/fsharpqa/Source/Warnings/env.lst index da119ba25d2..be9cc19b848 100644 --- a/tests/fsharpqa/Source/Warnings/env.lst +++ b/tests/fsharpqa/Source/Warnings/env.lst @@ -2,11 +2,23 @@ SOURCE=WarnIfMissingElseBranch.fs # WarnIfMissingElseBranch.fs SOURCE=ReturnInsteadOfReturnBang.fs # ReturnInsteadOfReturnBang.fs SOURCE=YieldInsteadOfYieldBang.fs # YieldInsteadOfYieldBang.fs + SOURCE=TupleInAbstractMethod.fs # TupleInAbstractMethod.fs + SOURCE=InvalidRecord.fs # InvalidRecord.fs SOURCE=CommaInRecCtor.fs # CommaInRecCtor.fs SOURCE=ValidCommaInRecCtor.fs # ValidCommaInRecCtor.fs + SOURCE=WrongArity.fs # WrongArity.fs + SOURCE=AccessOfTypeAbbreviation.fs # AccessOfTypeAbbreviation.fs + SOURCE=AccessOfTypeAbbreviation2.fs # AccessOfTypeAbbreviation2.fs + SOURCE=AccessOfTypeAbbreviation3.fs # AccessOfTypeAbbreviation3.fs + SOURCE=AccessOfTypeAbbreviation4.fs # AccessOfTypeAbbreviation4.fs + SOURCE=AccessOfTypeAbbreviation5.fs # AccessOfTypeAbbreviation5.fs + SOURCE=AccessOfTypeAbbreviation6.fs # AccessOfTypeAbbreviation6.fs SOURCE=ElseBranchHasWrongType.fs # ElseBranchHasWrongType.fs + SOURCE=MatchingMethodWithSameNameIsNotAbstract.fs # MatchingMethodWithSameNameIsNotAbstract.fs + SOURCE=NoMatchingAbstractMethodWithSameName.fs # NoMatchingAbstractMethodWithSameName.fs SOURCE=MissingExpressionAfterLet.fs # MissingExpressionAfterLet.fs SOURCE=AssignmentOnImmutable.fs # AssignmentOnImmutable.fs + SOURCE=SuggestFieldsInCtor.fs # SuggestFieldsInCtor.fs SOURCE=RefCellInsteadOfNot.fs # RefCellInsteadOfNot.fs SOURCE=RefCellInsteadOfNot2.fs # RefCellInsteadOfNot2.fs SOURCE=UpcastInsteadOfDowncast.fs # UpcastInsteadOfDowncast.fs diff --git a/tests/fsharpqa/Source/test.lst b/tests/fsharpqa/Source/test.lst index 94f036d9d5c..8b87fc8a031 100644 --- a/tests/fsharpqa/Source/test.lst +++ b/tests/fsharpqa/Source/test.lst @@ -242,7 +242,7 @@ Misc01 ClrFx\PseudoCustomAttributes\AssemblyAlgorithmId Misc01 ClrFx\PseudoCustomAttributes\AssemblyConfiguration Misc01 ClrFx\PseudoCustomAttributes\AssemblyVersion Misc01 Diagnostics\async -Misc01 Diagnostics\General +Misc01,Diagnostics Diagnostics\General Misc01 Diagnostics\NONTERM Misc01 Diagnostics\ParsingAtEOF Misc01 EntryPoint @@ -277,4 +277,3 @@ Misc02 Stress Misc02 XmlDoc\Basic Misc02 XmlDoc\OCamlDoc Misc02 XmlDoc\UnitOfMeasure -Diagnostics Diagnostics\General diff --git a/tests/fsharpqa/testenv/bin/.gitignore b/tests/fsharpqa/testenv/bin/.gitignore index 08b60b67553..fcead202ce5 100644 --- a/tests/fsharpqa/testenv/bin/.gitignore +++ b/tests/fsharpqa/testenv/bin/.gitignore @@ -3,7 +3,9 @@ /FSharp.Core.* /HostedCompilerServer.* /ILComparer.* +/System.Collections.Immutable.* /diff.* +/System.Collections.Immutable.* /x86/ /AMD64/ /nunit/ diff --git a/tests/fsharpqa/testenv/src/FSharp.Compiler.Hosted/Compiler.fs b/tests/fsharpqa/testenv/src/FSharp.Compiler.Hosted/Compiler.fs index 0aa7ac3bb42..3b0493f62ae 100644 --- a/tests/fsharpqa/testenv/src/FSharp.Compiler.Hosted/Compiler.fs +++ b/tests/fsharpqa/testenv/src/FSharp.Compiler.Hosted/Compiler.fs @@ -2,8 +2,6 @@ namespace FSharp.Compiler.Hosted open System open System.Text.RegularExpressions -type CoreCompiler = Microsoft.FSharp.Compiler.Driver.InProcCompiler - /// build issue location type Location = { @@ -39,7 +37,7 @@ type CompilationResult = /// in-proc version of fsc.exe type FscCompiler() = - let compiler = CoreCompiler() + let compiler = Microsoft.FSharp.Compiler.Driver.InProcCompiler() let emptyLocation = { diff --git a/tests/scripts/compiler-perf-bigfiles.cmd b/tests/scripts/compiler-perf-bigfiles.cmd new file mode 100644 index 00000000000..312befdf033 --- /dev/null +++ b/tests/scripts/compiler-perf-bigfiles.cmd @@ -0,0 +1,23 @@ +setlocal + +Release\net40\bin\fsc.exe /out:tmp.dll %* tests\fsharp\core\libtest\test.fsx 2>> log.err 1>> log.out +Release\net40\bin\fsc.exe /out:tmp.dll %* tests\fsharp\core\printf\test.fsx 2>> log.err 1>> log.out +Release\net40\bin\fsc.exe /out:tmp.dll %* tests\fsharp\core\members\basics-hw\test.fsx 2>> log.err 1>> log.out +Release\net40\bin\fsc.exe /out:tmp.dll %* tests\fsharp\core\members\basics-hw-mutrec\test.fs 2>> log.err 1>> log.out +Release\net40\bin\fsc.exe /out:tmp.dll %* tests\fsharp\tools\eval\test.fsx 2>> log.err 1>> log.out + +Release\net40\bin\fsc.exe /out:tmp.dll %* tests\fsharp\core\libtest\test.fsx 2>> log.err 1>> log.out +Release\net40\bin\fsc.exe /out:tmp.dll %* tests\fsharp\core\printf\test.fsx 2>> log.err 1>> log.out +Release\net40\bin\fsc.exe /out:tmp.dll %* tests\fsharp\core\members\basics-hw\test.fsx 2>> log.err 1>> log.out +Release\net40\bin\fsc.exe /out:tmp.dll %* tests\fsharp\core\members\basics-hw-mutrec\test.fs 2>> log.err 1>> log.out +Release\net40\bin\fsc.exe /out:tmp.dll %* tests\fsharp\tools\eval\test.fsx 2>> log.err 1>> log.out + +Release\net40\bin\fsc.exe /out:tmp.dll %* tests\fsharp\core\libtest\test.fsx 2>> log.err 1>> log.out +Release\net40\bin\fsc.exe /out:tmp.dll %* tests\fsharp\core\printf\test.fsx 2>> log.err 1>> log.out +Release\net40\bin\fsc.exe /out:tmp.dll %* tests\fsharp\core\members\basics-hw\test.fsx 2>> log.err 1>> log.out +Release\net40\bin\fsc.exe /out:tmp.dll %* tests\fsharp\core\members\basics-hw-mutrec\test.fs 2>> log.err 1>> log.out +Release\net40\bin\fsc.exe /out:tmp.dll %* tests\fsharp\tools\eval\test.fsx 2>> log.err 1>> log.out + +REM compiler-perf-bigfiles.log + +endlocal diff --git a/tests/scripts/compiler-perf-results.txt b/tests/scripts/compiler-perf-results.txt new file mode 100644 index 00000000000..ba61fa3c11e --- /dev/null +++ b/tests/scripts/compiler-perf-results.txt @@ -0,0 +1,20 @@ +url ref sha base build startup-to-parseonly parseonly-to-check check-to-nooptimize check-to-optimize nooptimize-to-debug +https://github.com/Microsoft/visualfsharp master 0247247d480340c27ce7f7de9b2fbc3b7c598b03 0247247d480340c27ce7f7de9b2fbc3b7c598b03 208.37 10.80 30.96 46.90 64.63 52.79 +https://github.com/Microsoft/visualfsharp master 0247247d480340c27ce7f7de9b2fbc3b7c598b03 0247247d480340c27ce7f7de9b2fbc3b7c598b03 205.30 10.95 31.27 47.89 63.56 51.45 +https://github.com/Microsoft/visualfsharp master 0247247d480340c27ce7f7de9b2fbc3b7c598b03 0247247d480340c27ce7f7de9b2fbc3b7c598b03 207.75 11.09 30.23 50.55 64.30 50.56 +https://github.com/Microsoft/visualfsharp master 0247247d480340c27ce7f7de9b2fbc3b7c598b03 0247247d480340c27ce7f7de9b2fbc3b7c598b03 206.02 11.31 32.09 47.31 63.09 51.53 +https://github.com/Microsoft/visualfsharp master 1ce06f8a8e44e81e1b51ce1a4743514afda5848a 1ce06f8a8e44e81e1b51ce1a4743514afda5848a 207.13 11.30 30.84 47.05 62.64 51.97 +https://github.com/Microsoft/visualfsharp master 1ce06f8a8e44e81e1b51ce1a4743514afda5848a 1ce06f8a8e44e81e1b51ce1a4743514afda5848a 207.67 10.91 31.11 47.59 61.90 52.41 + +https://github.com/forki/visualfsharp.git foreach_optimization d0ab5fec77482e1280578f47e3257cf660d7f1b2 0247247d480340c27ce7f7de9b2fbc3b7c598b03 206.56 11.02 30.55 47.72 62.52 52.96 +https://github.com/forki/visualfsharp.git foreach_optimization d0ab5fec77482e1280578f47e3257cf660d7f1b2 0247247d480340c27ce7f7de9b2fbc3b7c598b03 206.41 10.72 31.05 48.59 61.88 53.13 +https://github.com/forki/visualfsharp.git foreach_optimization d0ab5fec77482e1280578f47e3257cf660d7f1b2 0247247d480340c27ce7f7de9b2fbc3b7c598b03 207.31 10.91 31.03 46.78 62.39 52.11 +https://github.com/forki/visualfsharp.git foreach_optimization d0ab5fec77482e1280578f47e3257cf660d7f1b2 0247247d480340c27ce7f7de9b2fbc3b7c598b03 211.23 11.36 31.42 47.38 63.22 53.54 + +https://github.com/dsyme/visualfsharp.git no-casts 53d633d6dba0d8f5fcd80f47f588d21cd7a2cff9 0247247d480340c27ce7f7de9b2fbc3b7c598b03 211.45 11.14 30.25 45.66 61.73 53.84 +https://github.com/dsyme/visualfsharp.git no-casts 53d633d6dba0d8f5fcd80f47f588d21cd7a2cff9 0247247d480340c27ce7f7de9b2fbc3b7c598b03 207.08 10.69 31.23 46.47 61.97 52.14 +https://github.com/dsyme/visualfsharp.git no-casts 53d633d6dba0d8f5fcd80f47f588d21cd7a2cff9 0247247d480340c27ce7f7de9b2fbc3b7c598b03 208.58 11.25 31.70 47.69 63.06 52.61 +https://github.com/dsyme/visualfsharp.git no-casts 53d633d6dba0d8f5fcd80f47f588d21cd7a2cff9 1ce06f8a8e44e81e1b51ce1a4743514afda5848a 209.92 10.83 30.59 46.45 63.41 55.14 +https://github.com/dsyme/visualfsharp.git no-casts 53d633d6dba0d8f5fcd80f47f588d21cd7a2cff9 1ce06f8a8e44e81e1b51ce1a4743514afda5848a 230.10 11.06 29.59 46.61 64.58 54.09 +https://github.com/dsyme/visualfsharp.git no-casts 53d633d6dba0d8f5fcd80f47f588d21cd7a2cff9 1ce06f8a8e44e81e1b51ce1a4743514afda5848a 221.48 12.05 31.19 47.31 62.44 54.08 +https://github.com/Microsoft/visualfsharp master 1ce06f8a8e44e81e1b51ce1a4743514afda5848a 1ce06f8a8e44e81e1b51ce1a4743514afda5848a 213.58 11.23 32.03 47.61 62.34 51.25 diff --git a/tests/scripts/compiler-perf.fsx b/tests/scripts/compiler-perf.fsx new file mode 100644 index 00000000000..309b3e5294f --- /dev/null +++ b/tests/scripts/compiler-perf.fsx @@ -0,0 +1,141 @@ + +#if FETCH_PACKAGES +open System +open System.IO + +Environment.CurrentDirectory <- __SOURCE_DIRECTORY__ + +if not (File.Exists "paket.exe") then let url = "https://github.com/fsprojects/Paket/releases/download/3.4.0/paket.exe" in use wc = new Net.WebClient() in let tmp = Path.GetTempFileName() in wc.DownloadFile(url, tmp); File.Move(tmp,Path.GetFileName url);; + +// Step 1. Resolve and install the packages + +#r "paket.exe" + +if not (Directory.Exists "script-packages") then Directory.CreateDirectory("script-packages") |> ignore +Paket.Dependencies.Install(""" +source https://nuget.org/api/v2 +nuget FSharp.Data +nuget FAKE +""","script-packages");; + +#else + + + +#I "script-packages/packages/FAKE/tools" +#I "script-packages/packages/FSharp.Data/lib/net40" +#r "script-packages/packages/FAKE/tools/FakeLib.dll" +#r "script-packages/packages/FSharp.Data/lib/net40/FSharp.Data.dll" + +open System +open System.IO +open Fake +open Fake.Git +open FSharp.Data + +Fake.Git.Information.describe + +[] +let repo = "https://github.com/Microsoft/visualfsharp" +[] +let repoApi = "https://api.github.com/repos/Microsoft/visualfsharp" +type Commits = JsonProvider< const (repoApi + "/commits")> + +type Pulls = JsonProvider< const (repoApi + "/pulls")> + +//type Comments = JsonProvider< "https://api.github.com/repos/Microsoft/visualfsharp/issues/848/comments"> +//let comments = Comments.GetSamples() + +let commits = Commits.GetSamples() +let pulls = Pulls.GetSamples() + +let repoHeadSha = commits.[0].Sha + +// Do performance testing on all open PRs that have [CompilerPerf] in the title +let buildSpecs = + [ for pr in pulls do + //let comments = Comments.Load(pr.CommentsUrl) + if pr.Title.Contains("[CompilerPerf]") then + yield (pr.Head.Repo.CloneUrl, pr.Head.Sha, repoHeadSha, pr.Head.Ref, pr.Number) + // ("https://github.com/dsyme/visualfsharp.git","53d633d6dba0d8f5fcd80f47f588d21cd7a2cff9", repoHeadSha, "no-casts", 1308); + //yield ("https://github.com/forki/visualfsharp.git", "d0ab5fec77482e1280578f47e3257cf660d7f1b2", repoHeadSha, "foreach_optimization", 1303); + yield (repo, repoHeadSha, repoHeadSha, "master", 0); + ] + + +let time f = + let start = DateTime.UtcNow + let res = f() + let finish = DateTime.UtcNow + res, finish - start + + +let exec cmd args dir = + printfn "%s> %s %s" dir cmd args + let result = Shell.Exec(cmd,args,dir) + if result <> 0 then failwith (sprintf "FAILED: %s> %s %s" dir cmd args) + +/// Build a specific version of the repo, run compiler perf tests and record the result +let build(cloneUrl,sha:string,baseSha,ref,prNumber) = + let branch = "build-" + string prNumber + "-" + ref + "-" + sha.[0..7] + let dirBase = __SOURCE_DIRECTORY__ + let dirBuild = "current" + let dir = Path.Combine(dirBase, dirBuild) // "build-" + ref + "-" + sha.[0..7] + //printfn "cloning %s branch %s into %s" cloneUrl ref dir + if not (Directory.Exists dir) then + exec "git" ("clone " + repo + " " + dirBuild) dirBase |> ignore + let result = exec "git" "reset --merge" dir + let result = exec "git" "checkout master" dir + let result = exec "git" "clean -f -x" dir + let result = exec "git" ("checkout -B " + branch + " master") dir + let result = exec "git" ("pull " + cloneUrl + " " + ref) dir + let result, buildTime = time (fun () -> exec "cmd" "/C build.cmd release proto net40 notests" dir ) + let result, ngenTime = time (fun () -> exec "ngen" @"install Release\net40\bin\fsc.exe" dir ) + + let runPhase (test:string) (flags:string)= + printfn "copying compiler-perf-%s.cmd to %s" test dir + File.Copy(sprintf "compiler-perf-%s.cmd" test,Path.Combine(dir,sprintf "compiler-perf-%s.cmd" test),true) + printfn "running compiler-perf-%s.cmd in %s" test dir + let result, time = time (fun () -> exec "cmd" (sprintf "/C compiler-perf-%s.cmd %s" test flags) dir ) + //File.Copy(Path.Combine(dir,sprintf "compiler-perf-%s.log" test),Path.Combine(dirBase,sprintf "compiler-perf-%s-%s.log" test branch),true) + time.TotalSeconds + + let runScenario name = + + let parseonly = runPhase name "/parseonly" + let checkonly = runPhase name "/typecheckonly" + let nooptimize = runPhase name "/optimize- /debug-" + let debug = runPhase name "/optimize- /debug+" + let optimize = runPhase name "/optimize+ /debug-" + + let times = + [ (sprintf "%s-startup-to-parseonly" name, parseonly) + (sprintf "%s-parseonly-to-checkonly" name, checkonly - parseonly) + (sprintf "%s-checkonly-to-nooptimize" name, nooptimize - checkonly) + (sprintf "%s-checkonly-to-optimize" name, optimize - checkonly) + (sprintf "%s-nooptimize-to-debug" name, debug - nooptimize) ] + + let timesHeaderText = (String.concat " " (List.map fst times)) + let timesText = (times |> List.map snd |> List.map (sprintf "%0.2f ") |> String.concat " ") + timesHeaderText, timesText + + let timesHeaderText, timesText = runScenario "bigfiles" + + let logFile = "compiler-perf-results.txt" + let logHeader = sprintf "url ref sha base build %s" timesHeaderText + let logLine = sprintf "%s %s %s %s %0.2f %s" cloneUrl ref sha baseSha buildTime.TotalSeconds timesText + let existing = if File.Exists logFile then File.ReadAllLines(logFile) else [| logHeader |] + printfn "writing results %s" logLine + + File.WriteAllLines(logFile, [| yield! existing; yield logLine |]) + () + + +for info in buildSpecs do + try + build info + with e -> + printfn "ERROR: %A - %s" info e.Message + + +#endif diff --git a/tests/service/ProjectOptionsTests.fs b/tests/service/ProjectOptionsTests.fs new file mode 100644 index 00000000000..28060c18514 --- /dev/null +++ b/tests/service/ProjectOptionsTests.fs @@ -0,0 +1,442 @@ +#if INTERACTIVE +#r "../../bin/v4.5/FSharp.Compiler.Service.dll" +#r "../../bin/v4.5/FSharp.Compiler.Service.ProjectCracker.dll" +#r "../../packages/NUnit/lib/nunit.framework.dll" +#load "FsUnit.fs" +#load "Common.fs" +#else +module FSharp.Compiler.Service.Tests.ProjectOptionsTests +#endif + +let runningOnMono = try System.Type.GetType("Mono.Runtime") <> null with e -> false + +open System +open System.IO +open NUnit.Framework +open FsUnit +open Microsoft.FSharp.Compiler.SourceCodeServices + +open FSharp.Compiler.Service.Tests.Common + +#if !NO_PROJECTCRACKER + +let normalizePath s = (new Uri(s)).LocalPath + +let checkOption (opts:string[]) s = + let found = "Found '"+s+"'" + (if opts |> Array.exists (fun o -> o.EndsWith(s)) then found else "Failed to find '"+s+"'") + |> shouldEqual found + +let checkOptionNotPresent (opts:string[]) s = + let found = "Found '"+s+"'" + let notFound = "Did not expect to find '"+s+"'" + (if opts |> Array.exists (fun o -> o.EndsWith(s)) then found else notFound) + |> shouldEqual notFound + +let getReferencedFilenames = Array.choose (fun (o:string) -> if o.StartsWith("-r:") then o.[3..] |> (Path.GetFileName >> Some) else None) +let getReferencedFilenamesAndContainingFolders = Array.choose (fun (o:string) -> if o.StartsWith("-r:") then o.[3..] |> (fun r -> ((r |> Path.GetFileName), (r |> Path.GetDirectoryName |> Path.GetFileName)) |> Some) else None) +let getOutputFile = Array.pick (fun (o:string) -> if o.StartsWith("--out:") then o.[6..] |> Some else None) +let getCompiledFilenames = Array.choose (fun (o:string) -> if o.EndsWith(".fs") then o |> (Path.GetFileName >> Some) else None) + +[] +let ``Project file parsing example 1 Default Configuration`` () = + let projectFile = __SOURCE_DIRECTORY__ + @"/FSharp.Compiler.Service.Tests.fsproj" + let options = ProjectCracker.GetProjectOptionsFromProjectFile(projectFile) + + checkOption options.OtherOptions "FSharp.Compiler.Service.dll" + checkOption options.OtherOptions "FileSystemTests.fs" + checkOption options.OtherOptions "--define:TRACE" + checkOption options.OtherOptions "--define:DEBUG" + checkOption options.OtherOptions "--flaterrors" + checkOption options.OtherOptions "--simpleresolution" + checkOption options.OtherOptions "--noframework" + +[] +let ``Project file parsing example 1 Release Configuration`` () = + let projectFile = __SOURCE_DIRECTORY__ + @"/FSharp.Compiler.Service.Tests.fsproj" + // Check with Configuration = Release + let options = ProjectCracker.GetProjectOptionsFromProjectFile(projectFile, [("Configuration", "Release")]) + + checkOption options.OtherOptions "FSharp.Compiler.Service.dll" + checkOption options.OtherOptions "FileSystemTests.fs" + checkOption options.OtherOptions "--define:TRACE" + checkOptionNotPresent options.OtherOptions "--define:DEBUG" + checkOption options.OtherOptions "--debug:pdbonly" + +[] +let ``Project file parsing example 1 Default configuration relative path`` () = + let projectFile = "FSharp.Compiler.Service.Tests.fsproj" + Directory.SetCurrentDirectory(__SOURCE_DIRECTORY__) + + let options = ProjectCracker.GetProjectOptionsFromProjectFile(projectFile) + + checkOption options.OtherOptions "FSharp.Compiler.Service.dll" + checkOption options.OtherOptions "FileSystemTests.fs" + checkOption options.OtherOptions "--define:TRACE" + checkOption options.OtherOptions "--define:DEBUG" + checkOption options.OtherOptions "--flaterrors" + checkOption options.OtherOptions "--simpleresolution" + checkOption options.OtherOptions "--noframework" + +[] +let ``Project file parsing VS2013_FSharp_Portable_Library_net45``() = + let projectFile = __SOURCE_DIRECTORY__ + @"/../projects/Sample_VS2013_FSharp_Portable_Library_net45/Sample_VS2013_FSharp_Portable_Library_net45.fsproj" + let options = ProjectCracker.GetProjectOptionsFromProjectFile(projectFile, []) + + checkOption options.OtherOptions "--targetprofile:netcore" + checkOption options.OtherOptions "--tailcalls-" + + checkOption options.OtherOptions "FSharp.Core.dll" + checkOption options.OtherOptions "Microsoft.CSharp.dll" + checkOption options.OtherOptions "System.Runtime.dll" + checkOption options.OtherOptions "System.Net.Requests.dll" + checkOption options.OtherOptions "System.Xml.XmlSerializer.dll" + +[] +let ``Project file parsing Sample_VS2013_FSharp_Portable_Library_net451_adjusted_to_profile78``() = + let projectFile = __SOURCE_DIRECTORY__ + @"/../projects/Sample_VS2013_FSharp_Portable_Library_net451_adjusted_to_profile78/Sample_VS2013_FSharp_Portable_Library_net451.fsproj" + Directory.SetCurrentDirectory(__SOURCE_DIRECTORY__ + @"/../projects/Sample_VS2013_FSharp_Portable_Library_net451_adjusted_to_profile78/") + let options = ProjectCracker.GetProjectOptionsFromProjectFile(projectFile, []) + + checkOption options.OtherOptions "--targetprofile:netcore" + checkOption options.OtherOptions "--tailcalls-" + + checkOption options.OtherOptions "FSharp.Core.dll" + checkOption options.OtherOptions "Microsoft.CSharp.dll" + checkOption options.OtherOptions "System.Runtime.dll" + checkOption options.OtherOptions "System.Net.Requests.dll" + checkOption options.OtherOptions "System.Xml.XmlSerializer.dll" + +[] +let ``Project file parsing -- compile files 1``() = + let p = ProjectCracker.GetProjectOptionsFromProjectFile(__SOURCE_DIRECTORY__ + @"/data/Test1.fsproj") + + p.OtherOptions + |> getCompiledFilenames + |> set + |> should equal (set [ "Test1File1.fs"; "Test1File2.fs" ]) + +[] +let ``Project file parsing -- compile files 2``() = + let p = ProjectCracker.GetProjectOptionsFromProjectFile(__SOURCE_DIRECTORY__ + @"/data/Test2.fsproj") + + p.OtherOptions + |> getCompiledFilenames + |> set + |> should equal (set [ "Test2File1.fs"; "Test2File2.fs" ]) + +[] +let ``Project file parsing -- bad project file``() = + let f = normalizePath (__SOURCE_DIRECTORY__ + @"/data/Malformed.fsproj") + let log = snd (ProjectCracker.GetProjectOptionsFromProjectFileLogged(f)) + log.[f] |> should contain "Microsoft.Build.Exceptions.InvalidProjectFileException" + +[] +let ``Project file parsing -- non-existent project file``() = + let f = normalizePath (__SOURCE_DIRECTORY__ + @"/data/DoesNotExist.fsproj") + let log = snd (ProjectCracker.GetProjectOptionsFromProjectFileLogged(f, enableLogging=true)) + log.[f] |> should contain "System.IO.FileNotFoundException" + +[] +let ``Project file parsing -- output file``() = + let p = ProjectCracker.GetProjectOptionsFromProjectFile(__SOURCE_DIRECTORY__ + @"/data/Test1.fsproj") + + let expectedOutputPath = + normalizePath (__SOURCE_DIRECTORY__ + "/data/Test1/bin/Debug/Test1.dll") + + p.OtherOptions + |> getOutputFile + |> should equal expectedOutputPath + +[] +let ``Project file parsing -- references``() = + let p = ProjectCracker.GetProjectOptionsFromProjectFile(__SOURCE_DIRECTORY__ + @"/data/Test1.fsproj") + + let references = getReferencedFilenames p.OtherOptions + checkOption references "FSharp.Core.dll" + checkOption references "mscorlib.dll" + checkOption references "System.Core.dll" + checkOption references "System.dll" + printfn "Project file parsing -- references: references = %A" references + references |> should haveLength 4 + p.ReferencedProjects |> should be Empty + +[] +let ``Project file parsing -- 2nd level references``() = + let p = ProjectCracker.GetProjectOptionsFromProjectFile(__SOURCE_DIRECTORY__ + @"/data/Test2.fsproj") + + let references = getReferencedFilenames p.OtherOptions + checkOption references "FSharp.Core.dll" + checkOption references "mscorlib.dll" + checkOption references "System.Core.dll" + checkOption references "System.dll" + checkOption references "Test1.dll" + printfn "Project file parsing -- references: references = %A" references + references |> should haveLength 5 + p.ReferencedProjects |> should haveLength 1 + (snd p.ReferencedProjects.[0]).ProjectFileName |> should contain (normalizePath (__SOURCE_DIRECTORY__ + @"/data/Test1.fsproj")) + +[] +let ``Project file parsing -- reference project output file``() = + let p = ProjectCracker.GetProjectOptionsFromProjectFile(__SOURCE_DIRECTORY__ + @"/data/DifferingOutputDir/Dir2/Test2.fsproj") + + let expectedOutputPath = + normalizePath (__SOURCE_DIRECTORY__ + "/data/DifferingOutputDir/Dir2/OutputDir2/Test2.exe") + + p.OtherOptions + |> getOutputFile + |> should equal expectedOutputPath + + p.OtherOptions + |> Array.choose (fun (o:string) -> if o.StartsWith("-r:") then o.[3..] |> Some else None) + |> should contain (normalizePath (__SOURCE_DIRECTORY__ + @"/data/DifferingOutputDir/Dir1/OutputDir1/Test1.dll")) + + +[] +let ``Project file parsing -- Tools Version 12``() = + let p = ProjectCracker.GetProjectOptionsFromProjectFile(__SOURCE_DIRECTORY__ + @"/data/ToolsVersion12.fsproj") + + checkOption (getReferencedFilenames p.OtherOptions) "System.Core.dll" + +[] +let ``Project file parsing -- Logging``() = + let f = normalizePath (__SOURCE_DIRECTORY__ + @"/data/ToolsVersion12.fsproj") + let p, logMap = ProjectCracker.GetProjectOptionsFromProjectFileLogged(f, enableLogging=true) + let log = logMap.[f] + + if runningOnMono then + Assert.That(log, Is.StringContaining("Reference System.Core resolved")) + Assert.That(log, Is.StringContaining("Using task ResolveAssemblyReference from Microsoft.Build.Tasks.ResolveAssemblyReference")) + else + Assert.That(log, Is.StringContaining("""Using "ResolveAssemblyReference" task from assembly "Microsoft.Build.Tasks.Core, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".""")) + +[] +let ``Project file parsing -- Full path``() = + let f = normalizePath (__SOURCE_DIRECTORY__ + @"/data/ToolsVersion12.fsproj") + let p = ProjectCracker.GetProjectOptionsFromProjectFile(f) + p.ProjectFileName |> should equal f + +[] +let ``Project file parsing -- project references``() = + let f1 = normalizePath (__SOURCE_DIRECTORY__ + @"/data/Test1.fsproj") + let f2 = normalizePath (__SOURCE_DIRECTORY__ + @"/data/Test2.fsproj") + let options = ProjectCracker.GetProjectOptionsFromProjectFile(f2) + + options.ReferencedProjects |> should haveLength 1 + fst options.ReferencedProjects.[0] |> should endWith "Test1.dll" + snd options.ReferencedProjects.[0] |> should equal (ProjectCracker.GetProjectOptionsFromProjectFile(f1)) + +[] +let ``Project file parsing -- multi language project``() = + let f = normalizePath (__SOURCE_DIRECTORY__ + @"/data/MultiLanguageProject/ConsoleApplication1.fsproj") + + let options = ProjectCracker.GetProjectOptionsFromProjectFile(f) + + options.ReferencedProjects |> should haveLength 1 + options.ReferencedProjects.[0] |> fst |> should endWith "ConsoleApplication2.exe" + + checkOption options.OtherOptions "ConsoleApplication2.exe" + checkOption options.OtherOptions "ConsoleApplication3.exe" + +[] +let ``Project file parsing -- PCL profile7 project``() = + + let f = normalizePath (__SOURCE_DIRECTORY__ + @"/../projects/Sample_VS2013_FSharp_Portable_Library_net45/Sample_VS2013_FSharp_Portable_Library_net45.fsproj") + + let options = ProjectCracker.GetProjectOptionsFromProjectFile(f) + let references = + options.OtherOptions + |> getReferencedFilenames + |> Set.ofArray + references + |> shouldEqual + (set [|"FSharp.Core.dll"; "Microsoft.CSharp.dll"; "Microsoft.VisualBasic.dll"; + "System.Collections.Concurrent.dll"; "System.Collections.dll"; + "System.ComponentModel.Annotations.dll"; + "System.ComponentModel.DataAnnotations.dll"; + "System.ComponentModel.EventBasedAsync.dll"; "System.ComponentModel.dll"; + "System.Core.dll"; "System.Diagnostics.Contracts.dll"; + "System.Diagnostics.Debug.dll"; "System.Diagnostics.Tools.dll"; + "System.Diagnostics.Tracing.dll"; "System.Dynamic.Runtime.dll"; + "System.Globalization.dll"; "System.IO.Compression.dll"; "System.IO.dll"; + "System.Linq.Expressions.dll"; "System.Linq.Parallel.dll"; + "System.Linq.Queryable.dll"; "System.Linq.dll"; "System.Net.Http.dll"; + "System.Net.NetworkInformation.dll"; "System.Net.Primitives.dll"; + "System.Net.Requests.dll"; "System.Net.dll"; "System.Numerics.dll"; + "System.ObjectModel.dll"; "System.Reflection.Context.dll"; + "System.Reflection.Extensions.dll"; "System.Reflection.Primitives.dll"; + "System.Reflection.dll"; "System.Resources.ResourceManager.dll"; + "System.Runtime.Extensions.dll"; + "System.Runtime.InteropServices.WindowsRuntime.dll"; + "System.Runtime.InteropServices.dll"; "System.Runtime.Numerics.dll"; + "System.Runtime.Serialization.Json.dll"; + "System.Runtime.Serialization.Primitives.dll"; + "System.Runtime.Serialization.Xml.dll"; "System.Runtime.Serialization.dll"; + "System.Runtime.dll"; "System.Security.Principal.dll"; + "System.ServiceModel.Duplex.dll"; "System.ServiceModel.Http.dll"; + "System.ServiceModel.NetTcp.dll"; "System.ServiceModel.Primitives.dll"; + "System.ServiceModel.Security.dll"; "System.ServiceModel.Web.dll"; + "System.ServiceModel.dll"; "System.Text.Encoding.Extensions.dll"; + "System.Text.Encoding.dll"; "System.Text.RegularExpressions.dll"; + "System.Threading.Tasks.Parallel.dll"; "System.Threading.Tasks.dll"; + "System.Threading.dll"; "System.Windows.dll"; "System.Xml.Linq.dll"; + "System.Xml.ReaderWriter.dll"; "System.Xml.Serialization.dll"; + "System.Xml.XDocument.dll"; "System.Xml.XmlSerializer.dll"; "System.Xml.dll"; + "System.dll"; "mscorlib.dll"|]) + + checkOption options.OtherOptions "--targetprofile:netcore" + +[] +let ``Project file parsing -- PCL profile78 project``() = + + let f = normalizePath (__SOURCE_DIRECTORY__ + @"/../projects/Sample_VS2013_FSharp_Portable_Library_net451_adjusted_to_profile78/Sample_VS2013_FSharp_Portable_Library_net451.fsproj") + + let options = ProjectCracker.GetProjectOptionsFromProjectFile(f) + let references = + options.OtherOptions + |> getReferencedFilenames + |> Set.ofArray + references + |> shouldEqual + (set [|"FSharp.Core.dll"; "Microsoft.CSharp.dll"; "System.Collections.dll"; + "System.ComponentModel.EventBasedAsync.dll"; "System.ComponentModel.dll"; + "System.Core.dll"; "System.Diagnostics.Contracts.dll"; + "System.Diagnostics.Debug.dll"; "System.Diagnostics.Tools.dll"; + "System.Dynamic.Runtime.dll"; "System.Globalization.dll"; "System.IO.dll"; + "System.Linq.Expressions.dll"; "System.Linq.Queryable.dll"; "System.Linq.dll"; + "System.Net.NetworkInformation.dll"; "System.Net.Primitives.dll"; + "System.Net.Requests.dll"; "System.Net.dll"; "System.ObjectModel.dll"; + "System.Reflection.Extensions.dll"; "System.Reflection.Primitives.dll"; + "System.Reflection.dll"; "System.Resources.ResourceManager.dll"; + "System.Runtime.Extensions.dll"; + "System.Runtime.InteropServices.WindowsRuntime.dll"; + "System.Runtime.Serialization.Json.dll"; + "System.Runtime.Serialization.Primitives.dll"; + "System.Runtime.Serialization.Xml.dll"; "System.Runtime.Serialization.dll"; + "System.Runtime.dll"; "System.Security.Principal.dll"; + "System.ServiceModel.Http.dll"; "System.ServiceModel.Primitives.dll"; + "System.ServiceModel.Security.dll"; "System.ServiceModel.Web.dll"; + "System.ServiceModel.dll"; "System.Text.Encoding.Extensions.dll"; + "System.Text.Encoding.dll"; "System.Text.RegularExpressions.dll"; + "System.Threading.Tasks.dll"; "System.Threading.dll"; "System.Windows.dll"; + "System.Xml.Linq.dll"; "System.Xml.ReaderWriter.dll"; + "System.Xml.Serialization.dll"; "System.Xml.XDocument.dll"; + "System.Xml.XmlSerializer.dll"; "System.Xml.dll"; "System.dll"; "mscorlib.dll"|]) + + checkOption options.OtherOptions "--targetprofile:netcore" + +[] +let ``Project file parsing -- PCL profile259 project``() = + + let f = normalizePath (__SOURCE_DIRECTORY__ + @"/../projects/Sample_VS2013_FSharp_Portable_Library_net451_adjusted_to_profile259/Sample_VS2013_FSharp_Portable_Library_net451.fsproj") + + let options = ProjectCracker.GetProjectOptionsFromProjectFile(f) + let references = + options.OtherOptions + |> getReferencedFilenames + |> Set.ofArray + references + |> shouldEqual + (set [|"FSharp.Core.dll"; "Microsoft.CSharp.dll"; "System.Collections.dll"; + "System.ComponentModel.EventBasedAsync.dll"; "System.ComponentModel.dll"; + "System.Core.dll"; "System.Diagnostics.Contracts.dll"; + "System.Diagnostics.Debug.dll"; "System.Diagnostics.Tools.dll"; + "System.Dynamic.Runtime.dll"; "System.Globalization.dll"; "System.IO.dll"; + "System.Linq.Expressions.dll"; "System.Linq.Queryable.dll"; "System.Linq.dll"; + "System.Net.NetworkInformation.dll"; "System.Net.Primitives.dll"; + "System.Net.Requests.dll"; "System.Net.dll"; "System.ObjectModel.dll"; + "System.Reflection.Extensions.dll"; "System.Reflection.Primitives.dll"; + "System.Reflection.dll"; "System.Resources.ResourceManager.dll"; + "System.Runtime.Extensions.dll"; + "System.Runtime.InteropServices.WindowsRuntime.dll"; + "System.Runtime.Serialization.Json.dll"; + "System.Runtime.Serialization.Primitives.dll"; + "System.Runtime.Serialization.Xml.dll"; "System.Runtime.Serialization.dll"; + "System.Runtime.dll"; "System.Security.Principal.dll"; + "System.ServiceModel.Web.dll"; "System.Text.Encoding.Extensions.dll"; + "System.Text.Encoding.dll"; "System.Text.RegularExpressions.dll"; + "System.Threading.Tasks.dll"; "System.Threading.dll"; "System.Windows.dll"; + "System.Xml.Linq.dll"; "System.Xml.ReaderWriter.dll"; + "System.Xml.Serialization.dll"; "System.Xml.XDocument.dll"; + "System.Xml.XmlSerializer.dll"; "System.Xml.dll"; "System.dll"; "mscorlib.dll"|]) + + checkOption options.OtherOptions "--targetprofile:netcore" + +[] +let ``Project file parsing -- Exe with a PCL reference``() = + + let f = normalizePath(__SOURCE_DIRECTORY__ + @"/data/sqlite-net-spike/sqlite-net-spike.fsproj") + + let p = ProjectCracker.GetProjectOptionsFromProjectFile(f) + let references = getReferencedFilenames p.OtherOptions |> set + references |> should contain "FSharp.Core.dll" + references |> should contain "SQLite.Net.Platform.Generic.dll" + references |> should contain "SQLite.Net.Platform.Win32.dll" + references |> should contain "SQLite.Net.dll" + references |> should contain "System.Collections.Concurrent.dll" + references |> should contain "System.Linq.Queryable.dll" + references |> should contain "System.Resources.ResourceManager.dll" + references |> should contain "System.Threading.dll" + references |> should contain "System.dll" + references |> should contain "mscorlib.dll" + references |> should contain "System.Reflection.dll" + references |> should contain "System.Reflection.Emit.Lightweight.dll" + + +[] +let ``Project file parsing -- project file contains project reference to out-of-solution project and is used in release mode``() = + + let f = normalizePath(__SOURCE_DIRECTORY__ + @"/data/TestProject/TestProject.fsproj") + let p = ProjectCracker.GetProjectOptionsFromProjectFile(f,[("Configuration","Release")]) + let references = getReferencedFilenamesAndContainingFolders p.OtherOptions |> set + // Check the reference is to a release DLL + references |> should contain ("TestTP.dll", "Release") + +[] +let ``Project file parsing -- project file contains project reference to out-of-solution project and is used in debug mode``() = + + let f = normalizePath(__SOURCE_DIRECTORY__ + @"/data/TestProject/TestProject.fsproj") + let p = ProjectCracker.GetProjectOptionsFromProjectFile(f,[("Configuration","Debug")]) + let references = getReferencedFilenamesAndContainingFolders p.OtherOptions |> set + // Check the reference is to a debug DLL + references |> should contain ("TestTP.dll", "Debug") + +[] +let ``Project file parsing -- space in file name``() = + let p = ProjectCracker.GetProjectOptionsFromProjectFile(__SOURCE_DIRECTORY__ + @"/data/Space in name.fsproj") + + p.OtherOptions + |> getCompiledFilenames + |> set + |> should equal (set [ "Test2File1.fs"; "Test2File2.fs" ]) + +[] +let ``Project file parsing -- report files``() = + if not runningOnMono then + for f in Directory.EnumerateFiles(@"C:\Program Files (x86)\Reference Assemblies\Microsoft\FSharp\","*",SearchOption.AllDirectories) do + printfn "File: %s" f + for f in Directory.EnumerateFiles(@"C:\Program Files (x86)\Microsoft SDKs\F#\4.0\","*",SearchOption.AllDirectories) do + printfn "File: %s" f + +#endif + +[] +let ``Test ProjectFileNames order for GetProjectOptionsFromScript`` () = // See #594 + let test scriptName expected = + let scriptPath = __SOURCE_DIRECTORY__ + @"/data/ScriptProject/" + scriptName + ".fsx" + let scriptSource = File.ReadAllText scriptPath + let projOpts = + checker.GetProjectOptionsFromScript(scriptPath, scriptSource) + |> Async.RunSynchronously + projOpts.ProjectFileNames + |> Array.map Path.GetFileNameWithoutExtension + |> (=) expected + |> shouldEqual true + test "Main1" [|"BaseLib1"; "Lib1"; "Lib2"; "Main1"|] + test "Main2" [|"BaseLib1"; "Lib1"; "Lib2"; "Lib3"; "Main2"|] + test "Main3" [|"Lib3"; "Lib4"; "Main3"|] + test "Main4" [|"BaseLib2"; "Lib5"; "BaseLib1"; "Lib1"; "Lib2"; "Main4"|] + + + + diff --git a/tests/service/data/ScriptProject/BaseLib1.fs b/tests/service/data/ScriptProject/BaseLib1.fs new file mode 100644 index 00000000000..d3be7d2a54e --- /dev/null +++ b/tests/service/data/ScriptProject/BaseLib1.fs @@ -0,0 +1,3 @@ +module BaseLib1 + +let add2 x = x + 2 \ No newline at end of file diff --git a/tests/service/data/ScriptProject/BaseLib2.fs b/tests/service/data/ScriptProject/BaseLib2.fs new file mode 100644 index 00000000000..3277193dd5f --- /dev/null +++ b/tests/service/data/ScriptProject/BaseLib2.fs @@ -0,0 +1,3 @@ +module BaseLib2 + +let add10 x = x + 10 \ No newline at end of file diff --git a/tests/service/data/ScriptProject/Lib1.fsx b/tests/service/data/ScriptProject/Lib1.fsx new file mode 100644 index 00000000000..53833dc65c1 --- /dev/null +++ b/tests/service/data/ScriptProject/Lib1.fsx @@ -0,0 +1,2 @@ +#load "BaseLib1.fs" +let add3 = BaseLib1.add2 >> ((+) 1) \ No newline at end of file diff --git a/tests/service/data/ScriptProject/Lib2.fsx b/tests/service/data/ScriptProject/Lib2.fsx new file mode 100644 index 00000000000..7f6261cf09e --- /dev/null +++ b/tests/service/data/ScriptProject/Lib2.fsx @@ -0,0 +1,2 @@ +#load "BaseLib1.fs" +let add4 = BaseLib1.add2 >> ((+) 2) \ No newline at end of file diff --git a/tests/service/data/ScriptProject/Lib3.fs b/tests/service/data/ScriptProject/Lib3.fs new file mode 100644 index 00000000000..8524ace2599 --- /dev/null +++ b/tests/service/data/ScriptProject/Lib3.fs @@ -0,0 +1,3 @@ +module Lib3 + +let add6 = ((+) 6) \ No newline at end of file diff --git a/tests/service/data/ScriptProject/Lib4.fs b/tests/service/data/ScriptProject/Lib4.fs new file mode 100644 index 00000000000..108bfbc45db --- /dev/null +++ b/tests/service/data/ScriptProject/Lib4.fs @@ -0,0 +1,3 @@ +module Lib4 + +let add8 = ((+) 8) \ No newline at end of file diff --git a/tests/service/data/ScriptProject/Lib5.fsx b/tests/service/data/ScriptProject/Lib5.fsx new file mode 100644 index 00000000000..ec2ecacb183 --- /dev/null +++ b/tests/service/data/ScriptProject/Lib5.fsx @@ -0,0 +1,2 @@ +#load "BaseLib2.fs" +let add12 = BaseLib2.add10 >> ((+) 2) \ No newline at end of file diff --git a/tests/service/data/ScriptProject/Main1.fsx b/tests/service/data/ScriptProject/Main1.fsx new file mode 100644 index 00000000000..90086fc76d6 --- /dev/null +++ b/tests/service/data/ScriptProject/Main1.fsx @@ -0,0 +1,4 @@ +#load "Lib1.fsx" +#load "Lib2.fsx" +Lib1.add3 5 |> printfn "%i" +Lib2.add4 5 |> printfn "%i" \ No newline at end of file diff --git a/tests/service/data/ScriptProject/Main2.fsx b/tests/service/data/ScriptProject/Main2.fsx new file mode 100644 index 00000000000..906fd5d19ce --- /dev/null +++ b/tests/service/data/ScriptProject/Main2.fsx @@ -0,0 +1,6 @@ +#load "Lib1.fsx" +#load "Lib2.fsx" +#load "Lib3.fs" +Lib1.add3 5 |> printfn "%i" +Lib2.add4 5 |> printfn "%i" +Lib3.add6 5 |> printfn "%i" \ No newline at end of file diff --git a/tests/service/data/ScriptProject/Main3.fsx b/tests/service/data/ScriptProject/Main3.fsx new file mode 100644 index 00000000000..8df731bd958 --- /dev/null +++ b/tests/service/data/ScriptProject/Main3.fsx @@ -0,0 +1,4 @@ +#load "Lib3.fs" +#load "Lib4.fs" +Lib3.add6 5 |> printfn "%i" +Lib4.add8 5 |> printfn "%i" diff --git a/tests/service/data/ScriptProject/Main4.fsx b/tests/service/data/ScriptProject/Main4.fsx new file mode 100644 index 00000000000..6da860748fb --- /dev/null +++ b/tests/service/data/ScriptProject/Main4.fsx @@ -0,0 +1,6 @@ +#load "Lib5.fsx" +#load "Lib1.fsx" +#load "Lib2.fsx" +Lib1.add3 5 |> printfn "%i" +Lib2.add4 5 |> printfn "%i" +Lib5.add12 5 |> printfn "%i" diff --git a/tests/walkthroughs/DebugStepping/TheBigFileOfDebugStepping.fsx b/tests/walkthroughs/DebugStepping/TheBigFileOfDebugStepping.fsx new file mode 100644 index 00000000000..078addbaaf4 --- /dev/null +++ b/tests/walkthroughs/DebugStepping/TheBigFileOfDebugStepping.fsx @@ -0,0 +1,590 @@ +// Instructions: +// Release\net40\bin\fsc.exe --debug+ --tailcalls- --optimize- tests\walkthroughs\DebugStepping\TheBigFileOfDebugStepping.fsx +// devenv /debugexe TheBigFileOfDebugStepping.exe +// +// Repeat the above with +// - Just My Code on/off +// - 32-bit or 64-bit +// - .NET Core and .NET Framework +// - Linux and Windows +// - Different visual debuggers + +open System + +let AsyncExpressionSteppingTest1 () = + async { printfn "hello" + printfn "stuck in the middle" + printfn "goodbye"} + +let AsyncExpressionSteppingTest2 () = + let x = ref 0 + async { while !x < 4 do + incr x + printfn "hello" } + + +let AsyncExpressionSteppingTest3 () = + async { let x = ref 0 + incr x + let y = ref 0 + incr y + let z = !x + !y + return z } + +let AsyncExpressionSteppingTest4 () = + async { let x = ref 0 + try + let y = ref 0 + incr y + let z = !x + !y + return z + finally + incr x + printfn "done" } + + +let es = [3;4;5] +let AsyncExpressionSteppingTest5 () = + async { for x in es do + printfn "hello" + printfn "hello 2" + for x in es do + printfn "goodbye" + printfn "goodbye 2" } + + +let f2 () = + async { let x = ref 0 + incr x + let y = ref 0 + incr y + let z = !x + !y + return z } + +let AsyncExpressionSteppingTest6b () = + async { let! x1 = f2() + let! x2 = f2() + let! x3 = f2() + let y = ref 0 + incr y + let! x4 = f2() + let z = x1 + !y + x4 + return z } + + + + +let ListExpressionSteppingTest1 () = + [ yield 1 ] + +let ListExpressionSteppingTest2 () = + [ printfn "hello" + yield 1 + printfn "goodbye" + yield 2] + + +let ListExpressionSteppingTest3 () = + let x = ref 0 + [ while !x < 4 do + incr x + printfn "hello" + yield x ] + + +let ListExpressionSteppingTest4 () = + [ let x = ref 0 + incr x + let y = ref 0 + incr y + yield !x + let z = !x + !y + yield z ] + + +let ListExpressionSteppingTest5 () = + [ let x = ref 0 + try + let y = ref 0 + incr y + yield !x + let z = !x + !y + yield z + finally + incr x + printfn "done" ] + + +let ListExpressionSteppingTest6 () = + [ for x in es do + printfn "hello" + yield x + for x in es do + printfn "goodbye" + yield x ] + +let SeqExpressionSteppingTest1 () = + seq { yield 1 } + + +let SeqExpressionSteppingTest2 () = + seq { printfn "hello" + yield 1 + printfn "goodbye" + yield 2 } + + + +let SeqExpressionSteppingTest3 () = + let x = ref 0 + seq { while !x < 4 do + incr x + printfn "hello" + yield x } + + +let SeqExpressionSteppingTest4 () = + seq { let x = ref 0 + incr x + let y = ref 0 + incr y + yield !x + let z = !x + !y + yield z } + + + +let SeqExpressionSteppingTest5 () = + seq { let x = ref 0 + try + let y = ref 0 + incr y + yield !x + let z = !x + !y + yield z + finally + incr x + printfn "done" } + + +let SeqExpressionSteppingTest6 () = + seq { for x in es do + printfn "hello" + yield x + for x in es do + printfn "goodbye" + yield x } + + + +let SeqExpressionSteppingTest7() = + // "Stepping into sequence expression pops up a dialog trying to located an unknown file" + let r = ref 0 + let f () = [ if (incr r; true) then yield! failwith "" ] + (try f () with Failure _ -> [!r]) + +let rec rwalk x = seq { yield x; yield! rwalk (x+1) } + +let SeqExpressionTailCalls01() = rwalk 3 |> Seq.truncate 3 |> Seq.length + +// Same as SeqExpressionTailCalls01.fs, but with MUTUALLY RECURSIVE PAIR OF SEQUENCES +let rec rwalk1 x = seq { yield x; yield! rwalk2 (x+1) } +and rwalk2 x = seq { yield x; yield! rwalk1 (x+1) } + +let SeqExpressionTailCalls02() = rwalk2 3 |> Seq.truncate 3 |> Seq.length + +let SteppingMatch01 (n) = + match n with + | Choice2Of2 _ -> + Console.WriteLine("A") + | Choice1Of2 _ -> + Console.WriteLine("B") + + + +let SteppingMatch03 (n) = + match n with + | Choice1Of2 _ -> + Console.WriteLine("B") + | Choice2Of2 _ -> + Console.WriteLine("A") + +let SteppingMatch03b (n) = + match n with + | Choice1Of3 _ -> + Console.WriteLine("A") + | Choice2Of3 _ -> + Console.WriteLine("B") + | Choice3Of3 _ -> + Console.WriteLine("C") + + +let SteppingMatch04 (n) = + match n with + | Choice2Of3 _ -> + Console.WriteLine("B") + | Choice3Of3 _ -> + Console.WriteLine("C") + | Choice1Of3 _ -> + Console.WriteLine("A") + +let SteppingMatch05 (n) = + match n with + | Choice3Of3 _ -> + Console.WriteLine("C") + | Choice2Of3 _ -> + Console.WriteLine("B") + | Choice1Of3 _ -> + Console.WriteLine("A") + +type Discr = CaseA | CaseB +let SteppingMatch06 (n) = + match n with + | CaseB -> + Console.WriteLine("B") + | CaseA-> + Console.WriteLine("A") + +let SteppingMatch07 (n) = + match n with + | CaseA-> + Console.WriteLine("A") + | CaseB -> + Console.WriteLine("B") + +let SteppingMatch08 (x) = + let b = + match x with + | 0 -> 2 + | _ -> 0 + + System.Diagnostics.Debug.Write(b) + System.Diagnostics.Debug.Write(b) + +let SteppingMatch09 n = + match n with + | 1 -> + Some(10) // debug range should cover all of "Some(10)" + | 2 -> + None + | _ -> + Some( 22 ) // debug range should cover all of "Some( 22 )" + +// Test case from https://github.com/Microsoft/visualfsharp/issues/105 +let OuterWithGenericInner list = + let GenericInner (list: 'T list) = + match list with + | [] -> 1 + | _ -> 2 + + GenericInner list + +// Test case from https://github.com/Microsoft/visualfsharp/issues/105 +let OuterWithNonGenericInner list = + let NonGenericInner (list: int list) = + match list with + | [] -> 1 + | _ -> 2 + + NonGenericInner list + +// Test case from https://github.com/Microsoft/visualfsharp/issues/105 +let OuterWithNonGenericInnerWithCapture x list = + let NonGenericInnerWithCapture (list: int list) = + match list with + | [] -> 1 + | _ -> x + + NonGenericInnerWithCapture list + + +let TestFunction1() = + printfn "Hello"; + printfn "World"; + 3+4 + + +let TestFunction10(p) = + let (x,y) = p + x+y + + +let TestFunction11(p) = + [p; p + p; p + p + p ] + + +let TestFunction12(p) = + { contents = p+p } + + +let TestFunction13(x) = + [x;x+x], [] + + +let TestFunction14() = + List.map (fun f -> f 2) [(fun x -> x + 1)] + + +let TestFunction15(inp) = + let x = inp+1 + [1;2;3] |> List.map (fun x -> x + 1) + + +type U = U of int * int + +let TestFunction16(inp) = + let x = U(inp,inp) + x,x + + +type R = { x:int; y:int } + +let TestFunction17(inp) = + let x = {x=3;y=inp} + x,x + + +let TestFunction18(inp) = + System.Console.WriteLine("hello") + + +type C(x:int,y:int) = + member this.X = x + member this.Y = y + +let TestFunction19(inp) = + let c1 = C(inp,inp) + let c2 = C(inp,inp) + printfn "c1 = %A, c2 = %A" c1 c2 + +let TestFunction1_0() = + printfn "Hello"; + printfn "World"; + 3+4 + +let TestFunction2() = + let x = TestFunction1_0() + printfn "Hello"; + printfn "World" + + +type D(x:int,y:int) = + let z = x + y + let f a = x + a + let w = f z + z + member this.X = x + member this.Y = y + +let TestFunction20(inp) = + let d1 = D(inp,inp) + let d2 = D(inp,inp) + printfn "d1 = %A, d2 = %A" d1 d2 + + +type U2 = U2 of int * int + +let TestFunction21(U2(a,b)) = + printfn "a = %A, a = %A" a b + +let TestFunction1_1() = + printfn "Hello"; + printfn "World"; + 3+4 + +let TestFunction3() = + try + let x = TestFunction1_1() + printfn "Hello"; + with _ -> + printfn "World" + +let TestFunction1_2() = + printfn "Hello"; + printfn "World"; + 3+4 + +let TestFunction3b() = + try + let x = TestFunction1_2() + failwith "hello" + with Failure _ -> + printfn "World" + +let TestFunction1_3() = + printfn "Hello"; + printfn "World"; + 3+4 + +let TestFunction3c() = + try + let x = TestFunction1_3() + failwith "hello" + with Failure msg when msg = "hello" -> + printfn "World" + + +let TestFunction1_4() = + printfn "Hello"; + printfn "World"; + 3+4 + +let TestFunction4() = + try + let x = TestFunction1_4() + printfn "Hello"; + finally + printfn "World" + +let TestFunction1_5() = + printfn "Hello"; + printfn "World"; + 3+4 + +let TestFunction5() = + let x = + let y = TestFunction1_5() + printfn "Hello"; + y + y + x + x + + +let TestFunction1_6() = + printfn "Hello"; + printfn "World"; + 3+4 + +let TestFunction6() = + let f() = + let y = TestFunction1_6() + printfn "Hello"; + y + y + f() + f() + + +let TestFunction7() = + let mutable r = 0 + while r < 3 do + r <- r + 1 + +let TestFunction8(x) = + if x > 3 then + x+4 + else x-4 + + +let TestFunction9(x) = + match x with + | 3 -> "three" + | 4 -> "four" + | _ -> "five" + + +let TestFunction9b(x) = + match x with + | [1;2] -> "three" + | [3;4] -> "seven" + | [a;b] when a+b = 4 -> "four" + | _ -> "big" + + +let TestFunction9c(x) = + match x with + | [1;2] -> "three" + | [3;4] -> "seven" + | [a;b] when a+b = 4 -> "four" + | _ -> "big" +// #NoMono #NoMT #CodeGen #EmittedIL + + +let TestFunction9d(x) = + match x with + | [1;2] -> "three" + | [3;4] -> "seven" + | [a;b] when a+b = 4 -> "four" + | _ -> "big" +// #NoMono #NoMT #CodeGen #EmittedIL + + +let TestFunction9e(x) = + match x with + | [1;2] -> "three" + | [3;4] -> "seven" + | [a;b] when a+b = 4 -> "four" + | _ -> "big" + +let TestFunction22() = + let x1 = if DateTime.Now.Day = 0 then DateTime.Now.Day else DateTime.MinValue.Day + let x2 = if DateTime.Now.Day = 1 then DateTime.Now.Day else DateTime.MinValue.Day + let x3 = if DateTime.Now.Day > 1 then DateTime.Now.Day else DateTime.MinValue.Day + (x1,x2,x3) + + +SteppingMatch01 (Choice1Of2 3) +SteppingMatch01 (Choice2Of2 3) +SteppingMatch03 (Choice1Of2 3) +SteppingMatch03 (Choice2Of2 "3") +SteppingMatch03b (Choice1Of3 3) +SteppingMatch03b (Choice2Of3 "3") +SteppingMatch03b (Choice3Of3 5.0) +SteppingMatch04 (Choice1Of3 3) +SteppingMatch04 (Choice2Of3 "3") +SteppingMatch04 (Choice3Of3 5.0) +SteppingMatch05 (Choice1Of3 3) +SteppingMatch05 (Choice2Of3 "3") +SteppingMatch05 (Choice3Of3 5.0) +SteppingMatch06 CaseA +SteppingMatch06 CaseB +SteppingMatch07 CaseA +SteppingMatch07 CaseB +SteppingMatch08 0 +SteppingMatch08 1 +SteppingMatch09 1 +SteppingMatch09 2 +SteppingMatch09 3 + +OuterWithGenericInner [1;2;3;4;5;6] +OuterWithNonGenericInner [1;2;3;4;5;6] +OuterWithNonGenericInnerWithCapture 5 [1;2;3;4;5;6] +TestFunction1() +TestFunction2() +TestFunction3() +TestFunction4() +TestFunction5() +TestFunction6() +TestFunction7() +TestFunction8 3 +TestFunction8 4 +TestFunction9 3 +TestFunction9 4 +TestFunction9 5 +TestFunction10 (5,4) +TestFunction11 5 +TestFunction12 5 +TestFunction13 5 +TestFunction14 () +TestFunction15 3 +TestFunction16 3 +TestFunction17 3 +TestFunction18 3 +TestFunction19 3 +TestFunction21(U2(3,4)) +TestFunction22() + +AsyncExpressionSteppingTest1() |> Async.RunSynchronously +AsyncExpressionSteppingTest2() |> Async.RunSynchronously +AsyncExpressionSteppingTest3() |> Async.RunSynchronously +AsyncExpressionSteppingTest4() |> Async.RunSynchronously +AsyncExpressionSteppingTest5() |> Async.RunSynchronously +AsyncExpressionSteppingTest6b() |> Async.RunSynchronously +ListExpressionSteppingTest1() +ListExpressionSteppingTest2() +ListExpressionSteppingTest3() +ListExpressionSteppingTest4() +ListExpressionSteppingTest5() +ListExpressionSteppingTest6() +SeqExpressionSteppingTest1()|> Seq.length +SeqExpressionSteppingTest2()|> Seq.length +SeqExpressionSteppingTest3()|> Seq.length +SeqExpressionSteppingTest4()|> Seq.length +SeqExpressionSteppingTest5()|> Seq.length +SeqExpressionSteppingTest6() |> Seq.length diff --git a/vsintegration/ItemTemplates/AppConfig/AppConfig.csproj b/vsintegration/ItemTemplates/AppConfig/AppConfig.csproj index 76d5830b2ab..51459896268 100644 --- a/vsintegration/ItemTemplates/AppConfig/AppConfig.csproj +++ b/vsintegration/ItemTemplates/AppConfig/AppConfig.csproj @@ -7,6 +7,17 @@ ItemTemplates true true + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + false + false + false + false + false + false + false + false + false + false Debug @@ -16,6 +27,10 @@ + + + + diff --git a/vsintegration/ItemTemplates/CodeFile/CodeFile.csproj b/vsintegration/ItemTemplates/CodeFile/CodeFile.csproj index af65940e8fc..62d04e9abdf 100644 --- a/vsintegration/ItemTemplates/CodeFile/CodeFile.csproj +++ b/vsintegration/ItemTemplates/CodeFile/CodeFile.csproj @@ -7,6 +7,17 @@ ItemTemplates true true + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + false + false + false + false + false + false + false + false + false + false Debug @@ -16,6 +27,10 @@ + + + + diff --git a/vsintegration/ItemTemplates/ScriptFile/ScriptFile.csproj b/vsintegration/ItemTemplates/ScriptFile/ScriptFile.csproj index 53e45efd0c2..aaaee9d49df 100644 --- a/vsintegration/ItemTemplates/ScriptFile/ScriptFile.csproj +++ b/vsintegration/ItemTemplates/ScriptFile/ScriptFile.csproj @@ -7,6 +7,17 @@ ItemTemplates true true + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + false + false + false + false + false + false + false + false + false + false Debug @@ -16,6 +27,10 @@ + + + + diff --git a/vsintegration/ItemTemplates/SignatureFile/SignatureFile.csproj b/vsintegration/ItemTemplates/SignatureFile/SignatureFile.csproj index 556a222f1da..0ef37b0d2ce 100644 --- a/vsintegration/ItemTemplates/SignatureFile/SignatureFile.csproj +++ b/vsintegration/ItemTemplates/SignatureFile/SignatureFile.csproj @@ -7,6 +7,17 @@ ItemTemplates true true + false + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + false + false + false + false + false + false + false + false + false Debug @@ -16,6 +27,10 @@ + + + + diff --git a/vsintegration/ItemTemplates/TextFile/TextFile.csproj b/vsintegration/ItemTemplates/TextFile/TextFile.csproj index 858f48a45b7..49d3fd4931d 100644 --- a/vsintegration/ItemTemplates/TextFile/TextFile.csproj +++ b/vsintegration/ItemTemplates/TextFile/TextFile.csproj @@ -7,6 +7,17 @@ ItemTemplates true true + false + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + false + false + false + false + false + false + false + false + false Debug @@ -16,6 +27,10 @@ + + + + diff --git a/vsintegration/ItemTemplates/XMLFile/XMLFile.csproj b/vsintegration/ItemTemplates/XMLFile/XMLFile.csproj index dee1bb2c2e0..fa24d80c794 100644 --- a/vsintegration/ItemTemplates/XMLFile/XMLFile.csproj +++ b/vsintegration/ItemTemplates/XMLFile/XMLFile.csproj @@ -7,6 +7,17 @@ ItemTemplates true true + false + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + false + false + false + false + false + false + false + false + false Debug @@ -16,6 +27,10 @@ + + + + diff --git a/vsintegration/ProjectTemplates/ConsoleProject/ConsoleProject.csproj b/vsintegration/ProjectTemplates/ConsoleProject/ConsoleProject.csproj index 2b13fd8e53b..8d11aabaea9 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/ConsoleProject.csproj +++ b/vsintegration/ProjectTemplates/ConsoleProject/ConsoleProject.csproj @@ -7,6 +7,17 @@ ProjectTemplates true true + false + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + false + false + false + false + false + false + false + false + false Debug @@ -30,6 +41,11 @@ false + + + + + diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj b/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj index 835651d46f5..aa0d47b6523 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj @@ -22,22 +22,22 @@ full false false - bin\Debug\ + bin\$(Configuration)\ DEBUG;TRACE 3 AnyCPU - bin\Debug\$safeprojectname$.XML + bin\$(Configuration)\$(AssemblyName).XML true pdbonly true true - bin\Release\ + bin\$(Configuration)\ TRACE 3 AnyCPU - bin\Release\$safeprojectname$.XML + bin\$(Configuration)\$(AssemblyName).XML true diff --git a/vsintegration/ProjectTemplates/LibraryProject/LibraryProject.csproj b/vsintegration/ProjectTemplates/LibraryProject/LibraryProject.csproj index e1afe08cefa..7d7dc3fb15a 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/LibraryProject.csproj +++ b/vsintegration/ProjectTemplates/LibraryProject/LibraryProject.csproj @@ -7,6 +7,17 @@ ProjectTemplates true true + false + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + false + false + false + false + false + false + false + false + false Debug @@ -30,6 +41,11 @@ false + + + + + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj b/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj index ea1d5d0bb78..fd5f2081854 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj @@ -22,19 +22,19 @@ full false false - bin\Debug\ + bin\$(Configuration)\ DEBUG;TRACE 3 - bin\Debug\$safeprojectname$.XML + bin\$(Configuration)\$(AssemblyName).XML pdbonly true true - bin\Release\ + bin\$(Configuration)\ TRACE 3 - bin\Release\$safeprojectname$.XML + bin\$(Configuration)\$(AssemblyName).XML diff --git a/vsintegration/ProjectTemplates/NetCore259Project/NetCore259Project.csproj b/vsintegration/ProjectTemplates/NetCore259Project/NetCore259Project.csproj index 6110d368738..2b961b74159 100644 --- a/vsintegration/ProjectTemplates/NetCore259Project/NetCore259Project.csproj +++ b/vsintegration/ProjectTemplates/NetCore259Project/NetCore259Project.csproj @@ -7,6 +7,17 @@ ProjectTemplates true true + false + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + false + false + false + false + false + false + false + false + false Debug @@ -31,6 +42,10 @@ + + + + diff --git a/vsintegration/ProjectTemplates/NetCore259Project/Template/PortableLibrary.fsproj b/vsintegration/ProjectTemplates/NetCore259Project/Template/PortableLibrary.fsproj index 336a5b2cee6..6add767452e 100644 --- a/vsintegration/ProjectTemplates/NetCore259Project/Template/PortableLibrary.fsproj +++ b/vsintegration/ProjectTemplates/NetCore259Project/Template/PortableLibrary.fsproj @@ -20,19 +20,19 @@ full false false - bin\Debug\ + bin\$(Configuration)\ DEBUG;TRACE 3 - bin\Debug\$safeprojectname$.XML + bin\$(Configuration)\$(AssemblyName).XML pdbonly true true - bin\Release\ + bin\$(Configuration)\ TRACE 3 - bin\Release\$safeprojectname$.XML + bin\$(Configuration)\$(AssemblyName).XML diff --git a/vsintegration/ProjectTemplates/NetCore78Project/NetCore78Project.csproj b/vsintegration/ProjectTemplates/NetCore78Project/NetCore78Project.csproj index 303e9f18612..c809eda8d74 100644 --- a/vsintegration/ProjectTemplates/NetCore78Project/NetCore78Project.csproj +++ b/vsintegration/ProjectTemplates/NetCore78Project/NetCore78Project.csproj @@ -7,6 +7,17 @@ ProjectTemplates true true + false + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + false + false + false + false + false + false + false + false + false Debug @@ -30,6 +41,11 @@ false + + + + + diff --git a/vsintegration/ProjectTemplates/NetCore78Project/Template/PortableLibrary.fsproj b/vsintegration/ProjectTemplates/NetCore78Project/Template/PortableLibrary.fsproj index 6ad05a02747..db9090f86b5 100644 --- a/vsintegration/ProjectTemplates/NetCore78Project/Template/PortableLibrary.fsproj +++ b/vsintegration/ProjectTemplates/NetCore78Project/Template/PortableLibrary.fsproj @@ -20,19 +20,19 @@ full false false - bin\Debug\ + bin\$(Configuration)\ DEBUG;TRACE 3 - bin\Debug\$safeprojectname$.XML + bin\$(Configuration)\$(AssemblyName).XML pdbonly true true - bin\Release\ + bin\$(Configuration)\ TRACE 3 - bin\Release\$safeprojectname$.XML + bin\$(Configuration)\$(AssemblyName).XML diff --git a/vsintegration/ProjectTemplates/NetCoreProject/NetCoreProject.csproj b/vsintegration/ProjectTemplates/NetCoreProject/NetCoreProject.csproj index 24c9d8bcf3a..2aa6eec186b 100644 --- a/vsintegration/ProjectTemplates/NetCoreProject/NetCoreProject.csproj +++ b/vsintegration/ProjectTemplates/NetCoreProject/NetCoreProject.csproj @@ -7,6 +7,17 @@ ProjectTemplates true true + false + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + false + false + false + false + false + false + false + false + false Debug @@ -30,6 +41,11 @@ false + + + + + diff --git a/vsintegration/ProjectTemplates/NetCoreProject/Template/PortableLibrary.fsproj b/vsintegration/ProjectTemplates/NetCoreProject/Template/PortableLibrary.fsproj index bdd4440a5ce..bd081578eb2 100644 --- a/vsintegration/ProjectTemplates/NetCoreProject/Template/PortableLibrary.fsproj +++ b/vsintegration/ProjectTemplates/NetCoreProject/Template/PortableLibrary.fsproj @@ -20,19 +20,19 @@ full false false - bin\Debug\ + bin\$(Configuration)\ DEBUG;TRACE 3 - bin\Debug\$safeprojectname$.XML + bin\$(Configuration)\$(AssemblyName).XML pdbonly true true - bin\Release\ + bin\$(Configuration)\ TRACE 3 - bin\Release\$safeprojectname$.XML + bin\$(Configuration)\$(AssemblyName).XML diff --git a/vsintegration/ProjectTemplates/PortableLibraryProject/PortableLibraryProject.csproj b/vsintegration/ProjectTemplates/PortableLibraryProject/PortableLibraryProject.csproj index 125c0fbf8bd..6e0987435f0 100644 --- a/vsintegration/ProjectTemplates/PortableLibraryProject/PortableLibraryProject.csproj +++ b/vsintegration/ProjectTemplates/PortableLibraryProject/PortableLibraryProject.csproj @@ -7,6 +7,17 @@ ProjectTemplates true true + false + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + false + false + false + false + false + false + false + false + false Debug @@ -30,6 +41,11 @@ false + + + + + diff --git a/vsintegration/ProjectTemplates/PortableLibraryProject/Template/PortableLibrary.fsproj b/vsintegration/ProjectTemplates/PortableLibraryProject/Template/PortableLibrary.fsproj index edd175d150e..1c7461cc795 100644 --- a/vsintegration/ProjectTemplates/PortableLibraryProject/Template/PortableLibrary.fsproj +++ b/vsintegration/ProjectTemplates/PortableLibraryProject/Template/PortableLibrary.fsproj @@ -19,19 +19,19 @@ full false false - bin\Debug\ + bin\$(Configuration)\ DEBUG;TRACE 3 - bin\Debug\$safeprojectname$.XML + bin\$(Configuration)\$(AssemblyName).XML pdbonly true true - bin\Release\ + bin\$(Configuration)\ TRACE 3 - bin\Release\$safeprojectname$.XML + bin\$(Configuration)\$(AssemblyName).XML diff --git a/vsintegration/ProjectTemplates/SilverlightProject/SilverlightProject.csproj b/vsintegration/ProjectTemplates/SilverlightProject/SilverlightProject.csproj deleted file mode 100644 index abfc6423b5f..00000000000 --- a/vsintegration/ProjectTemplates/SilverlightProject/SilverlightProject.csproj +++ /dev/null @@ -1,49 +0,0 @@ - - - - - ..\..\..\src - SilverlightProject - ProjectTemplates - true - true - - - Debug - net40 - $(FSharpSourcesRoot)\..\$(Configuration)\$(TargetFramework)\bin\$(TemplateCategory)\$(AssemblyName) - - - - - - - $(FSharpSourcesRoot)\..\loc\lcl\{Lang}\$(TemplateCategory)\$(AssemblyName)\AssemblyInfo.fs.lcl - $(FSharpSourcesRoot)\..\loc\lci\$(TemplateCategory)\$(AssemblyName)\AssemblyInfo.fs.lci - false - false - - - $(FSharpSourcesRoot)\..\loc\lcl\{Lang}\$(TemplateCategory)\$(AssemblyName)\Script.fsx.lcl - $(FSharpSourcesRoot)\..\loc\lci\$(TemplateCategory)\$(AssemblyName)\Script.fsx.lci - false - false - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/SilverlightProject/Template/AssemblyInfo.fs b/vsintegration/ProjectTemplates/SilverlightProject/Template/AssemblyInfo.fs deleted file mode 100644 index ef8c57897bf..00000000000 --- a/vsintegration/ProjectTemplates/SilverlightProject/Template/AssemblyInfo.fs +++ /dev/null @@ -1,41 +0,0 @@ -namespace $safeprojectname$.AssemblyInfo - -open System.Reflection -open System.Runtime.CompilerServices -open System.Runtime.InteropServices - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[] -[] -[] -[] -[] -[] -[] -[] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [] -[] -[] - -do - () \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/SilverlightProject/Template/Library1.fs b/vsintegration/ProjectTemplates/SilverlightProject/Template/Library1.fs deleted file mode 100644 index c8a8cd1b462..00000000000 --- a/vsintegration/ProjectTemplates/SilverlightProject/Template/Library1.fs +++ /dev/null @@ -1,4 +0,0 @@ -namespace $safeprojectname$ - -type Class1() = - member this.X = "F#" diff --git a/vsintegration/ProjectTemplates/SilverlightProject/Template/Script.fsx b/vsintegration/ProjectTemplates/SilverlightProject/Template/Script.fsx deleted file mode 100644 index 8c20b249d18..00000000000 --- a/vsintegration/ProjectTemplates/SilverlightProject/Template/Script.fsx +++ /dev/null @@ -1,5 +0,0 @@ -// Learn more about F# at http://fsharp.org. See the 'F# Tutorial' project -// for more guidance on F# programming. - -#load "Library1.fs" -open $safeprojectname$ diff --git a/vsintegration/ProjectTemplates/SilverlightProject/Template/SilverlightLibrary.fsproj b/vsintegration/ProjectTemplates/SilverlightProject/Template/SilverlightLibrary.fsproj deleted file mode 100644 index 1f442ef0b55..00000000000 --- a/vsintegration/ProjectTemplates/SilverlightProject/Template/SilverlightLibrary.fsproj +++ /dev/null @@ -1,86 +0,0 @@ - - - - - Debug - AnyCPU - 2.0 - $guid1$ - Library - $safeprojectname$ - v$targetframeworkversion$ - $(TargetFrameworkVersion) - 512 - true - {A1591282-1198-4647-A2B1-27E5FF5F6F3B};{f2a71f9b-5d33-465a-a702-920d77279786} - $safeprojectname$ - Silverlight - false - true - false - 3.47.41.0 - true - - - true - full - false - bin\Debug\ - DEBUG;TRACE;SILVERLIGHT - prompt - 3 - bin\Debug\$safeprojectname$.XML - - - pdbonly - true - bin\Release\ - TRACE;SILVERLIGHT - prompt - 3 - bin\Release\$safeprojectname$.XML - - - - - FSharp.Core - FSharp.Core.dll - $(MSBuildExtensionsPath32)\..\Reference Assemblies\Microsoft\FSharp\.NETPortable\$(TargetFSharpCoreVersion)\FSharp.Core.dll - - - - - - - - - - - - - - - 11 - - - - - $(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets - - - - - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets - - - - - - - diff --git a/vsintegration/ProjectTemplates/SilverlightProject/Template/SilverlightLibrary.vstemplate b/vsintegration/ProjectTemplates/SilverlightProject/Template/SilverlightLibrary.vstemplate deleted file mode 100644 index 00cdac718b1..00000000000 --- a/vsintegration/ProjectTemplates/SilverlightProject/Template/SilverlightLibrary.vstemplate +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - Microsoft.FSharp.Silverlight.Library - FSharp - - 1 - true - SilverlightLibrary - true - true - - - - AssemblyInfo.fs - Library1.fs - Script.fsx - - - - - - - - - - - Microsoft.VisualStudio.Silverlight, Version=15.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a - Microsoft.VisualStudio.Silverlight.SilverlightClasslibraryTemplateWizard - - - diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj index 91eda9541f6..f1d23eacbaa 100644 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj @@ -23,22 +23,22 @@ full false false - bin\Debug\ + bin\$(Configuration)\ DEBUG;TRACE 3 AnyCPU - bin\Debug\$safeprojectname$.XML + bin\$(Configuration)\$(AssemblyName).XML true pdbonly true true - bin\Release\ + bin\$(Configuration)\ TRACE 3 AnyCPU - bin\Release\$safeprojectname$.XML + bin\$(Configuration)\$(AssemblyName).XML true diff --git a/vsintegration/ProjectTemplates/TutorialProject/TutorialProject.csproj b/vsintegration/ProjectTemplates/TutorialProject/TutorialProject.csproj index fc41a78cf21..a5a9595ea17 100644 --- a/vsintegration/ProjectTemplates/TutorialProject/TutorialProject.csproj +++ b/vsintegration/ProjectTemplates/TutorialProject/TutorialProject.csproj @@ -7,6 +7,17 @@ ProjectTemplates true true + false + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + false + false + false + false + false + false + false + false + false Debug @@ -24,6 +35,11 @@ false + + + + + diff --git a/vsintegration/VisualFSharpVsix/RegisterFsharpPackage.pkgdef b/vsintegration/Vsix/RegisterFsharpPackage.pkgdef similarity index 100% rename from vsintegration/VisualFSharpVsix/RegisterFsharpPackage.pkgdef rename to vsintegration/Vsix/RegisterFsharpPackage.pkgdef diff --git a/vsintegration/VisualFSharpVsix/Source.extension.vsixmanifest b/vsintegration/Vsix/VisualFSharpDesktop/Source.extension.vsixmanifest similarity index 69% rename from vsintegration/VisualFSharpVsix/Source.extension.vsixmanifest rename to vsintegration/Vsix/VisualFSharpDesktop/Source.extension.vsixmanifest index 2701f6f7c7a..77be4b5a276 100644 --- a/vsintegration/VisualFSharpVsix/Source.extension.vsixmanifest +++ b/vsintegration/Vsix/VisualFSharpDesktop/Source.extension.vsixmanifest @@ -8,7 +8,7 @@ ..\CommonExtensions\Microsoft\FSharp - + @@ -33,7 +33,7 @@ - + @@ -43,21 +43,17 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + \ No newline at end of file diff --git a/vsintegration/Vsix/VisualFSharpDesktop/VisualFSharpDesktop.csproj b/vsintegration/Vsix/VisualFSharpDesktop/VisualFSharpDesktop.csproj new file mode 100644 index 00000000000..458e75bc0ad --- /dev/null +++ b/vsintegration/Vsix/VisualFSharpDesktop/VisualFSharpDesktop.csproj @@ -0,0 +1,286 @@ + + + + + ..\..\..\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 + {E7EC4A3E-9D57-45B8-83F5-EDDFD6CEF090} + true + VisualFSharpDesktop + $(FSharpSourcesRoot)\..\$(Configuration)\$(TargetFramework)\bin + VisualFSharpDesktop + $(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 + + + {2facee44-48bd-40b5-a2ee-b54a0c9bb7c4} + TutorialProject + ProjectTemplates + TemplateProjectOutputGroup%3b + false + True + + + + + + + + + + + VsixSHA2 + + + + diff --git a/vsintegration/Vsix/VisualFSharpFull/Source.extension.vsixmanifest b/vsintegration/Vsix/VisualFSharpFull/Source.extension.vsixmanifest new file mode 100644 index 00000000000..d0482950954 --- /dev/null +++ b/vsintegration/Vsix/VisualFSharpFull/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/VisualFSharpFull/VisualFSharpFull.csproj b/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj new file mode 100644 index 00000000000..bb9842133c9 --- /dev/null +++ b/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.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 + {59ADCE46-9740-4079-834D-9A03A3494EBC} + true + VisualFSharpFull + $(FSharpSourcesRoot)\..\$(Configuration)\$(TargetFramework)\bin + VisualFSharpFull + $(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 + + + + diff --git a/vsintegration/Vsix/VisualFSharpWeb/Source.extension.vsixmanifest b/vsintegration/Vsix/VisualFSharpWeb/Source.extension.vsixmanifest new file mode 100644 index 00000000000..31ab52c9656 --- /dev/null +++ b/vsintegration/Vsix/VisualFSharpWeb/Source.extension.vsixmanifest @@ -0,0 +1,57 @@ + + + + + + Visual F# Tools + Deploy Visual F# Tools templates to Visual Studio + ..\CommonExtensions\Microsoft\FSharp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vsintegration/VisualFSharpVsix/VisualFSharpVsix.csproj b/vsintegration/Vsix/VisualFSharpWeb/VisualFSharpWeb.csproj similarity index 68% rename from vsintegration/VisualFSharpVsix/VisualFSharpVsix.csproj rename to vsintegration/Vsix/VisualFSharpWeb/VisualFSharpWeb.csproj index 49c86e14e52..50c5adc68d4 100644 --- a/vsintegration/VisualFSharpVsix/VisualFSharpVsix.csproj +++ b/vsintegration/Vsix/VisualFSharpWeb/VisualFSharpWeb.csproj @@ -1,11 +1,10 @@ - + - ..\..\src - ..\src + ..\..\..\src net40 - 14.0 + 15.0 11.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) @@ -40,26 +39,26 @@ None Debug AnyCPU - false Library Properties - FSharp + FSharpDev true False - True - {E7EC4A3E-9D57-45B8-83F5-EDDFD6CEF090} + False + {58730C8B-16F5-4956-9291-BB68E17C9142} true - VisualFSharpVsix + VisualFSharpWeb $(FSharpSourcesRoot)\..\$(Configuration)\$(TargetFramework)\bin - VisualFSharpVsix + VisualFSharpWeb $(RootBinPath) + 15.4.1.0 + cs - Program $(DevEnvDir)devenv.exe - /rootsuffix FSharp /log - FSharp + /rootsuffix $(VSRootSuffix) /log + $(VSRootSuffix) true @@ -68,15 +67,12 @@ true /rootsuffix $(VSRootSuffix) /log $(VSRootSuffix) - 15.4.1.0 - cs - Designer - + Always true RegisterFsharpPackage.pkgdef @@ -86,83 +82,6 @@ true - - - - Always - true - ProjectTemplates\SilverlightProject.zip - - - Always - true - ProjectTemplates\NetCoreProject.zip - - - Always - true - ProjectTemplates\NetCore78Project.zip - - - Always - true - ProjectTemplates\NetCore259Project.zip - - - Always - true - ProjectTemplates\PortableLibraryProject.zip - - - Always - true - ProjectTemplates\TutorialProject.zip - - - Always - true - ProjectTemplates\ConsoleProject.zip - - - Always - true - ProjectTemplates\LibraryProject.zip - - - - - - Always - true - ItemTemplates\AppConfig.zip - - - Always - true - ItemTemplates\CodeFile.zip - - - Always - true - ItemTemplates\ScriptFile.zip - - - Always - true - ItemTemplates\SignatureFile.zip - - - Always - true - ItemTemplates\TextFile.zip - - - Always - true - ItemTemplates\XMLFile.zip - - - False @@ -180,107 +99,178 @@ false - {649FA588-F02E-457C-9FCF-87E46407481E} FSharp.Compiler.Interactive.Settings BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b DebugSymbolsProjectOutputGroup%3b - false + True {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06} FSharp.Compiler.Server.Shared BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3bPkgDefProjectOutputGroup%3b DebugSymbolsProjectOutputGroup%3b - false + True {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3} FSharp.Compiler BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b DebugSymbolsProjectOutputGroup%3b - false + 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 - false + True {8B3E283D-B5FE-4055-9D80-7E3A32F3967B} FsiAnyCPU BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b DebugSymbolsProjectOutputGroup%3b - false + True {D0E98C0D-490B-4C61-9329-0862F6E87645} Fsi BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b DebugSymbolsProjectOutputGroup%3b - false + True - + {65e0e82a-eace-4787-8994-888674c2fe87} FSharp.Editor BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3bPkgDefProjectOutputGroup%3b DebugSymbolsProjectOutputGroup%3b - false + True - + {1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF} FSharp.LanguageService.Base BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3bPkgDefProjectOutputGroup%3b DebugSymbolsProjectOutputGroup%3b - false + True - + {EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F} FSharp.LanguageService BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3bPkgDefProjectOutputGroup%3b DebugSymbolsProjectOutputGroup%3b - false + True - + {B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7} ProjectSystem.Base BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3bPkgDefProjectOutputGroup%3b DebugSymbolsProjectOutputGroup%3b - false + True - + {6196B0F8-CAEA-4CF1-AF82-1B520F77FE44} ProjectSystem BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3bPkgDefProjectOutputGroup%3b DebugSymbolsProjectOutputGroup%3b - false + True - + {FCFB214C-462E-42B3-91CA-FC557EFEE74F} FSharp.PropertiesPages BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3bPkgDefProjectOutputGroup%3b DebugSymbolsProjectOutputGroup%3b - false + 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 + + + {01678cda-a11f-4dee-9344-2edf91cf1ae7} + LibraryProject + ProjectTemplates + TemplateProjectOutputGroup%3b + false + True + + + {2facee44-48bd-40b5-a2ee-b54a0c9bb7c4} + TutorialProject + ProjectTemplates + TemplateProjectOutputGroup%3b false + True - - + - \ No newline at end of file + + + + + VsixSHA2 + + + + diff --git a/vsintegration/fsharp-vsintegration-project-templates-build.proj b/vsintegration/fsharp-vsintegration-project-templates-build.proj index 535ff27d6c7..42e9b8d111f 100644 --- a/vsintegration/fsharp-vsintegration-project-templates-build.proj +++ b/vsintegration/fsharp-vsintegration-project-templates-build.proj @@ -11,7 +11,6 @@ - diff --git a/vsintegration/fsharp-vsintegration-vsix-build.proj b/vsintegration/fsharp-vsintegration-vsix-build.proj index 1eb3e5c22a2..96cc78da026 100644 --- a/vsintegration/fsharp-vsintegration-vsix-build.proj +++ b/vsintegration/fsharp-vsintegration-vsix-build.proj @@ -5,25 +5,12 @@ - - - - - - - - - - - - - - + + + - - diff --git a/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj b/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj index 6e59ea3017b..495b15f67fe 100644 --- a/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj +++ b/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj @@ -62,8 +62,9 @@ {991dcf75-c2eb-42b6-9a0d-aa1d2409d519} FSharp.VS.FSI - - + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Framework.dll + diff --git a/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj b/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj index 32d2da7fa46..d00f85a78a1 100644 --- a/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj +++ b/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj @@ -63,8 +63,9 @@ - - + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Framework.dll + diff --git a/vsintegration/src/FSharp.LanguageService/Vs.fs b/vsintegration/src/FSharp.LanguageService/Vs.fs index 360f3229791..a79e42f008c 100644 --- a/vsintegration/src/FSharp.LanguageService/Vs.fs +++ b/vsintegration/src/FSharp.LanguageService/Vs.fs @@ -14,7 +14,6 @@ open Microsoft.VisualStudio.Text open Microsoft.VisualStudio.TextManager.Interop open Microsoft.VisualStudio.OLE.Interop open Microsoft.FSharp.Compiler.Range -open Internal.Utilities.Debug open System.Runtime.InteropServices /// Helper methods for interoperating with COM diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/AssemblyReferenceNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/AssemblyReferenceNode.cs index 274d3a72854..462cefbb878 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/AssemblyReferenceNode.cs +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/AssemblyReferenceNode.cs @@ -13,7 +13,6 @@ using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell.Interop; using Microsoft.VisualStudio.OLE.Interop; -using MSBuild = Microsoft.Build.BuildEngine; using Microsoft.Build.Utilities; using System.Diagnostics.CodeAnalysis; using ShellConstants = Microsoft.VisualStudio.Shell.Interop.Constants; @@ -486,9 +485,6 @@ private void ResolveAssemblyReferenceByFullPath(string assemblyFullPath, AddRefe } Debug.Assert(isValidPath, string.Format("Expected assemblyFullPath to be a full path, but it was {0}", assemblyFullPath)); - // AddComPlusReferenceByFullPath - Action Trace = (s) => FSharpTrace.PrintLine("ProjectSystemReferenceResolution", () => "ResolveAssemblyReferenceByFullPath: " + s); - Trace("starting: \""+assemblyFullPath+"\""); this.msbuildProjectionInfo.WantHintPath = false; this.msbuildProjectionInfo.WantFusionName = false; this.msbuildProjectionInfo.WantSpecificVersion = null; @@ -503,18 +499,16 @@ private void ResolveAssemblyReferenceByFullPath(string assemblyFullPath, AddRefe } if (!this.resolvedInfo.WasSuccessfullyResolved) { - Trace("simple name resolution did not succeed"); this.msbuildProjectionInfo.WantHintPath = true; AddToProjectFileAndTryResolve(assemblyFullPath); } else { this.myAssemblyPath = assemblyFullPath; - Trace("simple name resolution succeeded"); // we successfully resolved it via simple name if (!this.resolvedInfo.IsPlatformAssembly) { - Trace("not a platform assembly"); + // not a platform assembly if (resolvedInfo.AssemblyName != null) { // Project file contains different reference than picked/shown in UI @@ -529,21 +523,21 @@ private void ResolveAssemblyReferenceByFullPath(string assemblyFullPath, AddRefe if (tab == AddReferenceDialogTab.DotNetTab) { - Trace("from .Net tab"); + // from .Net tab this.msbuildProjectionInfo.WantFusionName = true; this.msbuildProjectionInfo.WantSpecificVersion = true; } else { Debug.Assert(tab == AddReferenceDialogTab.BrowseTab); - Trace("not from .Net tab"); + // not from .Net tab this.msbuildProjectionInfo.WantHintPath = true; } } else { // platform assemblies can just resolve to simple name - Trace("it was a platform assembly"); + // it was a platform assembly } } // TODO - not accounting for case described below @@ -567,7 +561,7 @@ private void ResolveAssemblyReferenceByFullPath(string assemblyFullPath, AddRefe { this.ProjectMgr.AddReferenceCouldNotBeAddedErrorMessage(assemblyFullPath); } - Trace("finished: \"" + assemblyFullPath + "\""); + // "finished: assemblyFullPath } /// @@ -576,25 +570,19 @@ private void ResolveAssemblyReferenceByFullPath(string assemblyFullPath, AddRefe /// Either a full path to a file on disk, or a simple name or fusion name private void AddToProjectFileAndTryResolve(string assemblyInclude) { - Action Trace = (s) => FSharpTrace.PrintLine("ProjectSystemReferenceResolution", () => "ResolveAssemblyReferenceCore: " + s); - Trace("starting: \"" + assemblyInclude + "\""); + // starting: assemblyInclude ProjectInstance instance = null; instance = this.ProjectMgr.BuildProject.CreateProjectInstance(); // use a fresh instance... instance.AddItem(ProjectFileConstants.Reference, assemblyInclude); // ...and mutate it as through there were another there - Trace("instance[Configuration]=" + instance.GetPropertyValue("Configuration")); - Trace("instance[Platform]=" + instance.GetPropertyValue("Platform")); var result = BuildInstance(this.ProjectMgr, ref instance, MsBuildTarget.ResolveAssemblyReferences); this.ResolveFromBuiltProject(assemblyInclude, result); - Trace("finished without finding original item: \"" + assemblyInclude + "\""); } private void ResolveFromBuiltProject(string assemblyInclude, BuildResult buildResult) { - Action Trace = (s) => FSharpTrace.PrintLine("ProjectSystemReferenceResolution", () => "ResolveAssemblyReferenceCore: " + s); - Trace("starting: \"" + assemblyInclude + "\""); if (!buildResult.IsSuccessful) { - Trace("ResolveAssemblyReferences build failed."); + // ResolveAssemblyReferences build failed. return; } System.Collections.Generic.IEnumerable group = buildResult.ProjectInstance.GetItems(ProjectFileConstants.ReferencePath); @@ -622,12 +610,12 @@ private void ResolveFromBuiltProject(string assemblyInclude, BuildResult buildRe { this.myAssemblyPath = Path.Combine(this.ProjectMgr.ProjectFolder, this.myAssemblyPath); } - Trace("finished and found original item: \"" + assemblyInclude + "\""); + // finished and found original item return; } } } - Trace("finished without finding original item: \"" + assemblyInclude + "\""); + // finished without finding original item } /// diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ConfigProvider.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ConfigProvider.cs index 7f239e8ce9a..eb713f4e23b 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ConfigProvider.cs +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ConfigProvider.cs @@ -9,7 +9,6 @@ using System.Globalization; using System.Collections; using System.IO; -using MSBuild = Microsoft.Build.BuildEngine; using System.Collections.Generic; using System.Linq; using EnvDTE; diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ConfigurationProperties.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ConfigurationProperties.cs index c2a2395d271..6cfb318c897 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ConfigurationProperties.cs +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ConfigurationProperties.cs @@ -10,7 +10,6 @@ using System.Collections; using System.IO; using System.Linq; -using MSBuild = Microsoft.Build.BuildEngine; using System.Collections.Generic; using Microsoft.VisualStudio.FSharp.LanguageService; diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/FileNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/FileNode.cs index a9f6837ecee..761e092518f 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/FileNode.cs +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/FileNode.cs @@ -18,7 +18,6 @@ using OleConstants = Microsoft.VisualStudio.OLE.Interop.Constants; using VsCommands = Microsoft.VisualStudio.VSConstants.VSStd97CmdID; using VsCommands2K = Microsoft.VisualStudio.VSConstants.VSStd2KCmdID; -using MSBuild = Microsoft.Build.BuildEngine; using System.Diagnostics.CodeAnalysis; namespace Microsoft.VisualStudio.FSharp.ProjectSystem diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/GroupingReferenceNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/GroupingReferenceNode.cs index 102d0386bcf..62435b8fb79 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/GroupingReferenceNode.cs +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/GroupingReferenceNode.cs @@ -13,7 +13,6 @@ using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell.Interop; using Microsoft.VisualStudio.OLE.Interop; -using MSBuild = Microsoft.Build.BuildEngine; using Microsoft.Build.Utilities; using System.Diagnostics.CodeAnalysis; using ShellConstants = Microsoft.VisualStudio.Shell.Interop.Constants; diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/IVsSQM.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/IVsSQM.cs deleted file mode 100644 index 04d8e7fce4e..00000000000 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/IVsSQM.cs +++ /dev/null @@ -1,312 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -#pragma warning disable 3001 - -namespace Microsoft.VisualStudio.Shell.Interop -{ - using System; - using System.Runtime.InteropServices; - - [ComImport()] - [ComVisible(false)] - [Guid("C1F63D0C-4CAE-4907-BE74-EEB75D386ECB")] - [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)] - public interface IVsSqm - { - void GetSessionStartTime( - [Out] out System.Runtime.InteropServices.ComTypes.FILETIME time - ); - void GetFlags( - [Out, MarshalAs(UnmanagedType.U4)] out System.UInt32 flags - ); - void SetFlags( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 flags - ); - void ClearFlags( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 flags - ); - void AddItemToStream( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 value - ); - void SetDatapoint( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 value - ); - // OBSOLETE IN SQMAPI.DLL. DO NOT CALL. - void GetDatapoint ( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID, - [Out, MarshalAs(UnmanagedType.U4)] out System.UInt32 value - ); - void EnterTaggedAssert( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dwTag, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dwPossibleBuild, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dwActualBuild - ); - void RecordCmdData( - [In] ref Guid pguidCmdGroup, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 value - ); - void GetHashOfGuid ( - [In] ref Guid hashGuid, - [Out, MarshalAs(UnmanagedType.U4)] out System.UInt32 resultantHash - ); - void GetHashOfString ( - [In, MarshalAs(UnmanagedType.BStr)] string hashString, - [Out, MarshalAs(UnmanagedType.U4)] out System.UInt32 resultantHash - ); - void IncrementDatapoint( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 value - ); - - void SetDatapointBits( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 value - ); - - void SetDatapointIfMax( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 value - ); - void SetDatapointIfMin( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 value - ); - void AddToDatapointAverage( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 value - ); - void StartDatapointTimer( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID - ); - void RecordDatapointTimer( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID - ); - void AccumulateDatapointTimer( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID - ); - void AddTimerToDatapointAverage( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID - ); - void AddArrayToStream( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID, - [In, MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.U4, SizeParamIndex = 2)] System.UInt32[] data, - [In, MarshalAs(UnmanagedType.I4)] int count - ); - } - - [ComImport()] - [ComVisible(false)] - [Guid("BE5F55EB-F02D-4217-BCB6-A290800AF6C4")] - [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)] - public interface IVsSqm2 - { - void SetBoolDatapoint( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 fValue - ); - - void SetStringDatapoint( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID, - [In, MarshalAs(UnmanagedType.BStr)] string strValue - ); - - void AddToStreamDWord( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 cTuple, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 value - ); - - void AddToStreamString( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 cTuple, - [In, MarshalAs(UnmanagedType.BStr)] string strValue - ); - - void GetObfuscatedString( - [In, MarshalAs(UnmanagedType.BStr)] string input, - [Out, MarshalAs(UnmanagedType.BStr)] out string output - ); - } - - [ComImport()] - [ComVisible(false)] - [Guid("B17A7D4A-C1A3-45A2-B916-826C3ABA067E")] - [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)] - public interface IVsSqmMulti - { - [return: MarshalAs(UnmanagedType.VariantBool)] - bool GetOptInStatus(); - void UnloadSessions( - ); - void EndAllSessionsAndAbortUploads( - ); - void BeginSession( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionType, - [In, MarshalAs(UnmanagedType.VariantBool)] System.Boolean alwaysSend, - [Out, MarshalAs(UnmanagedType.U4)] out System.UInt32 sessionHandle - ); - void EndSession( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle - ); - void RegisterSessionHandle( - [In] ref Guid sessionIdentifier, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dwSessionHandle - ) ; - [return: MarshalAs(UnmanagedType.U4)] - int GetSessionHandleByIdentifier( - [In] ref Guid sessionIdentifier - ); - void GetSessionStartTime( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle, - [Out] out System.Runtime.InteropServices.ComTypes.FILETIME time - ); - Guid GetGlobalSessionGuid(); - [return: MarshalAs(UnmanagedType.U4)] - int GetGlobalSessionHandle(); - void SetGlobalSessionGuid( - [In] ref Guid pguidSessionGuid - ); - void GetFlags( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle, - [Out, MarshalAs(UnmanagedType.U4)] out System.UInt32 flags - ); - void SetFlags( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 flags - ); - void ClearFlags( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 flags - ); - void SetDatapoint( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 value - ); - void SetBoolDatapoint( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 fValue - ); - void SetStringDatapoint( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID, - [In, MarshalAs(UnmanagedType.BStr)] string strValue - ); - void SetDatapointBits( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 value - ); - void IncrementDatapoint( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 value - ); - - void SetDatapointIfMax( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 value - ); - void SetDatapointIfMin( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 value - ); - void AddToDatapointAverage( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 value - ); - void StartDatapointTimer( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID - ); - void RecordDatapointTimer( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID - ); - void AccumulateDatapointTimer( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID - ); - void AddTimerToDatapointAverage( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID - ); - void AddItemToStream( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 value - ); - void AddArrayToStream( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID, - [In, MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.U4, SizeParamIndex = 2)] System.UInt32[] data, - [In, MarshalAs(UnmanagedType.I4)] int count - ); - void AddToStreamDWord( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 cTuple, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 value - ); - void AddToStreamString( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 cTuple, - [In, MarshalAs(UnmanagedType.BStr)] string strValue - ); - void RecordCmdData( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 sessionHandle, - [In] ref Guid pguidCmdGroup, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 dataPointID, - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 value - ); - void GetHashOfGuid ( - [In] ref Guid hashGuid, - [Out, MarshalAs(UnmanagedType.U4)] out System.UInt32 resultantHash - ); - void GetHashOfString ( - [In, MarshalAs(UnmanagedType.BStr)] string hashString, - [Out, MarshalAs(UnmanagedType.U4)] out System.UInt32 resultantHash - ); - void SetProperty( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 propid, - [In] ref Guid varKey, - [In] object varValue - ); - void Get64BitHashOfString ( - [In, MarshalAs(UnmanagedType.BStr)] string hashString, - [Out, MarshalAs(UnmanagedType.U8)] out System.UInt64 resultantHash - ); - } - - [ComImport()] - [ComVisible(false)] - [Guid("16be4288-950b-4265-b0dc-280b89ca9979")] - [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)] - public interface IVsSqmOptinManager - { - void GetOptinStatus( - [Out, MarshalAs(UnmanagedType.U4)] out System.UInt32 optinStatus, - [Out, MarshalAs(UnmanagedType.U4)] out System.UInt32 preferences - ); - - void SetOptinStatus( - [In, MarshalAs(UnmanagedType.U4)] System.UInt32 optinStatus - ); - } - - [ComImport()] - [ComVisible(false)] - [Guid("2508FDF0-EF80-4366-878E-C9F024B8D981")] - public interface SVsLog - { - } - -} diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Interfaces.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Interfaces.cs index 9dc9d738c12..11e79a8bfd5 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Interfaces.cs +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Interfaces.cs @@ -7,7 +7,6 @@ using OleConstants = Microsoft.VisualStudio.OLE.Interop.Constants; using VsCommands = Microsoft.VisualStudio.VSConstants.VSStd97CmdID; using VsCommands2K = Microsoft.VisualStudio.VSConstants.VSStd2KCmdID; -using MSBuild = Microsoft.Build.BuildEngine; using System.Diagnostics.CodeAnalysis; namespace Microsoft.VisualStudio.FSharp.ProjectSystem diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/LinkedFileNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/LinkedFileNode.cs index cacfe667299..0c2c54bfab3 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/LinkedFileNode.cs +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/LinkedFileNode.cs @@ -17,7 +17,6 @@ using OleConstants = Microsoft.VisualStudio.OLE.Interop.Constants; using VsCommands = Microsoft.VisualStudio.VSConstants.VSStd97CmdID; using VsCommands2K = Microsoft.VisualStudio.VSConstants.VSStd2KCmdID; -using MSBuild = Microsoft.Build.BuildEngine; namespace Microsoft.VisualStudio.FSharp.ProjectSystem { diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/OutputGroup.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/OutputGroup.cs index 5fb282c22b3..64026b6164b 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/OutputGroup.cs +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/OutputGroup.cs @@ -11,7 +11,6 @@ using Microsoft.VisualStudio.OLE.Interop; using Microsoft.VisualStudio.Shell; -using MSBuild = Microsoft.Build.BuildEngine; using System.Diagnostics.CodeAnalysis; namespace Microsoft.VisualStudio.FSharp.ProjectSystem diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectConfig.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectConfig.cs index 04ff876e1d9..1244c515964 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectConfig.cs +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectConfig.cs @@ -10,7 +10,6 @@ using System.Security; using System.IO; using System.Collections.Generic; -using MSBuild = Microsoft.Build.BuildEngine; using System.Diagnostics.CodeAnalysis; using System.Linq; using Microsoft.VisualStudio.FSharp.LanguageService; diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectDesignerDocumentManager.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectDesignerDocumentManager.cs index b64056cec30..07e4b08ad9f 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectDesignerDocumentManager.cs +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectDesignerDocumentManager.cs @@ -16,7 +16,6 @@ using Microsoft.VisualStudio.Shell.Interop; using Microsoft.VisualStudio.Shell; using System.Net; -using MSBuild = Microsoft.Build.BuildEngine; using IOleServiceProvider = Microsoft.VisualStudio.OLE.Interop.IServiceProvider; using IServiceProvider = System.IServiceProvider; diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectElement.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectElement.cs index 67efa9c8cf5..662feff90ff 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectElement.cs +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectElement.cs @@ -6,7 +6,7 @@ using System.Globalization; using System.IO; using System.Runtime.InteropServices; -using MSBuild = Microsoft.Build.BuildEngine; +using Microsoft.Build.Evaluation; namespace Microsoft.VisualStudio.FSharp.ProjectSystem { @@ -135,7 +135,7 @@ public ProjectElement(ProjectNode project, string itemPath, string itemType) private void DoAdd(string itemType, string itemPath) { - var added = this.itemProject.BuildProject.AddItem(itemType, Microsoft.Build.BuildEngine.Utilities.Escape(itemPath)); + var added = this.itemProject.BuildProject.AddItem(itemType, ProjectCollection.Escape(itemPath)); Debug.Assert(added.Count == 1, "adding a file created more than 1 new item, should not be possible since we escape wildcard characters"); this.item = added[0]; @@ -328,7 +328,7 @@ public string GetMetadataAndThrow(string attributeName, Exception exception) public void Rename(string newPath) { - string escapedPath = Microsoft.Build.BuildEngine.Utilities.Escape(newPath); + string escapedPath = ProjectCollection.Escape(newPath); if (this.IsVirtual) { virtualProperties[ProjectFileConstants.Include] = escapedPath; diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectFactory.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectFactory.cs index ba7f8633ef3..3f234434209 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectFactory.cs +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectFactory.cs @@ -4,7 +4,6 @@ using System.Collections.Generic; using System.Diagnostics; using System.IO; -using MSBuild = Microsoft.Build.BuildEngine; using Microsoft.VisualStudio.OLE.Interop; using Microsoft.VisualStudio.Shell.Interop; using Microsoft.VisualStudio.Shell; @@ -184,7 +183,7 @@ public ProjectInspector(string filename) { xmlProj = Microsoft.Build.Construction.ProjectRootElement.Open(filename); } - catch (Microsoft.Build.BuildEngine.InvalidProjectFileException) + catch (Microsoft.Build.Exceptions.InvalidProjectFileException) { // leave xmlProj non-initialized, other methods will check its state in prologue } diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectNode.cs index ed5588d7eca..722356327da 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectNode.cs +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectNode.cs @@ -21,7 +21,6 @@ using Microsoft.VisualStudio.Shell.Interop; using Microsoft.VisualStudio.Shell; using System.Net; -using MSBuild = Microsoft.Build.BuildEngine; using IOleServiceProvider = Microsoft.VisualStudio.OLE.Interop.IServiceProvider; using IServiceProvider = System.IServiceProvider; using OleConstants = Microsoft.VisualStudio.OLE.Interop.Constants; @@ -41,17 +40,6 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem { - internal class FSharpTrace - { - static public void PrintLine(string traceClass, Func msg) - { - if (global::Internal.Utilities.Debug.Trace.ShouldLog(traceClass)) - { - var fsFunc = Microsoft.FSharp.Core.FuncConvert.ToFSharpFunc(new Converter((u) => msg())); - global::Internal.Utilities.Debug.Trace.PrintLine(traceClass, fsFunc); - } - } - } internal delegate void MSBuildCoda(MSBuildResult result, ProjectInstance instance); @@ -3423,15 +3411,6 @@ internal virtual BuildSubmission DoMSBuildSubmission(BuildKind buildKind, string // F#-specific properties projectInstance.SetProperty(GlobalProperty.VisualStudioStyleErrors.ToString(), "true"); - // Get SQM GlobalSessionGuid from Visual Studio to pass FSC.exe, - // so multiple SQM sessions can be correlated later when analying SQM data. - IVsSqmMulti sqm = this.GetService(typeof(Microsoft.VisualStudio.Shell.Interop.SVsLog)) as IVsSqmMulti; - if (sqm != null) - { - var sessionGuid = sqm.GetGlobalSessionGuid(); - projectInstance.SetProperty(GlobalProperty.SqmSessionGuid.ToString(), sessionGuid.ToString()); - } - if (extraProperties != null) { foreach (var prop in extraProperties) diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectReferenceNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectReferenceNode.cs index db036ba8fbb..a2b1136dc4b 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectReferenceNode.cs +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectReferenceNode.cs @@ -14,7 +14,6 @@ using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell.Interop; using Microsoft.VisualStudio.OLE.Interop; -using MSBuild = Microsoft.Build.BuildEngine; using Microsoft.Build.Utilities; using VSConstants = Microsoft.VisualStudio.VSConstants; using Task = Microsoft.VisualStudio.Shell.Task; diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectSystem.Base.csproj b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectSystem.Base.csproj index db75ba7bb00..0284bd6e3ce 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectSystem.Base.csproj +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectSystem.Base.csproj @@ -57,12 +57,21 @@ true - - - - - - + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Framework.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Utilities.Core.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Tasks.Core.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Conversion.Core.dll + @@ -150,7 +159,6 @@ - @@ -229,4 +237,4 @@ - \ No newline at end of file + diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ReferenceContainerNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ReferenceContainerNode.cs index a210ddcc6f0..5c8c1ca8ea1 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ReferenceContainerNode.cs +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ReferenceContainerNode.cs @@ -17,7 +17,6 @@ using OleConstants = Microsoft.VisualStudio.OLE.Interop.Constants; using VsCommands = Microsoft.VisualStudio.VSConstants.VSStd97CmdID; using VsCommands2K = Microsoft.VisualStudio.VSConstants.VSStd2KCmdID; -using MSBuild = Microsoft.Build.BuildEngine; namespace Microsoft.VisualStudio.FSharp.ProjectSystem diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Utilities.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Utilities.cs index 61d3307b9cb..95575e46522 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Utilities.cs +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Utilities.cs @@ -15,7 +15,6 @@ using System.Text.RegularExpressions; using System.Net; using System.Reflection; -using MSBuild = Microsoft.Build.BuildEngine; using Microsoft.VisualStudio.TextManager.Interop; using Microsoft.VisualStudio.OLE.Interop; using Microsoft.VisualStudio.Shell.Interop; diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/AppConfigHelper.fs b/vsintegration/src/FSharp.ProjectSystem.FSharp/AppConfigHelper.fs index 6067a8d8505..1923b2c027a 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/AppConfigHelper.fs +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/AppConfigHelper.fs @@ -22,7 +22,6 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem open System.Globalization open System.Text - open Microsoft.Build.BuildEngine open Microsoft.Win32 open Microsoft.VisualStudio diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/Project.fs b/vsintegration/src/FSharp.ProjectSystem.FSharp/Project.fs index 915b061e157..ba8a2a8178e 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/Project.fs +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/Project.fs @@ -40,9 +40,6 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem open EnvDTE - open Microsoft.Build.BuildEngine - open Internal.Utilities.Debug - module internal VSHiveUtilities = /// For a given sub-hive, check to see if a 3rd party has specified any /// custom/extended property pages. @@ -389,13 +386,8 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem // for example. If necessary, this can be changed - but please just try to avoid doing a gratuitous rename. let mutable sourcesAndFlags : option<(array * array)> = None #if DEBUG - let mutable shouldLog = false // can poke this in the debugger to turn on logging - let logger = new Microsoft.Build.BuildEngine.ConsoleLogger(Microsoft.Build.Framework.LoggerVerbosity.Diagnostic, - (fun s -> - let self = this - ignore self // ensure debugger has local in scope, so can poke self.shouldLog - if shouldLog then - Trace.Print("MSBuild", fun _ -> "MSBuild: " + s)), + let logger = new Microsoft.Build.Logging.ConsoleLogger(Microsoft.Build.Framework.LoggerVerbosity.Diagnostic, + (fun s -> Trace.WriteLine("MSBuild: " + s)), (fun _ -> ()), (fun _ -> ()) ) #endif @@ -440,12 +432,7 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem this.AddCATIDMapping(typeof, typeof.GUID) #if DEBUG - if Trace.ShouldLog("MSBuild") then - - this.SetDebugLogger(logger) - Trace.PrintLine("ProjectSystem", fun _ -> "attached MSBuild logger") - else - Trace.PrintLine("ProjectSystem", fun _ -> "not choosing to attach MSBuild logger") + this.SetDebugLogger(logger) #endif member private this.GetCurrentFrameworkName() = let tfm = this.GetTargetFrameworkMoniker() @@ -1319,9 +1306,6 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem override x.InvokeMsBuild(target, extraProperties) = let result = base.InvokeMsBuild(target, extraProperties) -#if DEBUG - Trace.PrintLine("ProjectSystem", fun _ -> sprintf "Called InvokeMsBuild(%s), result: %A" target result) -#endif result // Fulfill HostObject contract with Fsc task, and enable 'capture' of compiler flags for the project. @@ -1338,10 +1322,6 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem let normalizedSources = sources |> Array.map (fun fn -> System.IO.Path.GetFullPath(System.IO.Path.Combine(x.ProjectFolder, fn))) let r = (normalizedSources, flags) sourcesAndFlags <- Some(r) -#if DEBUG - Trace.PrintLine("ProjectSystem", fun _ -> sprintf "FSharpProjectNode(%s) sourcesAndFlags: %A" x.ProjectFile sourcesAndFlags) - Trace.PrintLine("ProjectSystem", fun _ -> sprintf "Compile() was called on FSharpProjectNode(%s); will we actually build? %A" x.ProjectFile actuallyBuild) -#endif if projectSite.State = ProjectSiteOptionLifetimeState.Opening then // This is the first time, so set up interface for language service to talk to us projectSite.Open(x.CreateRunningProjectSite()) @@ -1373,9 +1353,6 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem if not(inMidstOfReloading) && not(VsBuildManagerAccessorExtensionMethods.IsInProgress(accessor)) then #else if not(inMidstOfReloading) && not(FSharpBuildStatus.IsInProgress) then -#endif -#if DEBUG - use t = Trace.Call("ProjectSystem", "FSharpProjectNode::ComputeSourcesAndFlags()", fun _ -> x.ProjectFile) #endif // REVIEW CompilerFlags will be stale since last 'save' of MSBuild .fsproj file - can we do better? try @@ -1400,20 +1377,7 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem // If property is not set - msbuild will resolve only primary dependencies, // and compiler will be very unhappy when during processing of referenced assembly it will discover that all fundamental types should be // taken from System.Runtime that is not supplied - let success = x.InvokeMsBuild("Compile", isBeingCalledByComputeSourcesAndFlags = true, extraProperties = [KeyValuePair("_ResolveReferenceDependencies", "true")]) -#if DEBUG - Trace.PrintLine("ProjectSystem", fun _ -> sprintf "InvokeMsBuild('Compile') success: %A" success.IsSuccessful) - if not compileWasActuallyCalled then - Trace.PrintLine("ProjectSystem", fun _ -> "BUG? In ComputeSourcesAndFlags(), but Compile() was not called") -#if DEBUG_BUT_CANT_TURN_ON_BECAUSE_FAILS_ON_NEW_PROJECT - Debug.Assert(false, "Please report: This assert means that we invoked MSBuild but Compile was not called. Unless you have a weird project file that would fail to build from the command-line with 'msbuild foo.fsproj', this should never happen.") -#endif - else - Trace.PrintLine("ProjectSystem", fun _ -> "In ComputeSourcesAndFlags(), Compile() was called, hurrah") - -#else - ignore(success) -#endif + let _ = x.InvokeMsBuild("Compile", isBeingCalledByComputeSourcesAndFlags = true, extraProperties = [KeyValuePair("_ResolveReferenceDependencies", "true")]) sourcesAndFlagsNotifier.Notify() finally actuallyBuild <- true @@ -1467,9 +1431,6 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem x.DoFixupAppConfigOnTargetFXChange(runtime, sku, targetFSharpCoreVersion, autoGenerateBindingRedirects) override x.SetHostObject(targetName, taskName, hostObject) = -#if DEBUG - Trace.PrintLine("ProjectSystem", fun _ -> sprintf "about to set HostObject to %s" x.ProjectFile) -#endif base.SetHostObject(targetName, taskName, hostObject) override x.SetBuildProject newProj = @@ -1559,9 +1520,6 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem // which will finally populate sourcesAndFlags with good values. // This means that ones the user fixes the problem, proper intellisense etc. should start immediately lighting up. sourcesAndFlags <- Some([||],[||]) -#if DEBUG - Trace.PrintLine("ProjectSystem", fun _ -> "First call to ComputeSourcesAndFlags failed") -#endif projectSite.Open(x.CreateRunningProjectSite()) () | _ -> () diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj b/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj index b85b500e75d..5552ba95c81 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj @@ -8,6 +8,7 @@ $(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\VSSDK 11 + Debug AnyCPU @@ -22,7 +23,6 @@ $(OtherFlags) --warnon:1182 --subsystemversion:6.00 FX_ATLEAST_45 false - true ProjectResources.rc true false @@ -31,7 +31,6 @@ true true - $(FSharpSourcesRoot)\..\loc\lcl\{Lang}\$(AssemblyName).dll.lcl @@ -53,9 +52,9 @@ true - + fsiCommands.vsct - + @@ -84,11 +83,20 @@ - - - - + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Framework.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Utilities.Core.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Tasks.Core.dll + + $(VS150COMNTOOLS)\..\IDE\Microsoft.VisualStudio.Shell.UI.Internal.dll @@ -143,8 +151,8 @@ FSharp.Core - + true VSCTCompile;CopyCtoFile;$(BuildDependsOn) @@ -156,7 +164,8 @@ $(IntermediateOutputPath)\ProjectResources.rc.res - + + diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/VSPackage.resx b/vsintegration/src/FSharp.ProjectSystem.FSharp/VSPackage.resx index 14118efbd86..98484ba7692 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/VSPackage.resx +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/VSPackage.resx @@ -456,10 +456,10 @@ Customizes the environment to maximize code editor screen space and improve the visibility of F# commands and tool windows. - Microsoft Visual F# $(VSGeneralBrandVersion)$(VSGeneralBrandRelease) + Microsoft Visual F# 4.1 - Microsoft Visual F# $(VSGeneralBrandVersion)$(VSGeneralBrandRelease) + Microsoft Visual F# 4.1 1.0 @@ -468,7 +468,7 @@ Microsoft Visual F# - Visual F# $(VSGeneralBrandVersion)$(VSGeneralBrandRelease) + Visual F# 4.1 F# Interactive diff --git a/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj b/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj index dda8dcf7114..baeff9875cb 100644 --- a/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj +++ b/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj @@ -38,10 +38,18 @@ - - - - + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Framework.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Utilities.Core.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Tasks.Core.dll + diff --git a/vsintegration/tests/Salsa/VsMocks.fs b/vsintegration/tests/Salsa/VsMocks.fs index f8142f22fb1..c2b953ca33d 100644 --- a/vsintegration/tests/Salsa/VsMocks.fs +++ b/vsintegration/tests/Salsa/VsMocks.fs @@ -14,7 +14,6 @@ open Microsoft.VisualStudio.Shell open Microsoft.VisualStudio.Shell.Interop open Microsoft.VisualStudio.TextManager.Interop open Microsoft.VisualStudio.OLE.Interop -open Microsoft.Build.BuildEngine open System.Diagnostics open Microsoft.Build.Execution open Microsoft.Build.Framework diff --git a/vsintegration/tests/Salsa/salsa.fs b/vsintegration/tests/Salsa/salsa.fs index c16cdc461d1..1991baf6fd1 100644 --- a/vsintegration/tests/Salsa/salsa.fs +++ b/vsintegration/tests/Salsa/salsa.fs @@ -18,7 +18,6 @@ open System.Text open System.Collections.Generic open System.Runtime.InteropServices open System.Threading -open Internal.Utilities.Debug open Microsoft.VisualStudio open Microsoft.VisualStudio.Shell.Interop open Microsoft.VisualStudio.FSharp.ProjectSystem @@ -49,8 +48,6 @@ module internal Salsa = #else member th.Compile(compile:System.Converter, flags:string[], sources:string[]) = #endif - use t = Trace.Call("MSBuild", "Compile", fun _ -> "Host compile invoke by Fsc task") - Trace.PrintLine("MSBuild", fun _ -> sprintf "flags=%A" flags) capturedFlags <- flags capturedSources <- sources if actuallyBuild then @@ -79,20 +76,9 @@ module internal Salsa = let engine = Utilities.InitializeMsBuildEngine(null) if not hasAttachedLogger then hasAttachedLogger<-true - let logRegular = Trace.ShouldLog("MSBuild") - let logPerf = Trace.ShouldLog("MSBuildPerf") - if logRegular || logPerf then - let l = if logRegular then - Trace.PrintLine("MSBuild", fun () -> "Detailed logging.") - new Microsoft.Build.BuildEngine.ConsoleLogger(LoggerVerbosity.Detailed) - else - Trace.PrintLine("MSBuild", fun () -> "Quiet logging.") - new Microsoft.Build.BuildEngine.ConsoleLogger(LoggerVerbosity.Quiet) - Trace.PrintLine("MSBuild", fun () -> "About to attach MSBuild console logger.") - // For Dev10 build we pass the logger to the Build call on the project object. - theAttachedLogger <- l - Trace.PrintLine("MSBuild", fun () -> "Attached MSBuild console logger.") - if logPerf then l.ApplyParameter("PERFORMANCESUMMARY", null) + let l = new Microsoft.Build.Logging.ConsoleLogger(LoggerVerbosity.Detailed) + // For Dev10 build we pass the logger to the Build call on the project object. + theAttachedLogger <- l engine /// Set a global property on the given project. @@ -113,7 +99,6 @@ module internal Salsa = | _ -> failwith "multiple projects found" match project with | null -> - use t = Trace.Call("MSBuildPerf","Creating new project", fun _-> projectFileName) let project = GlobalEngine().LoadProject(projectFileName) // Set global properties. SetGlobalProperty(project,"BuildingInsideVisualStudio", "true") @@ -126,7 +111,6 @@ module internal Salsa = hostObjectCachePerFilename.[projectFileName] <- theHostObject project, true, theHostObject | project-> - use t = Trace.Call("MSBuildPerf","Using existing project", fun _-> projectFileName) match hostObjectCachePerFilename.TryGetValue(projectFileName) with | true, theHostObject -> project, false, theHostObject @@ -148,10 +132,7 @@ module internal Salsa = if p = null then "" else p let items (project:Project) name = - let l = project.GetItems(name) |> Seq.map (fun i -> i.EvaluatedInclude) |> Seq.toList - //use t = Trace.Call("MSBuild","items", fun _ -> sprintf " %s: %A" name l) - l - + project.GetItems(name) |> Seq.map (fun i -> i.EvaluatedInclude) |> Seq.toList let oneItem (project:Project) name = match (items project name) with @@ -166,8 +147,7 @@ module internal Salsa = true /// Build the given target on the given project. Return the name of the main output assembly. - let Build(projectFileName, target, configuration, platform) : BuildResult = - use t = Trace.Call("MSBuild","build", fun _-> sprintf " target=%s project=%s configruation=%s platform=%s" target projectFileName configuration platform) + let Build(projectFileName, target:string, configuration, platform) : BuildResult = let project,_,_ = GetProject(projectFileName, configuration, platform) let projectInstance = project.CreateProjectInstance() let buildResult = projectInstance.Build(target, Seq.append project.ProjectCollection.Loggers (if theAttachedLogger=null then [] else [theAttachedLogger])) @@ -182,7 +162,6 @@ module internal Salsa = /// Return the name of the main output assembly but don't build let GetMainOutputAssembly(projectFileName, configuration, platform) : string = - use t = Trace.Call("MSBuild","GetMainOutputAssembly", fun _-> sprintf " project=%s configruation=%s platform=%s" projectFileName configuration platform) let project,_,_ = GetProject(projectFileName, configuration, platform) let baseName = Path.GetFileNameWithoutExtension(projectFileName)+".exe" let projectInstance = project.CreateProjectInstance() @@ -193,7 +172,6 @@ module internal Salsa = let CreateFSharpManifestResourceName(projectFileName,configuration, platform) : (string * string) list= let targetName = "CreateManifestResourceNames" - use t = Trace.Call("MSBuild", targetName, fun _-> sprintf " target=%s project=%s configruation=%s platform=%s" targetName projectFileName configuration platform) let project,_,_ = GetProject(projectFileName, configuration, platform) SetGlobalProperty(project, "CreateManifestResourceNamesDependsOn", "SplitResourcesByCulture") let projectInstance = project.CreateProjectInstance() @@ -216,15 +194,10 @@ module internal Salsa = /// Compute the Flags and Sources let GetFlagsAndSources(project:Project, host:HostCompile) : BuildFlags = let result = - use t = Trace.Call("MSBuildPerf","Calling compile to get flags", fun _-> "") use xx = host.CaptureSourcesAndFlagsWithoutBuildingForABit() project.IsBuildEnabled <- true - let loggers = - if Trace.ShouldLog("MSBuild") then - seq { yield (new Microsoft.Build.BuildEngine.ConsoleLogger(LoggerVerbosity.Detailed) :> ILogger) } - else - [] :> seq + let loggers = seq { yield (new Microsoft.Build.Logging.ConsoleLogger(LoggerVerbosity.Detailed) :> ILogger) } let r = project.Build("Compile", loggers) if not(r) then @@ -243,16 +216,12 @@ module internal Salsa = sources = result.sources |> List.map Canonicalize } let CrackProject(projectFileName, configuration, platform) = - use t = Trace.Call("MSBuild","crackProject", fun _-> sprintf " project=%s" projectFileName) let project,created,host = GetProject(projectFileName, configuration, platform) - Trace.PrintLine("MSBuild", fun _ -> sprintf "Project text:\n %s " (File.ReadAllText(projectFileName))) try try - let result = GetFlagsAndSources(project,host) - Trace.PrintLine("MSBuild", fun _ -> sprintf "Resolved flags and sources:\n %A \n %A" result.flags result.sources) - result + GetFlagsAndSources(project,host) with e -> System.Diagnostics.Debug.Assert(false, sprintf "Bug seen in MSBuild CrackProject: %s %s %s\n" (e.GetType().Name) e.Message (e.StackTrace)) reraise() @@ -285,7 +254,6 @@ module internal Salsa = || flags = None || prevConfig <> curConfig || prevPlatform <> curPlatform then - Trace.PrintLine("ProjectSite", fun _ -> sprintf "Timestamp of %s changed. New timestamp=%A, old timestamp=%A" projectfile newtimestamp timestamp) timestamp <- newtimestamp prevConfig <- curConfig prevPlatform <- curPlatform @@ -312,7 +280,6 @@ module internal Salsa = member this.CompilerFlags() = let flags = GetFlags() let result = flags.flags - Trace.PrintLine("ProjectSite", fun _ -> sprintf "MSBuild flags were %A." result) result |> List.toArray member this.ProjectFileName() = projectfile @@ -660,7 +627,6 @@ module internal Salsa = let sb = new System.Text.StringBuilder() let Append (text:string) = - Trace.PrintLine("VisualFSharp.Salsa", fun _ -> text) sb.Append(text+"\r\n") |> ignore Append "" Append " " @@ -727,7 +693,6 @@ module internal Salsa = Append (sprintf " " targetsFileFolder) Append "" - Trace.PrintLine("VisualFSharp.Salsa", fun _ -> sprintf "Project text:\n%s" (sb.ToString()) ) sb.ToString() @@ -744,11 +709,9 @@ module internal Salsa = let Plat() = let _,p = ConfPlat() in p interface ProjectBehaviorHooks with member x.CreateProjectHook (projectName, files, references, projectReferences, disabledWarnings, defines, versionFile, otherFlags, preImportXml, targetFrameworkVersion : string) = - use t = Trace.Call("VisualFSharp.Salsa", "CreateMsBuildProject", fun _ -> sprintf " projectName=%s" projectName) if File.Exists(projectName) then File.Delete(projectName) let text = CreateMsBuildProjectText useInstalledTargets (files, references, projectReferences, disabledWarnings, defines, versionFile, otherFlags, preImportXml, targetFrameworkVersion) - Trace.PrintLine("VisualFSharp.Salsa", fun _ -> text) File.AppendAllText(projectName,text+"\r\n") member x.InitializeProjectHook op = openProject <- Some(op:?>IOpenProject) @@ -835,7 +798,6 @@ module internal Salsa = member vs.IsShiftKeyDown = shiftKeyDown member vs.PushUndo(u) = - Trace.PrintLine("SalsaUndo", fun _ -> sprintf "Pushing cleanup action %A" u) undoStack<-u::undoStack member vs.GetColorizer(view:IVsTextView) = let _,buffer = view.GetBuffer() @@ -886,7 +848,7 @@ module internal Salsa = vs.LanguageService.OnIdle() match focusFile with | Some(focusFile) -> focusFile.OnIdle() - | None -> Trace.PrintLine("ChangeEvents", fun _ -> "In TakeCoffeeBreak there was no focus file to idle.") + | None -> () member vs.ShiftKeyDown() = shiftKeyDown <- true member vs.ShiftKeyUp() = shiftKeyDown <- false member vs.TakeCoffeeBreak() = @@ -911,14 +873,12 @@ module internal Salsa = undoActions |> List.iter(function DeleteFile f -> - Trace.PrintLine("SalsaUndo", fun _ -> sprintf "Performing undo action: DeleteFile %s" f) try File.Delete(f) with e-> printf "Failed to Delete file '%s'" f raise e | RemoveFolder f -> - Trace.PrintLine("SalsaUndo", fun _ -> sprintf "Performing undo action: RemoveFolder %s" f) try if Directory.Exists(f) then Directory.Delete(f,true) with diff --git a/vsintegration/tests/unittests/TestLib.LanguageService.fs b/vsintegration/tests/unittests/TestLib.LanguageService.fs index e6dc71eb8e5..efdc1e5543e 100644 --- a/vsintegration/tests/unittests/TestLib.LanguageService.fs +++ b/vsintegration/tests/unittests/TestLib.LanguageService.fs @@ -12,7 +12,6 @@ open Salsa.VsMocks open UnitTests.TestLib.Salsa open UnitTests.TestLib.Utils open Microsoft.FSharp.Compiler -open Internal.Utilities.Debug open System.Text.RegularExpressions open Microsoft.FSharp.Compiler.SourceCodeServices #nowarn "52" // The value has been copied to ensure the original is not mutated @@ -376,7 +375,6 @@ type LanguageServiceBaseTests() = // Under .NET 4.0 we don't allow 3.5.0.0 assemblies let AssertNotBackVersionAssembly(args:AssemblyLoadEventArgs) = - Trace.PrintLine("AssembliesLoadedByUnittests",fun _ -> sprintf "ASSEMBLY LOAD: %A" (args.LoadedAssembly)) // We're worried about loading these when running against .NET 4.0: // Microsoft.Build.Tasks.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -429,11 +427,7 @@ type LanguageServiceBaseTests() = ShiftKeyUp(currentVS) ops.CleanInvisibleProject(currentVS) -// do setDiagnosticsChannel(Some(Console.Out)); do AbstractIL.Diagnostics.setDiagnosticsChannel(None); - // To disable a logging class, put an underscore _after_ its name. - //Trace.Log <- "ChangeEvents_;SyncOp_;Reactor_;ProjectSite_;IncrementalBuild_;Build_;Salsa_;SalsaUndo_;MSBuild_;MSBuildPerf_;IncrementalBuildWorkUnits_;LanguageService_;StripSystemImportsFromTcConfig_;ProjectSystem_" -// Trace.Log <- "*" ResetStopWatch() testStopwatch.Reset() testStopwatch.Start() diff --git a/vsintegration/tests/unittests/TestLib.ProjectSystem.fs b/vsintegration/tests/unittests/TestLib.ProjectSystem.fs index b37120877e6..c1e8a69a01a 100644 --- a/vsintegration/tests/unittests/TestLib.ProjectSystem.fs +++ b/vsintegration/tests/unittests/TestLib.ProjectSystem.fs @@ -9,7 +9,6 @@ open System.Runtime.Serialization open System.Collections.Generic open System.Text.RegularExpressions open System.Diagnostics -open Internal.Utilities.Debug open System.IO open System.Text open System.Xml.Linq @@ -20,7 +19,6 @@ open Microsoft.Win32 open Microsoft.VisualStudio.FSharp.ProjectSystem open Microsoft.VisualStudio.Shell.Interop -open Microsoft.Build.BuildEngine open Microsoft.Build.Execution open Microsoft.Build.Framework diff --git a/vsintegration/tests/unittests/Tests.BaseLine.fs b/vsintegration/tests/unittests/Tests.BaseLine.fs deleted file mode 100644 index af766763185..00000000000 --- a/vsintegration/tests/unittests/Tests.BaseLine.fs +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -namespace Tests -open NUnit.Framework -open System -open System.IO -open System.Diagnostics -open UnitTests.TestLib.Utils -open Microsoft.BuildSettings - -#if OPEN_BUILD -#else -[] -type Script() = - let replaceIfNotNull (search:string) (replace:string) (s:string) = - match s with - | null -> s - | s -> s.Replace(search,replace) - let replaceConstants(line:string) = - line - |> replaceIfNotNull Version.OfFile "{VersionOfFile}" - |> replaceIfNotNull Version.OfAssembly "{VersionOfAssembly}" - |> replaceIfNotNull Version.ProductBuild "{VersionOfProductBuild}" - |> replaceIfNotNull "4.0" "{DotNetMajorMinor}" - |> replaceIfNotNull "4.5" "{DotNetMajorMinor}" - |> replaceIfNotNull (sprintf "%s.%s" Version.Major Version.Minor) "{DotNetMajorMinor}" - |> replaceIfNotNull "10.0" "{VsMajorMinor}" - |> replaceIfNotNull "F# 3.0" "F# {FSharpCompilerVersion}" - |> replaceIfNotNull (Environment.GetEnvironmentVariable("ProgramFiles")) "{ProgramFiles}" - - let runCheck(script:string,baseline:string) = - let code,lines = Spawn.Batch script - let combinedLines = String.Join("\r\n",lines).Trim([|'\r';'\n'|]) |> replaceConstants - let baseline = baseline.Trim([|'\r';'\n'|]) - if baseline<>combinedLines then - for line in lines do - printfn "%s" (replaceConstants line) - Assert.AreEqual(baseline,combinedLines) - - [] - member public __.NetModules_Bug915449() = - let script = @" -@echo off -echo>a.cs public class A {} -echo>b.cs public class B {} -echo>r.fs let a = new A() -echo>>r.fs let b = new B() -echo>>r.fs System.Console.WriteLine(a.GetType()) -echo>>r.fs System.Console.WriteLine(b.GetType()) -csc /nologo /t:module a.cs -csc /nologo /t:module b.cs -al /nologo /out:c.dll a.netmodule b.netmodule -fsc /nologo /r:c.dll r.fs -" - let baseline = @"" - runCheck(script,baseline) -#endif \ No newline at end of file diff --git a/vsintegration/tests/unittests/Tests.Build.fs b/vsintegration/tests/unittests/Tests.Build.fs index 09975b2ab94..b30b37f700a 100644 --- a/vsintegration/tests/unittests/Tests.Build.fs +++ b/vsintegration/tests/unittests/Tests.Build.fs @@ -7,7 +7,6 @@ open System open System.IO open System.Diagnostics open Microsoft.FSharp.Build -open Microsoft.Build.BuildEngine open Microsoft.Build.Framework open Microsoft.Build.Utilities open UnitTests.TestLib.Utils.FilesystemHelpers @@ -64,7 +63,7 @@ type Build() = Assert.Fail(message) let MakeTaskItem (itemSpec : string) = new TaskItem(itemSpec) :> ITaskItem - + /// Called per test [] member this.Setup() = @@ -90,28 +89,45 @@ type Build() = printfn "By the way, the registry or app.config tool path is %s" tool.ToolPath tool.CodePage <- "65001" AssertEqual "65001" tool.CodePage - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual "--codepage:65001 --optimize+ --warnaserror:76 --fullpaths --flaterrors --highentropyva-" cmd + AssertEqual ("--codepage:65001" + Environment.NewLine + + "--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd [] member public this.TestDebugSymbols() = let tool = new Microsoft.FSharp.Build.Fsc() tool.DebugSymbols <- true AssertEqual true tool.DebugSymbols - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual "-g --optimize+ --warnaserror:76 --fullpaths --flaterrors --highentropyva-" cmd + AssertEqual ("-g" + Environment.NewLine + + "--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd [] member public this.TestDebugType() = let tool = new Microsoft.FSharp.Build.Fsc() tool.DebugType <- "pdbONly" AssertEqual "pdbONly" tool.DebugType - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual "--debug:pdbonly --optimize+ --warnaserror:76 --fullpaths --flaterrors --highentropyva-" cmd - + AssertEqual ("--debug:pdbonly" + Environment.NewLine + + "--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd [] member public this.TestDefineConstants() = @@ -119,184 +135,302 @@ type Build() = tool.DefineConstants <- [| MakeTaskItem "FOO=3" MakeTaskItem "BAR=4" |] AssertEqual 2 tool.DefineConstants.Length - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual "--define:FOO=3 --define:BAR=4 --optimize+ --warnaserror:76 --fullpaths --flaterrors --highentropyva-" cmd + AssertEqual ("--define:FOO=3" + Environment.NewLine + + "--define:BAR=4" + Environment.NewLine + + "--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd [] member public this.TestDisabledWarnings1() = let tool = new Microsoft.FSharp.Build.Fsc() tool.DisabledWarnings <- "52;109" AssertEqual "52;109" tool.DisabledWarnings - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual "--optimize+ --nowarn:52,109 --warnaserror:76 --fullpaths --flaterrors --highentropyva-" cmd + AssertEqual ("--optimize+" + Environment.NewLine + + "--nowarn:52,109" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd [] member public this.TestDisabledWarnings2() = let tool = new Microsoft.FSharp.Build.Fsc() tool.DisabledWarnings <- ";" // e.g. someone may have $(NoWarn);$(SomeOtherVar) and both vars are empty AssertEqual ";" tool.DisabledWarnings - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual "--optimize+ --warnaserror:76 --fullpaths --flaterrors --highentropyva-" cmd - + AssertEqual ("--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd + [] member public this.TestVersionFile() = let tool = new Microsoft.FSharp.Build.Fsc() tool.VersionFile <- "src/version" AssertEqual "src/version" tool.VersionFile - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual "--optimize+ --versionfile:src/version --warnaserror:76 --fullpaths --flaterrors --highentropyva-" cmd + AssertEqual ("--optimize+" + Environment.NewLine + + "--versionfile:src/version" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd [] member public this.TestDocumentationFile() = let tool = new Microsoft.FSharp.Build.Fsc() tool.DocumentationFile <- "foo.xml" AssertEqual "foo.xml" tool.DocumentationFile - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual "--doc:foo.xml --optimize+ --warnaserror:76 --fullpaths --flaterrors --highentropyva-" cmd + AssertEqual ("--doc:foo.xml" + Environment.NewLine + + "--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd [] member public this.TestGenerateInterfaceFile() = let tool = new Microsoft.FSharp.Build.Fsc() tool.GenerateInterfaceFile <- "foo.fsi" AssertEqual "foo.fsi" tool.GenerateInterfaceFile - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual "--sig:foo.fsi --optimize+ --warnaserror:76 --fullpaths --flaterrors --highentropyva-" cmd + AssertEqual ("--sig:foo.fsi" + Environment.NewLine + + "--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd [] member public this.TestKeyFile() = let tool = new Microsoft.FSharp.Build.Fsc() tool.KeyFile <- "key.txt" AssertEqual "key.txt" tool.KeyFile - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual "--keyfile:key.txt --optimize+ --warnaserror:76 --fullpaths --flaterrors --highentropyva-" cmd - + AssertEqual ("--keyfile:key.txt" + Environment.NewLine + + "--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd + [] member public this.TestNoFramework() = let tool = new Microsoft.FSharp.Build.Fsc() tool.NoFramework <- true AssertEqual true tool.NoFramework - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual "--noframework --optimize+ --warnaserror:76 --fullpaths --flaterrors --highentropyva-" cmd - + AssertEqual ("--noframework" + Environment.NewLine + + "--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd + [] member public this.TestOptimize() = let tool = new Microsoft.FSharp.Build.Fsc() tool.Optimize <- false AssertEqual false tool.Optimize - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual cmd "--optimize- --warnaserror:76 --fullpaths --flaterrors --highentropyva-" + AssertEqual ("--optimize-" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd [] member public this.TestTailcalls() = let tool = new Microsoft.FSharp.Build.Fsc() tool.Tailcalls <- true AssertEqual true tool.Tailcalls - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd // REVIEW we don't put the default, is that desired? - AssertEqual "--optimize+ --warnaserror:76 --fullpaths --flaterrors --highentropyva-" cmd + AssertEqual ("--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd [] member public this.TestOtherFlags() = let tool = new Microsoft.FSharp.Build.Fsc() tool.OtherFlags <- "--yadda yadda" AssertEqual "--yadda yadda" tool.OtherFlags - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual "--optimize+ --warnaserror:76 --fullpaths --flaterrors --highentropyva- --yadda yadda" cmd + AssertEqual ("--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine + + "--yadda" + Environment.NewLine + + "yadda" + Environment.NewLine) + cmd [] member public this.TestOutputAssembly() = let tool = new Microsoft.FSharp.Build.Fsc() tool.OutputAssembly <- "oUt.dll" AssertEqual "oUt.dll" tool.OutputAssembly - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual "-o:oUt.dll --optimize+ --warnaserror:76 --fullpaths --flaterrors --highentropyva-" cmd + AssertEqual ("-o:oUt.dll" + Environment.NewLine + + "--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd [] member public this.TestPdbFile() = let tool = new Microsoft.FSharp.Build.Fsc() tool.PdbFile <- "out.pdb" AssertEqual "out.pdb" tool.PdbFile - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual "--optimize+ --pdb:out.pdb --warnaserror:76 --fullpaths --flaterrors --highentropyva-" cmd + AssertEqual ("--optimize+" + Environment.NewLine + + "--pdb:out.pdb" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd [] member public this.TestPlatform1() = let tool = new Microsoft.FSharp.Build.Fsc() tool.Platform <- "x64" AssertEqual "x64" tool.Platform - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual "--optimize+ --platform:x64 --warnaserror:76 --fullpaths --flaterrors --highentropyva-" cmd + AssertEqual ("--optimize+" + Environment.NewLine + + "--platform:x64" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd [] member public this.TestPlatform2() = let tool = new Microsoft.FSharp.Build.Fsc() tool.Platform <- "itanium" AssertEqual "itanium" tool.Platform - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual "--optimize+ --platform:Itanium --warnaserror:76 --fullpaths --flaterrors --highentropyva-" cmd + AssertEqual ("--optimize+" + Environment.NewLine + + "--platform:Itanium" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd [] member public this.TestPlatform3() = let tool = new Microsoft.FSharp.Build.Fsc() tool.Platform <- "x86" AssertEqual "x86" tool.Platform - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual "--optimize+ --platform:x86 --warnaserror:76 --fullpaths --flaterrors --highentropyva-" cmd - + AssertEqual ("--optimize+" + Environment.NewLine + + "--platform:x86" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd + [] member public this.TestReferences() = let tool = new Microsoft.FSharp.Build.Fsc() let dll = "c:\\sd\\staging\\tools\\nunit\\nunit.framework.dll" tool.References <- [| MakeTaskItem dll |] AssertEqual 1 tool.References.Length - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual ("--optimize+ -r:" + dll + " --warnaserror:76 --fullpaths --flaterrors --highentropyva-") cmd - + AssertEqual ("--optimize+" + Environment.NewLine + + "-r:" + dll + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd + [] member public this.TestReferencePath() = let tool = new Microsoft.FSharp.Build.Fsc() let path = "c:\\sd\\staging\\tools\\nunit\\;c:\\Foo" tool.ReferencePath <- path AssertEqual path tool.ReferencePath - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual ("--optimize+ --lib:c:\\sd\\staging\\tools\\nunit\\,c:\\Foo --warnaserror:76 --fullpaths --flaterrors --highentropyva-") cmd - + AssertEqual ("--optimize+" + Environment.NewLine + + "--lib:c:\\sd\\staging\\tools\\nunit\\,c:\\Foo" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) cmd + [] member public this.TestReferencePathWithSpaces() = let tool = new Microsoft.FSharp.Build.Fsc() let path = "c:\\program files;c:\\sd\\staging\\tools\\nunit;c:\\Foo" tool.ReferencePath <- path AssertEqual path tool.ReferencePath - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual ("--optimize+ --lib:\"c:\\program files\",c:\\sd\\staging\\tools\\nunit,c:\\Foo --warnaserror:76 --fullpaths --flaterrors --highentropyva-") cmd + AssertEqual ("--optimize+" + Environment.NewLine + + "--lib:c:\\program files,c:\\sd\\staging\\tools\\nunit,c:\\Foo" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd [] member public this.TestResources() = let tool = new Microsoft.FSharp.Build.Fsc() tool.Resources <- [| MakeTaskItem "Foo.resources" |] AssertEqual 1 tool.Resources.Length - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual "--optimize+ --resource:Foo.resources --warnaserror:76 --fullpaths --flaterrors --highentropyva-" cmd + AssertEqual ("--optimize+" + Environment.NewLine + + "--resource:Foo.resources" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd [] member public this.TestSources() = @@ -305,10 +439,16 @@ type Build() = let iti = MakeTaskItem src tool.Sources <- [| iti; iti |] AssertEqual 2 tool.Sources.Length - let cmd = tool.InternalGenerateCommandLineCommands() - printfn "cmd=\"%s\"" cmd - let expect = "--optimize+ --warnaserror:76 --fullpaths --flaterrors --highentropyva- " + src + " " + src - AssertEqual expect cmd + let cmd = tool.InternalGenerateResponseFileCommands() + printfn "cmd=\"%s\"" cmd + AssertEqual ("--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine + + src + Environment.NewLine + + src + Environment.NewLine) + cmd () [] @@ -316,68 +456,114 @@ type Build() = let tool = new Microsoft.FSharp.Build.Fsc() tool.TargetType <- "Library" AssertEqual "Library" tool.TargetType - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual "--optimize+ --target:library --warnaserror:76 --fullpaths --flaterrors --highentropyva-" cmd + AssertEqual ("--optimize+" + Environment.NewLine + + "--target:library" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd [] member public this.TestTargetType2() = let tool = new Microsoft.FSharp.Build.Fsc() tool.TargetType <- "Winexe" AssertEqual "Winexe" tool.TargetType - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual "--optimize+ --target:winexe --warnaserror:76 --fullpaths --flaterrors --highentropyva-" cmd + AssertEqual ("--optimize+" + Environment.NewLine + + "--target:winexe" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd [] member public this.TestTargetType3() = let tool = new Microsoft.FSharp.Build.Fsc() tool.TargetType <- "Module" AssertEqual "Module" tool.TargetType - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual "--optimize+ --target:module --warnaserror:76 --fullpaths --flaterrors --highentropyva-" cmd + AssertEqual ("--optimize+" + Environment.NewLine + + "--target:module" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd [] member public this.TestUtf8Output() = let tool = new Microsoft.FSharp.Build.Fsc() tool.Utf8Output <- true - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual "--optimize+ --warnaserror:76 --utf8output --fullpaths --flaterrors --highentropyva-" cmd - + AssertEqual ("--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--utf8output" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd + [] member public this.TestWin32Res() = let tool = new Microsoft.FSharp.Build.Fsc() tool.Win32ResourceFile <- "foo.res" - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual "--optimize+ --warnaserror:76 --win32res:foo.res --fullpaths --flaterrors --highentropyva-" cmd - + AssertEqual ("--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--win32res:foo.res" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd + [] member public this.TestWin32Manifest() = let tool = new Microsoft.FSharp.Build.Fsc() tool.Win32ManifestFile <- "foo.manifest" - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual "--optimize+ --warnaserror:76 --win32manifest:foo.manifest --fullpaths --flaterrors --highentropyva-" cmd + AssertEqual ("--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--win32manifest:foo.manifest" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd [] member public this.TestHighEntropyVA() = let tool = new Microsoft.FSharp.Build.Fsc() tool.HighEntropyVA <- true - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual "--optimize+ --warnaserror:76 --fullpaths --flaterrors --highentropyva+" cmd - + AssertEqual ("--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva+" + Environment.NewLine) + cmd [] member public this.TestSubsystemVersion() = let tool = new Microsoft.FSharp.Build.Fsc() tool.SubsystemVersion <- "6.02" - let cmd = tool.InternalGenerateCommandLineCommands() + let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd - AssertEqual "--optimize+ --warnaserror:76 --fullpaths --flaterrors --subsystemversion:6.02 --highentropyva-" cmd + AssertEqual ("--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--subsystemversion:6.02" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine) + cmd [] member public this.TestAllCombo() = @@ -399,7 +585,7 @@ type Build() = tool.OutputAssembly <- "out.dll" tool.PdbFile <- "out.pdb" tool.References <- [| MakeTaskItem "ref.dll"; MakeTaskItem "C:\\Program Files\\SpacesPath.dll" |] - tool.ReferencePath <- "c:\\foo;c:\\bar" + tool.ReferencePath <- @"c:\foo;c:\bar" tool.Resources <- [| MakeTaskItem "MyRes.resources"; MakeTaskItem "OtherRes.resources" |] tool.Sources <- [| MakeTaskItem "foo.fs"; MakeTaskItem "C:\\Program Files\\spaces.fs" |] tool.WarningLevel <- "4" @@ -410,21 +596,49 @@ type Build() = tool.Utf8Output <- true tool.VisualStudioStyleErrors <- true tool.SubsystemVersion <- "4.0" - let cmd = tool.InternalGenerateCommandLineCommands() - printfn "cmd=\"%s\"" cmd - - let expected = "-o:out.dll --codepage:65001 -g --debug:full --noframework " + - "--baseaddress:0xBADF00D " + - "--define:FOO=3 --define:BAR=4 " + - "--doc:foo.xml --sig:foo.fsi --keyfile:key.txt " + - "--optimize+ --pdb:out.pdb --platform:anycpu " + - "--resource:MyRes.resources --resource:OtherRes.resources " + - "--versionfile:src/version -r:ref.dll -r:\"C:\\Program Files\\SpacesPath.dll\" --lib:c:\\foo,c:\\bar --target:exe --nowarn:52,109 " + - "--warn:4 --warnaserror --warnaserror:76 --vserrors --utf8output --fullpaths --flaterrors --subsystemversion:4.0 " + - "--highentropyva- --yadda:yadda --other:\"internal quote\" blah foo.fs \"C:\\Program Files\\spaces.fs\"" - + let cmd = tool.InternalGenerateResponseFileCommands() + printfn "cmd=\"%s\"" cmd + + let expected = + "-o:out.dll" + Environment.NewLine + + "--codepage:65001" + Environment.NewLine + + "-g" + Environment.NewLine + + "--debug:full" + Environment.NewLine + + "--noframework" + Environment.NewLine + + "--baseaddress:0xBADF00D" + Environment.NewLine + + "--define:FOO=3" + Environment.NewLine + + "--define:BAR=4" + Environment.NewLine + + "--doc:foo.xml" + Environment.NewLine + + "--sig:foo.fsi" + Environment.NewLine + + "--keyfile:key.txt" + Environment.NewLine + + "--optimize+" + Environment.NewLine + + "--pdb:out.pdb" + Environment.NewLine + + "--platform:anycpu" + Environment.NewLine + + "--resource:MyRes.resources" + Environment.NewLine + + "--resource:OtherRes.resources" + Environment.NewLine + + "--versionfile:src/version" + Environment.NewLine + + "-r:ref.dll" + Environment.NewLine + + @"-r:C:\Program Files\SpacesPath.dll" + Environment.NewLine + + @"--lib:c:\foo,c:\bar" + Environment.NewLine + + "--target:exe" + Environment.NewLine + + "--nowarn:52,109" + Environment.NewLine + + "--warn:4" + Environment.NewLine + + "--warnaserror" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + + "--vserrors" + Environment.NewLine + + "--utf8output" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--subsystemversion:4.0" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine + + "--yadda:yadda" + Environment.NewLine + + "--other:internal quote" + Environment.NewLine + + "blah" + Environment.NewLine + + "foo.fs" + Environment.NewLine + + @"C:\Program Files\spaces.fs" + Environment.NewLine + AssertEqual expected cmd - + let hostObject = new FauxHostObject() tool.HostObject <- hostObject tool.InternalExecuteTool("", "", "") |> ignore diff --git a/vsintegration/tests/unittests/Tests.LanguageService.ParameterInfo.fs b/vsintegration/tests/unittests/Tests.LanguageService.ParameterInfo.fs index 3608f4d0d24..b9fbf9444e3 100644 --- a/vsintegration/tests/unittests/Tests.LanguageService.ParameterInfo.fs +++ b/vsintegration/tests/unittests/Tests.LanguageService.ParameterInfo.fs @@ -430,11 +430,15 @@ type UsingMSBuild() = match l with | [] -> System.String.Format((*Mark*) | x :: xs -> f xs""" + // Note, 3 of these 8 are only available on .NET 4.6.1. On .NET 4.5 only 5 overloads are returned. this.VerifyParameterInfoAtStartOfMarker(fileContent,"(*Mark*)",[["format"; "arg0"]; ["format"; "args"]; ["provider"; "format"; "args"]; + ["provider"; "format"; "arg0"]; ["format"; "arg0"; "arg1"]; - ["format"; "arg0"; "arg1"; "arg2"]]) + ["provider"; "format"; "arg0"; "arg1"]; + ["format"; "arg0"; "arg1"; "arg2"]; + ["provider"; "format"; "arg0"; "arg1"; "arg2"]]) (* --- Parameter Info Systematic Tests ------------------------------------------------- *) diff --git a/vsintegration/tests/unittests/Tests.LanguageService.Script.fs b/vsintegration/tests/unittests/Tests.LanguageService.Script.fs index 3ef1233219e..f44237cfd7a 100644 --- a/vsintegration/tests/unittests/Tests.LanguageService.Script.fs +++ b/vsintegration/tests/unittests/Tests.LanguageService.Script.fs @@ -977,24 +977,6 @@ type UsingMSBuild() as this = """#r "mscorcfg" """ // 'mscorcfg' is loaded from the GAC _and_ it is available on XP and above. "#r \"mscor" "Global Assembly Cache" - // // Disabled because it seems Microsoft.VisualStudio.QualityTools.Common.dll is no longer always available on CI installs in the same way - // // as it used to be. - // [] - // member public this.``Fsx.HashR_QuickInfo.ResolveFromAssemblyFoldersEx``() = - // let fileContent = """#r "Microsoft.VisualStudio.QualityTools.Common.dll" """ // 'Microsoft.VisualStudio.QualityTools.Common.dll' is located via AssemblyFoldersEx - // let marker = "#r \"Microsoft.Vis" - // this.AssertQuickInfoContainsAtEndOfMarkerInFsxFile fileContent marker "Microsoft.VisualStudio.QualityTools.Common, Version=" - // this.AssertQuickInfoContainsAtEndOfMarkerInFsxFile fileContent marker "Microsoft.VisualStudio.QualityTools.Common.dll" - - // // Disabled because it seems Microsoft.SqlServer.SString.dll is no longer always available on CI installs in the same way - //[] - //[] - //member public this.``Fsx.HashR_QuickInfo.ResolveFromAssemblyFolders``() = - // let fileContent = """#r "Microsoft.SqlServer.SString" """ // Can be any assembly that is in AssemblyFolders but not AssemblyFoldersEx - // let marker = "#r \"Microsoft.SqlSe" - // this.AssertQuickInfoContainsAtEndOfMarkerInFsxFile fileContent marker "Microsoft.SqlServer.SString.dll" - // this.AssertQuickInfoContainsAtEndOfMarkerInFsxFile fileContent marker "Found by AssemblyFolders registry key" - [] [] member public this.``Fsx.HashR_QuickInfo.ResolveFromFullyQualifiedPath``() = @@ -1237,8 +1219,6 @@ type UsingMSBuild() as this = Assert.AreEqual(Path.Combine(projectFolder,"File1.fsx"), fas.ProjectFileNames.[0]) Assert.AreEqual(1, fas.ProjectFileNames.Length) -#if OPEN_BUILD -#else /// FEATURE: #reference against a strong name should work. [] @@ -1246,7 +1226,7 @@ type UsingMSBuild() as this = let code = ["#light" #if FX_ATLEAST_40 - sprintf "#reference \"System.Core, Version=%s, Culture=neutral, PublicKeyToken=b77a5c561934e089\"" Microsoft.BuildSettings.Version.OfAssembly + sprintf "#reference \"System.Core, Version=%s, Culture=neutral, PublicKeyToken=b77a5c561934e089\"" (System.Environment.Version.ToString()) #else "#reference \"System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\"" #endif @@ -1255,7 +1235,7 @@ type UsingMSBuild() as this = MoveCursorToEndOfMarker(file,"open System.") let completions = AutoCompleteAtCursor file AssertCompListContains(completions,"Linq") -#endif + /// Try out some bogus file names in #r, #I and #load. [] diff --git a/vsintegration/tests/unittests/Tests.Powerpack.fs b/vsintegration/tests/unittests/Tests.Powerpack.fs index 677978711f3..a93f7f57fbe 100644 --- a/vsintegration/tests/unittests/Tests.Powerpack.fs +++ b/vsintegration/tests/unittests/Tests.Powerpack.fs @@ -7,7 +7,6 @@ open System open System.IO open System.Diagnostics open Microsoft.FSharp.Build -open Microsoft.Build.BuildEngine open Microsoft.Build.Framework open Microsoft.Build.Utilities open UnitTests.TestLib.Utils.FilesystemHelpers diff --git a/vsintegration/tests/unittests/Tests.TaskReporter.fs b/vsintegration/tests/unittests/Tests.TaskReporter.fs index 5bc53a95b53..6792fb5ef6f 100644 --- a/vsintegration/tests/unittests/Tests.TaskReporter.fs +++ b/vsintegration/tests/unittests/Tests.TaskReporter.fs @@ -7,7 +7,6 @@ open System open System.IO open System.Diagnostics open Microsoft.FSharp.Build -open Microsoft.Build.BuildEngine open Microsoft.Build.Framework open Microsoft.Build.Utilities open UnitTests.TestLib.Utils diff --git a/vsintegration/tests/unittests/VisualFSharp.Unittests.fsproj b/vsintegration/tests/unittests/VisualFSharp.Unittests.fsproj index 2b97603522c..62e676874dc 100644 --- a/vsintegration/tests/unittests/VisualFSharp.Unittests.fsproj +++ b/vsintegration/tests/unittests/VisualFSharp.Unittests.fsproj @@ -18,6 +18,7 @@ 58;75 x86 v4.6 + NO_PROJECTCRACKER;$(DefineConstants) @@ -35,7 +36,6 @@ - @@ -80,6 +80,9 @@ MultiProjectAnalysisTests.fs + + ProjectOptionsTests.fs + VisualFSharp.Unittests.dll.config @@ -99,10 +102,18 @@ - - - - + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Framework.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Utilities.Core.dll + + + $(FSharpSourcesRoot)\..\packages\Microsoft.VisualFSharp.Msbuild.15.0.1.0.1\lib\net45\Microsoft.Build.Tasks.Core.dll +